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

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

Část XVIII. : Není most jako přepínač

Problematika vzájemného propojování počítačových sítí, alias tzv. internetworkingu, má celou řadu zajímavých a specifických částí. Jednou z nejatraktivnějších a nejčastěji přetřásaných "podkapitol" je ta, která se zabývá rozdíly mezi mosty (anglicky: bridge) a přepínači (anglicky: switch). Takže v čem se mosty a přepínače vlastně odlišují, a kdy je vhodnější použít most a kdy přepínač?

Abychom správně porozuměli obsahu dnešního dílu, musíme si nejprve stručně zopakovat něco z toho, o čem jsme si povídali minule. Tehdy byla řeč o základech internetworkingu, a my jsme se seznamovali s tím, jak se říká propojovacím prvkům v závislosti na tom, na jaké vrstvě fungují:

  • opakovač (anglicky: repeater) je to, co propojuje kabelové segmenty na úrovni fyzické vrstvy.
  • most (bridge) a přepínač (switch) fungují na linkové vrstvě
  • směrovač (router) funguje na úrovni síťové vrstvy
  • brána (gateway) funguje na aplikační vrstvě

Sdílená přenosová kapacita

O opakovačích jsme si říkali, že jsou to vlastně jen pouhé digitální zesilovače, které vnímají jednotlivé bity, ale už se nezabývají tím, zda tyto bity nějak patří k sobě (například zda tvoří nějaký linkový rámec). Proto si ani nemají z čeho odvodit, kterým směrem (do kterého segmentu) by konkrétní bity měly být předány, a kam by už naopak nemusely být předávány. Opakovače se proto musí chovat ke všem bitům stejně, a to rozesílat je ("opakovat") do všech segmentů, které jsou na ně napojeny.

Takovéto chování opakovačů má ale zajímavé a významné důsledky. Představme si třeba situaci podle dnešního prvního obrázku, na kterém jsou vyobrazeny dva segmenty po dvou uzlech, vzájemně propojené pomocí opakovače.

Nevýhoda propojení dvou segmentů pomocí opakovačů: provoz v jednom segmentu zbytečně zatěžuje provoz ve druhém segmentu

Pokud budou v jednom z těchto segmentů vzájemně komunikovat dva zdejší uzly (na obrázku uzly A a B), bude opakovač tuto jejich vzájemnou komunikaci zbytečně předávat také do druhého segmentu. Kvůli tomu už ale v tomto druhém segmentu nebude moci probíhat (ve stejném čase) žádná jiná komunikace. Přesněji: pokud by se ve stejné době pokoušely spolu komunikovat zdejší dva uzly (C a D), jejich data by se "střetla" s daty, které si vzájemně předávají uzly A a B, a všechna přenášená data by se přitom znehodnotila. V Ethernet se tomu k říká kolize.

Praktický důsledek je pak ten, že při propojení pomocí opakovačů se všechny uzly ve všech propojených segmentech společně dělí o dostupnou přenosovou kapacitu. Například u klasického desetimegabitového Ethernet by to znamenalo, že by se všechny uzly dělily právě o těchto 10 Mbit/s. Na každý "vysílající" uzel, resp. komunikující dvojici uzlů, by tak připadla jen n-tá část takto sdílené přenosové kapacity.

Pamatujme si tedy podstatný závěr: propojení na úrovni fyzické vrstvy, prostřednictvím opakovačů, vytváří sdílenou přenosovou kapacitu. Segmenty sítě, které takto vznikají, jsou sdílenými segmenty, ve kterých se všechny uzly společně dělí o dostupnou přenosovou kapacitu.

Od sdílené kapacity ke kapacitě vyhrazené

Vytvářet sdílené segmenty je relativně nejlacinější (oproti nákladům na propojování na vyšších vrstvách), a to by mohlo svádět k tendenci vytvářet co možná největší sdílené segmenty (ve smyslu: s co největším počtem uzlů). Jenže to má zásadní háček, kterým je samotná podstata sdílené kapacity: čím více uzlů se bude dělit o jednu společnou kapacitu, tím hůře, protože pak na každý z nich připadne menší podíl na této kapacitě.

