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.

  • 📨 Cunoașteți cele patru tipuri de mesaje: SYN inițiază o conexiune, ACK confirmă, SYN-ACK combină ambele, iar FIN termină o conexiune TCP.
  • 🔁 Urmați cei trei pași: SYN client → SYN server → ACK client; sesiunea este stabilită numai după sosirea celui de-al treilea pachet.
  • 🔢 Numerele de secvență contează: Fiecare parte alege un număr de secvență inițial; cealaltă parte îl confirmă prin adăugarea unuia, ceea ce menține fluxul de octeți ordonat.
  • 🚪 Plan pentru demontare: După transferul de date, TCP închide conexiunea cu perechi FIN/ACK pentru a elibera socketul la ambele capete.
  • 🤖 Folosește inteligența artificială pentru analiza pachetelor: Asistenții AI explică Wireshark capturi, semnalizează ACK-urile lipsă și evidențiază inundările SYN sau conexiunile pe jumătate deschise.

Strângere de mână în 3 căi TCP

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.

Diagrama handshake-ului TCP în 3 direcții

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ă

Exemplu de handshake TCP în 3 direcții în 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.

Întrebări frecvente

Două mesaje nu pot dovedi că ambele părți au fost de acord asupra numerelor de secvență inițiale și sunt gata de trimitere. Al treilea ACK confirmă sosirea mesajului SYN-ACK al serverului, asigurându-se că ambele terminale ating starea ESTABLISHED înainte ca datele să curgă.

SYN este un singur flag care deschide conversația și propune un număr de secvență inițial. SYN-ACK combină un SYN cu o confirmare a SYN-ului anterior al peer-ului, completând sincronizarea într-un singur pachet.

O inundație SYN suprasolicită un server prin trimiterea multor pachete SYN fără a finaliza procesul de handshake. Conexiunile pe jumătate deschise umplu coada de așteptare și blochează utilizatorii legitimi. Cookie-urile SYN reprezintă atenuarea standard.

TCP închide o conexiune cu o strângere de mână în patru direcții, cu schimburi de FIN și ACK. Fiecare direcție este închisă independent, ceea ce permite unei părți să termine trimiterea datelor chiar și după ce cealaltă parte și-a închis jumătatea.

Numărul de secvență inițial este o valoare pe 32 de biți aleasă aleatoriu, pe care fiecare punct final o alege pentru propriul flux de octeți. Acesta seamănă contorul folosit pentru a detecta segmentele lipsă sau duplicate și pentru a se apăra împotriva pachetelor falsificate.

Nu. UDP este fără conexiune și trimite datagrame fără nicio interconectare. Acest lucru îl face mai rapid și mai ușor decât TCP, dar aplicațiile trebuie să gestioneze singure fiabilitatea, ordonarea și controlul congestiei.

Asistenții AI adnotează capturile de pachete, clasifică retransmits și RST-uri și detectează inundații SYN. ​​Acestea traduc Wireshark filtrează în limba engleză simplă și recomandă următorul pas de diagnosticare pentru problemele de conectivitate.

Da. Asistenții de codare cu inteligență artificială transformă o solicitare scrisă în limba engleză simplă într-o Python Scapy sau un script netcat care declanșează și inspectează handshake-ul în trei direcții, apoi explică fiecare linie astfel încât inginerii să o poată revizui înainte de a o rula.

Rezumați această postare cu: