Trójstronne uzgadnianie (ang. TCP three-way handshake) to trzyetapowa wymiana komunikatów, dzięki której dwa urządzenia nawiązują połączenie TCP, zanim wyślą sobie choćby bajt właściwych danych. Trzy etapy to SYN, SYN-ACK i ACK — stąd „trójstronne”. Celem jest, żeby obie strony potwierdziły, że nadają i odbierają, oraz uzgodniły początkowe numery sekwencyjne (ISN), na których oprą całą dalszą rozmowę.
Jak to działa
Wyobraź sobie, że klient chce się połączyć z serwerem. Najpierw wysyła pakiet z ustawioną flagą SYN i swoim losowym numerem sekwencyjnym (powiedzmy x). Serwer odpowiada pakietem SYN-ACK: potwierdza odbiór (ACK = x+1) i dorzuca własny numer sekwencyjny (y). Na koniec klient odsyła ACK (= y+1). Po tych trzech krokach połączenie jest established i można przesyłać dane.
Numery sekwencyjne nie są dekoracją — pozwalają TCP wykrywać zgubione, zduplikowane i pomieszane pakiety oraz układać je z powrotem w odpowiedniej kolejności. Bez uzgodnienia ISN na starcie obie strony nie wiedziałyby, od czego liczyć. To właśnie odróżnia TCP (połączeniowe, niezawodne) od UDP, które żadnego handshake’u nie robi i strzela pakietami „w ciemno”.
Przykład z praktyki
Najszybciej zobaczysz handshake w Wireshark albo przez tcpdump. Odpal nasłuch i otwórz dowolną stronę:
sudo tcpdump -i any -n 'tcp port 443 and (tcp[tcpflags] & (tcp-syn|tcp-ack) != 0)'
Zobaczysz trzy linijki: Flags [S], potem Flags [S.] (SYN-ACK) i na końcu Flags [.] (czyste ACK). Jeśli chcesz tylko sprawdzić, czy port w ogóle przyjmuje połączenia, użyj nc -vz host 443 albo nmap — narzędzia te po cichu robią handshake za ciebie.
Częste błędy i mity
- „SYN i ACK to to samo” — nie. To flagi w nagłówku TCP; w drugim kroku serwer ustawia obie naraz, dlatego są trzy pakiety, a nie cztery.
- Mylenie z TLS handshake — TCP handshake nawiązuje połączenie, TLS dopiero potem szyfruje. To dwa różne etapy, jeden na drugim.
- SYN flood — atak DoS, w którym napastnik zalewa serwer pakietami
SYNi nigdy nie odsyłaACK, zapełniając kolejkę półotwartych połączeń. Obroną są SYN cookies. - Połączenie zamyka się osobnym mechanizmem (
FIN/ACK, czasem zwany four-way handshake) — to nie to samo co otwieranie.
Pojęcia powiązane
TCP, UDP, model OSI, numery sekwencyjne (ISN), flagi TCP (SYN, ACK, FIN, RST), TLS handshake, SYN flood, port, gniazdo (socket), tcpdump, Wireshark.