Sieci Komputerowe

Analiza nagłówków IP, TCP i UDP. Fragmentacja IP. *

Podstawowym założeniem modelu komunikacji sieciowej jest podział na warstwy (ang. layers) współpracujące ze sobą w ściśle określony sposób.

Kapsułkowanie danych

Przed wysłaniem dane wraz z przekazywaniem do niższych warstw sieci zmieniają swój format, co nosi nazwę procesu kapsułkowania (enkapsulacji).

Komunikacja w modelu ISO/OSI:

a1

i TCP/IP:

a2

Format nagłówka Ethernet

a3

Pola:

Dst (ang. Ethernet Destination Address, 48 bitów) Docelowy adres urządzenia pracującego w sieci Ethernet.
Src (ang. Ethernet Source Address, 48 bitów) Źródłowy adres urządzenia pracującego w sieci Ethernet.
Type (16 bitów) Kod określający rodzaj protokołu użytego do przesyłania danych lub ilość danych wyrażona w bajtach.

Protokół IP

Protokół IP (ang. Internet Protocol) implementuje warstwę sieci. Jest to protokół bezpołączeniowy. Użycie protokołu IP pozwala na przesyłanie datagramów bez zapewnienia niezawodności. Protokół ten zapewnia segmentację datagramów celem przesyłania ich przez łącza o różnej maksymalnej długości pakietu.

Postać nagłówka IP:

a4

Pola:

