Warstwa transportowa

Materiały edukacyjne z informatyki

Protokoły pracujące w warstwie transportowej modelu TCP/IP dbają o dostarczenie danych przenoszonych przez protokół IP w pożądanej przez aplikacje kolejności i formacie. Protokoły te rozdzielają napływające informacje do odpowiednich procesów pracujących w warstwie aplikacji, które identyfikowane są dzięki unikalnej kombinacji adresu IP oraz 16-bitowej liczby oznaczającej port zarezerwowany przez dany proces. Kombinacja ta, tzn. adres IP oraz nr portu wykorzystywanego przez proces nazywa się gniazdem (socket). Wśród możliwych numerów portów (0-65535) istnieje zakres zarezerwowany (od 0 do 1024) dobrze znanych portów (well-known port number), wykorzystywanych przez takie usługi warstwy aplikacji, jak np. WWW, FTP, telnet. Ich lista w systemach Linux przechowywana jest w pliku /etc/services. Porty o numerach wyższych od 256 oznaczają usługi charakterystyczne dla systemów uniksowych. Przy nawiązywaniu połączenia proces na komputerze lokalnym rezerwować sobie jakiś port wysoki (większy niż 1024; zwłaszcza w systemach Linux, gdzie niskie porty zarezerwowane są dla procesów z uprawnieniami roota).

Protokół UDP

Protokół UDP (User Datagram Protocol) obsługuje bezpołączeniowe (tzn. bez ustanawiania połączenia i bez sprawdzania, czy dane dotarły) dostarczanie danych zawartych w pakietach.

Budowa pakietu UDP

MAC header IP header UDP header DANE

0 16 31
Port źródłowy (source port) Port przeznaczenia (destination port)
Długość (pakietu w bajtach) Suma kontrolna (checksum)
DANE...

Protokół TCP

Protokół TCP (Transmission Control Protocol) jest protokołem niezawodnym i połączeniowym, tzn. sprawdza, czy dane zostały dostarczone poprawnie i w odpowiedniej kolejności. Działa na strumieniach bajtów, jednostką przesyłanych danych jest segment.

Budowa segmentu TCP

MAC header IP header TCP header DANE

  Nagłówek TCP
słowa/bity 0 4 8 12 16 20 24 28-31
1 Port źródłowy Port przeznaczenia
2 Numer kolejny
3 Numer potwierdzenia
4 Przes. Zarezerw. Flagi  
5 Suma kontrolna (nagłówka i danych) Wskaźnik pilności
6 Opcje Uzupełnienie
7 DANE...
  • Numer kolejny (Sequence number, 32 bity) – numer kolejny pierwszego bajtu danych w segmencie, przy ustawionej fladze SYN w trakcie nawiązywania połączenia wartością pola jest tzw. inicjujący numer kolejny (ISN – Initial Sequence Number), od którego rozpoczyna się numeracja bajtów w całym połączeniu, pierwszy bajt ma numer równy ISN+1.
  • Numer potwierdzenia (Acknownledgment number, 32 bitu) – jeśli ustawiona jest flaga ACK (tak się dzieje po nawiązaniu połączenia), pole zawiera wartość następnego numeru kolejnego, który nadawca spodziewa się otrzymać.
  • Przesunięcie (Data offset, 4 bity) – wskazuje liczbę 32-bitowych słów w nagłówku TCP, czyli początek danych.
  • Zarezerwowane (6 bitów) – wartość ustawiona musi być na 0.
  • Flagi (6 bitów): URG – oznaczenie pola pilnego wskaźnika; ACK – oznaczenie pola potwierdzenia; PSH – wymuszenie wysłania segmentu; RST – natychmiastowe resetowanie połączenia; SYN – podczas nawiązywania połączenia oznacza, że pole numer kolejny zawiera ISN; FIN – koniec połączenia.
  • Okno (Window) – liczba bajtów danych, które nadawca zgodzi się przyjąć, służy do sterowania przepływem danych.
  • Wskaźnik pilności (Urgent pointer) – pole używane, gdy ustawiona jest flaga URG, zawiera numer kolejny bajtu następującego po "pilnych danych".
  • Opcje (0-44 bajtów) – długość pola jest wielokrotnością 8 bitów, wszystkie opcje zawarte są w sumie kontrolnej, ciąg opcji kończy się zawsze polem End of option list.
  • Uzupełnienie (Padding) – uzupełnienie zerami pola opcji do wielokrotności 32 bitów.

Maksymalna długość segmentu TCP to 65 535 bajtów, ale w praktyce jest o wiele mniejsza, ponieważ np. Ethernet może przenieść jednorazowo jedynie 1500 bajtów. Długość ta jest negocjowana przez TCP przy użyciu opcji Maximum Segment Size. Niezawodność transmisji osiągana jest dzięki mechanizmowi potwierdzenia z retransmisją, tzn. że dane przesyłane są dopóty, dopóki nadawca nie otrzyma potwierdzenia, że dane dotarły bezbłędnie.

Polecenie tcpdump – umożliwia w systemie Linux wyświetlanie nagłówków segmentów TCP z wybranego interfejsu sieciowego:
# tcpdump [opcje] [wyrażenie]
-i eth1 – ogranicz nasłuch do interfejsu eth1
-n – nie zmieniaj adresów i numerów portów na nazwy
-w plik – zapisz pakiety do pliku
-e – wypisz zawartość nagłówka warstwy dostępu do sieci (najczęściej nagł. ethernetowego)
-v[v][v] – zwiększ ilość wyświetlanych informacji
-t – nie wypisuj czasu pojawienia się segmentu

Pole wyrażenie służy do filtrowania wyświetlanych segmentów:
[dst] [src] host [net] komputerA [networkA] – wyświetl wszystkie pakiety wysłane [dst] lub otrzymane [src] od/do komputerA [networkA w formacie 221.51.192.0/24].

Polecenie netstat – służy do uzyskiwania informacji nt. podsystemu sieciowego:
# netstat -nap – podaje informacje o adresach IP i wszystkich (-a) portach (w formie numerycznej -n) oraz identyfikatorach procesów (-p) aktualnie wykorzystanych na komputerze lokalnym.
# netstat -r – podaje tablicę routingu
# netstat -i – podaje statystyki interfejsów sieciowych
# netstat -se – podaje statystyki protokołów IP, ICMP, TCP i UDP
# netstat -c – podaje informacje co 1s (w Windows podajemy liczbę sekund)