Propojování na úrovni linkové vrstvy, mosty a switche
Další z možností vzájemného vzájemného propojování počítačových sítí je realizovat potřebné propojení na úrovni linkové vrstvy, prostřednictvím zařízení označovaných jako mosty (anglicky: bridges), čí přepínače (anglicky: switches). V čem se ale propojení na úrovni linkové vrstvy liší od propojení na úrovni vrstvy fyzické, a v čem jsou jeho výhody?
Jak jsme si již uvedli v minulém dílu, při vzájemném propojení dvou sítí (či spíše síťových segmentů) na úrovni fyzické vrstvy je použit opakovač jako zařízení, fungující na úrovni fyzické vrstvy - tedy zařízení, které si všímá pouze jednotlivých bitů, ale nezajímá jej význam těchto bitů. Takovéto zařízení si nedokáže domyslet, že určité bity patří "k sobě", a tudíž ani to, že tvoří ucelený blok (přesněji přenosový rámec), který v určité své části obsahuje adresu svého příjemce a adresáta. K tomu, aby propojovací zařízení mohlo využít tyto údaje (zejména adresu odesilatele a příjemce), muselo by "rozumět" formát formátu přenášených bloků dat - a to je možné pouze tehdy, pokud propojovací zařízení pracuje alespoň na úrovni linkové vrstvy (na které se přenášeným blokům říká rámce).
Místo toho opakovač, jako propojovací zařízení fungující na úrovni fyzické vrstvy, nemá k dispozici žádné údaje o původu a místu určení přenášených dat, a nemůže tomu ani přizpůsobit své chování - musí tedy propouštět skrz sebe a "rozesílat" na všechny strany úplně všechno, včetně tzv. kolizí. A tomu je v mnoha situacích vhodné a potřebné zabránit, zejména proto aby provoz v jedné části sítě zbytečně neovlivňoval provoz v jiné části sítě (zejména nespotřebovával dostupnou přenosovou kapacitu).
Mosty a přepínače rozumí rámcům
Jedním aspektem je aspekt časový, který jsme již diskutovali v 6. dílu předchozího modulu: má si propojovací zařízení počkat, až načte celý rámec, pak se v klidu rozhodnout a své rozhodnutí realizovat, nebo se má snažit zareagovat co nejrychleji to bude možné, tedy již po načtení takové části rámce, která postačuje k základnímu rozhodnutí? První variantu jsme si popisovali jako princip "store & forward", a říkali jsme si, že takto pracují zejména mosty - jako historicky starší varianta propojovacích zařízení fungujících na úrovni linkové vrstvy. Druhé variantě pak odpovídá princip "cut through" (viz 7. Modul, 6. díl), se kterým se lze setkat u některých přepínačů (switchů), zatímco jiné pracují na principu "store&forward".
Podle čeho se rozhodovat?
Dalším důležitým aspektem je samotný proces rozhodování: z čeho má vycházet propojovací zařízení v okamžiku, kdy se má rozhodnout zda určitý konkrétní rámec má jednoduše zahodit, nebo zda jej má odeslat dál, a do kterého segmentu, ev. segmentů? Zde je nutné si uvědomit, že správné a efektivní rozhodnutí nevyžaduje pouze znalost adresy příjemce a odesilatele, ale také znalost topologie sítě. Jak jinak by se měl most či switch rozhodnout, kdyby nevěděl ve kterém segmentu se nachází ten který konkrétní příjemce a ten který odesilatel?
Jedním možným přístupem by bylo předem informovat most či switch o tom, jaká je topologie sítě ve které se nachází - například vhodným nakonfigurováním jeho interních tabulek, které by posléze ke své rutinní činnosti využíval. Rozšířením této možnosti by bylo dát mu komunikovat s ostatními mosty či switchi a vzájemné součinnosti si průběžně aktualizovat informace o skutečné topologii sítě. Právě takovéto řešení se typicky používá "o patro výše", tedy na úrovni směrovačů a propojování na úrovni síťové vrstvy - ale na úrovni mostů, switchů a propojování na linkové vrstvě se nepoužívá. Důvody je třeba hledat především v rozsahu toho, co je třeba znát o skutečné topologii sítě: jak uvidíme příště, směrovač musí znát topologii skutečně celé sítě, nejen svého nejbližšího okolí. Naproti tomu mostu či switchi stačí znát jen topologii sítě ve svém bezprostředním okolí (konkrétně k nejbližším směrovačům), zatímco topologie ostatních částí sítě není pro práci mostu a switche relevantní.
Samoučící se mosty
Při úvahách o fungování mostů a switchů je vhodné vzít do úvahy ještě jeden významný aspekt - co by se stalo, kdyby most či switch neměl k dispozici žádnou informaci o topologii sítě? Mohl by stále ještě fungovat korektně v tom smyslu, že by data doručil tam kam skutečně patří - tím, že by příslušné rámce rozesílal do všech stran, na principu záplavy. Nebylo by to sice zrovna moc efektivní, ale na druhé straně to otevírá zajímavé možnosti pro tzv. samoučící se mosty (self-learning bridges).
Jak již jeho název napovídá, samoučící most se sám naučí to, co potřebuje znát - tedy konkrétní topologii sítě ve svém okolí. Učí se jí z toho, jak mu z různých stran přichází jednotlivé rámce: z adresy jejich odesilatele a z faktu, že daný rámec mu přišel z určitého segmentu, si domyslí kde se příslušný odesílající uzel nachází. Pokud o příjemci ještě nic neví (tj. neví ve kterém segmentu se tento nachází), samoučící most se zachová "panicky" a rámec rozešle na všechny existující strany. Z případné odpovědi si pak ale odvodí skutečné umístění příslušného uzlu, a tak následný provoz již může předávat cíleně jen do příslušného segmentu.
Díky právě naznačenému způsobu fungování je možné realizovat samoučící se mosty jako zařízení bez jakéhokoli konfigurování (na rozdíl od směrovačů), které stačí zapojit do sítě a ponechat jejich osudu. Po krátké fázi počátečního učení již fungují s maximální možnou efektivitou. Jediné, před čím je třeba samoučící se mosty chránit, je existence smyček (cyklů, redundantních cest): takovýto cyklus totiž může způsobit, že jeden a tentýž paket by se k samoučícímu mostu mohl dostat ze dvou různých směrů - a co by si pak měl chudák most domyslet o umístění odesilatele tohoto rámce?
Samoučící se mosty jsou dnes typické pro prostředí Ethernetu (kde se jiné druhy mostů snad ani nevyskytují). Obdobně je tomu i pro switche. Inteligentnější Ethernetové mosty a switche se přitom dokáží vyrovnat i s existencí cyklů, resp. smyček: dokáží je rozpoznat a domluvit se s ostatními mosty na tom, že některý segment uměle vyřadí z provozu a tím cyklus odstraní.
Source routing
Alternativou k principu "samoučení", který se používá hlavně v prostředí Ethernetu, je princip označovaný jako "source routing" (se kterým se lze setkat hlavně v prostředí sítí Token Ring). V prvním přiblížení lze tuto variantu charakterizovat tak, že každý jednotlivý rámec si v sobě nese úplnou informaci o cestě, kterou by měl projít (celý "itinerář") - tuto informaci mu poskytuje již přímo jeho odesilatel (odsud" "source" routing), který ji vloží přímo do hlavičky příslušného rámce. Propojovací uzly (mosty), přes které rámec prochází, pak mají minimum práce - pouze se podívají na příslušné místo do hlavičky rámce, a zachovající se podle toho, co zde najdou.
Veškerou odpovědnost za správnou volbu cesty v této variantě přebírá na sebe odesílající uzel. Ten si přitom potřebné informace o skutečné topologii sítě zjistí prostřednictvím průzkumného rámce, který nejprve vypustí "na všechny strany", a který se šíří na principu laviny (a po dosažení svého cíle se vrací zpět a informuje svého odesilatele o nekratší cestě k cíli).
Princip "source routingu" je jistě zajímavý a v některých situacích může být i docela efektivní. Možná vás ale napadlo, proč se o něm zmiňujeme v souvislosti s přepojováním na úrovni linkové vrstvy, když svou podstatou má mnohem blíže ke směrování, a sám to má dokonce ve svém názvu: "routing" neboli směrování je obvyklé označení pro přepojování na úrovni síťové vrstvy. Faktem je , že "source routing" by skutečně měl patřit do síťové vrstvy, a nikoli do vrstvy linkové, do které byl "zasazen". Pro mnoho lidí je dodnes záhadou, proč se tak stalo .