Ovšem požadavky, kladené na dnešní počítačové sítě, jsou většinou přesně opačně: aby na každý uzel připadala co možná největší přenosová kapacita, resp. co možná největší podíl na dostupné přenosové kapacitě. V optimálním případě by to mělo vypadat tak, aby každá komunikující dvojice uzlů měla jen a jen pro sebe veškerou dostupnou kapacitu, o kterou by se již nemusela s nikým dělit. Například u již zmiňovaného desetimegabitového Ethernet by to znamenalo, že každá komunikující dvojice by měla jen a jen pro sebe oněch 10 Mbit/s. Pak se dalo hovořit o tzv. vyhrazené přenosové kapacitě.

Vyhrazená přenosová kapacita je ale něčím, co je vhodné chápat spíše jako jakousi metu, či ideální cílový stav. Za určitých podmínek se k němu lze skutečně dostat, a záhy si ukážeme jak. Dosažení skutečně vyhrazené kapacity je ale relativně nákladné, a zdaleka ne vždy se vyplatí. Proto mají smysl, a v praxi jsou dokonce nejvíce rozšířené různé kombinace na pomezí mezi oběma extrémy, mezi sdílenou a vyhrazenou kapacitou. Ty se většinou snaží poskytnou co nejvíce přenosové kapacity (tj. na "vyhrazené" bázi) těm nejvytíženějším uzlům, zatímco ty méně vytížené se naopak musí smířit s menší přenosovou kapacitou na sdílené bázi. V zásadě vždy jde o klasický kompromis mezi cenou a požadovaným efektem.

Zpět ale k mostům a přepínačům: jak si záhy naznačíme, obě tato zařízení už umožňují přecházet od sdílené přenosové kapacity ke kapacitě vyhrazené. A asi nejzásadnější rozdíl mezi nimi je v tom, jak daleko lze s nimi na této cestě dojít. V případě mostů, které jsou historicky starší, lze dojít jen nepříliš daleko. Zato v případě přepínačů lze dojít naopak hodně daleko, v optimálním případě až k samému cíli: ke skutečně plně vyhrazené kapacitě.

Jak zastavit sdílení?

Cesta, vedoucí od sdílené kapacity k vyhrazené přenosové kapacitě, začíná u toho, jak propojit mezi sebou dva (či více) sdílených segmentů, ale přitom nevytvořit nový a ještě větší sdílený segment. Jde tedy vlastně o to, jak "zastavit" další sdílení, při propojování jednotlivých (sdílených) segmentů.

Snad není těžké nahlédnout, že k takovémuto propojení už nemůžeme použít opakovače. Důvodem je neoptimální chování opakovače, které jsme si popisovali výše: opakovač nedokáže poznat, že určitý provoz by mohl zůstat lokální ve "svém" segmentu, a tak jej (zbytečně) šíří i do dalších segmentů. Tím vlastně "zachovává" sdílenou přenosovou kapacitu.

K tomu, abychom dokázali zastavit sdílení přenosové kapacity mezi jednotlivými segmenty, je musíme propojit prostřednictvím inteligentnějšího zařízení, než je opakovač. Musí to být takové zařízení, které již dokáže poznat, odkud data přichází (kdo je jejich odesilatelem) a kam směřují (kdo je jejich příjemcem). Podle toho se pak musí umět správně rozhodnout, jak s nimi naložit.

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

  • filtering (filtrování): kdy data mohou zůstat lokální v segmentu kde vznikla, a nemusí být šířena dál do dalších segmentů. Jinými slovy: takováto data může propojovací zařízení zastavit, resp. odfiltrovat, a dále se jimi nemusí zabývat.
  • forwarding (cílené předávání): zde již je, na rozdíl od filtrování, zapotřebí data předat dál, do některého z dalších segmentů. Nikoli do všech ostatních segmentů (kterých může být více), ale jen do toho, kde se nachází příjemce dat. Proto se také hovoří o "cíleném" předávání, které vyžaduje aby propojovací uzel uměl správně identifikovat cílový segment.

Představa forwardingu a filteringu

Opakovače nemohou zajišťovat ani filtering ani forwarding už jen proto, že nemají z čeho získat výchozí informace o odesilateli a příjemci. Všímají si jen jednotlivých bitů - a na této úrovni skutečně "nejsou vidět" žádné adresy odesilatelů a příjemců, ze kterých by se dalo vycházet.

