Uzgadnianie trój-etapowe

Damian Stelmach | 26-10-2016

TCP jest protokołem połączeniowym, oznacza to, że zanim host źródłowy prześle jakiekolwiek dane do hosta docelowego, to musi najpierw zostać ustanowione połączenie pomiędzy nimi. Połączenie to nosi nazwę uzgadniania trój-etapowego (ang. three-way handshake). Host źródłowy, czyli np. klient, wysyła segment zawierający flagę SYN (SYN to flaga synchronizacji numerów sekwencyjnych) W segmencie też zawarty jest losowy numer sekwencyjny klienta (zwany także numerem ISN, SEQ=100) służący do późniejszego scalania fragmentów danych.

Odbierając ten segment host docelowy, czyli np. serwer jest informowany, że klient chce nawiązać z nim połączenie. Serwer w odpowiedzi wysyła segment z ustawioną flagą SYN i ACK (flaga ACK informuje klienta o tym, ze serwer odebrał poprzedni segment), numerem sekwencyjnym odebranym od klienta zwiększonym o 1 (ACK=101) oraz swoim – losowym numerem sekwencyjnym (SEQ=300).

Na koniec klient odsyła do serwera segment z ustawioną flagą ACK potwierdzającą odbiór poprzedniego komunikatu z numerem sekwencyjnym serwera zwiększonym o 1 (SEQ=101, ACK=301). To kończy proces nawiązywania połączenia i pozawala na właściwą transmisję danych. Proces uzgadniania trój-etapowego widoczny jest poniżej.

Uzgadnianie trójetapowe

Dopiero kiedy klient nawiąże połączenie TCP z serwerem, może wysłać właściwe dane, np. żądanie o stronę WWW czy też plik.

Na koniec, kiedy już wszystkie dane zostaną już przesłane, musi nastąpić jeszcze zamknięcie sesji. Wówczas klient, wysyła segment z flagą FIN do serwera, która to flaga informuje serwer o zamiarze zamknięcia sesji, ten odpowiada segmentem potwierdzającym z flagą ACK, iż taki segment odebrał. Następnie serwer również wysyła segment z flagą FIN, a klient odpowiada mu potwierdzającym segmentem z flagą ACK. To zamyka sesję TCP.

Zamykanie sesji

Bity kodu (flagi) stosowane do zarządzania sesjami TCP:

FlagaZastosowanie
URGInformuje istnieniu pola wskaźnik pilności w nagłówku (urgent)
ACKInformuje istnieniu pola numer potwierdzenia w nagłówku (acknowledgment)
PSHWymuszenie przesłania pakietu (push)
RSTPonowne zestawienie połączenia (reset)
SYNSynchronizacja numerów sekwencyjnych
FINKoniec danych od nadawcy