Vyšlo v týdeníku CHIPweek č. 29/95, 15. listopadu 1995
Vytištěno z adresy: http://www.earchiv.cz/a95/a529k130.php3

Znakově orientovaný, bitově orientovaný protokol

Když si dvě vzájemně komunikující strany vyměňují mezi sebou data, je samozřejmě nezbytné, aby obě rozuměly formátu ve kterém jsou data přenášena. Tedy aby obě strany dokázaly správně rozpoznat začátek i konec bloku dat, který si předávají, a stejně tak aby dokázaly správně identifikovat jednotlivé části tohoto bloku - například adresu odesilatele, adresu příjemce, různé řídící a zabezpečovací údaje atd.

Snad nejvíce je tento požadavek aktuální na nejnižší úrovni, na které se již přenáší celé bloky dat, a ne pouze jednotlivé bity - tedy na úrovni tzv. linkové (někdy nazývané též: spojové) vrtsvy, kde se přenášeným blokům říká rámce (frames). Linková vrstva tedy musí být schopna správně rozpoznat začátek i konec každého rámce, a stejně tak musí správně identifikovat všechny jeho části, které jsou relevantní pro zpracování rámce (nemusí však již rozumět té části datového obsahu rámce, kterou předává ke zpracování vyšším vrstvám).

Různé přenosové protokoly, pracující na úrovni linkové vrstvy, přitom mohou používat za tímto účelem různé techniky a strategie. Jednou z nejjednodušších možností je vzít dva speciální řídící znaky, jeden dát na začátek datového bloku a druhý na konec. Podle nich pak příjemce pozná začátek i konec rámce, a pokud je s odesilatelem domluven na vnitřním formátu rámce (například na tom, že první dva byty představují adresu příjemce, poslední dva byty kontrolní součet atd.), mohlo by to v zásadě stačit. Problém je ale v jedné věci - co když by se v samotném obsahu datového rámce vyskytnula stejná bitová posloupnost, jakou představuje i onen speciální koncový znak? Pak by ji příjemce nutně musel považovat za příznak konce rámce, a to by jistě nebylo dobře.

Obvyklé řešení je následující: před speciální řídící znaky, uvozující začátek a konec rámce, se vloží ještě jeden speciální znak, který jako kdyby říkal: „pozor, následující znak je řídící, a není součástí přenášených dat". Řeší to ale náš problém? Co když by se v samotném datovém rámci vyskytovala stejná bitová posloupnost, jakou má právě tento „prefixový" znak? Ještě by mělo záležet na tom, co následuje za ním, ale v každém případě to opět představuje nežádoucí komplikaci. Té se ale dá vyhnout například tím, že uvnitř datového rámce se každý případný výskyt „prefixového" znaku (obvykle ASCII znaku DLE, neboli Data Link Escape, s hodnotou 16 desítkově, resp. 10 hexadecimálně) zdvojí. Příjemce pak při příjmu tohoto znaku vždy zbystří pozornost, a pokud dalším přijatým znakem je znovu tentýž znak, chápe dvojici jako jediný znak s hodnotou 16, představující data. V opačném případě chápe druhý znak z dvojice jako řídící, a zařídí se podle toho, co tento řídící znak znamená. Obecně se právě popsané technice říká character stuffing, česky: vkládání znaků. To také skutečně vystihuje podstatu věci - pro zajištění tzv. transparence dat (neboli toho, aby vždy bylo jasné zda jde o data nebo o řídící údaje), se do proudu přenášených dat vkládají celé znaky.

Právě tento moment je pak natolik charakteristický, že přenosovým protokolům linkové vrstvy, které zajišťují transparenci dat pomocí vkládání celých znaků, se říká znakově orientované protokoly. Nejvýznamnějším představitelem těchto protokolů je protokol BSC (Binary Synchronous Communication, též: BISYNC).

Zcela jinak se k potřebě zajištění transparence dat staví protokoly, patřící do alternativní skupiny tzv. bitově orientovaných protokolů (mezi které patří například protokoly HDLC a SDLC). Ty vkládají mezi přenášená data nikoli celé řídící znaky, ale předem definované posloupnosti bitů. Hlavní přínos (oproti znakově orientovaným protokolům) je pak v tom, že tyto posloupnosti bitů mohou být výrazně kratší, a tudíž nepřinášejí tak vysokou režii, jakou nutně musí mít protokoly znakově orientované. Zkusme si to poněkud rozvést.

Začátek (i konec rámce) se bitově orientovaný protokol snaží indikovat předem stanovenou posloupností bitů, tvořící tzv. křídlovou značku - nejčastěji jde o posloupnost osmi bitů, z nichž oba krajní jsou nulové, a šest vnitřních bitů je jedničkových. Aby vše fungovalo tak jak má, a křídlová značka jednoznačně identifikovala začátek a konec rámce, nesmí se zmíněná šestice jedničkových bitů, obklopená z obou stran nulovými bity, vyskytnout nikde uvnitř rámce. Tomu se opět předchází technikou vkládání, ale tentokráte nikoli vkládáním celých řídících znaků, ale pouze jednotlivých bitů - za každých pět po sobě jdoucích jedničkových bitů odesilatel přidá jeden nulový bit. Proto se také této technice říká bit stuffing (vkládání bitů). Příjemce pak postupuje analogicky: pokud přijme pět jedničkových bitů a za nimi nulový bit, odstraní jej bez náhrady, a pokud přijme šest za sebou jdoucích jedničkových bitů, ví že přijal křídlovou značku.