K tomu, aby propojovací zařízení dokázalo rozpoznat, kdo je odesilatelem a kdo příjemcem konkrétních dat, už si musí umět poskládat jednotlivé bity do větších celků (bloků). Nejméně do linkových rámců (anglicky: frames), jak se říká blokům přenášeným na úrovni linkové vrstvy. Musí také rozumět formátu těchto rámců, tak aby si v nich dokázalo najít adresu odesilatele a adresu příjemce daného rámce. Pak také musí rozumět významu těchto adres (správně je interpretovat). V neposlední řadě musí takové zařízení vědět něco i o svém nejbližším okolí, hlavně ve kterém segmentu se nachází ten který uzel. To je totiž nutné pro možnost cíleného předávání (forwardingu).

Jinými slovy: k zastavení sdílení již potřebujeme propojovací zařízení, fungující (alespoň) na úrovni vrstvy linkové. Tedy buď most, nebo opakovač. Oba druhy zařízení již požadované schopnosti mají.

Stejného efektu, tedy "zastavení sdílení", však dosahují i propojovací zařízení, fungující na vyšších vrstvách. Tedy například směrovače a brány. Ale ty už jsou zase zaměřeny spíše na jiné úkoly.

Jak funguje most?

Pojďme si nyní ukázat, jak konkrétně dokáží mosty "zastavit" sdílení přenosové kapacity. Představme si to na následujícím obrázku, který ukazuje propojení dvou sdílených segmentů, nejprve pomocí opakovače (vlevo), a pak pomocí mostu (vpravo).

Předpokládejme dále, že spolu komunikují uzly A a B, které se nachází ve stejném segmentu. Při propojení pomocí opakovače (v levé části obrázku) je tento jejich provoz přenášen opakovačem i do druhého segmentu, kde brání současnému provozu dalších uzlů, resp. spotřebovává i "zdejší" přenosovou kapacitu (protože oba propojené segmenty sdílí společnou přenosovou kapacitu).

Ovšem pokud je pro propojení obou segmentů použit most, provoz mezi uzly A a B se do druhého segmentu již nepřenáší. Most zde aplikuje filtering, protože si dokáže odvodit, že jde o provoz mezi uzly A a B, které se oba nachází ve stejném segmentu (na obrázku vlevo). To pak také znamená, že ve druhém segmentu (vpravo) mohou současně komunikovat mezi sebou uzly C a D, a most opět nepropouští jejich vzájemný provoz do prvního (levého) segmentu. Zde jsme tedy již dosáhli vytouženého efektu vyhrazené přenosové kapacity: každá z komunikujících dvojic zde má k dispozici a jen a jen pro sebe celou dostupnou kapacitu. V případě desetimegabitového Ethernetu plných (nominálních) 10 Mbit/s.

Představa rozdílu mezi propojením pomocí opakovače a pomocí mostu, s dosažením efektu vyhrazené kapacity.

Pozor ale na to, že zdaleka nejsme ještě u cíle. Na následujícím obrázku vidíte situaci, kdy ani most nedokáže sdílení zastavit. Stačí k tomu, aby spolu komunikovaly dvojice uzlů, které se nachází v různých segmentech. Zde pak most nemá co filtrovat, a naopak veškerý provoz musí předávat (forwardovat) z jednoho segmentu do druhého. Takže zde se opět všechny uzly dělí o jednu společnou přenosovou kapacitu.

Propojení pomocí mostu, bez dosažení efektu vyhrazené přenosové kapacity

K čemu sloužily mosty?

Propojení na úrovni linkové vrstvy, prostřednictvím mostů, tedy nedokáže spolehlivě zajistit efekt vyhrazené přenosové kapacity. Ostatně, od mostů se to ani moc neočekávalo. Jak jsme si již uvedli, jsou to relativně starší zařízení, která se používala ještě v době, kdy nebyl tak velký "hlad po rychlosti" (vyšší přenosové kapacitě) jako dnes.

