TCP handshake, czyli mocny uścisk dłoni

TCP jest niezawodnym, połączeniowym protokołem służącym do kontroli transmisji danych. Używamy go wszędzie tam, gdzie zależy nam na gwarancji transmisji, czyli, że serwer rozpoczął odpieranie danych, odebrał wszystkie dane w niezmienionej kolejności, a więc i w niezmienionej treści. Wszystkie te cechy protokołu TCP uzyskujemy dzięki kontroli transmisji opartej o flagi, które sterują transmisją danych.

Nagłówek TCP

Flagi TCP

Jednym z elementów nagłówka TCP jest pole „TCP Flags”. Pole to ma rozmiar 6 bitów, ponieważ mamy 6 flag sterujących transmisją. W zależności od tego, na którym z tych bitów ustawiona jest wartość 1, będziemy obserwowali aktywną inną flagę. W pojedynczym pakiecie aktywnych może być więcej niż jedna flaga.

Spośród flag TCP rozróżniamy 4, które odpowiedzialne są za rozpoczynanie, sterowanie i kończenie sesji TCP (SYN, ACK, FIN oraz RST) oraz 2 flagi dostarczające instrukcje do systemu (PSH oraz URG).

Flagi TCP

SYN (Synchronize) służy do rozpoczynania nowego połączenia. Każda nowa transmisja TCP rozpoczyna się pakietem z flagą SYN oraz wskazaniem nowego numeru sekwencyjnego unikatowego dla tej transmisji. Proces rozpoczynania nowej transmisji nazywamy three-way handshake, a jego przebieg opiszemy sobie za chwilę.

ACK (Acknowledgement) potwierdza otrzymanie pakietu lub paczki danych. Ustalenie, których danych dotyczy potwierdzenie, jest możliwe na podstawie numeru sekwencyjnego.

PSH (Push) wymusza wysłanie danych do odbiorcy.

URG (Urgent) informuje o istotności pola priorytetu (Urgent Pointer). Służy do wymuszania szybszego przetwarzania danych przez system docelowy.

FIN (Finish) informuje o chęci zamknięcia. Może być wysłany po wymianie wszystkich danych albo po tym, jak upłynął czas życia aktywnej sesji TCP.

RST (Reset) resetuje połączenie. Po wysłaniu pakietu RST konieczne jest ustanowienie nowej sesji pomiędzy stronami.

Rozpoczynanie sesji – TCP handshake

W przypadku protokołu TCP przed przystąpieniem do transmisji danych musi dojść to ustanowienia sesji, podczas którego ustalane są parametry takiego połączenia. Proces ustanawiania połączenia służy weryfikacji czy serwer działa i czy przyjmie połączenie od klienta oraz jakie będą parametry tego połączenia. Proces ustanawiania połączenia odbywa się poprzez wymianę trzech pakietów pomiędzy klientem i serwerem i właśnie dlatego nazywany jest three-way handshake.

TCP three-way handshake

Jeśli z jakiegoś powodu nawiązywanie połączenia nie nie zakończy się sukcesem, nie dojdzie do transferu danych. Zerwanie sesji na tym etapie odbywa się za pomocą flagi RST. Jeśli jedna ze stron wyśle flagę RST, dochodzi do natychmiastowego przerwania komunikacji pomiędzy stacjami w ramach tej sesji. Powodów zerwania sesji może być wiele. Będzie to między innymi zablokowanie ruchu na firewallu lub próba połączenia na port, na którym nie nasłuchuje żadna usługa. Może to być również niemożliwość ustalenia wspólnych parametrów dla nawiązywanej sesji. Cechą charakterystyczną pakietu z flagą RST jest to, że nie wymaga on potwierdzenia przez drugą stronę.

Zamykanie sesji TCP

Po wymianie wszystkich danych pomiędzy stronami połączenie należy zamknąć. Chodzi o odciążenie systemów, żeby nie musiały w nieskończoność pamiętać o sesjach, w ramach których nie będą już wymieniane żadne dane. Zamknięcie sesji odbywa się poprzez przesłanie pakietów z flagą FIN i jego przebieg wygląda następująco:

Zamykanie sesji TCP

Zaobserwować można również zamknięcie w trzech pakietach. W takiej sytuacji pakiety numer 2 (serwer wysyła ACK) i 3 (serwer wysyła własny FIN) połączone są w jeden pakiet z flagami FIN i ACK.

Znajomość przebiegu ustanawiania sesji TCP jest niezwykle istotna w procesie diagnozowania problemów z połączeniami. Może nam się również przydać w procesie skanowania sieci i systemów. W zależności, od jakich tego metod użyjemy podczas skanowania, czyli np. pełnego nawiązywania sesji lub nawiązywania sesji półotwartych nasza aktywność może zostać różnie potraktowana przez systemy detekcji zagrożeń takie jak IPS czy IDS.

Na zakończenie tematu działania połączeń i flag TCP mam do Ciebie prośbę. Daj znać czy temat Ci się podobał, a może uważasz, że wymaga pogłębienia? Daj też znać, czy interesuje Cię tematyka skanowania sieci w poszukiwaniu działających usług, czyli tzw. rekonesansu.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *