Vyšlo v týdeníku CHIPweek č. 3/97, 14. ledna 1997
Vytištěno z adresy: http://www.earchiv.cz/a97/a703k150.php3

Přepojování na linkové vrstvě a na síťové vrstvě

V minulém dílu tohoto modulu jsme dospěli k podstatě mechanismu přepojování paketů, který dnes v počítačových sítích jednoznačně dominuje. Zajímavou otázkou, na kterou dnes již neexistuje jednoznačná odpověď, je volba vrstvy, na které má k přepojování docházet: má to být vrstva linková, nebo vrstva síťová?

Na úvod si nejprve připomeňme, co vlastně přepojování obnáší: mezilehlý (přestupní, přepojovací) uzel každý přenášený blok dat (neboli paket) nejprve načte, uloží jej do své vyrovnávací paměti, pak jej analyzuje a rozhodne co s ním, a výsledek svého rozhodnutí pak také vykoná. To většinou znamená, že blok dat odešle dál v určitém konkrétním směru (této činnosti se v angličtině říká forwarding, neboli "předávání dál"). Nebo přestupní uzel také může zjistit, že daný blok dat již nemusí předávat nikam dál, a tak jej jednoduše vymaže ze své vnitřní vyrovnávací paměti (této činnosti se říká filtering, protože zde přestupní uzel vlastně "odfiltrovává" takové bloky, které není nutné šířit dál).

V čem je rozdíl

Jednotlivé druhy přepojovacích uzlů se liší zejména v tom, na jaké úrovni fungují - tedy na jaké úrovni probíhá jejich rozhodování, co dál provést s přijatým blokem dat, a posléze také praktická realizace těchto rozhodnutí. Co se ale přesně rozumí tím, že k přepojování dochází na určité úrovni?

Představme si, že jde o přepojování na úrovni linkové vrstvy, na které jsou přenášené bloky obvykle označovány jako rámce (frames). Příkladem mohou být Ethernetové rámce (Ethernet frames), které budeme dále při našem výkladu předpokládat. Přepojovací uzel fungující na úrovni linkové vrstvy se tedy bude zajímat především o hlavičku Ethernetového rámce a o adresy, které jsou v ní obsaženy - tedy o Ethernetovou adresu příjemce a Ethernetovou adresu odesilatele. Co naopak nebude přepojovací uzel fungující na linkové vrstvě zajímat, je datový obsah Ethernetového rámce - ani například to, zda tento datový rámec patří protokolu IP (a v Ethernetovém rámci je tudíž uložen paket protokolu IP), nebo protokolu IPX apod. (ani komu takovýto paket patří a od koho pochází). Po načtení rámce do své vyrovnávací paměti se pak přepojovací uzel bude rozhodovat podle zmíněných Ethernetových adres, zejména podle Ethernetové adresy příjemce.

Nyní si představme přepojování na úrovni síťové vrstvy, a to v síti, kde linková vrstva opět funguje na Ethernetu. Zde přepojovací uzel nejprve přijme Ethernetový rámec (přesněji: učiní tak jeho linková vrstva), a tento Ethernetový rámec vybalí - tj. extrahuje z něj paket, který je v rámci obsažen. Přitom musí být schopna rozpoznat, o jaký typ paketu jde - zda např. patří protokolu IP, protokolu IPX apod. (na takovéto rozlišení musí být vhodným způsobem pamatováno již na úrovni linkových rámců). Přepojovací uzel (konkrétně jeho síťová vrstva) si pak všímá hlavičky vybaleného paketu, a rozhoduje se podle adresy obsažené v této hlavičce - tedy podle síťové adresy, kterou je například 32-bitová IP adresa (v případě IP paketů).

Rozdílný pohled na svět

Adresy, používané na úrovni linkové vrstvy, jsou typicky jednorozměrnými adresami, které nejsou dále členěny na žádné logické složky, a tvoří tudíž jednorozměrný (lineární) adresový prostor. Například 48-bitové Ethernetové adresy jsou z pohledu mostů a jejich fungování každá jedním velkým (48-bitovým) číslem. To pak odpovídá představě, že na úrovni linkové vrstvy jsou všechna zařízení "na jedné hromadě", resp, jsou součástí jedné velké sítě, nestrukturované na menší, logicky oddělené části. Další důležitou představou, která vyplývá z povahy linkových adres, je představa o tom, že mezi libovolnými dvěma uzly existuje přímé spojení, neboli možnost adresovat každý rámec přímo jeho konečnému adresátovi.

