**High-Level Data Link Control** (**HDLC**) on yksi yleisimmistä*lähde?* OSI-mallin siirtoyhteyskerroksen protokollista. HDLC on ISOn kehittämä bittiorientoitunut synkroninen tietoliikenneprotokolla, joka tarjoaa luotettavan ja suorituskykyisen tavan siirtää bittimuotoista dataa sarjalinkkien yli. HDLC:tä käytetään mm. digitaalisissa puhelin- ja kaukokirjointinverkoissa, mutta mikä tahansa dataa kuljettava sarjalinkki voidaan toteuttaa sen avulla (kuten esimerkiksi kahden reitittimen tai tietokoneen ja modeemin välinen yhteys).

Alkuperäiset ISO standardit HDLC:lle olivat ISO 3309, ISO 4335, ISO 6159 ja ISO 6256. Vastaavat SFS standardit ovat:

* SFS 4334 — Kehysrakenne
* SFS 4335 — Liikennöinnin perusteet

Nykyinen HDLC standardi ISO 13239 korvaa aikaisemmat versiot.

HDLC tarjoaa sekä yhteysorientoituneen että yhteydettömän palvelun.

HDLC:tä voidaan käyttää monipisteyhteyksiin, mutta nykyään sitä käytetään enimmäkseen kahdenvälisissä, eli kaksipisteyhteyksissä. Tällöin käytetään yleensä asynkronista tasapainomoodia (Asynchronous Balanced Mode, ABM), jossa kumpi tahansa verkkosolmu voi aloittaa yhteyden.

Historia
--------

HDLC perustuu IBM:n SDLC-protokollaan, josta tuli IBM:n SNA (System Network Architecture) -verkkojen toisen kerroksen protokolla. X.25-protokollapinoon sen toi ITU (International Telecommunication Union) nimellä LAPB. HDLC on nykyisin pohjana PPP:lle (Point-to-Point Protocol). Hieman erilaista versiota käytetään mm. SONET-yhteyksissä. Jotkut valmistajat, kuten Cisco Systems, rakensivat myös omia toteutuksia käyttäen HDLC:n kehystystekniikkaa.

Kehystys
--------

HDLC kehyksiä voidaan lähettää synkronisten tai asynkronisten linkkien yli. Näillä linkeillä ei ole keinoja kehyksen alun ja lopun merkitsemiseen, joten signaalitasolla käytetään lipuksi kutsuttua kehysjakajaa. Lippu on uniikki bittijakso "01111110" (7E heksadesimaalijärjestelmässä), jota ei esiinny kehyksen sisällä. Jokainen kehys alkaa ja loppuu lipulla.

Käytettäessä synkronista linkkiä lähetetään hiljaisten jaksojen aikana kehysjakajaa kellopulssina:

```
 01111110011111100111111001111110
  ______  ______  ______  ______ 
 _      __      __      __      _

```

Näin synkronisen linkin päiden kellot pysyvät samassa ajassa.

Binääridata voisi helposti sisältää lipuksi tulkittavan bittijakson, joten datan bittijaksot pitää lähettää niin ettei virhetulkintaa pääse syntymään.

Synkronisissa linkeissä tämä toteutetaan täytebittien avulla. Lähettävä pää varmistaa että viiden 1-bitin sarja päättyy 0-bittiin ja vastaanottava pää poistaa nämä ylimääräiset 0-bitit automaattisesti. Vasta kuusi peräkkäistä 1-bittiä tulkitaan lipuksi.

Asynkroniset linkit käyttävät sarjaportteja tai UARTeja ja lähettävät bitit kahdeksan ryhmissä, eli oktetteina. Täytebittien sijaan sarjalinkit käyttävät täytetavuja tai täyteoktetteja. Kehyserottimen oktetti on 01111110, (7E heksoina) ja erityinen keskeytysoktetti on 01111101, (7D heksoina). Keskeytysoktetti lähetetään ennen oktettia jonka tavulla on sama arvo kuin kehyserottimella tai keskeytysoktetilla. Sen jälkeen seuraavan oktetin bitti numero 5 käännetään. Esimerkiksi datajakso "01111110" (7E) lähetettäisiin jaksona "01111101 01011110" ("7D 5E").

Kehysrakenne
------------

HDLC kehys liput mukaan lukien:

| Lippu | Osoite | Hallinta | Data | Tarkistussumma | (Valinnainen lippu) |
| --- | --- | --- | --- | --- | --- |
| 8 bittiä | 8 bittiä | 8 tai 16 bittiä | Vaihteleva pituus, 0 tai useampi bitti, 8 jaollinen määrä | 16 bittiä | 8 bittiä |

Huomaa että lippuja tulee vähintään yksi kahden kehyksen väliin. Huomaa myös että data tulee 8 bitin jaksoissa.

FCS (Frame Check Sequence, kehyksen tarkistusjakso) on kehittyneempi versio pariteettibitistä. FCS-kenttä sisältää osoite-, hallinta- ja data-kenttien sisällöistä bittimatematiikalla laskettavan tuloksen. Tarkistussummaa käytetään lähetysvirheiden, kuten kadonneiden, kääntyneiden tai ylimääräisten bittien havaitsemiseen. Vastaanottaja hylkää kehyksen jos virhe havaitaan. Tämä virheentarkistusmenetelmä voi asettaa rajoituksia data-kentän maksimipituudelle, sillä mitä pidempi data-kenttä on, sitä vaikeampaa on tietyntyyppisten lähetysvirheiden havaitseminen. FCS-tyyppejä on useita, joista CRC-16 ja CRC-CCITT ovat yleisimmät.

Katso myös
----------

* PPP, Point-to-Point Protocol
* SDLC, Synchronous Data Link Control
* SLIP, Serial line IP

Aiheesta muualla
----------------

* RFC 2687, Ehdotettu standardi, PPP in a Real-time Oriented HDLC-like Framing
* RFC 1662, Standardi 51, PPP in HDLC-like Framing
* HDLC informaatiosivu (Arkistoitu – Internet Archive)
* SFS-standardin kuvaus (Arkistoitu – Internet Archive)