Báječný svět počítačových sítí

1. 2. 2006

Sdílet

Vrstva síťová, která je třetí vrstvou referenčního modelu ISO/OSI (počítánoodspodu), má za úkol dopravovat data přes mezilehlé uzly tak, aby se dostala až ke svým konečným příje...

Vrstva síťová, která je třetí vrstvou referenčního modelu ISO/OSI (počítáno
odspodu), má za úkol dopravovat data přes mezilehlé uzly tak, aby se dostala až

ke svým konečným příjemcům. Aby síťová vrstva něco takového dokázala, musí být

schopna vyhledávat vhodné cesty v síti či v celé soustavě vzájemně propojených

sítí. Tomu se říká směrování, anglicky routing. Zařízení, které směrování

zajišťuje, se označuje jako směrovač, anglicky router.



V našem putování báječným světem počítačových sítí jsme již prošli dvěma

nejnižšími vrstvami referenčního modelu ISO/OSI nejprve nejspodnější vrstvou

fyzickou, pak druhou nejnižší vrstvou linkovou. Přitom jsme si řekli, že vrstva

fyzická má za úkol přenášet jednotlivé bity mezi sousedními uzly, ale nijak je

přitom „neskládá dohromady“, resp. se nezajímá o to, zda více jednotlivých bitů

tvoří nějaký souvislý blok. To zajímá až bezprostředně vyšší vrstvu linkovou,

která využívá přenosových služeb fyzické vrstvy (typu „přenes bit“) a s jejich

pomocí již přenáší celé bloky dat, kterým se na úrovni linkové vrstvy říká

„rámce“ (anglicky: frames).

Linková vrstva ovšem stále ještě přenáší své rámce jen mezi sousedními uzly,

neboli mezi takovými, které mají mezi sebou přímé spojení. Lze si to představit

také tak, že pro linkovou vrstvu je viditelné pouze její bezprostřední okolí

(tvořené sousedními uzly), zatímco o dalších (vzdálenějších) uzlech už nemá

žádné povědomí.

Pokud je ale třeba přenést nějaká data právě k těmto vzdálenějším uzlům, které

již jsou mimo „záběr“ linkové vrstvy (z pohledu odesílajícího uzlu), pak to

linková vrstva neřeší. Místo ní už nastupuje vrstva síťová, která již „dohlédne

dále“ – zná topologii celé sítě či celé soustavy vzájemně propojených sítí a

díky tomu dokáže hledat a nacházet cesty ke kterémukoli cílovému uzlu.



Co je směrování?

Samotnému hledání cesty ke koncovému příjemci, které síťová vrstva zajišťuje,

se říká směrování (anglicky routing). Jde tedy spíše o logickou („rozhodovací“)

funkci, jejímž výsledkem je rozhodnutí o konkrétní cestě pro přenos. Jak záhy

uvidíme, postup tohoto rozhodování může být založen na opravdu různých

principech, přístupech i metodách. Podle toho se pak také hovoří například o

centralizovaném směrování, izolovaném či distribuovaném směrování či směrování

hierarchickém atd.

Samotné rozhodnutí o volbě cesty a s ním i o směru dalšího přenosu (z pohledu

každého uzlu „po cestě“) je ale třeba také konkrétně naplnit. Tedy vzít

příslušný blok dat (paket, jak se mu říká na úrovni síťové vrstvy) a přenést

jej k dalšímu „přestupnímu“ uzlu, případné již k samotnému cílovému adresátovi

(pokud jde již o konec celé přenosové cesty). Tomu se obvykle říká „forwarding“

(v doslovném překladu jakési „předání dále“).

Síťová vrstva ovšem sama o sobě nic nepřenáší. To je pouze iluze, vytvořená

vrstevnatým charakterem dnešních sítí. Ve skutečnosti totiž síťová vrstva předá

svůj paket k přenosu bezprostředně nižší vrstvě, tedy vrstvě linkové. Ta vloží

síťový paket do svého rámce (linkového rámce) a ten pak přenáší. Ovšem ani ona

jej ve skutečnosti sama nepřenáší, nýbrž nechává jeho jednotlivé bity přenést

vrstvou fyzickou. Celé to ilustruje obrázek nahoře.



Přímé a nepřímé směrování, směrovač

