# HDLC

HDLC (High-Level Data Link Control, control d'enllaç síncron de dades) és un protocol de comunicacions de propòsit general punt a punt i multipunt, que opera a nivell d'enllaç de dades. Es basa en ISO 3309 i ISO 4335. Sorgeix com una evolució de l'anterior SDLC. Proporciona recuperació d'errors en cas de pèrdua de paquets de dades, errors de seqüència i altres, per la qual cosa ofereix una comunicació fiable entre el transmissor i el receptor.
D'aquesta protocol deriven altres com LAPB, LAPF, LLC i PPP.

## Característiques bàsiques de l'HDLC

HDLC defineix tres tipus d'estacions, tres configuracions de l'enllaç i tres maneres de operació per a la transferència de les dades.
Els tres tipus d'estacions són:
    * Estació primària : es caracteritza pel fet que té la responsabilitat de controlar el funcionament de l'enllaç. Les trames generades per la primària es denominen ordres.
    * Estació secundària : funciona sota el control de l'estació primària. Les trames generades per l'estació secundària es denominen respostes. La primària estableix un enllaç lògic independent per a cadascuna de les secundàries presents en la línia.
    * Estació combinada : és una barreja entre les característiques de les primàries i les secundàries. Una estació d'aquest tipus pot generar tant ordres com a respostes.
Les tres possibles configuracions de l'enllaç són:
    * Configuració no balancejada : està formada per una estació primària i una o més secundàries. Permet transmissió full-duplex i semi-duplex.
    * Configuració balancejada : consisteix en dues estacions combinades. Permet igualment transmissió full-duplex o semi-duplex.
    * Configuració simètrica : dues estacions físiques, cadascuna amb una estació lògica, de manera que es connecten una primària d'una estació física amb la secundària de l'altra estació física.
Els tres modes de transferència de dades són:
    * Mode de resposta normal (NRM, Normal Response Mode): s'utilitza en la configuració no balancejada. L'estació primària pot iniciar la transferència de dades a la secundària, però la secundària només pot transmetre dades usant respostes a les ordres emeses per la primària.
    * Mode balancejat asíncron (ABM, Asynchronous Balanced Mode): s'utilitza en la configuració balancejada. En aquesta manera qualsevol estació combinada podrà iniciar la transmissió sense necessitat de rebre permís per part de l'altra estació combinada.
    * Mode de resposta asíncron (ARM, Asynchronous Response Mode): s'utilitza en la configuració no balancejada. L'estació secundària pot iniciar la transmissió sense tenir permís explícit per part de la primària. L'estació primària segueix tenint la responsabilitat del funcionament de la línia, incloent la iniciació, la recuperació d'errors, i la desconnexió lògica.
El NRM sol usar-se en línies amb múltiples connexions i en enllaços punt a punt, mentre que el ABM és el més utilitzat de les tres maneres, pel fet que en ABM no es necessiten fer sondejos, la utilització dels enllaços punt a punt amb full-duplex és més eficient amb aquesta manera. ARM només s'utilitza en casos molt particulars.

## Estructura

HDLC utilitza transmissió síncrona . Tots els intercanvis es realitzen a través de trames, HDLC utilitza un format únic de trames que és vàlid per a tots els possibles intercanvis: dades i informació de control.
A la Figura es mostra l'estructura d'una trama HDLC. Al camp de delimitació, de direcció i de control, que precedeixen el camp d'informació es denominen capçalera. La FCS juntament amb l'altre camp de delimitació final que està a continuació del camp de dades s'anomena cua .
Els camps de delimitació estan localitzats en els dos extrems de la trama, i ambdós corresponen a la següent combinació de bits 01111110. Es pot usar un únic delimitador com a final i començament de la següent trama simultàniament. A banda i banda de la interfície entre l'usuari i la xarxa, els receptors estaran contínuament intentant detectar aquesta seqüència per sincronitzar-se amb el començament de la trama. Quan es rep una trama, l'estació seguirà intentant detectar aquesta mateixa seqüència per determinar així el final de la trama. Com s'usa la seqüència 01111110 en la delimitació de les trames, és necessari l'ús del procediment denominat inserció de bits. Pel qual, l'emissor quan hagi d'enviar una cadena que contingui una seqüència de cinc bits en 1 inserirà immediatament després del cinquè 1 un 0. El receptor, després de la detecció del delimitador d'inici, monitorarà la cadena de bits rebuda, de tal manera que quan aparegui una combinació de cinc 1 seguits, el sisè bit s'examinarà. Si aquest bit és 0, s'eliminarà sense més. Si el sisè bit és un 1 i el setè és un 0, la combinació es considera com un delimitador. Si els bits sisè i setè són ambdós igual a 1 s'interpreta com una indicació de tancament generada per l'emissor.
Per exemple, si es vol transmetre la següent seqüència
    * 01101111011111011111100
HDLC ho modifiqués d'aquesta manera
    * 01101111011111 0 011.111 0 100
| Flag | Direcció | Control | Informació | FCS | Flag (començament de la trama següent) |
| 8 bits | 8 bits | 8 o 16 bits | Longitud variable, 0 o més bits, múltiples de 8 | 16 bits | 8 bits |
Al seu torn en camp control pot prendre les següents codificacions depenent del tipus de trama (informació, supervisió i no numerades que es veuran més endavant):
    * I: Informació:
| 1 | 2-4 | 5 | 6-8 |
| 0 | N (S) | P/F | N (R) |
N (S): Nombre de seqüència enviada.
N (R): Nombre de seqüència rebuda.
P/F: Bit de Sondeig/Final ("Poll/Final")
    * S: Supervisió:
| 1-2 | 3-4 | 5 | 6-8 |
| 10 | S | P/F | N (R) |
S: bits per a les trames de supervisió (s'explicarà més endavant).
    * No numerades:
| 1-2 | 3-4 | 5 | 6-8 |
| 11 | M | P/F | M |
M: Bits per a les trames no numerades.
Cada dada que s'envia, és encapsulat en una trama HDLC, això afegint-li un header i una cua. El header conté una adreça HDLC i un camp de control HDLC. La cua conté un camp de CRC (ciclic redundancy check).
Cada trama és separada per un delimitador o bandera amb valor hexadecimal 7E. Aquest flag o bandera es pot utilitzar per identificar l'inici de la següent trama.
Existeixen tres tipus de trama (DL_PDU): trama d'informació que transporten les dades de l'usuari, de supervisió i de gestió (o no numerades). L'ordre d'injecció de les trames en el mitjà de transmissió és LSB (primer el bit menys significatiu).
Les trames de supervisió s'utilitzen per al reconeixement de trames, control de flux i control d'errors (sempre que no sigui possible fer-ho mitjançant les trames d'informació). Existeixen quatre subtrames identificades pel camp S de camp de control (del tipus de supervisió):
| 00 | RR (Receive Ready) |
| 01 | REJ (reject) |
| 10 | RNR (Receive Not Ready) |
| 11 | SREJ (Selective reject) |
Ready to Receive: Reconeixement Positiu: RR N reconeix les trames fins a la N-1 i indica que la propera trama que espera rebre és la N.
Si té el bit P (poll/sondeig) activat indica que l'estació primària està sondejant a l'estació secundària.
Si té el bit F activat i és després d'una selecció, indica que el secundari està llest per rebre dades del primari. Si no és després d'una selecció, l'estació secundària indica a la primària que no té més trames que transmetre. Normalment l'estació secundària envia trames d'informació fins que se li acaben les dades i llavors envia una trama RR amb F activat per indicar finalització.
Ready Not to Receive: Reconeixement Positiu No Llest Per Rebre: RNR N Reconeix les trames fins a la N-1 i indica que ara mateix no pot rebre més trames.
Si té el bit P activat serveix per seleccionar l'estació secundària que rebrà les dades, indicant que l'estació primària no va a rebre dades.
Si té el bit F activat serveix perquè l'estació secundària indiqui a l'estació primària que no està llest per rebre dades.
reject: Rebuig: REJ N Reconeix les trames fins a la N-1 i indica que a partir de la trama N cal retransmetre.
Selective reject: Rebuig Selectiu: SREJ N Indica que la trama N no va arribar correctament i ha de ser retransmesa.
Les ordres que es poden trobar en les trames de gestió són:
| CODI | ORDRE | RESPOSTA |
| 00.001 | SNRM | |
| 11.011 | SNRME | |
| 11.000 | MRSA | DM |
| 11.010 | SARM | |
| 11.100 | SABM | |
| 11.110 | SABM | |
| 00.000 | UI | UI |
| 00.110 | | UA |
| 00.010 | DISC | RD |
| 10.000 | SIM | RIM |
| 00.100 | UP | |
| 11.001 | RSET | |
| 11.101 | XID | XID |
| 10.001 | | FRMR |
Les ordres SNRM , SNRME , MRSA , MRSA , SABM i SABM serveixen per activar la manera com s'han de comunicar les estacions: NRM o manera de resposta normal, ARM o manera de resposta asíncrona i ABM o manera asíncrona equilibrat, amb les seves respectives extensions (NRME, SARM i SABM).
L'ordre RSET serveix per reiniciar la connexió i posar a zero els comptadors i finestres lliscants de les trames. L'ordre DISC serveix per desconnectar la connexió.

### Camp de Direcció

El camp de direcció identifica a l'estació secundària que ha transmès o que va a rebre la trama. Aquest camp no s'usa en enllaços punt a punt. El mateix té normalment 8 bits, pot usar-se també un format ampliat en el qual la direcció tindrà un múltiple de 7 bits. El bit menys significatiu de cada octet serà respectivament 1 o 0, si és o no l'últim octet del camp de direcció. Els 7 bits restants de cada octet formaran la direcció pròpiament dita.

### Camp de control

En HDLC es defineixen tres tipus de trames, cadascuna amb format diferent per al camp de control. Les trames d'informació (trames-I) transporten les dades generades per l'usuari. En aquestes trames també s'inclou informació per al control ARQ d'errors i de flux. Les trames de supervisió (trames-S) proporcionen el mecanisme ARQ quan la incorporació de les confirmacions en les trames-I no és factible. Les trames no numerades (Trames-N) proporcionen funcions complementàries per controlar l'enllaç.
El primer o els dos primers bits del camp de control s'utilitzen per identificar el tipus de trama. La resta dels bits se situen en subcamps com s'indica a la figura. 6. (C) i (d)
Tots els formats possibles de l'HDLC contenen el bit sondeig/fi (P/F "poll/final"). La seva utilització és dependent del context. Normalment en les trames d'ordres es denomina bit P, i es fixa a 1 per sol·licitar (sondejar) una resposta a l'entitat HDLC parell.
En les trames de resposta, el bit es denomina F, i es fixa a un valor 1 per identificar la trama tipus resposta retornada després de la recepció d'una ordre.

### Camp d'informació

El camp d'informació només està present en les trames-I i en algunes trames N. Aquest camp pot contenir qualsevol seqüència de bits, amb l'única restricció que el nombre de bits sigui igual a un múltiple sencer de 8. La longitud d'aquest camp és variable i sempre serà menor que un valor màxim predefinit.

### Camp per a la seqüència de comprovació de la trama

La seqüència de comprovació de la trama (FCS, Frame Check Sequence) és un codi per a la detecció d'errors calculat a partir dels bits de la trama excloent els delimitadors.

## Funcionament de l'HDLC

El funcionament de l'HDLC implica tres fases. Primer, un dels dos extrems inicia l'enllaç de dades, de tal manera que les trames es puguin intercanviar d'una forma ordenada. Durant aquesta fase, es pacten les opcions que s'usaran en l'intercanvi posterior. Després de la iniciació, els dos extrems intercanvien les dades generades pels usuaris així com informació de control per dur a terme els procediments de control del flux i d'errors. Finalment, un dels dos extrems comunicarà la finalització de la transmissió.

### Iniciació

La iniciació la pot sol·licitar qualsevol dels dos extrems transmetent una d'entre les sis ordres previstes per fixar la manera. Aquesta ordre serveix per a tres objectius: 1. S'avisa a l'altre extrem sobre la sol·licitud de la iniciació. 2. S'especifica quin dels tres maneres (NRM, ABM, ARM) s'està sol·licitant. 3. S'especifica si es van a utilitzar nombres de seqüència de 3 o 7 bits.
Si l'altre extrem accepta la sol·licitud, s'informarà a l'extrem sobre aquesta contingència mitjançant la transmissió d'una trama de confirmació no numerada (UA, unnumbered acknowledge). Si la sol·licitud es rebutja, s'envia una trama de fora de línia (DM, disconnected mode).

### Transferència de dades

Quan la iniciació s'hagi sol·licitat i hagi estat acceptada, llavors s'haurà establert la connexió lògica. A partir de llavors, ambdós costats poden començar a enviar dades mitjançant trames-I, començant amb el nombre de seqüència igual a 0. Els camps N (S) i N (R) d'una trama-I contindran els nombres de seqüència amb què es porta a terme el control del flux i d'errors. La seqüència de trames-I es numerarà seqüencialment mòdul 8 o mòdul 128, depenent de si s'utilitzen respectivament 3 o 7 bits, utilitzant el camp N (S). El camp N (R) s'utilitza per a la confirmació de les trames-I rebudes, d'aquesta manera es facilita que el mòdul HDLC indiqui a l'altre extrem el nombre de trama-I que s'espera rebre.
Les trames-S també s'usen per controlar el flux i els errors. La trama receptor preparat (RR, receive ready) confirma una trama-I rebuda, indicant alhora la trama-I que s'espera rebre. La RR s'usa quan no hi ha trànsit en el sentit contrari (trames-I) en el qual es puguin incloure les confirmacions. La trama receptor no preparat (RNR, receive not ready) confirma una trama-I, com la fa la RR, però al mateix temps sol·licita a l'entitat situada a l'altre extrem de l'enllaç que suspengui la transmissió de trames-I. Quan l'entitat que va enviar la RNR aquest de nou preparada, enviarà una RR. La trama REJ serveix per iniciar el procediment ARQ amb volta-enrere-N. Amb ella s'indica que l'última trama-I rebuda s'ha rebutjat i sol·licita la retransmissió de totes les trames-I a partir de la N (R) indicada en la trama REJ. La trama de rebuig selectiu (SREJ, selective reject) s'usa per sol·licitar la retransmissió d'una única trama.

### Desconnexió

Qualsevol de les dues entitats situades a banda i banda de l'enllaç poden iniciar la desconnexió; tant per iniciativa pròpia (si és que hi ha hagut algun tipus de fallada) com després de la petició cursada per capes superiors. HDLC duu a terme la desconnexió transmetent una trama de desconnexió (DISC, Disconnect). L'altre extrem pot acceptar la desconnexió tornant una trama UA i informant l'usuari de la capa 3 sobre el tancament de la connexió. Es pot perdre qualsevol trama-I pendent de confirmar, en aquest cas la seva recuperació és responsabilitat de les capes superiors.

## Enllaços externs

* Més informació sobre el HDLC Arxivat 2006-05-14 a Wayback Machine.
* Data Link Procedure D-Channel
* Vista global i detalls del HDLC