Hlavní navigace

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

1. 11. 2006

Sdílet

Část XIX: Propojování na síťové a aplikační vrstvě Jedním z nejtěžších úkolů internetworkingu je sprá...


Část XIX: Propojování na síťové a aplikační vrstvě


Jedním z nejtěžších úkolů internetworkingu je správně zvolit velikost jednotlivých sítí. Některé faktory působí na jejich zvětšování, zatímco jiné spíše proti němu. A když už nějaké sítě máme, jak je nejlépe propojit? Kdy použít klasický směrovač (alias router) a kdy raději zařízení zvaná L3 switch, případně L4/7 switch? Jaký problém řeší sítě VLAN?
Problematika vzájemného propojování sítí, tzv. internetworkingu, je značně rozsáhlá a má řadu specifických podkapitol. V minulém dílu tohoto seriálu jsme se například zabývali propojováním na úrovni linkové vrstvy a řekli si o rozdílu mezi mosty (anglicky: bridge) a přepínači (anglicky: switch). Výsledkem pak bylo konstatování, že pomocí přepínačů můžeme maximalizovat propustnost zejména v lokálních sítích (sítích LAN). Konkrétně tak, že uzly, které mají mezi sebou komunikovat co nejrychleji, propojíme právě na úrovni linkové vrstvy, pomocí přepínačů.
Pro nejvíce vytížené uzly, jimiž jsou nejčastěji různé servery, můžeme vyhradit jednotlivé porty přepínačů. Pak má každý server celou přenosovou kapacitu příslušného portu jen a jen pro sebe (jako tzv. vyhrazenou kapacitu). V případě takových "jednouzlových" segmentů pak hovoříme o mikrosegmentaci.
Pro ostatní uzly, které již nemají tak velké nároky, postačí, když budou sdílet jeden port přepínače (i s jeho přenosovou kapacitou) s dalšími uzly. K příslušnému portu se pak připojuje celý sdílený segment, realizovaný s využitím opakovače viz první obrázek (který byl současně posledním obrázkem minulého dílu).

Vliv broadcastu aneb nic se nesmí přehánět

I v počítačových sítích, stejně jako v životě lidském, platí, že nic se nemá přehánět. A to ani počet uzlů, vzájemně propojených na úrovni linkové vrstvy tedy velikost sítě, protože to, co je propojeno na úrovni linkové vrstvy, představuje jednu síť (z pohledu síťové vrstvy).
Pokud by jediným významným faktorem byla pouze propustnost, pak by logika věci skutečně velela používat co největší sítě, resp. co největší soustavy uzlů, propojené jen na úrovni linkové vrstvy pomocí přepínačů. Ale v praxi se uplatňují i další faktory, které působí přesně opačně: omezují velikost jednotlivých sítí a požadují spíše jejich zmenšování než zvětšování.
Jde například o to, že při propojení na úrovni linkové vrstvy musí být šířeno všesměrové vysílání (tzv. broadcast). I přepínače tedy mají povinnost rozesílat všesměrové rámce skutečně do všech směrů (portů), které znají a to okamžitě degraduje efekt vyhrazené přenosové kapacity, o který přepínače jinak usilují. Lavina se zastavuje až na hranici sítě, konkrétně na nejbližším směrovači, protože ten již všesměrové vysílání nepropouští (viz obrázek).
Přitom všesměrové vysílání (broadcast) je dnes velmi oblíbenou a využívanou technikou, například pro objevování dostupných síťových zdrojů. Třeba pracovní stanice, která hledá nějaký server, jej bude hledat tak, že vyšle svou výzvu jako všesměrový (broadcastový) rámec. Ten pak musí být předán do všech segmentů, propojených na úrovni linkové vrstvy lze se pak spolehnout, že pokud takový server v dané sítí existuje, výzva se k němu dostane. Jenže v době, kdy se všesměrový rámec šíří do všech segmentů dané sítě, v nich už žádná jiná komunikace probíhat nemůže.
Obecně přitom platí, že čím více je v dané sítí uzlů, tím větší je pravděpodobnost, že budou generovat nějaké všesměrové (broadcast) rámce, jimiž "zahltí" celou síť. Od určité velikosti sítě by se v ní (kvůli samým broadcastům) už nedalo přenášet vůbec nic jiného. Jde tedy o faktor, který působí proti přílišnému zvětšování sítí (neboli toho, co je propojeno na úrovni linkové vrstvy pomocí přepínačů).