Jak jsme již řekli, linková vrstva, které vrstva síťová předává své pakety k

přenesení, „dohlédne“ jen ke svým bezprostředním sousedům, s nimiž má přímé

spojení. V praxi jsou těmito sousedy všechny uzly, které se nachází ve stejné

síti. Pokud se tedy přenáší nějaký síťový paket mezi dvěma uzly v rámci stejné

sítě, pak má samotná síťová vrstva značně usnadněnou práci, protože nemusí

hledat žádné mezilehlé (resp. přestupní) uzly, přes které by měl paket přejít.

Takový paket proto síťová vrstva pouze předá linkové vrstvě, která již je

schopna jej doručit cílovému adresátovi (neboť ten je v jejím přímém dosahu). Z

pohledu síťové vrstvy se tomu říká „přímé směrování“ a zde skutečně má síťová

vrstva minimum práce a nemusí „přemýšlet“.

Složitější je to ale v případě, kdy se koncový příjemce nenachází ve stejné

síti jako právě odesílající uzel. Zde již musí síťová vrstva začít hledat ke

koncovému příjemci vhodnou cestu, vedoucí přes jeden nebo několik přestupních

uzlů. V užším slova smyslu tedy pouze zde, při tzv. nepřímém směrování, provádí

síťová vrstva rozhodování, které jsme si výše označili jako samotné směrování

(routing).

To, co síťová vrstva při nepřímém směrování hledá, je uzel, vedoucí z dané sítě

„ven“, do jiné sítě. Tedy jakýsi „přestupní“, resp. „propojovací“ uzel (který

vzájemně propojuje dvě různé sítě či dokonce více takovýchto sítí). Takovému

uzlu se říká směrovač (router) a v každé síti, která není zcela izolována od

svého okolí, je nejméně jeden. Odpovídá to tzv. katenetovému modelu, v jehož

rámci jsou jednotlivé sítě propojeny pomocí směrovačů do celé soustavy vzájemně

propojených sítí. Na takovém katenetovém modelu je vybudován například dnešní

internet, ale obecně z něj vychází prakticky všechny počítačové sítě.

Každý uzel dané sítě, který chce přenést nějaký svůj paket do jiné sítě (tedy v

rámci nepřímého směrování), musí najít vhodný směrovač, vedoucí „z jeho sítě

ven“. Tomu pak svůj paket „předá dál“.

Celý proces postupného předávání se přitom opakuje tak dlouho, dokud se paket

nedostane ke svému cíli. I každý směrovač, přes nějž paket na své cestě

prochází, se vždy musí nejprve rozhodnout, zda už je konečný příjemce v jeho

přímém dosahu či nikoli. Pokud ano, dochází k přímému směrování (paket je

předán linkové vrstvě k přímému doručení koncovému příjemci). Pokud konečný

příjemce ještě není v přímém dosahu (tedy nenachází se v žádné síti, do které

je směrovač zapojen), pak dochází znovu k nepřímému směrování směrovač hledá

další směrovač (vedoucí do dalších sítí), jemuž by paket předal k doručení.

Výsledkem je pak cesta, tvořená posloupností takovýchto směrovačů. Přes ně

paket postupně prochází, než se dostane ke svému koncovému příjemci. Situaci

ilustruje následující obrázek.



Kdo směruje?

Pro dokreslení celé představy o fungování síťové vrstvy se ještě zastavme u

toho, kdo vlastně provádí směrování, tedy logické rozhodování o směru přenosu.

Činí tak hlavně směrovače, ale nejen ony. Směrování se obecně účastní i ostatní

uzly (koncové uzly), pokud něco odesílají – protože i ony si musí umět vybrat

mezi (potenciálně) více směrovači, které vedou „ven“ z příslušné sítě.

Odesílající uzel se také nejprve rozhoduje mezi přímým a nepřímým směrováním, v

případě nepřímého směrování vybírá vhodný směrovač. Takže i on by měl mít

dostatečné informace na to, aby si při nepřímém směrování dokázal vhodně vybrat.

Například v rodině protokolů TCP/IP, resp. v sítích s těmito protokoly (tedy

například v internetu) je to tak, že každý koncový uzel (každý osobní počítač

atd.) by měl „od narození“ znát alespoň jeden směrovač, vedoucí z jeho sítě

