Uzgadnianie trójkierunkowe TCP (SYN, SYN-ACK, ACK)
⚡ Inteligentne podsumowanie
Uzgadnianie TCP 3-Way to rytuał nawiązywania połączenia, od którego rozpoczyna się każda sesja TCP. Klient i serwer wymieniają pakiety SYN, SYN-ACK i ACK, aby zsynchronizować numery sekwencyjne i potwierdzić gotowość obu stron przed wysłaniem choćby jednego bajtu danych aplikacji.

Czym jest trójetapowe uzgadnianie protokołu TCP?
Trójstronny uścisk dłoni TCP jest procedurą, z której korzystają klient i serwer Sieć TCP/IP Aby skonfigurować niezawodne połączenie przed wymianą danych aplikacji. Jak sama nazwa wskazuje, składa się ono z trzech kroków, w których obie strony wymieniają pakiety synchronizacji (SYN) i potwierdzenia (ACK) oraz uzgadniają początkowe numery sekwencyjne, których będą używać.
Uzgadnianie zostało zaprojektowane tak, aby oba punkty końcowe mogły symetrycznie inicjować, negocjować i zamykać gniazda TCP. Po zakończeniu uzgadniania połączenie jest w trybie pełnego dupleksu — obie strony mogą wysyłać i odbierać dane równolegle, aż do momentu, gdy któraś z nich wyśle sygnał FIN zamykający sesję.
Typy wiadomości TCP
Podczas uściskania dłoni i demontażu wielokrotnie pojawiają się cztery flagi kontrolne.
| Treść wiadomości | OPIS |
|---|---|
| SYN | Nawiązuje połączenie i synchronizuje numery sekwencyjne między urządzeniami. |
| ACK | Potwierdza drugiej stronie, że poprzedni segment został odebrany. |
| SYN-ACK | Połączona wiadomość — SYN z urządzenia lokalnego i ACK wcześniejszego SYN od urządzenia równorzędnego. |
| PŁETWA | Służy do łagodnego zakończenia połączenia. |
Proces trójstronnego uzgadniania protokołu TCP
Ruch TCP zawsze rozpoczyna się od trzyetapowego uzgadniania. Klient inicjuje konwersację, żądając sesji z serwerem.
Diagram uzgadniania 3-stronnego.
- Krok 1 — SYN: Klient wysyła segment z ustawioną flagą SYN. Informuje on serwer „Chcę rozpocząć komunikację” i proponuje początkowy numer sekwencyjny.
- Krok 2 — SYN-ACK: Serwer odpowiada segmentem, w którym ustawione są flagi SYN i ACK. ACK potwierdza SYN klienta, a SYN proponuje początkowy numer sekwencyjny serwera.
- Krok 3 — ACK: Klient potwierdza SYN-ACK serwera końcowym ACK. Połączenie jest teraz nawiązane i obie strony mogą rozpocząć transmitdane aplikacji.
Przykład ze świata rzeczywistego
Poniżej przedstawiono przykładowy schemat z konkretnymi numerami sekwencyjnymi.
- Host X nawiązuje połączenie, wysyłając pakiet TCP SYN do serwera. Pakiet zawiera losowy początkowy numer sekwencyjny — na przykład:
4321— oznacza to początek strumienia bajtów, który wyśle Host X. - Serwer odbiera pakiet SYN i odpowiada pakietem SYN-ACK. Numer pakietu ACK to numer sekwencyjny hosta X pomnożony o 1 (
4322), a SYN proponuje początkowy numer sekwencyjny serwera. - Host X odpowiada końcowym potwierdzeniem ACK, którego numer potwierdzenia jest numerem sekwencyjnym serwera zwiększonym o 1.
Po zakończeniu wymiany danych protokół TCP rozłącza połączenie za pomocą czterokierunkowej sekwencji FIN/ACK, aby oba punkty końcowe mogły bez przeszkód zwolnić gniazdo.
Dlaczego TCP potrzebuje trójstronnego uzgadniania
Uścisk dłoni nie jest jedynie formalnością — rozwiązuje on trzy konkretne problemy związane z niezawodnym transportem strumieniowym bajtów:
- Synchronizacja numerów sekwencyjnych: obie strony poznają początkowy numer sekwencyjny drugiej strony, który jest wykorzystywany przez protokół TCP do wykrywania utraconych lub nieuporządkowanych segmentów.
- Umowa o stanie połączenia: trzecie ACK potwierdza, że SYN-ACK serwera dotarł, więc żadna ze stron nie rozpocznie wysyłania danych, dopóki obie nie znajdą się w PRZYJĘTY stan.
- Ochrona przed duplikatami pakietów: Losowe początkowe numery sekwencji i ustalone stany uzgadniania zapobiegają przypadkowemu zaakceptowaniu nieaktualnych segmentów z poprzedniej sesji.
Typowe problemy z uzgadnianiem TCP
Uścisk dłoni jest solidny, ale zdarzają się awarie, które można zidentyfikować. Inżynierowie sieci zazwyczaj obserwują jeden z poniższych przypadków:
- Ataki typu SYN flood: Złośliwy klient wysyła tysiące pakietów SYN bez odpowiadania na pakiety SYN-ACK, wyczerpując tabelę połączeń serwera. Standardową metodą obrony są pliki cookie SYN.
- Połączenia półotwarte: po utracie trzeciego ACK połączenie pozostaje w stanie półotwartym i zostaje ostatecznie naprawione przez przekroczenie limitu czasu.
- Zapora sieciowa lub NAT zrywają połączenie w trakcie transmisji: stanowe urządzenia pośredniczące, które tracą stan, mogą odrzucać pakiety SYN-ACK i zmuszać klienta do ponawiania prób.
- Resetowanie RST: Jeśli serwer nie nasłuchuje na żądanym porcie, odpowiada SYN-em za pomocą RST, co natychmiast zamyka próbę.