Nebezpečný princip fungování

Dalším faktorem, který rovněž působí proti přílišnému zvětšování sítí, je samotný princip fungování přepínačů. Již v minulém dílu tohoto seriálu jsme si popsali, že přepínače jsou optimalizovány na tzv. forwarding, neboli na cílené předávání linkových rámců do příslušných cílových segmentů a nikam jinam (tedy do žádných jiných segmentů).
Jenže toto platí pouze za předpokladu, že přepínač již zná své okolí a ví, kde se cílový uzel nachází. Pokud tuto informaci nemá, musí se chovat v zásadě jako opakovač: musí rozesílat příslušný rámec do všech směrů (segmentů), které zná (tedy které jsou k němu připojeny). Podrobněji viz vložený článek "Jak se učí samoučící přepínače".
Přepínače tedy fungují na principu: "Pokud nevíš, kam rámec patří, rozešli ho na všechny strany." To ale může být v některých situacích docela nebezpečné. Třeba pokud nějaký uzel, nejspíše v důsledku vlastní chyby, začne opakovaně posílat rámce na neexistující uzly. Pak je všechny přepínače v dané sítí musí šířit do všech stran, stejně jako všesměrové vysílání (broadcast).
Směrovače, které propojují na úrovni síťové vrstvy, fungují na přesně opačném principu: "Předávej dál pouze ty pakety, u kterých víš, kam patří." Proto se v případě chyb a různých nestandardních situací chovají podstatně "bezpečněji" než přepínače. Stejně tak zastavují všesměrové vysílání (broadcast).
Celkově je právě popsaný rozdíl mezi přepínači a směrovači dalším důvodem, proč nedělat sítě (tedy soustavy uzlů, propojené na úrovni linkové vrstvy) příliš velké. Lépe je volit sítě "přiměřeně velké" a propojovat je mezi sebou na úrovni síťové vrstvy pomocí směrovačů.

Ovšem co znamená "přiměřeně velké"?

Homogenita sítí

S volbou "přiměřené velikosti" sítě může pomoci další faktor, tím jsou různé logické vztahy a závislosti. Jde hlavně o otázku přístupových práv a oprávnění uživatelů sítě, které by musí být adekvátně reflektovány. Tedy věci typu "kdo kam smí či nesmí", "kdy tam smí" atd.
Podobná práva a další atributy jsou ale obvykle definovány až na úrovni síťové vrstvy, většinou v závislosti na síťové adrese (např. IP adrese) a nikoli na úrovni linkové vrstvy, kde by musely být vázány na linkové adresy (např. na ethernetové adresy). Velmi často pak jsou tato práva "generalizována" tak, že jsou definována pro celou síť jako takovou, pro konkrétní uzel jsou odvozována podle jeho příslušnosti do konkrétní sítě. Ve smyslu: "Když patříš do té či oné sítě, máš taková a taková práva."
Pak je ale samozřejmě nutné volit velikost sítě tak, aby její uzly, resp. jejich uživatelé vykazovali z hlediska svých požadavků a potřeb určitou homogenitu, což platí i pro práva, která jim jsou přisuzována. To opět působí spíše proti přílišnému zvětšování sítí, jako celků propojených pouze na úrovni linkové vrstvy.
Ne vždy je ale v praxi možné takový požadavek na homogenitu respektovat, zejména kvůli fyzickým dispozicím. Přesto i zde existuje řešení v podobě tzv. virtuálních sítí LAN (VLAN), viz vložený článek.

Práva? Až na síťové vrstvě!

