Vyšlo v měsíčníku PC World, 11/2006
Vytištěno z adresy: http://www.earchiv.cz/b06/b1100001.php3

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

Čá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í, alias 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 ty uzly, které mají mezi sebou komunikovat co možná nejrychleji, propojíme právě na úrovni linkové vrstvy, pomocí přepínačů.

Pro nejvíce vytížené uzly, kterými 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ýchto "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 dnešní první obrázek (který byl současně posledním obrázkem minulého dílu).

Představa sítě jako soustavy jedno či víceuzlových segmentů, propojených na úrovni linkové vrstvy, pomocí přepínače

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, však 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 dělat co možná největší sítě, resp. co největší soustavy uzlů, propojených 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í - což 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ředstava šíření všesměrového vysílání uvnitř sítě

Přitom všesměrové vysílání (broadcast) je dnes velmi oblíbenou a použí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 - a tak se lze 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ž nemůže probíhat žádná jiná komunikace.

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, kterými "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ý také 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 (tj. 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á (které jsou k němu připojeny). Podrobněji viz box "Jak se učí samoučící přepínače".

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

Přepínače (stejně jako mosty) mají v náplni 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 ten který uzel umístěn. Ale jak se to dozví? Je nutné je nějak konfigurovat (nastavit), a v rámci toho jim poskytnout potřebnou informaci o jejich okolí?

Například v Ethernetu tom 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í", v tom smyslu že přepínače se samy naučí znát své okolí.

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 (tj. předává jej pouze do příslušného segmentu, kde se příjemce nachází, a nikam jinam).

Představa principu samoučení u Ethernetových přepínačů

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émto 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 moc dlouho, protože na takovýto rámec obvykle následuje odpověď v opačném směru, ze které se již "naučí" polohu příslušného uzlu.

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áží i s touto situací vyrovnat: rozpoznají, že došlo k zacyklení topologie, a ve spolupráci s ostatními přepínači cyklus samy rozpojí.

Cykly jsou překážkou samoučení Ethernetových přepínačů

Pro mosty platí v zásadě to samé, jako pro přepínače, Snad jen s výhradou inteligentního chování při detekci a rozpojování cyklů, kterým mosty jako historicky starší zařízení nejsou vybavovány.

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).

To 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ě (tj. soustavy uzlů, propojené na úrovni linkové vrstvy) moc 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 je ono "přiměřeně velké"?

Homogenita sítí

S volbou "přiměřené velikosti" sítě může pomoci další faktor, který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.

Takováto práva a další atributy jsou ale obvykle definovány až na úrovni síťové vrstvy, typicky 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 po celou síť jako takovou, a 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 určitou homogenitu co do svých požadavků a potřeb, a tím i práv, 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ýto 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 samostatný box.

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í, nebývá 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 pak jsou 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 následující obrázek.

Představa rozdělení uzlů do sítí podle fyzických dispozic

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 následující obrázek.

Způsob, jakým 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 v sobě nese identifikátor "své" virtuální sítě, a pekel toho je s ním také nakládáno.

Představa VLAN

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 jím skutečnost, že přepínače se takovýmito "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, a kvůli tomu už nemají čas se při svém rozhodování zabývat dalšími věcmi.

Na takovéto "podrobnější rozhodování", které bere v úvahu i různá přístupová práva a další omezení, mají čas a kapacitu spíše až 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ě (tj. 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), a 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 cca 80 procent všech datových toků odehrává uvnitř sítě, a pouze zbývajících cca 20 procent směřuje z dané sítě ven. Říká se tomu také "pravidlo 80:20".

Řečeno jinými slovy to také znamená, že nejméně 80 procent 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 cca 20 procent 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.

Představa pravidla 80:20

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ě, a do ní 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 nestejné 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í, pak je konec platnosti dřívější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ě, a 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ž skrze 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 skrze to, ž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 pak je 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, označovanými jako "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 do úvahy to, o jaký druh provozu se jedná. Třeba zda jde o přenos emailů (ve světě TCP/IP pomocí protokolu SMTP) , WWW stránek (pomocí protokolu HTTP), o přenos souborů skrze protokol FTP či skrze některý z protokolů sítí P2P apod.

Pokud by takovouto 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 switch-e" nakládat stejně - protože na úrovni linkové vrstvy není 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. Tak 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 rozpoznání emailů 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ě ona totiž slouží k určení aplikace, která si má přijímaná data převzít (resp. k určení aplikace, která je na straně odesilatele generovala). Tak 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 či 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čí ani "dí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 know 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ý port než je 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.

Představa rozkládání zátěže (load balancing) mezi více WWW serverů

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í zařízení L4 switch 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 nejde jednotlivé požadavky libovolně "rozhazovat" mezi WWW servery, ale kdy je třena 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 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 lze vystačit 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ě již značně náročné, ale existují i taková zařízení, která to dokáží. Říká se jim příhodně: L7 switch.

Častěji se ale můžeme setkat i s označením L4/7 switch, naznačující že jsou využívány informace z obou nejvyšších vrstev TCP/IP (ale při jejich počítání dle sedmivrstvého modelu ISO/OSI). Někdy se ve stejném kontextu používá také pojem "content switch" (doslova: přepínač, řídící se obsahem). Případně i "web switch", což už ale je zaměřeno specificky jen na sledování přenosu www stránek.