Vyšlo v týdeníku CHIPweek č. 26/96, 24. června 1996
Vytištěno z adresy: http://www.earchiv.cz/a96/a626k150.php3

Dělba práce v RM ISO/OSI (I.)

Když autoři RM ISO/OSI rozhodovali o počtu vrstev svého modelu, byla jedním z kritérií snaha zaměstnat všechny vrstvy pokud možno rovnoměrně. S odstupem času je možné konstatovat, že se jim to tak úplně nepodařilo - referenční model bývá často kritizován za to, že vytížení jeho jednotlivých vrstev není rovnoměrné. Abychom ale mohli správně docenit takováto tvrzení, musíme nejprve vědět co konkrétně má která vrstva na starosti. Pojďme se tedy postupně projít jednotlivými vrstvami ISO/OSI a naznačit si, jaké úkoly dostaly do vínku. Dnes stihneme tři nejspodnější vrstvy, ostatní si necháme na přístě.

Fyzická vrstva (physical layer)

Začněme tedy odspodu, nejnižší fyzickou vrstvou. Jejím úkolem je fyzický přenos dat, přesněji přenos jednotlivých bitů a bitových sekvencí. Fyzická vrstva se tedy stará například o to, jakým způsobem jsou datové bity zakódovány do takového signálu, jaký se skutečně přenáší, jaký je časový průběh tohoto signálu, jaké jsou obvodové vlastnosti přenosových cest apod. Pokud jde o charakter služeb, které fyzická vrstva nabízí své bezprostředně vyšší vrstvě, zde si můžeme představit že jde o služby typu „přijmi bit" a „odešli bit". Uživatel těchto služeb (bezprostředně vyšší vrstva , tj. vrstva linková) se pak již nemusí zabývat tím, jak konkrétně se který bit přijímá či odesílá. Naproti tomu vrstva fyzická se zase nestará o to, co znamenají bity které ona přenáší, tj. nijak je neinterpretuje.

Vrstva linková (data link layer)

Vrstva linková má za úkol přenášet celé bloky dat (obecně označované jako rámce), a to mezi sousedními počítači - přesněji mezi takovými, které spolu mají přímé spojení (nevyžadující „přestup" přes nějaký přestupní uzel). K úspěšnému přenosu celých rámců pak linková vrstva potřebuje zajistit několik dílčích úkolů: například správně vyznačit začátek a konec každého rámce, tak aby jej přijímající strana správně rozpoznala a mohla úspěšně „vybalit" jeho datový obsah. Tomuto se říká zajištění synchronizace na úrovni rámců. Linková vrstva toho může dosáhnout buď tak, že začátek a konec každého rámce indikuje celými speciálními znaky (pak jde o použití tzv. znakově orientovaných protokolů), nebo prostřednictvím speciální bitových sekvencí (v případě tzv. bitově orientovaných protokolů, které dnes jednoznačně převažují). V každém případě ale linková vrstva musí zajistit i to, aby se tyto speciální znaky resp. speciální bitové sekvence nevyskytly „uvnitř" přenášených rámců. Tedy zajistit, aby pro každý „kus" přenesených dat bylo jasné, zda jde o užitečná data, nebo o řídící údaj, který například indikuje začátek či konec rámce. Tomuto úkolu se říká zajištění transparence dat.

Dalším důležitým úkolem linkové vrstvy může být zajištění spolehlivosti přenosu - „může" proto, že ne vždy to musí být po linkové vrstvě požadováno (někdy může být dána přednost rychlosti před spolehlivostí, viz diskuse v minulých dílech seriálu). Rámce, které linková vrstva přenáší, jsou vždy opatřeny zabezpečovacím údajem (nejčastěji tzv. CRC kódem), který umožňuje příjemci rozpoznat zda byl rámec při přenosu poškozen či nikoli. Pokud pak linková vrstva nemusí zajišťovat spolehlivost přenosu (resp. není to po ní požadováno), může takovýto poškozený rámce jednoduše zahodit, a dále již se nemusí o nic starat. Pokud je ale již po linkové vrstvě požadováno zajištění spolehlivého přenosu, musí se sama postarat o nápravu - musí si se svým protějškem (odesilatelem) vykorespondovat opakované odeslání rámce, který byl přijat jako poškozený. K tomu ale musí mezi příjemcem a odesilatelem existovat vhodný mechanismus tzv. potvrzování, umožňující sdělovat které rámce byly doručeny v pořádku a které nikoli.

Dalším úkolem linkové vrstvy je pak správné dodržování „tempa" přenosu - tedy toho, aby příjemce stačil přijímat všechno to, co mu odesilatel posílá. Zde ani tak nejde o rychlost přenosu jednotlivých bitů (zde příjemce jednoduše „musí stíhat"), jako spíše o schopnost příjemce zpracovat celé přijaté rámce. Pokud by například příjemce neměl přijímané rámce kam ukládat (neměl by právě k dispozici dostatečně velké vyrovnávací paměti), musel by úspěšně přijatá data okamžitě zahazovat, a to by jistě nebylo v pořádku. Příjemce by tedy měl mít možnost diktovat tempo přenosu jednotlivých rámců, podle svým momentálních dispozic, pomocí vhodného mechanismu pro tzv. řízení toku.