Na úrovni síťové vrstvy se ale pracuje s adresami, které odpovídají poněkud jiné "představě o světě a jeho uspořádání". Zde se počítá s tím, že celý síťový svět tvoří relativně izolované ostrůvky, představující do značné míry samostatné sítě - alespoň v tom smyslu, že každá takováto samostatná síť má jako celek nějaký svůj identifikátor. Jednotlivé uzly pak jsou zapojovány do těchto dílčích sítí, a jejich adresy (tj. síťové adresy) pak mají dvě logické složky: složku, která vyjadřuje (dílčí) síť jako takovou, a pak složku vyjadřující relativní adresu uzlu v rámci dané (dílčí) sítě. S touto představou světa členěného na dílčí sítě pak koresponduje i představa o tom, že mezi jednotlivými dílčími sítěmi je možný přenos jen tehdy, pokud tyto jsou propojeny vhodnými přestupními (propojovacími) uzly. Struktura těchto propojovacích uzly přitom může, ale nemusí mít nějaký řád, resp. systematickou topologii. Důležitým důsledkem, které z této představy vyplývá, je otázka existence přímého spojení mezi kterýmikoli dvěma uzly - pro některé dvojice může přímé spojení existovat (pokud oba spadají do stejné dílčí sítě), nebo nemusí (pokud oba nepatří do stejné dílčí sítě). V tomto druhém případě pak může existovat jen "nepřímá" cesta, vedoucí přes jeden nebo několik přestupních uzlů.

Přepojování na úrovni síťové vrstvy - směrování

Vraťme se nyní k samotnému procesu přepojování, a to na úrovni síťové vrstvy. To samozřejmě musí brát v úvahu existenci dílčích sítí a dvousložkovou povahu síťových adres - už i proto, že příslušné rozhodování by mělo být odvozováno především od té složky adresy příjemce, které vyjadřuje jeho příslušnost k určité konkrétní dílčí síti. Pokud totiž přepojovací uzel zjistí, že konečný příjemce paketu se nachází v takové dílčí síti, se kterou má on sám přímé spojení, může mu příslušný paket poslat přímo. Pokud ne, musí nejprve hledat vhodnou cestu přes další přestupní uzly, která by nakonec dovedla paket až k jeho cíli. Důležité je pak uvědomit si, že k takovémuto hledání cesty je obecně nutná znalost skutečné topologie celé soustavy dílčích sítí (přičemž tuto znalost obecně musí mít každý přepojovací uzel, fungující na úrovni síťové vrstvy).

V běžné praxi se přepojování na úrovni síťové vrstvy říká směrování (anglicky: routing), a zařízení které jej provádí je pak směrovač (router).

Přepojování na úrovni linkové vrstvy

Obrázek 1.
Obr. 1: Představa mostů a směrovačů
Zařízení, které realizuje přepojování na úrovni linkové vrstvy, se obecně označuje jako most (anglicky: bridge). Jeho rozhodování o dalším osudu přijatých rámců je ale výrazně jednodušší než rozhodování směrovače - díky "ploché" (jednorozměrné) povaze světa si most může myslet, že má s každým existujícím síťovým uzlem přímé spojení. Nemusí se tedy zajímat o skutečnou topologii sítě, a stačí mu mnohem "menší" informace: informace o tom, ve kterém směru od něj ten který uzel leží. Zde je nutné si uvědomit, že každý propojovací uzel, aby vůbec něco propojoval, musí mít alespoň dvě síťová rozhraní, resp. alespoň dva možné "odchozí" (ale i "příchozí") směry. Dále je vhodné si uvědomit, že v případě směrovače patří každý tento směr typicky do jiné dílčí sítě, zatímco v případě mostu jde o síťová rozhraní, která spadají do jedné a téže dílčí sítě.

Jednorozměrná představa o světě, která je vlastní všem mostům, samozřejmě není únosná pro hodně velké sítě, resp. hodně velké soustavy dílčích sítí, protože zde by most musel pro své rozhodování mít k dispozici neúnosně velký objem informací. Mnohé z nich by mu dokonce nebyly k ničemu - obecně informace o všech uzlech, se kterými ve skutečnosti nemá přímé spojení (a cesta k nim vede jen přes přepojovací uzly typu směrovačů). Takovéto informace by most nemohl nikdy zužitkovat, a proto není nutné mu je ani poskytovat - mostu tedy stačí "znát" jen uzly té dílčí sítě, ve které se sám nachází, resp. omezit svou představu plochého (jednorozměrného) světa jen na své nejbližší okolí, sahající až po hranice jeho dílčí sítě (vytyčené směrovači).

Obecně pak lze říci, že rozhodování mostu, probíhající na linkové úrovni, bude výrazně jednodušší než rozhodování směrovače, probíhající na úrovni síťové vrstvy. Díky tomu pak mosty budou mít šanci fungovat rychleji, než směrovače, Ale o tom, i o dalších zajímavých důsledcích, si povíme v příštím dílu.