Snaha vytvářet homogenní sítě se stejnými právy a dalšími logickými atributy svých uživatelů, resp. uzlů, má ještě jeden velmi racionální důvod. Je to skutečnost, že přepínače se podobnými "logickými záležitostmi" většinou vůbec nezabývají. Jelikož jsou to zařízení, optimalizovaná na rychlost a usilující o maximální propustnost, už kvůli tomu nemají čas se při svém rozhodování zabývat dalšími věcmi.
Na "podrobnější rozhodování", které bere v úvahu i různá přístupová práva a další omezení, mají čas a kapacitu spíše směrovače, fungující na síťové vrstvě a propojující jednotlivé sítě. Souvisí to i s jejich konstrukcí: jejich "rozhodovací stroj" je většinou implementován softwarově (tedy programovými prostředky) a má tedy více možností, jak brát v úvahu různé logické závislosti, než "rozhodovací stroj" přepínačů, který je kvůli požadavku na maximální rychlost "zadrátován" (implementován v hardwaru) tudíž musí být co možná nejjednodušší.
Zlaté pravidlo 80 : 20
V minulosti existovalo dokonce určité empirické pravidlo, které říkalo, že v "rozumně velké" a dobře navržené síti se asi 80 % všech datových toků odehrává uvnitř sítě a pouze zbývajících zhruba 20 % směřuje z dané sítě ven. Říká se tomu také "pravidlo 80 : 20".
Jinými slovy to také znamená, že nejméně 80 % přenosů musí zvládnout přepínače uvnitř sítě, zatímco směrovače jsou podstatně méně zatížené, když přes ně prochází jen asi 20 % provozu, směřujícího ven. I vzhledem k tomu musí být přepínače optimalizovány na rychlost, zatímco směrovače už mají více času věnovat se přenášeným datům podrobněji a zkoumat i takové věci, jako jsou přístupová práva a další logické záležitosti.
Obvyklým způsobem, jak se poměru 80 : 20 dosahovalo, bylo umístění všech "stejných" uživatelů (resp. jejich uzlů) do stejné sítě a přidání těch zdrojů, se kterými pracují nejčastěji. Takže pokud šlo například o skupinu účetních nějaké firmy, zapojily se jejich počítače do stejné sítě, do které se přidal ještě server provozující příslušnou účetní aplikaci a uchovávající související data. Uživatelé-účetní pak komunikovali hlavně s tímto serverem, případně jen mezi sebou. Ostatní komunikace, směřující již "ven z dané sítě", pak byla podstatně méně častá.

L3 Switching

Jenže dnes, v době internetu a outsourcovaných řešení, je situace jiná. Dnes už i účetní mohou v podstatně větší míře komunikovat i se svým okolím, ať již v rámci firemního intranetu či celosvětového internetu. Nehledě na to, že místo "lokální" účetní aplikace, běžící na serveru ve stejné síti, mohou využívat na dálku aplikace, které běží někde úplně jinde. Například aplikaci, provozovanou v rámci modelu ASP (Application Service Provisioning).
Obecným důsledkem, který samozřejmě platí pro všechny uživatele a ne pouze pro účetní, je pak konec platnosti původního pravidla 80 : 20. Dnes již tento poměr může vycházet úplně jinak, třeba i obráceně. Tedy tak, že většina provozu naopak směřuje ven z dané sítě, jen menší část zde zůstává.
To ale přináší významné změny v požadavcích, kladených na směrovače. Nyní už přes ně prochází podstatně více provozu, který musí "stíhat" zpracovávat dostatečně rychle a tak se tomu musí přizpůsobovat i jejich konstrukce a způsob fungování. V zásadě nejde o nic jiného než o optimalizaci na rychlost, podobně jako u přepínačů (anglicky: switch). Například tím, že rozhodovací logika směrovačů už není implementována programovými prostředky (v softwaru), ale je stále více "zadrátovávána" (zabudovávána do hardwaru).
Výsledkem je pak nový druh zařízení, pro který se ujalo označení "L3 switch" (od "Layer 3 switch", ve smyslu "přepínač na 3. vrstvě"). Z hlediska logiky svého fungování je to stále směrovač, protože funguje na úrovni síťové vrstvy a rozhoduje se právě a pouze podle síťových adres (adres na síťové vrstvě, například IP adres). Ale jeho rozhodovací schopnosti jsou redukovány na nezbytné minimum, které je nutné pro korektní fungování (v zájmu maximalizace rychlosti). Proto již obvykle nezbývá prostor pro respektování dalších logických závislostí, zejména přístupových práv a dalších oprávnění či omezení.

L4 switch