Byla to doba, kdy sdílené segmenty byly spíše větší (ve smyslu: s více uzly), a bylo jich o to méně. Velmi častým případem pak byla potřeba propojit pouze dva takovéto sdílené segmenty mezi sebou, a tomu se konstrukce mostů také přizpůsobovala - typické mosty měly jen dva porty a dokázaly propojit jen dva segmenty. I díky tomu se mohly soustředit na filtrování provozu mezi nimi, zatímco s cíleným předáváním měly minimum práce. Pokud totiž zjistily, že konkrétní rámec nemá zůstat lokální (nemá být filtrován), jednoduše jej předaly do druhého segmentu (a nemusely přemýšlet, do kterého). Proto také již výše zmiňovaná optimalizace mostů na filtering.

Proč jsou zapotřebí přepínače?

S postupem času se ale v počítačových sítích "hlad po rychlosti" prosadil dosti razantně, a vyústil mimo jiné i ve zrychlování samotných přenosových technologií. Například Ethernet se díky tomu dočkal stomegabitové verze, posléze i gigabitové atd. Současně se ale začaly hledat i cesty, jak co nejefektivněji využít takto nabízenou přenosovou kapacitu. Tedy cesty k vyhrazení přenosové kapacity, místo jejího sdílení.

Postup byl přitom takový, že dřívější velké sdílené segmenty (s velkými počty uzlů) se začaly zmenšovat, tak aby na každý uzel v rámci segmentu mohl připadnout větší podíl na celkové kapacitě. Obecně se tomuto procesu začalo říkat segmentace, tentokráte ovšem ve smyslu "rozdělování", či "rozčleňování" (na menší části, označované jako segmenty).

Současně se zmenšováním segmentů pochopitelně rostl i jejich počet. Po propojovacích zařízeních se pak požadovalo, aby jich zvládly propojit více než dva, jako tomu bylo typické pro původní mosty. To dalo vzniknout nejprve "víceportovým mostům" (multiport bridges), které se ale záhy přejmenovaly na přepínače (switches).

Představa segmentace a přechodu od mostů k přepínačům

Celý tento trend ale měl ještě jeden zajímavý důsledek. Pokud se totiž segmenty zmenšovaly, tj. klesal počet jejich uzlů, bylo čím dál tím pravděpodobnější, že uzly v jednotlivých segmentech budou chtít komunikovat více s uzly, které se nachází v jiných segmentech. Jinými slovy, lokální provoz v rámci segmentů začal klesat, a stoupat naopak začal provoz, který bylo třeba předávat z jednoho segmentu do druhého.

To ale změnilo i nároky, kladené na propojovací zařízení. Potřeba filtrování ("nepředávání dále") ustupovala spíše do pozadí, protože k němu docházelo méně častěji. Naopak častější začalo být cílené předávání do jiných segmentů (forwarding), a tak začalo hodně záležet na tom, jak dobře a rychle jej přepínač zvládal. Takže zatímco starší mosty byly optimalizovány hlavně na filtering, novější přepínače už musí být optimalizovány na forwarding.

Přepínání, alias switching

Proč ale záleží tolik na tom, jak dobře (rychle) přepínač zvládá cílené předávání do jiných segmentů, alias forwading?

Důvod opět souvisí se snahou poskytnout komunikujícím dvojicím uzlů vyhrazenou přenosovou kapacitu, a ilustruje ho následující obrázek.

Představa fungování přepínače

Všimněme si hlavně části obrázku vlevo, kde spolu komunikují dvojice uzlů, a každý z nich se přitom nachází v jiném segmentu. Žádný z nich tedy nesdílí přenosovou kapacitu s žádným dalším uzlem ve svém segmentu. Znamená to pak, že může se svým protějškem komunikovat "plnou rychlostí", s využitím celé dostupné přenosové kapacity?

To ještě záleží na tom, jak funguje samotný přepínač. Pokud "stíhá" předávat všechna data mezi segmenty včas a nemusí je nějak zadržovat či omezovat, tj. pokud nevytváří "úzké hrdlo", pak komunikující uzly mají k dispozici plnou přenosovou kapacitu, odpovídající vyhrazené přenosové kapacitě. Naopak, pokud by přepínač "nestíhal", zpomaloval (omezoval) by komunikaci všech uzlů. Záleží tedy na celkové propustnosti samotného přepínače.

Pozor ale na to, že ani dostatečně výkonný a rychlý přepínač ještě nemusí postačovat pro dosažení kýženého efektu vyhrazené přenosové kapacity. V předchozím příkladu jsme totiž použili omezující předpoklad, že z každého segmentu komunikuje vždy jen jeden uzel. To ale v praxi nemusí být vždy splněno (viz pravá část obrázku č. 6), a v příslušném segmentu či segmentech pak stále dochází ke sdílení.

