Twoim problemem jest to, że powszechną NICOŚĆ mylisz z osobistą PUSTKĄ
Â
Zgodnie z nim, odliczając 7 bajtów preambuły oraz 1 bajt wskazujący początek ramki, ramka rozpoczyna się 6 bajtami określającymi docelowy adres MAC, następnie 6 bajtami źródłowego adresu MAC.
Po nim następują dwa bajty pola Typu lub Długości. W zależności od danych zawartych w tym polu traktujemy je jako typ protokołu lub długość ramki. Jeśli wielkość jest z zakresu poniżej 0x0600 określa długość ramki, natomiast wielkość z zakresu powyżej 0x0600 określa typ protokołu warstwy wyższej zawarty w ramce, zgodnie z tabelą przedstawioną poniżej:
Kod:
Â
0000-05DC  IEEE802.3 Length Field (długość pola danych w Ethernet)
0800Â Â Â Â Â Â Â Â Â Â Â Â IPv4Â Â Â Â Â Â Â
0806Â Â Â Â Â Â Â Â Â Â Â Â ARPÂ Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â
0808Â Â Â Â Â Â Â Â Â Â Â Â Frame Relay ARPÂ Â Â Â Â Â Â
6559            Raw Frame Relay      Â
8035Â Â Â Â Â Â Â Â Â Â Â Â Reverse ARPÂ Â Â Â Â Â Â Â Â Â Â Â Â
809B            Appletalk              Â
8100Â Â Â Â Â Â Â Â Â Â Â Â IEEE 802.1Q/p VLAN-tagged frames
814CÂ Â Â Â Â Â Â Â Â Â Â SNMPÂ Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â
823E-8240Â Â Advanced Encryption System
86DDÂ Â Â Â Â Â Â Â Â Â Â IPv6Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â
876B           TCP/IP Compression    Â
876CÂ Â Â Â Â Â Â Â Â Â Â IP Autonomous SystemsÂ
880BÂ Â Â Â Â Â Â Â Â Â Â PPPÂ Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â
8847           MPLS Unicast          Â
8848           MPLS Multicast          Â
8863Â Â Â Â Â Â Â Â Â Â Â PPPoE Discovery StageÂ
8864           PPPoE Session Stage  Â
9000Â Â Â Â Â Â Â Â Â Â Â Loopback
Â
Â
Â
Po polu typu/długości nastepują dane, które w razie potrzeby są dopełniane do wielokrotności bajtów, celem poprawnego wysłania. Na końcu znajduje się 4-bajtowe pole stopki, w której zawiera się kod CRC sprawdzający poprawność danych wysłanych w ramce.
Â
Znając podstawowe informacje dotyczące formatu ramki Ethernet, przeprowadźmy rozkodowanie przykładowej ramki podanej w sposób następujący:
Â
Â
Â
Podana ramka nie posiada pierwszych 8 bajtów, które stanowią preambułę oraz znacznik początku ramki, zatem rozpatrujemy pierwsze sześć bajtów jako adres docelowy MAC. Zgodnie z podaną wyżej ramką wynosi on 00:1e:64:80:a3:6c .
Â
Biorąc kolejne 6 bajtów, zgodnie z ramką, otrzymamy źródłowy adres MAC równy 00:1b:38:5f:8e:60.
Â
Następne 2 bajty stanowią pole Typ/Długość, z którego dla naszego przypadku, wynika, zgodnie z podaną wyżej tabelą, że protokołem opakowanym w ramkę jest IP. Tym samym, aby rozkodować resztę danych, musimy znać format nagłówka IP i wykonać podobne postępowanie, jak przy rozkodowywaniu ramki Ethernet.
Â
EDIT: Z racji dużego zainteresowania rozkodowywaniem ramki, które jednak trzeba dalej wytłumaczyć, przedstawię dalszą analizę na przykładzie ramki podanej niżej:
Â
0: ffff ffff ffff 00d0 b70c 37f9 0806 0001
16: 0800 0604 0001 00d0 b70c 37f9 0a03 3270
32: 0000 0000 0000 0a03 326e 0000 0000 0000
48: 0000 0000 0000 0000 0000 0000
Â
A zatem - zaczynamy!
Â
Pierwsze 14 bajtów zostało omówione wcześniej. Na ich podstawie otrzymaliśmy następujące dane:
FF-FF-FF-FF-FF-FF - docelowy adres MAC (ten konkretny adres oznacza Broadcast)
00-d0-b7-0c-37-f9 - źródłowy adres MAC
0806 - typ protokołu ARP
Â
Do dalszej analizy potrzebny nam będzie format ramki ARP, który przedstawiony jest chociażby na Wikipedii TUTAJ
Pierwsze pole - typ warstwy fizycznej - jest dwubajtowe. Jego wartość zgodnie z naszą ramką to 0001, co oznacza typ Ethernet.
Â
Drugie pole - Typ protokołu wyższej warstwy - jest dwubajtowe. Jego wartość zgodnie z ramką to 0800, co zgodnie z podaną wyżej tabelką, oznacza protokół IPv4.
Â
Trzecie pole - Długość adresu sprzętowego - jest jednobajtowe. Mówi nam ile bajtów zajmuje adres sprzętowy. Na naszej ramce jest to 06 i oznacza, że adres MAC ma 6 bajtów (co się zgadza).
Â
Czwarte pole - Długość protokołu wyższej warstwy - jest jednobajtowe. Mówi ile bajtów zajmuje adres protokołu wyższej warstwy. W naszym wypadku wynosi ono 04 i mówi nam, że adres IP zajmuje 4 bajty - jest to zgodne z prawdą.
Â
Piąte pole - Operacja - jest dwubajtowe. Określa operację ARP, jaka jest zawarta w tym komunikacie. Najczęściej występujące opcje to:
0001 - prośba ARP
0002 - odpowiedź ARP
0003 - prośba RARP
0004 - odpowiedź RARP
Â
W naszym wypadku wartość ta wynosi 0001, więc jest to prośba ARP.
Â
Szóste pole - Adres sprzętowy źródła - ma tyle bajtów ile definiuje nam pole trzecie. W naszym wypadku będzie miało ono 6 bajtów i zawiera adres MAC źródła - 00d0 b70c 37f9, co zgadza się z wcześniej otrzymanymi informacjami.
Â
Siódme pole - Adres protokołu wyższej warstwy źródła - ma tyle bajtów ile definiuje nam pole czwarte. W naszym wypadku ma długość 4 bajtów i zawiera adres IP źródła - 0a03 3270, co w przełożeniu na czytelny adres IP w postaci dziesiętnej z kropkami daje: 10.3.50.112.
Â
Ósme pole - Adres sprzętowy przeznaczenia - ma tyle bajtów ile definiuje pole trzecie. Zawiera adres MAC przeznaczenia. W naszym przypadku: 00-00-00-00-00-00.
Â
Dziewiąte pole - Adres protokołu wyższej warstwy przeznaczenia - ma tyle bajtów ile definiuje pole czwarte. Zawiera adres IP przeznaczenia. W naszym przypadku: 0a03 326e, czyli 10.3.50.110.
Â
I caÅ‚a ramka zostaÅ‚a prawie rozkodowana - zostaÅ‚o jeszcze 18 bajtów, które nie wiadomo po co jest... A jednak - wiadomoÂ
Â
Jeśli spojrzymy na format ramki Ethernet, to zobaczymy, że ramka stosuje w razie potrzeby dopełnienie, celem poprawnego jej przesłania. W naszym wypadku dopełnienie ma właśnie rzeczone 18 bajtów.
Â
Tym samym cała ramka ARP została rozkodowana. Analogiczne operacje można wykonać dla typu protokołu IP, zamieniając format komunikatu ARP formatem datagramu/pakietu IP.
Â
Mam nadzieję, że taki opis wyjaśnił już wszelkie wątpliwości dotyczące rozkodowywania ramek Ethernetowych.
Życzę powodzenia w rozkodowywaniu ;-)