Wydawałoby się, że na temat formatu nagłówka ramki Ethernet nie da się zbyt wiele powiedzieć. Jego konstrukcja jest stosunkowo prosta i przejrzysta, składa się z zaledwie kilku pól o łatwych do zrozumienia przeznaczeniach. I można by w sumie ten temat zakończyć już w tym momencie, gdyby nie fakt, że możemy się spotkać aż z trzema różnymi formatami ramki Ethernet! Skąd taka różnorodność? Dlaczego akurat trzy? Czym one się różnią…? No to po kolei…
Początki Ethernetu i format DIX
Jednym z autorów protokołu Ethernet był Robert Metcalfe, pracownik Xeroxa. Na początku lat 80-tych ubiegłego wieku nad standaryzacją Ethernetu pracowały głównie trzy firmy: Digital, Intel oraz wspomniany już Xerox. Stąd też opracowany przez nich format ramki Ethernet nazywamy potocznie „Ethernet DIX”. Pierwsza wersja tego standardu została opublikowana w 1980 roku, natomiast dziś używamy wersji drugiej zrewidowanej przez IEEE – stąd też powszechna nazwa Ethernet II. Warto również wspomnieć, że jest to najczęściej dziś spotykany format ramki Ethernet.
Konstrukcja nagłówka ramki jest bardzo prosta, dlatego też nie będę omawiał poszczególnych pól, a skupię się jedynie na polu Type/Length. Wartość tego pola w specyfikacji Ethernet II (DIX) określa nam zenkapsulowany protokół warstwy trzeciej. Najczęściej spotykaną tam wartością będzie oczywiście 0x0800 – czyli IP. Dlaczego zatem, pole to nie zostało po prostu nazwane Type? Odpowiedź pod koniec artykułu 🙂
IEEE Ethernet 802.3
W tym samym czasie gdy DIX pracował nad swoją wersją Ethernetu, IEEE podejmowało już pierwsze kroki w kierunku standaryzacji tego protokołu. Prace w IEEE rozpoczęły się w lutym 1980 roku – stąd też numer grupy roboczej 802, gdzie podgrupa 802.3 jest dedykowana Ethernetowi. To właśnie w tej wersji standardu pojawia się po raz pierwszy CSMA/CD.
Ramka w oryginalnym standardzie Ethernet 802.3 różni się nieco od tej zaproponowanej przez DIX:
Zauważyć można m.in. następujące różnice:
- 8-bajtowa preambuła została rozbita na 7-bajtową preambułę i 1-bajtowy Start of Frame Delimiter. Pomimo to w obu przypadkach mamy do czynienia z takim samym wzorcem bitowym: ciągiem naprzemiennych zer i jedynek, zakończonym dwoma jedynkami.
- Pole Type/Length zostało zastąpione polem Length, które określa ilość bajtów między tym polem, a polem FCS. Więcej na temat tego pola na koniec artykułu.
- Dodano elementy podwarstwy LLC (802.2) – pola DSAP (Destination Service Access Point), SSAP (Source Service Access Point) oraz Control. W tym artykule skupimy się jedynie na polu DSAP – to właśnie ono określa zenkapsulowany protokół warstwy trzeciej. Pole to jest 8-bitowe, z czego jeden bit jest zarezerwowany do innych zastosowań. Pozostaje więc jedynie 7 użytecznych bitów. Po jakimś czasie okazało się, że 7 bitów to za mało aby za pomocą tego pola identyfikować wszystkie nadrzędne protokoły.
IEEE Ethernet 802.3 z nagłówkiem SNAP
Gdy IEEE zorientowało się jak bardzo ograniczający jest rozmiar pola DSAP, postanowiło wydać kolejną wersję Ethernet. Dodano w niej nagłówek określany nazwą SNAP (Subnetwork Access Protocol). Zawiera on dwa pola: OUI oraz Type:
Pole Type ma w zasadzie dokładnie takie samo zastosowanie jako pole Type/Length w ramce Ethernet DIX. Widać zatem, że IEEE trochę się zagalopowało w rozwijaniu własnej specyfikacji Ethernet. Co prawda SNAP oferuje pewne rozwiązania, które się nadal stosuje po dziś dzień – ale jest to temat na osobny artykuł.
IEEE dostrzega elegancję specyfikacji DIX…
…i w 1997 roku wypuszcza wspomniany w pierwszym punkcie standard Ethernet II wzorowany dość mocno na oryginalnym formacie DIX 😉 I historia zatoczyła koło. Warto mieć na uwadze, że wszystkie wymienione tu standardy używane są do dziś, przy czym najczęściej będziecie spotykać ramki w formacie Ethernet II. Pozostaje zatem pytanie: w jaki sposób NIC rozróżnia z jakim formatem ramki ma do czynienia? W tym miejscu wracamy do pola Type/Length w ramce Ethernet II. Jeśli wartość tego pola to 1536 lub więcej to jest to format Ethernet II i liczba ta reprezentuje typ danych zenkapsulowanych w tej ramce. Jeśli jest to mniej niż 1536 to pole to traktowane jest jako Length, a NIC interpretuje format ramki jako oryginalny IEEE 802.3. Idąc dalej mamy pola LLC 802.2 – jeśli DSAP oraz SSAP mają wartość 0xAA to jest to wskazówka dla NICa, że po polu Control znajduje się nagłówek SNAP. I tak oto doszliśmy do trzeciego rodzaju nagłówka 🙂
Ramka Ethernet w Wireshark
Wireshark jest narzędziem, które umożliwia przechwytywanie ruchu sieciowego i jego szczegółową analizę. Pozwala również rozłożyć na czynniki pierwsze ramkę Ethernet. Ale czy na pewno? Przeczytasz o tym w naszym darmowym NSSletterze – mailingu dla sieciowców głodnych wiedzy.
Dołączając uzyskasz dostęp również do archiwum – tematykę tego artykułu rozszerzyliśmy w NSSletterze 041. Rozwiń swoją wiedzę już teraz i zapisz się używając formularza poniżej.
Bardzo ciekawy zbiór bezużytecznych informacji 🙂 Ale w imieniu pasjonatów sieci dziękuję 😉
Niestety, ale właśnie tego typu bezużyteczne informacje są egzaminowane na CCIE Written…
Dlaczego bezużytecznych? Nie jestem pasjonatem sieci, nie mam ochoty być administratorem itp. Wszedłem tutaj podczas jazdy autobusem, bo po prostu nagle zaczęło mnie interesować w jaki sposób działa ethernet i ogólnie przesył danych przez sieć. Teraz już wiem znacznie więcej 😉