HDLC, , česky doslova Vysokoúrovňové řízení datového spoje je komunikační protokol linkové vrstvy vycházející z protokolu Synchronous Data Link Control vyvíjený od roku 1979 Mezinárodní organizací pro normalizaci (ISO) ve spolupráci s Mezinárodní elektrotechnickou komisí (IEC). HDLC pokrývá široké spektrum sériové komunikace:
poskytuje spolehlivou spojovanou i nespolehlivou nespojovanou službu může být použit pro obousměrnou poloduplexní ( v HDLC terminologii ) a duplexní () komunikaci, i pro komunikaci jednosměrnou (simplexní, ) může se používat na vícebodových vyhrazených spojích, na dvoubodových pevných nebo komutovaných linkách, i v sítích s přepojováním paketů může používat synchronní i arytmický přenos s osmibitovými nebo sedmibitovými slabikami stanice mohou komunikovat v režimu nadřízená-podřízená nebo jako rovnocenné
Z HDLC je odvozena celá řadu protokolů jako LAPB, LAPD, LAPF, LAPM a IrLAP, které jsou používány pro rozličné formy komunikace (v sítích X.25, v digitálních telefonních sítích, v lokálních sítích, pro modemovou komunikaci, pro komunikaci pomocí infračerveného světla), a další protokoly jako PPP, MTP-2 byly protokolem HDLC inspirovány. Některé jeho vlastnosti přebírá i IEEE 802.2 LLC, což řadí HDLC k nejvlivnějším linkovým protokolům.
Standard HDLC byl definován postupně v řadě samostatných dokumentů, které stanovovaly formáty rámců a postupy při komunikaci na sériovém spoji a později byly sloučeny do ISO/IEC 13239.
Historie Po zkušenostech se znakově orientovanými protokoly vyvinula firma IBM v první polovině 70. let 20. století bitově orientovaný přenosový protokol SDLCFriend, 1988, s. 188, který v roce 1975 použila ve své sadě síťových protokolů SNA. Protokol byl dále rozvinut Mezinárodní organizací pro normalizaci (ISO) a American National Standards Institute (ANSI), které jej v roce 1979 publikovaly jako HDLC (ISO: High-Level Data Link Control) a ADCCP (ANSI: Advanced Data Communications Control Procedures). HDLC a ADCCP rozšiřují SDLC o některé nové vlastnosti, jako je například asynchronní vyvážený režim, a ruší omezení velikosti rámce na násobky osmi bitů; na druhou stranu některé procedury a zprávy (např. zprávy CFGR a BCN) nepřevzaly.
Protokol HDLC je poměrně komplikovaný a díky jeho postupnému vývoji jej popisovalo několik ISO standardů:
ISO 3309 – Struktura rámce ISO 4335 – Prvky protokolu ISO 6159 – Nevyvážené třídy protokolu ISO 6256 – Vyvážené třídy protokolu ISO 7776 – KZD procedury linkové vrstvy kompatibilní s X.25 LAPB ISO 7809 – Specifikace pro konsolidaci tříd procedur ISO 8471 – Nastavování adres datového spoje ISO 8885 – Obsah a formát informačního pole víceúčelového rámce XID
Které byly později spojeny do ISO/IEC 13239.
Existuje množství protokolů odvozených z HDLC; část funkcionality HDLC byla převzata:
do protokolového zásobníku X.25 jako LAPB, do modemového protokolu V.42 bylo HDLC implementováno jako LAPM, do protokolového zásobníku Frame Relay jako LAPF, do protokolového zásobníku ISDN jako LAPD, do standardu IrDA jako IrLAP.
HDLC inspiroval protokol LLC v IEEE 802.2 a je základem pro mechanismus vytváření rámců používaný protokolem PPP na synchronních linkách, který používá mnoho serverů pro připojení k WAN, nejčastěji k Internetu.
HDLC je implicitním zapouzdřením pro sériové rozhraní na routerech firmy Cisco Systems. Mírně odlišná verze se používají pro řídicí kanály na linkách E1, v Digital cross connect system a na mnohakanálových telefonních linkách SONET. Existují protokoly, které používají nízkoúrovňové techniky HDLC pro vytváření rámců, ale ke standardní HDLC hlavičce přidávají další protokolová pole (například Cisco HDLC), nebo ji zcela nahrazují jinou hlavičkou (například MTP-2).
Funkce protokolu HDLC Hlavní službou protokolu HDLC je spolehlivý přenos informací vyšší vrstvy s použitím mechanismu zpětné vazby s automatickým opakováním. Ke spolehlivému přenosu dat slouží informační rámce (I-rámce), které obsahují uživatelská data vyšší vrstvy spolu s číslem přenášeného rámce N(S). Hodnota N(S) se zvětšuje o jedničku pro každý vyslaný rámec; při opakování rámce se použije stejná hodnota N(S) jako při jeho prvním vysílání. Pole N(S) má omezenou velikost; v základních režimech je tříbitové; proto lze přenášet pouze spodní tři bity čísla rámce, což dovoluje odesílat bez potvrzení nejvýše 7 rámců. Jinak řečeno rámce se číslují aritmetikou modulo 8.
I-rámce zajišťují také potvrzování rámců přenášených opačným směrem; tento přenos potvrzení pro jeden směr komunikace spolu s uživatelskými daty posílanými opačným směrem se nazývá . Pro potvrzování slouží pole N(R), které vždy obsahuje číslo očekávaného (prvního dosud nepřijatého) rámce. Uvedení určité hodnoty N(R) znamená, že všechny rámce s nižší hodnotou byly v pořádku přijaty.
Pokud má stanice poslat potvrzení a nejsou k dispozici uživatelská data, ke kterým by se potvrzení přibalilo, použije dohlížecí rámec (S-rámec), který neobsahuje žádná uživatelská data ani N(S), ale pouze číslo příštího očekávaného rámce N(R). Existují dva základní typy dohlížecích rámců: RR a RNR; první signalizuje, že stanice je připravena přijímat další rámce, druhý, že stanice další rámce přijímat nemůže (např. kvůli naplnění vyrovnávacích pamětí). Používání dalších dvou typů dohlížecích rámců REJ a SREJ, které představují záporné potvrzení dovolující používat selektivní opakování a tím snížit zpoždění při ztrátě nebo poškození rámce, je volitelné rozšíření.
Na linkách pracujících velkou rychlostí a s velkým zpožděním nemusí číslování rámců modulo 8 stačit, proto jsou k dispozici režimy používající vícebitové hodnoty N(S) a N(R) podle následující tabulky:
Počet bitů Modulo čísel N(S) a N(R) Max. počet rámců odeslaných bez potvrzení 3 8 7 7 128 127 15 32768 32767 31 2147483648 2147483647
Posledním typem HDLC rámců jsou nečíslované rámce (U-rámce), které, jak napovídá jejich název, neobsahují ani N(S) ani N(R). Díky tomu je jejich řídicí pole vždy osmibitové. Nečíslované rámce umožňují:
nezabezpečený (nespolehlivý) přenos uživatelských dat vyžádat inicializaci stanice provést test funkčnosti linky výměnu informací o možnostech stanice zahájení a ukončení spojení v jehož rámci probíhá spolehlivý přenos uživatelských dat ve zvoleném režimu činnosti HDLC.
Typy HDLC rámců Všechny druhy HDLC rámců popsané výše shrnuje následující tabulka:
česky zkráceně použití Informační rámce I-rámce Spolehlivý přenos uživatelských dat síťové vrstvy v informačním poli. Potvrzování dat přenášených opačným směrem. Dohlížecí rámce S-rámce Potvrzování dat přenášených I-rámci opačným směrem. Informační pole mají pouze rámce SREJ. Nečíslované rámce U-rámce Správa spojení a další účely. Některé typy U-rámců mohou obsahovat informační pole.
Vytváření rámců HDLC se používá na sériových linkách, které přenášejí data jako nečleněný proud bitů nebo bytů. Jedním z úkolů HDLC je proto poskytnout metodu pro identifikaci začátku a konce rámce. HDLC k tomu používá křídlové značky (), také nazývané oddělovač rámců nebo příznak. Křídlová značka je tvořena posloupností bitů '01111110' nebo v šestnáctkovém zápisu 0x7E, kterou každý rámec začíná i končí. Křídlová značka na konci rámce může zároveň označovat začátek dalšího rámce.
Pokud simplexní nebo plně duplexní synchronní HDLC spoj nepřenáší žádné rámce, vysílají se nepřetržitě křídlové značky. Při použití linkového kódu NRZI-S (bit 0 = změna úrovně, bit 1 = bez změny úrovně) vzniká jeden z níže uvedených průběhů signálu podle počátečního stavu:
Soubor:NrziEncodedFlags.png
Tento průběh používají modemy pro trénink a synchronizaci hodin pomocí fázového závěsu. Některá zařízení dovolují, aby nulový bit na konci křídlové značky byl sdílen s křídlovou značkou na začátku dalšího rámce, tj. '011111101111110'.
Při poloduplexní komunikaci nebo při komunikaci point-to-multipoint, kdy linku sdílí několik stanic, není v mezirámcových mezerách aktivní žádný vysílač, což přijímače interpretují jako dlouhou řadu jedničkových bitů.
Jedním z požadavků při vytváření protokolu SDLC a HDLC byla možnost přenášet uvnitř rámce libovolná data (tzv. datová transparence). Protože se v uživatelských datech může vyskytnout bitový vzorek nebo byte shodný s křídlovou značkou, musí vysílač taková data upravit, aby je přijímač chybně nedetekoval jako ukončení rámce. Způsob úpravy závisí na tom, zda se používá bitově orientovaný nebo znakově orientovaný přenos.
Synchronní spoje Synchronní spoje používají bitově orientovaný přenos, který umožňuje používat metodu vkládání bitů (): kdykoli se v datech objeví 5 po sobě jdoucích jedničkových bitů, vloží se za ně jeden nulový bit. To zaručuje, že se uvnitř rámce nikdy (pokud neuvažujeme chyby přenosu) neobjeví více než 5 za sebou jdoucích jedničkových bitů. Právě 6 jedničkových bitů obklopených nulami signalizuje křídlovou značku; 7–15 jedničkových bitů za sebou se používá pro násilné ukončení přenosu rámce (). Více než 15 jedničkových bitů za sebou je interpretováno jako klidový stav linky. Přijímač při přijetí pěti jedničkových bitů následovaných nulovým bitem, tento nulový bit odstraní; pokud přijímač zaznamená posloupnosti šesti jedničkových bitů, jedná se buď o křídlovou značku (pokud sedmý bit je nulový) nebo o násilné ukončení přenosu rámce (pokud je sedmý bit jedničkový).
Chování přijímače při přijetí posloupnosti několika po sobě jdoucích jedničkových bitů popisuje následující tabulka:
Počet bitů Význam Činnost přijímače 1–4 Data rámce přijmout beze změn 5 Data rámce vypustit následující nulový bit 6 Křídlová značka po stavu klidu: synchronizovat přijímač; po datech: zkontrolovat přijatá data a předat vyšší vrstvě 7–15 Násilné ukončení rámce rámec zahodit >15 Stav klidu čekat na křídlovou značku
Při použití kódování NRZI-S, které kóduje nulový bit změnou úrovně signálu a jedničkový bit signálem bez změny úrovně, dochází při přenosu rámců ke změně úrovně signálu nejvýše po 7 jednotkových intervalech, což umožňuje udržovat synchronizaci vysílače a přijímače bez nutnosti přenosu hodinového signálu zvláštním vodičem.
Nové protokoly mohou používat výhodnější kódování jako například kódování 8b/10b.
Asynchronní spoje Má-li HDLC pracovat na linka používající arytmický přenos, jako je například standardní sériový port podle standardu RS-232 nebo V.24/V.28, který sdružuje bity po 5–8 do slabik, nelze použít mechanismus vkládání bitů. Aby bylo možné v rámcích přenášet bitové kombinace a znaky, které mají speciální význam, používá se metoda únikového znaku (). Jako únikový znak slouží znak s kódem 0x7D. Pro zakódování libovolného znaku, který se nesmí přímo objevit v přenášených datech, se používá dvoubytová posloupnost (únikový znak, n), kde n je původní znak s invertovaným bitem 5 (s váhou 32, tj. 0x20). Je-li aktivní volitelná funkce číslo 15.1, budou se znaky se speciálním významem, které se vyskytnou datech, kódovat podle následující tabulky:
Kód znaku Speciální význam Zakódování 0x7D Únikový znak 0x7D 0x5D 0x7E Hranice rámce 0x7D 0x5E
HDLC umožňuje dojednat, aby se stejným způsobem přenášely i jiné rezervované hodnoty oktetů (jako například XON a XOFF – volitelná funkce 15.2, případně všechny řídicí znaky – volitelná funkce 15.3), pokud to přenosová linka vyžaduje.
Struktura rámců V základním režimu používá HDLC následující formát rámce:
FlagAdresní poleŘídicí poleInformační poleFCSFlag8 bitů8 bitů8 bitůproměnná délka16 bitů8 bitů
Po dohodě o režimu činnosti nebo o rozšířeních lze používat další formáty rámce:
+ Formát rámce typu 0FlagFormát rámceAdresní poleŘídicí poleInformační poleFCSFlag8 bitů8 bitů8, 16, 24, … bitů8, 16, 32, 64 bitůproměnná délka16 bitů8 bitů
Formát rámce typu 0 je určen pro prostředí s omezenou šířkou pásma, kde se používají krátké rámce s délkou 5 až 127 oktetů. Tento formát minimalizuje délku hlavičky.