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 ;-)

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • jucek.xlx.pl






  • Formularz

    POst

    Post*

    **Add some explanations if needed