ven. Pravda, existují sice postupy, které by mu umožnily začít fungovat i bez

této znalosti a adresu směrovače si zjistit – ale v praxi se dává přednost

tomu, aby každý uzel dostal předem (v rámci své konfigurace) potřebnou

informaci o alespoň jednom směrovači. Zajímavé je, že snad vždy se pro tento

směrovač používá starší (a dnes již nevhodná) terminologie – říká se mu brána,

anglicky gateway. Většinou „výchozí brána“, respektive default gateway, protože

přes ni jsou přenášeny všechny pakety směřující ven z dané sítě, pokud není

známo, že by měly jít jinou cestou. Příklad nastavení podobné výchozí brány na

počítači s OS Windows opět ukazuje obrázek.

Pokud ovšem výchozí směrovač (výchozí brána) není pro konkrétní cílovou síť tím

správným, měl by to sám poznat a měl by odesílající koncový uzel zpětně o této

skutečnosti informovat. Tedy poslat mu vyrozumění ve smyslu: „Data, určená pro

uzel B, posíláš přes mne nesprávně. Správně by měla přecházet přes směrovač Y,

který je ve tvém dosahu“.

Odesílající uzel, který dostane takové „ponaučení“, by si jej měl vzít k srdci

a měl by se podle něj chovat – příště by už měl svá data posílat přes správný

směrovač. Přitom směrovač, který se nachází v nesprávném směru, by neměl již

přijatá data zahodit. Právě naopak, měl by být co nejvíce tolerantní a postarat

se o jejich správné doručení. A to i v případě, že si jejich odesilatel nevezme

jeho ponaučení k srdci a data stále posílá nesprávným směrem. To vše ale

neplatí obecně, nýbrž jen v rámci sítí na bázi protokolů TCP/IP.



Směrovací tabulky

K tomu, aby se směrovače mohly snáze a rychleji rozhodovat, si udržují potřebné

(směrovací) informace v tzv. směrovacích tabulkách. Jejich obsah, resp.

organizace se může lišit, ale v nejjednodušším případě je takový, jak jej

ukazuje obrázek: každé jednotlivá položka směrovací tabulky je vyhrazena jedné

cílové síti. Součástí položky je pak i informace o tom, jak je cílová síť

daleko, a hlavně kudy (kterým „odchozím“ směrem) je třeba paket předat, aby se

dostal blíže k cílové síti (neboli kudy pokračuje cesta k této cílové síti).

S popisovaným obsahem směrovacích tabulek souvisí ještě jedna důležitá

skutečnost: směrování, jako rozhodování o dalším směru přenosu, vychází z

příslušnosti cílového uzlu k určité síti. Jinými slovy: směruje se podle sítě a

nikoli podle konkrétního uzlu. Proto také jsou jednotlivé položky směrovacích

tabulek (alespoň v TCP/IP) vyhrazeny celým cílovým sítím a nikoli jednotlivým

uzlům v těchto cílových sítích. Jinak by totiž počty položek ohromně narostly.

Odpovídá to ostatně i rozdílu mezi přímým a nepřímým směrováním: po celé trase

přenosu probíhá nepřímé směrování a v každém kroku se zajišťuje přenos do další

sítě jako takové (jako celku). Teprve v poslední (cílové) síti se již nejedná o

nepřímé směrování, ale o směrování přímé (v rámci dané sítě). Zde už tedy

směrovací tabulka není zapotřebí, protože doručení konkrétnímu uzlu v cílové

síti zajistí zdejší linková vrstva.

Existence směrovacích tabulek se přitom netýká pouze směrovačů. Mají je i

koncové uzly, protože i ony se podle nich musí rozhodovat při odesílání, přes

který „odchozí“ směrovač data poslat. Jejich směrovací tabulky ale bývají v

praxi podstatně menší. Základem jejich obsahu je informace o existenci výchozí

brány, kterou jsme si popisovali výše. Další položky pak do směrovací tabulky

koncového uzlu přibývají obvykle postupně, na základě „upozornění“ od

směrovače, že správný směr vede jinudy (přes jiný směrovač, viz výše).



Adaptivní a neadaptivní směrování

Pojďme nyní k jinému důležitému aspektu: kdo a jak stanovuje a aktualizuje