Vedle zařízení, označovaných jako "L3 switch", se v praxi můžeme setkat i se zařízeními zvanými "L4 switch". Proč ale ono "L4", resp. "Layer 4", které odpovídá fungování na úrovni transportní vrstvy?
Jde o to, že při rozhodování o dalším směru přenosu paketu na úrovni síťové vrstvy není možné brát v úvahu to, o jaký druh provozu se jedná. Třeba zda jde o přenos e-mailů (ve světě TCP/IP pomocí protokolu SMTP), WWW stránek (pomocí protokolu HTTP), o přenos souborů přes protokol FTP či o některý z protokolů sítí P2P apod.
Pokud by podobnou informaci směrovače měly, pak by ji mohly využít k odlišnému směrování datových paketů. Například síťové pakety s elektronickou poštou by mohly cestovat jednou cestou, zatímco pakety s WWW stránkami by mohly cestovat jinudy, nebo alespoň s vyšší prioritou.
Jenže nic z toho nejde a se všemi síťovými pakety musí směrovače i "L3 switche" nakládat stejně protože na úrovni linkové vrstvy se nedá poznat, které aplikaci patří jejich obsah. Na síťové vrstvě lze poznat pouze to, kterému transportnímu protokolu patří obsah síťového paketu. Například ve světě TCP/IP lze z IP paketů poznat, zda jejich obsah patří transportnímu protokolu UDP či TCP ale už ne to, kterému aplikačnímu protokolu patří obsah UDP datagramu či TCP segmentu.
K rozeznání e-mailů od webových stránek a dat dalších aplikací je nutné se dostat alespoň na transportní vrstvu, kde již jsou potřebné informace dostupné. Konkrétně v prostředí TCP/IP jde o čísla tzv. portů. Právě ta totiž slouží k určení aplikace, která má přijímaná data převzít (resp. k určení aplikace, jež je na straně odesilatele generovala). Například data, představující HTML kód WWW stránek, lze poznat podle portu číslo 80 (na straně odesilatele), protože právě tento port používají WWW servery. Naopak elektronickou poštu lze poznat podle portu číslo 25, přenos pomocí FTP podle portu 20 atd.
Zpět ale k původní otázce ohledně zařízení "L4 switch": jsou to taková zařízení, která manipulují s přenášenými pakety stále na úrovni síťové vrstvy, ale při svém rozhodování se již "dívají" až na transportní vrstvu
(4. odspodu, počítáno v rámci referenčního modelu ISO/OSI), konkrétně na čísla portů, a podle nich se rozhodují.

L4/7 switch, content switch

Za určitých okolností však ke korektnímu rozpoznání aplikačního provozu nestačí se ani "podívat se" na transportní vrstvu a rozhodovat se podle čísel portů. Třeba proto, že obvyklá konvence o využití tzv. dobře známých portů (well known ports) nemusí být vždy a za všech okolností dodržována. Například WWW server může být z určitého důvodu "posazen" na jiný než tradiční port 80 (například při nějakém testování). Ovšem L4 switch pak nedokáže identifikovat příslušná data jako WWW stránky.
Jindy naopak i L4 switch dokáže správně rozpoznat druh provozu, ale stále mu nerozumí natolik, aby s ním dokázal správně naložit. Například pokud bychom se pomocí L4 switche pokoušeli o tzv. load balancing, neboli o rozložení zátěže mezi několik (jinak identických) WWW serverů, nechali bychom toto zařízení, aby podle momentální zátěže rozdělovalo jednotlivé požadavky na WWW stránky mezi ty právě nejméně vytížené WWW servery. Ovšem takovéto zařízení, které by se "dívalo" jen na čísla portů, by nedokázalo rozpoznat situace, kdy není možné jednotlivé požadavky libovolně "rozhazovat" mezi WWW servery, ale kdy je třeba zachovat určitou kontinuitu (a další požadavky v rámci jedné a téže relace směrovat ke stejnému serveru). To je zapotřebí například při persistentních relacích protokolu HTTP verze 1.0, nebo při použití tzv. Session ID, při zabezpečené komunikaci pomocí protokolu HTTPS i v některých dalších případech, které již přesahují rámec tohoto textu.
Pro nás je zde podstatné spíše ponaučení, že ne vždy si vystačíme jen s "díváním se" na transportní vrstvu. Někdy je zapotřebí analyzovat celý provoz až na aplikační vrstvě (sedmé odspodu, v rámci referenčního modelu ISO/OSI). Je to samozřejmě značně náročné, ale existují zařízení, která to dokáží. Říká se jim příhodně: L7 switch.
Častěji se ale můžeme setkat s označením L4/7 switch, naznačujícím, že jsou využívány informace z obou nejvyšších vrstev TCP/IP (při počítání podle sedmivrstvého modelu ISO/OSI). Někdy se ve stejném kontextu používá i pojem "content switch" (doslova: přepínač, řídící se obsahem). Případně i "web switch", to už je ale zaměřeno specificky jen na sledování přenosu WWW stránek.6 0466/ZAJ o

