Strângere de mână în 3 căi TCP (SYN, SYN-ACK,ACK)
⚡ Rezumat inteligent
TCP 3-Way Handshake este ritualul de configurare a conexiunii cu care începe fiecare sesiune TCP. Un client și un server schimbă pachete SYN, SYN-ACK și ACK pentru a sincroniza numerele de secvență și a confirma că ambele părți sunt pregătite înainte de a fi trimis un singur octet de date ale aplicației.

Ce este strângerea de mână în trei direcții TCP?
Strângere de mână în trei căi TCP este procedura utilizată de un client și un server pe un Rețea TCP/IP pentru a configura o conexiune fiabilă înainte de orice schimb de date din aplicație. După cum sugerează și numele, constă în trei etape în care ambele părți schimbă pachete de sincronizare (SYN) și de confirmare (ACK) și convin asupra numerelor de secvență inițiale pe care le vor utiliza.
Conexiunea este concepută astfel încât ambele puncte finale să poată iniția, negocia și deconecta socket-urile TCP simetric. Odată ce handshake-ul este finalizat, conexiunea este full-duplex — ambele părți pot trimite și primi în paralel până când oricare dintre ele emite un FIN pentru a închide sesiunea.
Tipuri de mesaje TCP
Patru steaguri de control apar în mod repetat în timpul strângerii de mână și a demontării.
| Mesaj | Descriere |
|---|---|
| SYN | Inițiază o conexiune și sincronizează numerele de secvență între dispozitive. |
| ACK | Confirmă celeilalte părți că segmentul anterior a fost recepționat. |
| SYN-ACK | Un mesaj combinat — un SYN de la dispozitivul local plus un ACK al SYN-ului anterior al peer-ului. |
| END | Folosit pentru a termina o conexiune în mod elegant. |
Procesul de strângere de mână în trei căi TCP
Traficul TCP începe întotdeauna cu o strângere de mână în trei direcții. Clientul inițiază conversația solicitând o sesiune cu serverul.
Diagramă de strângere de mână în 3 direcții.
- Pasul 1 — SYN: Clientul trimite un segment cu steagul SYN setat. Acesta îi spune serverului „Vreau să încep comunicarea” și propune un număr de secvență inițial.
- Pasul 2 — SYN-ACK: Serverul răspunde cu un segment în care sunt setate ambele semnalizatoare, SYN și ACK. ACK-ul confirmă semnătura SYN a clientului, iar SYN-ul propune propriul număr de secvență inițial al serverului.
- Pasul 3 — Confirmare: Clientul confirmă SYN-ACK-ul serverului cu un ACK final. Conexiunea este acum stabilită și ambele părți pot începe transmitprocesarea datelor aplicației.
Exemplu din lumea reală
Iată un exemplu practic cu numere de secvență concrete.
- Gazda X inițiază conexiunea prin trimiterea unui pachet TCP SYN către server. Pachetul conține un număr de secvență inițial aleatoriu — de exemplu,
4321— care marchează începutul fluxului de octeți pe care îl va trimite Gazda X. - Serverul primește SYN-ul și răspunde cu un SYN-ACK. Numărul ACK este numărul de secvență al gazdei X incrementat cu 1 (
4322), iar SYN-ul propune propriul număr de secvență inițial al serverului. - Gazda X răspunde cu un ACK final al cărui număr de confirmare este numărul de secvență al serverului incrementat cu 1.
Odată ce schimbul de date este finalizat, TCP întrerupe conexiunea cu o secvență FIN/ACK în patru direcții, astfel încât ambele puncte finale să poată elibera socketul fără probleme.
De ce TCP are nevoie de o strângere de mână în trei direcții
Strângerea de mână nu este doar o formalitate - rezolvă trei probleme concrete care vin odată cu transportul fiabil de flux de octeți:
- Sincronizarea numerelor de secvență: Ambii parteneri învață numărul de secvență inițial al celeilalte părți, ceea ce TCP folosește pentru a detecta segmentele pierdute sau în afara ordinii.
- Acordul dintre starea conexiunii: Al treilea ACK confirmă sosirea SYN-ACK-ului serverului, astfel încât niciuna dintre părți nu începe să trimită date până când ambele nu se află în STABILIT de stat.
- Protecție împotriva pachetelor duplicate: Numerele de secvență inițiale aleatorii și stările de handshake temporizate împiedică acceptarea din greșeală a segmentelor învechite dintr-o sesiune anterioară.
Probleme frecvente cu strângerea de mână TCP
Strângerea de mână este robustă, dar se defectează în moduri identificabile. Inginerii de rețea observă de obicei unul dintre următoarele:
- Atacuri de tip inundație SYN: Un client rău intenționat trimite mii de mesaje SYN fără a răspunde la mesajele SYN-ACK, epuizând tabela de conexiuni a serverului. Cookie-urile SYN sunt apărarea standard.
- Conexiuni semi-deschise: Când al treilea ACK se pierde, conexiunea rămâne pe jumătate deschisă și este în cele din urmă curățată de un timeout.
- Căderi de firewall sau NAT în timpul zborului: Middlebox-urile cu stare care pierd starea pot abandona pachetele SYN-ACK și pot lăsa clientul să reîncerce.
- Resetări RST: Dacă serverul nu ascultă pe portul solicitat, răspunde la un SYN cu un RST, care închide imediat încercarea.


