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:
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.
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.
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").
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.