Frame of TCP/IP protocols
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

Minimalna długość tego nagłówka to 14 bajtów. Dla naszego przykładu istotne będą informacje z pól

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.

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. 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