Síťová vrstva (network layer)

Obrázek 1.
Tři nejnižší vrstvy ISO/OSI
Linková vrstva nabízí své bezprostředně vyšší vrstvě služby typu „odešli rámec sousednímu uzlu", resp. „přijmi rámec od sousedního uzlu". Přitom je dobré si zdůraznit, že „sousedním" je zde jen takový uzel, se kterým má daný uzel přímé spojení - přesněji takové spojení, které umožňuje zaslat rámec adresátovi bez toho, že by jej bylo nutné posílat přes nějaký mezilehlý uzel. Co však dělat v případě, kdy je nutné doručit rámec takovému uzlu, se kterým není přímé spojení, ale pouze spojení nepřímé, vedoucí přes jeden nebo několik přestupních uzlů? Pak musí nastoupit někdo, kdo „zná" celou topologii sítě a je schopen stanovit, kudy (přes které přestupní uzly) má být daný rámec postupně přenášen, tak aby se nakonec dostal ke kýženému cíli. No a to jsme si již popsali hlavní úkoly síťové vrstvy.

Je to tedy síťová vrstva, kdo rozhoduje o tom, kudy (jakou cestou) budou postupně přenášena data, která se mají dostat k určitému konkrétnímu adresátovi. Síťová vrstva tedy provádí rozhodování, kterému se obecně říká „směrování" (routing) - podkladem pro toto rozhodování je znalost úplné topologie sítě (někdy postačuje i znalost neúplná), a výsledkem rozhodnutí je směr, kterým má být přenos uskutečněn, resp. posloupnost takovýchto směrů (celá postupná cesta od odesilatele k příjemci). Praktická aplikace směrování může být dosti různá - je například možné nejprve „vytyčit cestu" mezi příjemcem a odesilatelem, a pak všechna data posílat touto cestou (v případě tzv. spojovaných přenosů), nebo je možné rozhodování o směru přenosu provádět pro každý přenášený blok dat vždy znovu, dokonce znovu v každém přestupním uzlu (v případě tzv. nespojovaných přenosů).

V každém případě ale síťová vrstva přenáší bloky dat, kterým se obecně říká pakety (packets). Ve skutečnosti však síťová vrstva tyto pakety sama fyzicky nepřenáší, ale předává je k přenesení vrstvě linkové. Ke svému požadavku samozřejmě musí vždy připojit i výsledek svého rozhodnutí o směru, kterým má být paket odeslán.

Směrování, které síťová vrstva provádí, přitom může vycházet z různých filosofií, a může používat různé algoritmy pro hledání nejvhodnějších cest od příjemce k odesilateli. Je přitom možné, aby tyto algoritmy vycházely z údajů o topologii, které budou v jednotlivých uzlech fixovány a nebudou se v čase měnit - což v reálné praxi, kdy k určitým změnám topologie přeci jen občas dochází, nemusí být zrovna optimální. Proto je častější spíše takový způsob směrování, který počítá s průběžnou aktualizací údajů o topologii sítě, neboli s dynamickým šířením směrovacích informací. Pak ale musí být na úrovni síťové vrstvy přesně definováno jak, kdy, v jakém tvaru atd. si jednotlivé uzly budou mezi sebou potřebné směrovací informace vyměňovat.