Spojová vrstva

Spojovaná komunikace

Při spolehlivém přenosu musí zařízení, které chce vysílat, nejprve vytvořit relaci (session) a tím navázat spojovanou komunikaci se vzdáleným zařízením. Vysílající zařízení nejprve naváže spojovanou relaci s partnerským systémem; hovoříme o inicializaci spojení neboli třícestném navazování komunikace. Potom začíná vlastní přenos datipo jeho skončení se musí ukončit i spojení a virtuální okruh se rozpadá. Typická spolehlivá relace mezi odesílajícím a přijímajícím systémem je znázorněna na obrázku 1 .9. Vidíme, že aplikační programy na obou hostitelích začínají tím, že oznámí inicializaci spojení svému operačnímu systému. Tyto systémy si pak pro komunikaci odesílají po síti zprávy, které potvrzují schválení přenosu a připravenost obou stran. Po dokončení této povinné synchronizace je spojení plně navázáno a přenos dat může začít. (Této inicializaci virtuálního okruhu se mimochodem říká "režie".) Během vlastního přenosu informací se oba hostitelské systémy vzájemně kontrolují a pomocí softwaru komunikačního protokolu se ujišťují, že je všechno v pořádku a že jsou data na druhé straně správně přijímána.

Nyní si shrneme jednotlivé kroky spojované relace neboli třícestného navazování komunikace z obrázku 1 .9:

Prvním segmentem "dohody o spojení" je požadavek synchronizace. • Druhý a třetí segment potvrzují požadavek a zavádějí mezi hostiteli parametry spojení neboli pravidla. Tyto segmenty vyžadují synchronizaci a řazení dat u příjemce, aby se tak mohlo vytvořit obousměrné spojení. • Poslední z trojice segmentů je také potvrzením. Oznamuje cílovému hostiteli, že dohoda o spojení byla přijata a že spojení bylo skutečně navázáno. Přenos dat může začít.

Vypadá to na pohled docela jednoduše, ale vždycky všechno neprobíhá tak hladce. Někdy může během přenosu dojít k zahlcení sítě (kongesci), protože rychlejší počítač generuje datový provoz rychleji, než dokáže síť přenést. Také několik počítačů, které současně začnou odesílat datagramy přes jedinou bránu nebo do jediného cíle, mohou síť zablokovat. Ve druhém z uvedených případů tak může dojít k zahlcení cíle nebo brány i přesto, že problém nezpůsobil žádný jednotlivý zdroj. Problém se každopádně podobá "zácpě" na dopravní síti (které se také říká kongesce, pozn. překl.), kde je aktuálně více provozu než volné kapacity. Ani zde obvykle nezpůsobuje problém jedno konkrétní auto - aut je zkrátka příliš mnoho. Dobrá, co se tedy stane, když do počítače přijde shluk datagramů rychleji, než ho dokáže zpracovat? Uloží se do vyrovnávací paměti neboli bufferu. Toto vyrovnávání (bufferování) vyřeší ale problém jen v případě, že datagramy vytvořily jeden menší shlukipokud rychlý příval datagramů pokračuje, dojde záhy k vyčerpání volné paměti a celkové kapacity zařízení, které pak jakékoli další datagramy začne zahazovat. Není to ale nic závadného.

Díky funkcím transportní vrstvy fungují mechanismy řízení zahlcení správně. Prostředky nezahazují a nezpůsobují tedy ztrátu dat, ale vysílají odesilateli (zdroji nadměrného provozu) indikaci "nepřipraven", jak vidíme na obrázku 1 . 1 0. Tento mechanis mus funguje asi jako červené světlo, protože odesilatel pozastaví vysílání segmentovaného provozu k přetíženému partnerovi. Jakmile ten zpracuje část segmentů v bufferu a uvolní jej, odešle opět indikaci "připraven" a čekající odesilatel může pokračovat ve vysílání.

Při tomto spolehlivém, spojovaném přenosu dat se datagramy doručují přijímajícímu hostiteli v přesně stejném pořadí, v jakém byly odeslány - při narušení tohoto pořadí dílčí přenos selže a dojde-li ke ztrátě jakéhokoli segmentu, k jeho duplikaci nebo poškození, znamená to chybu přenosu, kterou odesilatel zjistí právě díky potvrzování příjmu každého datového segmentu ze strany příjemce.

Služba se považuje za spojovanou, pokud má následující charakteristické vlastnosti:

Inicializuje se v ní virtuální okruh (například třícestné navazování komunikace) • Používá seřazení segmentů • Pracuje s potvrzováním • Využívá řízení toku

Poznámka Mezi typy řízení toku patří bufferování (vyrovnávání), posun okna a prevence zahlcení.

Posun okna

V ideálním případě procházejí data sítí rychle a efektivně. Jak ale jistě chápete, pokud by vysílající zařízení muselo zvlášť čekat na potvrzení každého segmentu a teprve poté mohlo vysílat další segment, přenos by byl pomalý. Mezi časem, kdy odesilatel odvysílá datový segment a kdy zpracuje příchozí potvrzení, uplyne ovšem nějaký čas a odesilatel tak může pokračovat ve vysílání. Počet datových segmentů (v bajtech), které odesílající počítač může odvysílat bez příjmu potvrzení, se nazývá okno.

Poznámka Okna řídí množství nezpracovaných, nepotvrzených datových segmentů.

Velikost okna tedy určuje, kolik informací se smí najednou přenášet z jednoho konce na druhý. Některé protokoly kvantifikují informace počtem paketů, v protokolu TCP/IP se ale počítají bajty. Na obrázku 1.1 1 vidíme jako příklad dvě velikosti okna - 1 a 3 bajty. Jestliže v konfiguraci nastavíme velikost okna 1, bude odesílající počítač čekat na potvrzení každého datového segmentu a teprve poté začne vysílat další. Má-li okno velikost 3, smí vysílající strana odvysílat tři datové segmenty i bez přijetí potvrzení. V našem zjednodušeném příkladu je odesílajícím i přijímajícím počítačem pracovní stanice. Ve skutečném provozu se v potvrzení uvádí počet bajtů, které se dají odeslat.

Potvrzení

Spolehlivé doručování dat zajišťuje integritu datového proudu, zaslaného z jednoho počítače na druhý přes plně funkční datovou linku. Zaručuje, že se data neztratí ani neduplikují (nezopakují). K tomu provádí takzvané pozitivní potvrzení s opakovaným vysíláním - kdy přijímající počítač musí zpětně komunikovat s odesilatelem a po přijetí dat mu musí zaslat potvrzení (acknowledgement). Odesilatel sleduje každý odeslaný segment a po odvysílání daného počtu segmentů čeká na potvrzení. Konkrétně tak při odeslání segmentu spustí časovač a pokud ten vyprší, aniž by se od příjemce vrátilo potvrzení, odvysílání jej znovu. Na obrázku 1.12 tak odesílající počítač vysílá segmenty 1, 2 a 3. Přijímající uzel potvrdí jejich příjem a v potvrzení si vyžádá odeslání segmentu 4. Jakmile toto potvrzení dostane odesilatel, pokračuje vysíláním segmentů 4, 5 a 6. Pokud se segment 5 do cíle nedostane, oznámí příjemce tuto událost tím, že potvrdí naposledy přijatý segment č. 4 a tím si vyžádá opakované zaslání segmentu č. 5. Odesílající počítač znovu odešle ztracený segment a počká na potvrzení, bez kterého nemůže začít vysílat segment 7.