Wersja – numer wersji protokołu; obecnie powszechnie stosowana jest wersja 4,
DN – długość przedstawionego tu nagłówka w słowach 32-bitowych,
Typ obsługi – informacja o wymaganiach na jakość obsługi datagramu; zawiera poziom ważności pakietu oraz może zawierać wymagania:
minimalizacji opóźnienia,
maksymalizacji przepustowości,
maksymalizacji niezawodności,
minimalizacji kosztu;
Łączna długość – długość całego datagramu (nagłówka i danych razem) w bajtach,
Nr identyfikacyjny – numer nadawany pakietom w celu poprawnego złożenia ich po fragmentacji; każdy fragment danego pakietu ma ten sam numer identyfikacyjny,
Flagi – znaczniki bitowe, mogące oznaczać, że danego datagramu nie należy fragmentować lub że jest to ostatni fragment,
Przesunięcie fragmentu – w przypadku fragmentacji podaje położenie danego fragmentu względem początku pakietu przed fragmentacją w 64-bitowych jednostkach; w przypadku braku fragmentacji równe zeru,
Czas życia (ang. Time To Live, TTL) – licznik, który jest zmniejszany o 1 za każdym przejściem datagramu przez router, a gdy osiągnie zero, datagram jest usuwany; ma na celu zapobieganie niekończącemu się przesyłaniu datagramów, które uległy zapętleniu; licznik powinien być tak ustawiony, aby przy prawidłowej pracy sieci nie zdążył osiągnąć zera przed dostarczeniem datagramu do celu,
Protokół – kod oznaczający protokół wyższej warstwy, którego dane zawarte są w polu danych tego datagramu; mogą być to protokoły TCP, UDP, ICMP i inne (https://en.wikipedia.org/wiki/List_of_IP_protocol_numbers),
Suma kontrolna nagłówka – potwierdza nienaruszenie danych zawartych w omawianym tu nagłówku; gdy nie odpowiada zawartości nagłówka, datagram jest w całości odrzucany,
Adres źródłowy IP – 32-bitowy adres węzła nadającego dany datagram, w formacie omówionym w podrozdziale 2.1.2,
Adres docelowy IP – adres węzła, do którego skierowany jest dany datagram,
Opcje – pole o zmiennej długości, mogące zawierać opcje dotyczące sposobu wyznaczania trasy, bezpieczeństwa, znakowania czasu przybycia datagramu do routerów i inne,
Wypełnienie – dopełnia długość nagłówka do najbliższej wielokrotności 32 bitów; wielkość tego pola zależy od wielkości pola opcji.

Po nagłówku IP następują dane, zawierające informacje protokołu wyższej warstwy.

TCP

Nagłowek formatu TCP:

a5

Znaczenie poszczególnych pól jest następujące:

Port źródłowy – informuje odbiorcę, na którym porcie nadawca prowadzi wymianę informacji,
Port docelowy – numer portu odbiorcy, na podstawie którego podejmuje on decyzję o przesłaniu pakietu do odpowiedniego zadania,
Numer sekwencyjny – pozycja, jaką zajmuje w przesyłanym strumieniu danych pierwszy bajt danych tego pakietu; pozwala stwierdzić, czy nie nastąpiło zagubienie lub zduplikowanie pakietu – powinien on wskazywać na pozycję następnego bajtu po ostatnio odebranym,
Numer potwierdzanego bajtu – numer o jeden większy od numeru sekwencyjnego ostatnio odebranego bajtu; ważny tylko jeżeli znacznik ACK jest ustawiony (patrz pole Znaczniki),
Długość nagłówka – ilość 32-bitowych słów stanowiących opisywany tu nagłówek,
Zarezerwowane – bity o wartości stałej równej zeru; przewidziane do wykorzystania w przyszłości,
Znaczniki – sześć bitów służących do oznaczania specjalnych funkcji pakietu:
URG – oznacza, że pakiet zawiera tzw. pilne dane,
ACK – potwierdzenie,
PSH – funkcja Push,
RST – oznacza natychmiastowe przerwanie połączenia,
SYN – używany przy nawiązywaniu połączenia, oznaczający jednocześnie synchronizację numerów sekwencyjnych nadawcy i odbiorcy,
FIN – zakończenie połączenia,
Rozmiar okna – podaje odbiorcy danego pakietu, ile bajtów może on wysłać nie oczekując na potwierdzenie; ważne tylko gdy ustawiony znacznik ACK,
Suma kontrolna – 16-bitowa, dotyczy całego segmentu, służy do sprawdzania poprawności transmisji,
Wskaźnik do pilnych danych – wskazuje na pierwszy oktet następujący po bloku danych pilnych; ważny jedynie gdy ustawiony znacznik URG,
Opcje – ciąg danych zmiennej długości mogący zawierać informacje o różnych dodatkowych funkcjach,
Wypełnienie – zawartość nieistotna; dopełnia nagłówek do całkowitej wielokrotności 32 bitów.

UDP

Format nagłówka UDP:

a6

Pola:

Port źródłowy
Port docelowy
Długość datagramu - łączna długość nagłówka i danych
Suma kontrolna - procedurę wyliczania sumy kontrolnej można znaleźć tutaj : http://www.netfor2.com/udpsum.htm.

Przykłady

Najczęściej stosowany zapis to taki który wykorzystuje zapis szesnastkowy, czyli każda para koduje jeden bajt (8 bitów). Zamianę znaków na wartości liczbowe dokonywane są za pomocą tablicy ASCII. Do odczytywania plików w postaci binarnej możemy wykorzystywać tzw. Hex editory.

abc

W podanym przypadku Adres MAC nadawcy wynosi 54:04:A6:3C:ED:2B, a adresata 00:15:6D:C4:27:4B , pole typu ma wartość 0800 co oznacza, że kolejne dane reprezentują nagłówek IP.

10-te pole nagłówka IP mówi o protokole, w tym wypadku jest to wartość 06 mówiąca, że mamy do czynienia z protokołem TCP. Adres IP nadawcy zapisany jest w bajtach 13-16 nagłówka, czyli: C0 A8 02 65. Adres docelowy zapisany jest na bajtach 17-20: C7 3B 96 2A. W wyniku zamiany na liczby dziesiętne uzyskamy C0 =192, A8 = 168, 02 = 2 oraz 65 = 101. Stąd adres żródła pakietu to 192.168.2.101.

Po nagłówku IP znajduje się nagłówek TCP. Pierwsze dwa bajty oznaczają numer Portu źródła, a kolejne dwa bajty numer Portu celu.

W analizie nagłówków pomagają programy do analizy ruchu sieciowego takie jak Wireshark.

Wszystkie pliki poniżej otwieraj w programie Wireshark.

Przykład: Klient na 150.254.76.10 otwiera połączenie TCP do serwera na 150.254.78.2 na port 7245, jednak na tym porcie nie nasłuchuje żadna aplikacja.

PlikTCP

Klient na 150.254.76.10 otwiera połączenie TCP do serwera na 150.254.78.2, po czym zamyka je nie wysyłając żadnych danych.

PlikTCP2

Sprawdź gdzie można znaleźć adresy ethernetowy, adresy nadawcy i odbiorcy, poszczególne flagi oraz numery potwierdzeń i sekwencji. Zobacz jak są one kodowane w pliku.

Zadanie (2 pkt)

Dla podanego niżej pakietu podaj: adresy Mac nadawcy i odbiorcy, Typ używanego protokołu, ustawione flagi w nagłówku IP, adres IP nadawcy i adres IP odbiorcy. Numer portu nadawcy i numer portu odbiorcy.

08 00 20 7c 94 1c 00 00 39 51 90 37 08 00 45 00
00 3e 36 00 00 00 80 11 da 4f 82 eb 12 7f 82 eb
12 0a 04 01 00 35 00 2a ee 6a 00 01 01 00 00 01
00 00 00 00 00 00 06 67 65 6d 69 6e 69 03 6c 64
63 02 6c 75 02 73 65 00 00 01 00 01 75 00 00 01
00 01 c0 0c 00 01 00 01 00 00 0e 10 00 04 ac 14
00 06 c0 16 00 02 00 01 00 00 0e 10 00 08 05 64
61 76 69 73 c0 16 c0 16 00 02 00 01 00 00 0e 10
00 02 c0 0c c0 44 00 01 00 01 00 01 51 80 00 04
ac 13 00 03

Zadanie (1 pkt)

Opisz do czego wykorzystywana jest flaga PSH w nagłówku TCP.

Zadanie (2 pkt)

Otwórz w Wiresharku i przeanalizuj nagłówki w komunikacji:

Klient na 192.168.1.6 wysyła do serwera na 192.168.1.200 1000 bajtów protokołem TCP.

Plik1

Klient na 192.168.1.6 wysyła do serwera na 192.168.1.200 10000 bajtów protokołem TCP.

Plik2

Kiedy klient inicjuje sesję TCP, jego poczatkowy numer sekwencyjny przypisywany jest w sposób losowy. Może być to dowolna liczba pomiędzy 0 a 4,294,967,295. Programy takie jak Wireshark często dla ułatwienia analizy wyświetlają nam jednak "wartość relatywną" czyli normalizują je tak, że początkowa wartość jest równa 0 (wypisując ją zamiast prawdziwych wartości).

Podaj prawdziwe początkowe numery Seq w przypadku obu komunikacji.

Wybierz Statystyki->Graf przepływu a następnie w polu typ przepływu wybierz Przepływy TCP.

Przeanalizuj i opisz w jaki sposób przypisywane są kolejne numery ACK i SEQ.

Zadanie (1 pkt)

Klient na 192.168.1.6 wysyła do serwera na 192.168.1.200 1000 bajtów protokołem UDP. Brak fragmentacji.

Plik3

Klient na 192.168.1.6 wysyła do serwera na 192.168.1.200 10000 bajtów protokołem UDP. Następuje fragmentacja na poziomie protokołu IP.

Plik4

W intersieci TCP/IP od chwili, gdy datagram jest dzielony na fragmenty, fragmenty te podróżują jako oddzielne datagramy, aż do ostatecznego odbiorcy, gdzie muszą zostać złożone.

Podaj jakie trzy pola nagłówka IP służą do kontroli procesów fragmentacji i składania datagramów. Ile razy w komunikacji z Plik4 przesyłany jest nagłówek UDP?

Zadanie (1 pkt)

W pliku znajduje się wynik działania ping -c 10 -s 20 192.168.1.200, uruchomionego na 192.168.1.6. w tym wypadku po nagłówku IP zawarty jest nagłówek ICMP.

Plik5

Które pole nagłówka IP mówi że mamy do czynienia z nagłowkiem ICMP? Jaka jest wartość tego pola. Dlaczego wartości Identyfication field są różne dla różnych pakietów? W jakich wypadkach dwa pakiety miałyby tą samą wartość tego parametru?

Proszę o przesłanie rozwiązań mailem jako tekst w treści wiadomości. W temacie powinien znajdować się numer indeksu i słowo SIK.

*

Wykorzystano materiały z:

http://www.staff.amu.edu.pl/~ttomek/sik/cwiczenia7.html

https://pl.wikipedia.org/wiki/Model_OSI

http://www.pwsz.legnica.edu.pl/~walkowiak/Model%20warstwowy.pdf

http://rejestrowanie-multimediow.eprace.edu.pl/133,Protokol_IP.html

http://rejestrowanie-multimediow.eprace.edu.pl/135,Protokol_TCP.html

http://packetlife.net/blog/2011/mar/2/tcp-flags-psh-and-urg/

http://packetlife.net/blog/2010/jun/7/understanding-tcp-sequence-acknowledgment-numbers/

http://fulmanski.pl/zajecia/ics/tcpip/opis.htm

http://www.cs.miami.edu/home/burt/learning/Csc524.092/notes/ip_example.html