Vyšlo v týdeníku CHIPweek č. 29/97, 29. července 1997
Vytištěno z adresy: http://www.earchiv.cz/a97/a729k150.php3

Formáty Ethernetových rámců

Naše povídání o Ethernetu dnes zakončíme jednou nepříliš světlou kapitolou ze životopisu této fenomenálně úspěšné přenosové technologie - pokusíme se totiž vnést jasno do problematiky Ethernetových rámců.

Ethernet je přenosovou technologií, která funguje především na úrovni linkové vrstvy (druhé nejnižší, ve smyslu sedmivrstvého modelu ISO/OSI), ale pokrývá také nejnižší vrstvu, vrstvu fyzickou. To znamená, že na úrovni této fyzické vrstvy Ethernet přesně specifikuje, jak mají být přenášeny jednotlivé bity, zatímco na úrovni linkové vrstvy musí Ethernet specifikovat, jak spolu jednotlivé bity souvisí, jaké tvoří celky (bloky), jaké mají tyto celky hlavičky a co obsahují (např. jak je v nich vyjádřena adresa příjemce atd.). A právě zde vstupují do hry formáty Ethernetových rámců, jak se správně říká zmíněným celkům (blokům), přenášeným na úrovni linkové vrstvy v prostředí Ethernetu.

V souvislosti s problematikou rámců je vhodné si také zdůraznit jeden fakt: specifikace na úrovni fyzické vrstvy, které se týkají především přenosů jednotlivých bitů, se musí měnit při změně použité přenosové cesty (tedy například při přechodu z tenkého koaxiálního kabelu na kroucenou dvoulinku), nebo při přechodu z desetimegabitového na stomegabitový Ethernet, či dokonce na Ethernet gigabitový. Praktickým důsledkem je pak skutečnost, že musí existovat samostatné dílčí standardy pro různé přenosové cesty a přenosové rychlosti (tj. například standardy 10Base2, 10BaseT, 100BaseTX, 100BaseFX apod.). Naproti tomu při všech změnách a vývojových trendech byl kladen velký důraz na to, aby se na úrovni linkové vrstvy naopak nemuselo vůbec nic měnit. To se přitom týká jak přístupové metody CSMA/CD, která funguje právě na úrovni linkové vrstvy (přesněji na úrovni nižší z obou podvrstev, na kterou se linková vrstva rozděluje), a stejně tak se to týká i formátu Ethernetových rámců, používaných na linkové vrstvě (přesněji na úrovni vyšší z obou podvrstev linkové vrstvy). Právě díky této skutečnosti je pak možné to, aby síťové protokoly i nad nimi provozované aplikace fungovaly nezměněným způsobem bez ohledu na to, jaká varianta Ethernetu je "pod nimi".

Rámec Ethernet II

Nejprve si zkusme rozmyslet, jaké druhy informací by v každém datovém rámci měly být obsaženy. Zcela jistě by tam neměla chybět adresa příjemce, a dále adresa odesilatele. Jelikož v Ethernetu se používají 48-bitové adresy, je potřeba vyhradit na každou takovouto adresu 6 bytů. Dále je nutné nějakým způsobem vyjádřit, co je uloženo "v nákladovém prostoru" datového rámce - zda je tam vložen například síťový paket patřící protokolu IP, nebo paket protokolu IPX apod. Vhodný je i kontrolní součet, pro ověření zda rámec nebyl při přenosu poškozen. Kromě toho je samozřejmě nutné zajistit, aby se jednoznačně poznalo kde datový rámec začíná a kde končí, resp. jak je dlouhý.

Způsobů, jak všechny takovéto informace "poskládat" do jednoho celku (rámce) je samozřejmě více. Svou představu samozřejmě měli již autoři původního Ethernetu ve středisku PARC: jejich řešení naznačuje první část dnešního obrázku (zcela vlevo). Samozřejmě zde neschází adresa příjemce a odesilatele, a z dalších důležitých údajů je vhodné zde zmínit především obsah 12. a 13. bytu, ve kterém se nachází identifikace "užitečného nákladu" (konkrétně identifikace protokolu, kterému patří síťový paket, vložený do Ethernetového rámce). Tento identifikační údaj, tzv. EtherType, je dvoubytovým číslem, a každému síťovému protokolu je centrálně přidělena jedna konkrétní hodnota tohoto EtherTypu (například protokolu IP patří hodnota 0800 hexadecimálně). Podle ní pak implementace linkové vrstvy na straně příjemce dokáže rozhodnout, co má udělat s přijatým Ethernetovým rámcem - komu má předat jeho "užitečný obsah" k dalšímu zpracování.

Dnes je právě popsaný formát rámce, pocházející od původních autorů Ethernetu, stále používán (a dost možná je i početně nejrozšířenější). Formálně je označován jako rámec Ethernet_II (pro jeho souvislost s původní verzí Ethernetu, DIX Ethernetu a Ethernetu II).

Rámec Ethernet 802.2