Mikrosegmentace

Naštěstí se ale v procesu segmentace (postupného rozdělování segmentů na stále menší části) dá pokračovat tak dlouho, dokud se segmenty nestanou jednouzlovými (dokud nebudou obsahovat jen jeden uzel). Tomuto stavu se říká příznačně: mikrosegmentace, zřejmě ve smyslu rozdělení na nejmenší možné segmenty.

V případě mikrosegmentace už žádné sdílení přenosové kapacity v rámci segmentu nehrozí, neboť není s kým sdílet. V cestě k dosažení plně vyhrazené přenosové kapacity pak stojí už jen dostatečná propustnost přepínače, který jednouzlové segmenty propojuje.

Představa mikrosegmentace

Povšimněme si také toho, že v případě mikrosegmentace (jednouzlových segmentů) už neexistuje žádný lokální provoz, který by se odehrával jen v rámci daného segmentu. Místo toho veškerý provoz směřuje přes propojovací prvek vždy do některého jiného segmentu. To pak také znamená, že propojovací prvek (přepínač) už neprovádí žádný filtering, ale jen samý forwarding. O důvod více pro to, aby byl na něj optimalizován.

Pokud totiž má přepínač "stíhat" a nemá způsobovat žádné zpomalení, musí zvládat přenášet souběžně veškeré datové toky, které jsou k němu připojené uzly schopné generovat. A to už je zase o dimenzování výkonu (přepojovací kapacitě) přepínače, která ani dnes rozhodně není zadarmo.

Jak tomu bývá v praxi

Když už jsme se dostali k ekonomickým aspektům, zůstaňme u nich ještě chvilku. Právě ekonomické důvody totiž rozhodují o tom, zda možnost dosažení plně vyhrazené přenosové kapacity bude skutečně využita, nebo nikoli. Vytváření jednouzlových segmentů je totiž poměrně nákladné (hlavně skrze cenu dostatečně výkonného přepínače), a tak se používá spíše jen u hodně zatížených uzlů, zejména různých serverů. Naopak pro uzly, generující nižší síťovou zátěž (jakými bývají například různé pracovní stanice), se stále využívá přeci jen lacinějšího sdílení přenosové kapacity, resp. sdílené segmenty s více uzly.

Typické řešení, používané v praxi, naznačuje následující obrázek. Ukazuje dva servery, které jsou připojeny přímo na jednotlivé porty (rozhraní) přepínače, a tvoří tak jednouzlové segmenty. Na další porty téhož přepínače pak jsou napojeny sdílené segmenty, tvořené určitým počtem pracovních stanic.

Představa v praxi používaného řešení

Stále tedy jde o určitý kompromis mezi snahou dosáhnout co možná nejvíce vyhrazené přenosové kapacity (pro servery), a nízkými náklady pro připojení pracovních stanic, které musí vystačit se sdílením přenosové kapacity.

Rekapitulace

Zopakujme si na závěr ještě jednou, v čem se mosty a směrovače liší, a v čem se naopak shodují.

Společné mají to, že fungují na úrovni linkové vrstvy, a při své činnosti se rozhodují podle údajů, dostupných na této vrstvě. Tedy především z linkových adres odesilatele a příjemce. Liší se naopak v tom, co se od nich očekává, na co jsou zaměřeny a optimalizovány. Mosty jsou historicky starší, a jsou uzpůsobeny potřebám propojení spíše malého počtu velkých segmentů. Očekává se od nich hlavně to, aby zbytečně nešířily lokální provoz z jednoho segmentu do druhého. Proto jsou optimalizovány hlavně na filtering.

Naproti tomu přepínače jsou novějším druhem zařízení, a očekává se od nich, že umožní rozčlenit síť na libovolně malé segmenty (včetně jednouzlových), a dokáží je propojit a předávat (přepínat) mezi nimi linkové rámce tak rychle, aby bylo dosaženo co možná nejvíce z efektu vyhrazené přenosové kapacity. Proto jsou také přepínače optimalizovány na forwarding, neboli na rychlost cíleného předávání linkových rámců do jiných segmentů.