obsah směrovacích tabulek směrovačů? Zde už to je totiž komplikovanější než u

koncových uzlů.

V úvahu zde připadají dvě základní možnosti:

( Neadaptivní: obsah směrovacích tabulek (směrovačů) je dán apriorně a nemění

se. Pak jej může jednorázově stanovit například správce sítě a veškeré

směrování bude následně fungovat vždy stejně.

( Adaptivní: směrovací tabulky směrovačů jsou na počátku nějak nastaveny, ale

jejich obsah se průběžně aktualizuje, aby odrážel topologii soustavy sítí a

reagoval na její změny.

Každá z těchto dvou variant má samozřejmě své výhody, ale i své nevýhody.

Neadaptivní varianta nevyžaduje žádnou režii na své průběžné udržování (když k

němu nedochází) a je také více odolná vůči případným útokům, které by se

snažily mechanismus směrování nějak nabourat. Proto se používá například tam,

kde jsou zvýšené požadavky na bezpečnost. Nevýhodou neadaptivní varianty je ale

její neschopnost reagovat na změny v síti a její topologii. To při zvýšených

požadavcích na bezpečnost může být i výhodou, ale obecně je to nevýhoda, kvůli

které lze tuto variantu doporučit jen tam, kde lze předpokládat zcela ojedinělé

změny v topologii.

Naproti tomu adaptivní varianta přímo počítá s tím, že bude na případné změny v

topologii reagovat. Takže ji lze využít i tam, kde ke změnám dochází relativně

častěji. Důležité ovšem je, že s touto adaptivností může být spojena i poměrně

velká režie na výměnu aktualizačních informací (informací o změnách v síti).

Zde velmi záleží na tom, jaké varianty směrování (a výměny směrovacích

informací) jsou konkrétně použity. Pojďme se proto podívat, jaké možnosti zde

připadají v úvahu.



Centralizované směrování

Začněme nejprve poněkud specifickou variantou, označovanou jako centralizované

směrování. Jde o řešení, v jehož rámci provádí veškeré rozhodování (o volbě

nejvhodnější cesty) jeden centrální prvek, zatímco všechny směrovače již jen

mechanicky naplňují jeho rozhodnutí. Lze si to představit také tak, že

jednotlivé směrovače přestanou samy přemýšlet a pokud neví, co a jak mají

dělat, zeptají se centrálního prvku. Tomu se říká „route server“, což by se

dalo rozepsat jako „server, poskytující jako službu informace o cestách“. Na

konkrétní dotaz tento server odpoví a směrovač se podle toho zachová. A aby se

při dalším paketu nemusel ptát hned znovu a příliš tak nezatěžoval route

server, každou odpověď si po nějakou dobu pamatuje ve své vyrovnávací paměti a

řídí se podle ní. Tato doba přitom musí být volena velmi pečlivě. Kdyby totiž

byla příliš krátká, pak by se směrovač ptal příliš často a příliš by zatěžoval

route server. Naopak když bude dlouhá, hrozí nebezpečí, že směrovač nebude včas

reagovat na nějakou změnu v topologii. Stále totiž bude vycházet z předchozí

odpovědi route serveru, místo aby si vyžádal odpověď novou, která by již

odrážela příslušnou změnu.

Výhodou centralizovaného směrování je nulová režie na aktualizační informace,

kterými by se jednotlivé směrovače jinak vzájemně informovaly o změnách. Další

významnou výhodou je i soustředění veškeré „inteligence“ do jednoho místa, což

usnadňuje systémovou správu. Na druhou stranu zde ale vzniká „klíčové místo“, s

jehož výpadkem se celá soustava vzájemně propojených sítí stává nefunkční –

jednotlivé směrovače se pak vůbec nedozví, co a jak mají dělat.



Izolované směrování

Další variantou směrování vedle centralizovaného je směrování označované jako

izolované. To proto, že zde se už rozhodují jednotlivé směrovače, ale skutečně

jen samy za sebe, aniž by přitom spolupracovaly s ostatními. Proto přívlastek

„izolované“. Jde ovšem o celou skupinu různých dílčích variant, mezi které

patří mimo jiné:

( záplavové směrování,

( směrování metodou horkého bramboru,

( náhodné směrování,

( metoda zpětného učení a další.

Například záplavové směrování, které je v praxi relativně často používané,

funguje skutečně tak, jak naznačuje jeho název: každý směrovač rozešle přijatý

paket do všech směrů – kromě toho, odkud přišel. Tím vzniká jakási záplava,

která dříve či později dorazí na místo svého správného určení. Současně je ale

nutné správně a korektně eliminovat duplicitní pakety, které při záplavovém

rozesílání vznikají, aby na místo svého určení dorazil každý paket jen jednou.

Výhodou je velká robustnost – pokud existuje alespoň nějaká cesta k cíli, je

tímto způsobem nalezena. A vlastně aniž by směrovače vůbec potřebovaly nějaké

směrovací tabulky.

Pro zajímavost se zmiňme ještě o metodě horkého bramboru. Ta se začíná používat

(jako náhradní varianta) v situaci, kdy se jinak používané směrování dostává do

problémů a směrovači hrozí zahlcení. Když se v některém odchozím směru začínají

hromadit pakety, které směrovač nestíhá odeslat, může nastoupit právě směrování

metodou horkého bramboru – směrovač volí odchozí směr nikoli podle toho, kudy

by měl paket správně pokračovat, ale podle toho, který odchozí směr je právě

nejméně vytížený (tedy kde se „horkého bramboru“ dokáže co nejrychleji zbavit).

Když se pak nebezpečí zahlcení podaří odvrátit, směrovač se zase vrací ke svému

původnímu způsobu směrování.



Distribuované směrování

V praxi nejčastěji používané varianty směrování však spadají do kategorie

„distribuovaných“. To proto, že zde není žádný centrální prvek, který by o

volbě směru rozhodoval (jako je tomu u centralizovaného směrování), ale celé

rozhodování je rozděleno (distribuováno) mezi jednotlivé uzly, které na něm

spolupracují (což je zase odlišnost od izolovaného směrování).

Jednou z variant distribuovaného směrování je takové, které je v angličtině

označováno jako „vector-distance“. To proto, že sousední směrovače si mezi

sebou vyměňují celé své směrovací tabulky, i s jejich obsahem (viz výše).

Každou položku směrovací tabulky si přitom můžeme představit jako vektor, který

říká, že z určitého směrovače se lze dostat do konkrétní cílové sítě takovým a

takovým směrem a že tato síť je tak a tak daleko. Když se pak nějaký směrovač

dozví ze směrovací tabulky svého souseda, že ten je od určité cílové sítě X ve

vzdálenosti Y jednotek, připočítá si k tomu svou vzdálenost od souseda a vyjde

mu, že on se do sítě X dostane (přes svého souseda) se vzdáleností Y+1 jednotek

(například). Právě toto je princip fungování varianty „vector distance“, která

je v praxi (v sítích TCP/IP) realizována například protokolem RIP (Routing

Information Protocol). Ten je ale již poměrně staršího data a v praxi se tolik

nepoužívá.

Používanějším je protokol OSPF (Open Shortest Path First), který ale spadá pod

jinou variantu – nikoli již „vector distance“, ale „link state“. To proto, že

zde si jednotlivé směrovače neposílají mezi sebou žádné vektory se

vzdálenostmi, resp. celé své směrovací tabulky. Místo toho si posílají pouze

informace o tom, že někde existuje nějaké spojení mezi dvěma uzly (směrovači) a

je funkční. Každý směrovač rozešle do celé soustavy vzájemně propojených sítí

(obvykle pomocí záplavového směrování) informaci o tom, kdo jsou jeho sousedé a

zda jsou pro něj dosažitelní (zda spojení mezi nimi funguje). Ostatní

směrovače, když takto „posbírají“ informace o sousedech všech ostatních

směrovačů, získají ucelenou představu o skutečné topologii celé soustavy sítí a

mohou si také samy vypočítat nejvhodnější cestu, odkudkoli kamkoli. Důležité

také je, že aktualizační informace pak stačí posílat jen při nějaké změně

(výpadku spojení či naopak zřízení nějakého nového spojení mezi dvěma

směrovači). Díky tomu je režie na průběžné šíření aktualizačních informací

výrazně nižší než u variant „vector distance“ – a tak je směrování „link state“

(s protokolem OSPF) v praxi použitelné i pro podstatně větší sítě než první

varianta (s protokolem RIP).