V úvodu tohoto modulu jsme si říkali, že Ethernet byl vyvinut firmami Digital, Intel a Xerox jako jejich vlastní (proprietární) řešení, ale posléze byl předán standardizační organizaci (IEEE), která z něj vytvořila všeobecný standard. Lidé z pracovních skupin IEEE se však rozhodli pozměnit původní návrh který jim byl předložen - nejmarkantněji snad právě u formátu Ethernetových rámců. Dospěli k závěru, že vlastní Ethernetový rámec nepotřebuje znát údaj o druhu svého nákladu, a místo tohoto údaje pak umístili do hlavičky (do zmíněného 12. a 13. bytu, ve smyslu číslování dle obrázku) údaj o délce rámce.

Rozhodnutí lidí z IEEE samozřejmě mělo logické důvody: předpokládá totiž, že do Ethernetového rámce bude vložen ještě jeden další rámec - odpovídající horní podvrstvě linkové vrstvy, neboli podvrstvě řízení linkového spoje (anglicky Logical Link Control, odsud "rámec LLC"), a připravený pracovní skupinou 802.2 společnosti IEEE. Tento "vnitřní" rámec, označovaný také jako rámec IEEE 802.2, pak již obsahuje údaj o typu svého "užitečného nákladu". Nejde ale o "jednorozměrný" identifikátor jako v případě EtherTypu, ale o identifikaci konkrétní entity (na straně příjemce i odesilatele), která datový obsah vytvořila, resp. má dále zpracovat - ve skutečnosti je příslušný údaj číslem tzv. přechodového bodu (Service Access Point) mezi linkovou a síťovou vrstvou, skrz který byla data převzata k odeslání, resp. mají být předána k dalšímu zpracování.

Logika rozhodnutí IEEE pak dále souvisí s tím, že zmíněný rámec LLC (rámec IEEE 802.2) je společný i pro další přenosové technologie, standardizované společností IEEE (tedy například pro FDDI a Token Ring). Proto změna Ethernetového rámce byla vlastně snahou sjednotit linkové rámce a umožnit snazší návaznost a koexistenci různých přenosových technologií.

Současně s tím ale vznikl zajímavý problém: je vždy možné od sebe spolehlivě odlišit původní rámce Ethernet_II a rámce IEEE 802.3, s vloženými rámci 802.2? Odpověď je naštěstí kladná, a je šťastným důsledkem dvou skutečností: toho, že maximální délka Ethernetového rámce, vyjádřená v rámci Ethernet 802.3 (přesněji velikost jeho užitečného nákladu) je vždy menší nebo rovna 1500, zatímco konkrétní hodnoty EtherTypu, vyjádřené v rámci Ethernet_II, jsou vždy větší. Díky tomu pak oba typy rámců mohou vedle sebe koexistovat "na jednom drátu".

Rámce "raw 802.3"

Obrázek 1.
Srovnání čtyř variant Ethernetových rámců
Aby nejednotností kolem Ethernetových rámců nebyl konec, zavedla firma Novell do svých lokálních sítí ještě další typ Ethernetového rámce, kterému se začalo říkat "raw 802.3" (ve smyslu: "holý 802.3"). Důvodem pro přívlastek "raw" je absence vnitřního LLC rámce 802.2 - zde jde v podstatě o rámec 802.3, do kterého se ale již nevkládá rámec 802.2, který by určoval druh datového "nákladu". Místo toho se příslušný "datový náklad" vkládá přímo do rámce 802.3. V prostředí, kde připadá v úvahu jen jediný druh "datového nákladu" (a to pakety protokolu IPX) to může fungovat.

Dodnes není známo, proč se firma Novell rozhodla pro takovéto řešení. Oficiální vysvětlení není k dispozici, a kuloárové vysvětlení říká, že si někdo špatně přečetl specifikaci rámců 802.3 a nedošlo mu, že se v nich počítá s vkládáním rámců 802.3. Faktem je, že rámce 802.3 byly implicitními (předvolenými) rámci v sítích Novell NetWare do verze 3.x. Od verzí 4.x již firma Novell ve svých produktech implicitně přednastavuje rámce 802.3 + 802.2 (ale podporovány jsou všechny existující typy rámců).

Také rámce "raw 802.3" je možné bezpečně odlišit od ostatních typů rámců díky tomu, že každý IPX paket, vkládaný do těchto rámců, začíná dvěma byty plnými samých jedniček (tj. dvěma byty s hodnotou FF hexadecimálně).

Rámce 802.2 SNAP

Čtvrtým možným typem Ethernetového rámce je rámec 802.3 s vloženým rámcem 802.2 SNAP (od: Subnetwork Access Protocol). Smyslem rámce 802.2 SNAP je rozšířit repertoár možností pro označení "datového nákladu" uvnitř rámce - jestliže "klasický" rámec 802.2 používá k tomuto účelu jediný byte, rámec 802.2 SNAP umožňuje využít až pět bytů. V praxi se ale tato varianta používá nejméně ze všech ostatních.