High-Level Data Link Control
(
HDLC
, controllo collegamento dati ad alto livello) e un protocollo di rete del livello
data link
.
Si tratta di un protocollo a riempimento di
bit
e usa la tecnica del
bit stuffing
(inserimento di zeri aggiuntivi) per evitare che le sequenze di terminazione compaiano all'interno dei frame.
Gli standard ISO originali erano:
- ISO 0009 ? Struttura dei frame
- ISO 4335
- ISO 6159
- ISO 6256
Lo standard attuale e ISO 13239, che rimpiazza tutti questi.
HDLC puo utilizzare o meno la modalita connessa. Puo essere usato per connessioni multipunto, ma attualmente e usato quasi esclusivamente per collegare due dispositivi, usando la ABM (
Asynchronous Balanced Mode
). Le altre modalita disponibili sono NRM (Normal Response Mode) e ARM (Asynchronous Response Mode).
HDLC e basato sul protocollo
SDLC
dell'
IBM
, che e un protocollo di livello 2 proprietario.
Fu inglobato nella pila di protocolli
X.25
come
LAPB
, nel protocollo
V.42
come
LAPM
, nella pila
Frame Relay
come
LAPF
e nella pila
ISDN
come
LAPD
.
Adesso e la base per il meccanismo di framing usato con il protocollo
Point-to-Point Protocol
nelle linee sincrone, essendo usato da molti server per connettersi a una
WAN
(in genere
Internet
).
Una versione un po' diversa e usata anche come canale di controllo per le linee telefoniche
E-carrier
(E1) e
SONET
.
Alcuni produttori, come Cisco, hanno implementato protocolli come
Cisco HDLC
che usavano le tecniche per il framing HDLC a basso livello ma non usavano l'intestazione standard HDLC.
I frame dati HDLC possono essere trasmessi attraverso collegamenti sincroni o asincroni. Questi collegamenti non possono determinare l'inizio o la fine di un frame, quindi questo deve essere fatto. In questo caso viene usato un delimitatore (o
flag
), che e una sequenza di bit che non potra mai apparire nel resto del frame. Questa sequenza e '01111110', cioe in
esadecimale
'7E'. Ogni frame inizia e finisce con essa.
Quando non sta venendo trasmesso nessun frame, viene trasmesso continuamente un delimitatore. Usando lo standard
NRZI
per codificare gli stati logici in livelli di tensione (bit 0 = cambiamento, bit 1 = mantenuto il valore precedente), si genera una sequenza continua di bit:
0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 0
_____________ _____________ _____________ _____________
_/ \_/ \_/ \_/ \
Questo viene usato dai modem per sincronizzarsi attraverso circuiti
Phase-locked loop
.
Nella pratica, nei dati da spedire puo comparire facilmente la sequenza usata come delimitatore e bisogna quindi trasmetterla in modo da non spedirla come delimitatore.
Nei collegamenti sincroni, il problema e risolto con il
bit stuffing
. Il trasmettitore fa in modo che ogni sequenza di cinque bit a 1 vicini sia seguita da uno 0. E un semplice circuito digitale ad inserire lo 0.
Il ricevente, conoscendo questo sistema, togliera automaticamente i bit 0 aggiunti. In questo modo, se viene ricevuto il flag, avra 6 bit 1 consecutivi. Il ricevente vedra 6 bit a 1 e capira che e un flag ? altrimenti il sesto bit sarebbe stato a 0.
Questo (sempre considerando la codifica NRZI) garantisce una transizione almeno ogni 6 periodi di trasmissione, in modo da mantenere il sincronismo con il trasmittente.
I collegamenti asincroni che usano la
porta seriale
o una
UART
mandano i bit a gruppi di 8. Non possiedono circuiti per inserire altri bit. Usano invece il
byte stuffing
(o "octet stuffing"). L'ottetto che delimita i frame e 01111110 (in esadecimale 7E). Un ottetto "control escape" e formato dalla sequenza '01111101' (in esadecimale 7D). Un ottetto di questo tipo viene mandato prima di ogni byte uguale a se stesso o al flag. Il byte successivo avra il bit 5 invertito (contando da destra a sinistra e partendo da 0). Ad esempio, la sequenza dati '01111110' (in esadecimale 7E) verrebbe trasmessa come "01111101 01011110" (in esadecimale "7D 5E").
Il contenuto di un frame HDLC, compreso il flag, e:
Flag
|
Indirizzo
|
Controllo
|
Dati
|
FCS
|
Flag
|
8 bit
|
8 bit
|
8 o 16 bit
|
Lunghezza variabile, 0 o piu bit a multipli di 8
|
16 o 32 bit
|
8 bit
|
Bisogna stare attenti al fatto che il flag di fine di un frame puo essere anche l'inizio del successivo.
I dati arrivano a gruppi di 8 bit. I sistemi telefonici o telegrafici organizzavano il mezzo di trasmissione per spedire 8 bit alla volta, e HDLC adatta semplicemente questo all'invio di dati binari.
L'FCS (
Frame Check Sequence
) e una versione piu sofisticata dei bit di parita. Questo campo contiene i risultati di un calcolo binario sui bit che compongono i tre campi precedenti. Questo viene fatto per rilevare errori di trasmissione (bit persi, errati o in piu) in modo da poter scartare il frame in ricezione se viene rilevato un errore. E a causa di questo metodo di controllo degli errori che possono esserci limiti massimi nelle dimensioni del campo dati. Piu lunga diventa la zona dati, piu difficile sara garantire il rilevamento di errori di trasmissione. L'FCS e a 16 (
CRC-CCITT
) o 32 (
CRC-32
) bit.
Quando fu creato HDLC, venivano prodotti mezzi trasmissivi per le linee telefoniche, che avevano bisogno di un tasso di errore minore di
(errori/bit). Invece, i dati spediti dai PC, necessitano di maggior precisione, minore di
. Attraverso l'FCS si possono controllare i dati. Se sono corretti, viene spedito un pacchetto di conferma (ACKnowledge) a chi aveva trasmesso in modo da permettergli di spedire il prossimo frame. Altrimenti il ricevente manda una conferma negativa (Negative ACKnowledge) o, piu semplicemente, scarta il frame.
Se manda il NACK ed esso arriva a chi aveva trasmesso, puo essere spedito un altro frame; altrimenti, dopo un certo tempo scadra un timer del trasmettitore (che aveva fatto partire appena dopo aver spedito il frame) e il frame verra ritrasmesso.
Le reti ottiche moderne hanno affidabilita molto migliore di
(errori/bit), e cio rende HDLC ancora piu affidabile.
I tipi di stazioni sono 3:
- Terminale primario: e responsabile delle operazioni di controllo sul collegamento. Manda i frame di controllo (comandi).
- Terminale secondario: lavora sotto il controllo di quello primario. Spedisce solo pacchetti di risposta. Il primario e collegato ai secondari attraverso collegamenti logici multipli.
- Terminale combinato: ha le caratteristiche di entrambi i terminali sopra. Spedisce sia comandi sia risposte.
Questa classificazione contraddistingue tre modalita di funzionamento:
- ABM (Asynchronous Balanced Mode): in cui interagiscono terminali combinati.
- NRM (Normal Response Mode): in cui un terminale primario inizia a trasmettere e il secondario risponde se interpellato.
- ARM (Asynchronous Response Mode): fondamentalmente come l'NRM, con la differenza che un terminale secondario puo trasmettere anche senza l'autorizzazione di un terminale primario.
I frame 'I' sono usati per trasportare i dati dal livello di rete. In aggiunta possono anche comprendere informazioni per il controllo di flusso e degli errori insieme ai dati (
Piggybacking
). Per queste funzioni vengono usati i sottocampi del campo di controllo.
- Campo di controllo dei frame 'I'
0
|
Manda il numero di sequenza N(S)
|
Poll/Final
|
Ricevi numero di sequenza N(R)
|
1 bit
|
3 o 7 bit
|
1 bit
|
3 o 7 bit
|
Il primo campo definisce il tipo. '0' indica un frame 'I'.
N(S) indica il numero di sequenza del frame spedito. 3 bit possono indicare valori da 0 a 7, ma nel formato esteso (in cui il campo di controllo e di 2 byte) e usato un intervallo piu grande.
Il campo Poll/Final e un solo bit con due utilizzi. E chiamato Poll se viene usato dalla stazione primaria per chiedere una risposta alle stazioni secondarie, invece Final quando viene usato da una stazione secondaria per indicare una risposta al termine della trasmissione. Ha significato
solo se impostato a 1.
- In NRM il terminale primario imposta il bit Poll. Il secondario imposta il bit Final nell'ultimo frame I di una risposta.
- In ARM e ABM, il bit Poll/Final e usato per forzare una risposta.
I frame di supervisione sono usati per controllo degli errori e di flusso, quando il
piggybacking
e impossibile o inappropriato, ad esempio quando il campo primario deve mandare solo comandi, risposte o conferme (non dati). I frame 'S'
non
hanno campi dati.
- Campo di controllo dei frame S
Puo essere a 8 o 16 bit
10
|
Send sequence no N(S)
|
Poll/Final
|
Receive sequence no N(R)
|
2 bit
|
2 bit
|
1 bit
|
3 bit
|
10
|
Code
|
0000
|
Poll/Final
|
Receive sequence no N(R)
|
2 bits
|
2 bits
|
4 bits
|
1 bits
|
7 bits
|
I primi 2 bit ('10') indicano che e un frame S
Portale Telematica
: accedi alle voci di Wikipedia che parlano di reti, telecomunicazioni e protocolli di rete