Na komunikat przesyłany siecią utworzony w oparciu o protokoły TCP/IP składają się:
Nagłówek warstwy łącza danych/fizycznej
Warstwa łącza danych steruje fizyczną wymianą bitów, układa bity w ramki, sprawdza poprawność danych, zarządza warstwą fizyczną. Odpowiada za końcową zgodność przesyłanych bitów z oryginalnie nadanymi. W większości przypadków obie wymienione warstwy połączone są w jedną całość, tworząc w ten sposób kartę sieciową.
Można powiedzieć, że warstwa ta odpowiada zaprzesyłanie informacji w sieci lokalnej i ściśle z siecią lokalną jest związana. Odbija się to na strukturze informacji zawartych w nagłówku: zasadniczo są tam tylko adresy sprzętowe a więc mocno związane z konkretną siecią.
1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ETH DEST ADDRESS =>|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|=> | <=|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|<= ETH SRC ADDRESS |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| TYPE CODE/LENGTH | =>|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|<= DATA |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Znaczenie poszczególnych pól
- ETH DEST ADDRESS (ang. Ethernet Destination Address, 48 bitów) Docelowy adres urządzenia pracującego w sieci Ethernet.
- ETH SRC ADDRESS (ang. Ethernet Source Address, 48 bitów) Źródłowy adres urządzenia pracującego w sieci Ethernet.
- TYPE CODE (16 bitów) Kod określający rodzaj protokołu użytego do przesyłania danych lub ilość danych wyrażona w bajtach.
Minimalna długość tego nagłówka to 14 bajtów. Dla naszego przykładu istotne będą informacje z pól
- ETH DEST ADDRESS a więc bajty 0-5
- ETH SRC ADDRESS a więc bajty 6-11
- TYPE a więc bajty 12-13
Nagłówek warstwy sieci
Warstwa sieci zamienia ciag bitów w kanał komunikacyjny: wyznaczając odpowiednią trasę dba o to aby informacje przepływały między odpowiednimi komputerami. Dane wymieniane są w postaci pakietów wysyłanych od nadawcy do odbiorcy, nie jest jednak sprawdzana ich zawartość. Zaznaczmy, że w tej warstwie informacje przepływają pomiędzy (teoretycznie i czasem praktycznie) różnymi, pod względem budowy fizycznej, sieciami. Stąd też sposób adresowania (wskazywania nadawcy i odbiorcy) musi uniezależniać nas od konkretnych rozwiązań fizycznych. Dlatego na tym poziomie nie używa się adresów fizycznych urządzeń, zależnych przecież od fizycznej budowy sieci, ale pewnych abstrakcyjnych adresów - adresów IP.
Nagłówek warstwy sieci występuje bezpośrednio za nagłówkiem warstwy łącza danych/fizycznej. Składa się on z części stałej (20 bajtowej) oraz części opcjonalnej o zmiennej długości.
1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| VER | IHL | TOS | TL |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ID | F | OFFSET |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| TTL | PROT | CHECKSUM |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SOURCE ADDRESS IP |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| DESTINATION ADDRESS IP |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| OPTIONS ... & PADDING |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| DATA |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Znaczenie poszczególnych pól
Wymienimy tylko te, które będziemy interpretować w naszym przykładzie.
- VER (ang. Version, 4 bity a więc bardziej znacząca połowa, bity od 4 do 7, bajtu 0) Wersja nagłówka IP; określa format nagłówka IP. Wartość równa 4 oznacza standardowy nagłowek wersji 4 protokołu IP.
- IHL (ang.Internet Header Length, 4 bity a więc mniej znacząca połowa, bity od 0 do 3, bajtu 0) Określa długość pakietu IP w 32 bitowych słowach (to znaczy wielokrotnościach 32 bitów; 32 bity to 4 bajty). Minimalna wartość dla poprawnego nagłówka wynosi 5 (stąd mamy, że minimalna długość nagłówka IP wynosi 20 bajtów).
- TL ( ang. Total Length, 16 bitów, bajty od 2 do 3) Długość datagramu a więc długość nagłówka razem z danymi. Największą liczbą jaką na 16 bitach można zapisać jest 65536 (2^16).
- PROT (ang. Protocol, 8 bitów, bajt 9) Określa jaki protokół zawarty jest (jako dane, a więc następuje bezpośrednio po nagłówku IP) w datagramie IP. Wartość 6 oznacza, ze jest to protokół transportowy TCP.
- SOURCE IP ADDRESS (16 bitów, bajty od 12 do 15)Adres IP nadawcy.
- DESTINATION IP ADDRESS (16 bitów, bajty od 16 do 19) Adres IP odbiorcy.
- DATA Dane.
Nagłówek warstwy transportu
Warstwa transportu przesyła wiadomości kanałem stworzonym przez warstwę sici. Dopiero ta warstwa troszczy się o bezpieczeństwo} i pewność wymiany danych. Wszystkie wcześniejsze warstwy nie przykładają żadnej wagi do bezpieczeństwa, skupiając się na zapewnieniu maksymalnej szybkości.
1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SOURCE PORT | DEST PORT |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SEQUENCE NUMBER |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ACKNOWLEDGMENT NUMBER |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| DO | R | ECN | CB | WINDOW |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| CHECKSUM | UP |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| OPTIONS ... & PADDING |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| DATA |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Znaczenie poszczególnych pól
Wymienimy tylko te, które będziemy interpretować w naszym przykładzie.
- SOURCE PORT (16 bitów, bajty od 0 do 1) Port źródłówy.
- DEST PORT (16 bitów, bajty od 2 do 3) Port docelowy.
- DO (ang. Data Offset , 4 bity - bardziej znacząca połowa, bity od 4 do 7, bajtu 12) Określa długość nagłówka TCP w 32 bitowych słowach.
- DATA Dane
Minimalna długość tego nagłówka to 20 bajtów.
Dane
Tutaj w końcu są faktyczne dane.
Przykład
Analiza przykładowego pakietu
Załóżmy, że udało nam się przechwycić następujący pakiet
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 0 208 183 116 229 103 0 2 179 101 64 208 8 0 69 0
1 0 56 200 213 64 0 64 6 70 72 212 191 65 33 212 191
2 65 2 5 20 10 109 166 211 34 168 138 91 184 29 80 24
3 22 208 85 26 0 0 84 11 32 106 101 115 116 32 116 101
4 107 115 99 105 107 10 0 0 0 0 0 0 0 0 0 0
Aby móc sprawdzać poprawność analizy dodam jedynie, że wiadomość wysłana była z komputera o adresie IP
212.191.65.33 a odbiorca miał adres
212.191.65.2. Wiadomością był tekst w jezyku polskim zakodowany przy użyciu standardowych znaków wchodzących w skład kodu ASCII. Adres karty sieciowej nadawcy to
00-02-B3-65-40-D0 odbiorcy zaś
00-D0-B7-74-E5-67. Numer portu nadwcy wynosił
1300.
Analizując ten pakiet będziemy używać współrzędnych liczb tworzących komunikat w postaci (x,y) co należy czytać: wiersz x, kolumna y. Na przykład zapis (2,6) oznacza 2 wiersz, 6 kolumna i jest tam wpisana liczba 166.
Nagłówek Ethernetu (kolor czerwony)
Interesują nas bajty 0-5 (pole ETH DEST ADDRESS), 6-11 (pole ETH SRC ADDRESS) oraz 12-13 (pole TYPE).
Bajt 0 rozpoczyna się w (0,0) natomiast bajt 5 to inaczej (0,5). Tak więc na bajtach 0-5 są zapisane liczby: 0, 208, 183, 116, 229, 103, które po zamianie na liczby zapisane w systemie szesnastkowym dają
00-D0-B7-74-E5-67. Jest to sprzętowy adres karty sieciowej komputera, do którego adresowany jest pakiet.
Bajt 6 rozpoczyna się w (0,6) natomiast bajt 11 to inaczej (0,11). Tak więc na bajtach 6-11 są zapisane liczby: 0, 2, 179, 101, 64, 208, które po zamianie na liczby zapisane w systemie szesnastkowym dają
00-02-B3-65-40-D0. Jest to sprzętowy adres karty sieciowej komputera, którego wysłał pakiet.
Bajt 12 i 13 to odpowiednio (0,12) oraz (0,13). Są tam zapisane liczby 8 i 0 co oznacza, że jako dane przesyłany jest pakiet IP, dlatego następne bajty należy interpretować zgodnie ze specyfikacją pakietu IP.
Nagłówek IP (kolor zielony)
Interesują nas bajty 0 (pole VER i IHL), 2-3 (pole TL), 9 (pole PROT), 12-15 (pole SOURCE IP ADDRESS) oraz 16-19 (pole DESTINATION IP ADDRESS).
Nagłówek IP rozpoczyna się zaraz za nagłówkiem Ethernetu a więc w (0,14). Jest tam wpisana liczba 69. Liczba ta jest 8-bitowa, zatem opisuje pola VER (4 bity) i IHL (4 bity). Przeliczymy teraz liczbę dziesiętną 69 na jej dwójkową reprezentację.
69 (10) = 01000101 (2)
Zatem
0100 (2) = 4 (10) to wartość z pola VER
0101 (2) = 5 (10) to wartość z pola IHL
Wnosimy stąd, że mamy do czynienia ze standardowym nagłówkiem protokołu IP oraz, że całkowita długość nagłówka IP wynosi 20 bajtów (pamiętamy, że długość podawana jest w wielokrotnościach 32 bitów, a więc 4 bajtów). Nagłówek IP powinien wiec skończyć się w (2,1).
Bajt 2 to (1,0) a 3 to (1,1) (pole TL). Są tam wpisane liczby 0 i 56.
0 (10) = 00000000 (2)
56 (10) = 00111000 (2)
0000000000111000 (2) = 56 (10)
Zatem całkowita długość pakietu IP wraz z nagłówkiem wynosi 56 bajtów a więc pakiet powienien kończyć się w (4,5).
Bajt 9 to (1,7) (pole PROT). Jest tam wpisana wartość 6 co oznacza, że datagram IP przenosi w sobie datagram TCP.
Od bajtu 12 (1,10) do 15 (1,13) mamy pole SOURCE IP ADDRESS. Są tam wpisane liczby: 212, 191, 65, 33 co zgodne jest z informacjami podanymi na początku.
Od bajtu 16 (1,14) do 19 (2,1) mamy pole DESTINATION IP ADDRESS. Są tam wpisane liczby: 212, 191, 65, 2 co zgodne jest z informacjami podanymi na początku. (2,1), godnie z wartością zapisaną w polu IHL, jest ostatnim bajtem nagłówka IP i zgodnie z informacją z pola PROT dalszą część należy interpretować jako nagłówek TCP.
Nagłówek TCP (kolor niebieski)
Interesują nas bajty 0-1 (pole SOURCE PORT), 2-3 (pole DEST PORT), 12 (pole DO).
SOURCE PORT (16 bitów, bajty od 0 do 1) Port źródłówy.
DEST PORT (16 bitów, bajty od 2 do 3) Port docelowy.
DO (ang. Data Offset , 4 bity - bardziej znacząca połowa, bity od 4 do 7, bajtu 12) Określa długość nagłówka TCP w 32 bitowych słowach.
DATA Dane
Od bajtu 0 (2,2) do 1 (2,3) mamy pole SOURCE PORT. Zapisane są tam liczby 5 i 20.
5 (10) = 00000101 (2)
20 (10) = 00010100 (2)
Zatem
0000010100010100 (2) = 1300 (10)
Od bajtu 2 (2,4) do 3 (2,5) mamy pole DEST PORT. Zapisane są tam liczby 10 i 109.
10 (10) = 00001010 (2)
109 (10) = 01101101 (2)
Zatem
0000101001101101 (2) = 2669 (10)
\end{verbatim}
Bajt 12 (2,14), a konkretnie jego 4 bardziej znaczące bity, to pole DO. Są tam wpisana liczba 80.
80 (10) = 01010000 (2)
Zatem
0101 (2) = 5 (10) to wartość z pola DO
Wnosimy stąd, że całkowita długość nagłówka TCP wynosi 20 bajtów (pamiętamy, że długość podawana jest w wielokrotnościach 32 bitów, a więc 4 bajtów). Nagłówek TCP powinien wiec skończyć się w (3,5).
Dane (kolor pomarańczowy)
Zgodnie z informacjami zawartymi w polu TL nagłówka IP, cały datagram IP, wraz z zawartymi w nim danymi (a jako dane traktuje się nagłówek TCP i to co on opisuje a więc właściwe dane), powinien skończyć się w (4,5).
Tak więc interesują nas bajty 0-15 (3,6)-(4,5) występujące bezpośrednio za nagłówkiem TCP.
Na dane składają się następujące liczby: 84, 111, 32, 106, 101, 115, 116, 32, 116, 101, 107, 115, 99, 105, 107, 10.
Ponieważ wiemy, że danymi był tekst, zatem możemy odkodować go. Oto tablica kodów ASCII:
Dec Hex Symbol Dec Hex Symbol Dec Hex Symbol Dec Hex Symbol
32 20 spacja 56 38 8 80 50 P 104 68 h
33 21 ! 57 39 9 81 51 Q 105 69 i
34 22 " 58 3A : 82 52 R 106 6A j
35 23 # 59 3B ; 83 53 S 107 6B k
36 24 $ 60 3C < 84 54 T 108 6C l
37 25 % 61 3D = 85 55 U 109 6D m
38 26 & 62 3E > 86 56 V 110 6E n
39 27 ' 63 3F ? 87 57 W 111 6F o
40 28 ( 64 40 @ 88 58 X 112 70 p
41 29 ) 65 41 A 89 59 Y 113 71 q
42 2A * 66 42 B 90 5A Z 114 72 r
43 2B + 67 43 C 91 5B [ 115 73 s
44 2C , 68 44 D 92 5C \ 116 74 t
45 2D - 69 45 E 93 5D ] 117 75 u
46 2E . 70 46 F 94 5E ^ 118 76 v
47 2F / 71 47 G 95 5F _ 119 77 w
48 30 0 72 48 H 96 60 ` 120 78 x
49 31 1 73 49 I 97 61 a 121 79 y
50 32 2 74 4A J 98 62 b 122 7A z
51 33 3 75 4B K 99 63 c 123 7B {
52 34 4 76 4C L 100 64 d 124 7C |
53 35 5 77 4D M 101 65 e 125 7D }
54 36 6 78 4E N 102 66 f 126 7E ~
55 37 7 79 4F O 103 67 g 127 7F Del
Stąd otrzymujemy:
84 - T
111 - o
32 - spacja
106 - j
101 - e
115 - s
116 - t
32 - spacja
116 - t
101 - e
107 - k
115 - s
99 - c
105 - i
107 - k
10 - '\n'
Unix:
'\n' = Ctrl + J = LF ang. line feed
DOS/WINDOWS:
'\n' = Ctrl + J = LF ang. line feed +
Ctrl + M = CR ang. carriage return