Jak se učí samoučící přepínače?

Přepínače (stejně jako mosty) mají v popisu práce usilovat o tzv. forwarding, neboli o cílené předávání linkových rámců právě a pouze do těch linkových segmentů, kde se nachází příjemce rámce. Jenže to znamená, že musí dostatečně přesně znát své okolí a vědět, kde je příslušný uzel umístěn. Ale jak se to dozví? Je třeba je nějak konfigurovat (nastavit) a v rámci toho jim poskytnout potřebnou informaci o jejich okolí?
Například v Ethernetu to tak není. Ethernetové přepínače (i mosty) jsou řešeny jako plug&play zařízení, která stačí pouze zapnout a informace o uzlech ve svém okolí si již získají nějak samy. Dokonce se v této souvislosti mluví o "samoučení" ve smyslu, že přepínače se naučí znát své okolí samy.
Konkrétní postup učení je principiálně jednoduchý. Kdykoli přepínač přijme linkový rámec z určitého segmentu, může si z toho odvodit, že jeho odesilatel leží právě v tomto segmentu. Takže když pak někdy později přijme jiný linkový rámec určený stejnému uzlu, přepínač již ví, kde se nachází a může mu linkový rámec cíleně předat (tedy předává ho pouze do příslušného segmentu, kde se příjemce nachází, a nikam jinam).
Otázkou ovšem je, jak se má přepínač zachovat v případě, kdy dosud "není naučen" a neví, kde se příjemce nachází. V takovém případě raději nic neriskuje a rámec vyšle do všech ostatních segmentů (kromě toho, odkud přišel). V této době se tedy chová jako opakovač ale většinou ne příliš dlouho, protože na takovýto rámec obvykle následuje odpověď v opačném směru, ze které se již polohu příslušného uzlu "naučí".
Problémem však jsou cykly v topologii sítě, kvůli kterým přepínač dostane stejný rámec ze dvou směrů a nemůže si pak být jist, kde se nachází odesilatel rámce. Inteligentní přepínače se však dokáží vyrovnat i s touto situací: rozpoznají, že došlo k zacyklení topologie, a ve spolupráci s ostatními přepínači cyklus samy rozpojí.
Pro mosty platí v zásadě totéž jako pro přepínače, Snad jen s výhradou inteligentního chování při detekci a rozpojování cyklů, jímž mosty nejsou jako historicky starší zařízení vybaveny.

Jaký problém řeší sítě VLAN?

Rozdělit konkrétní počítače do jednotlivých sítí podle toho, k čemu a komu slouží, neboli podle logických kritérií, není vždy možné. Obvykle mají navrch "fyzická kritéria", resp. fyzické umístění, dostupnost kabelových rozvodů a vzdálenost od nejbližšího aktivního prvku (opakovače, přepínače či směrovače). Jednotlivé uzly jsou pak zařazovány do sítí podle toho, kde jsou umístěny. Například podle toho, na kterém patře se nachází, jak naznačuje obrázek.
Naštěstí ale existuje řešení v podobě tzv. virtuálních sítí LAN (zkratkou VLAN). Jde o technické řešení, které umožňuje nebrat ohled na fyzické dispozice a rozdělovat uzly do sítí podle jiných kritérií (obecně libovolně). Jak to pak může vypadat, ukazuje druhý obrázek.
Způsob, jak jsou virtuální sítě LAN (VLAN) realizovány, by ale již byl na delší povídání, které si necháme na jindy. Zcela ve zkratce si ale lze představit, že každý linkový rámec nese identifikátor "své" virtuální sítě a podle toho se s ním také nakládá.