Handshake TCP a tre vie (SYN, SYN-ACK,ACK)
โก Riepilogo intelligente
L'handshake a tre vie TCP รจ il rituale di impostazione della connessione con cui inizia ogni sessione TCP. Un client e un server si scambiano pacchetti SYN, SYN-ACK e ACK per sincronizzare i numeri di sequenza e confermare che entrambe le parti siano pronte prima che venga inviato un singolo byte di dati dell'applicazione.

Cos'รจ l'handshake a tre vie TCP?
Migliori Handshake a tre vie TCP รจ la procedura che un client e un server utilizzano su un Rete TCP/IP per stabilire una connessione affidabile prima che vengano scambiati dati dell'applicazione. Come suggerisce il nome, si compone di tre fasi in cui entrambe le parti si scambiano pacchetti di sincronizzazione (SYN) e di conferma (ACK) e concordano sui numeri di sequenza iniziali che utilizzeranno.
La fase di handshake รจ progettata in modo che entrambi gli endpoint possano avviare, negoziare e chiudere i socket TCP in modo simmetrico. Una volta completata la fase di handshake, la connessione diventa full-duplex: entrambe le parti possono inviare e ricevere in parallelo finchรฉ una delle due non invia un segnale FIN per chiudere la sessione.
Tipi di messaggi TCP
Quattro bandiere di controllo compaiono ripetutamente durante la fase di handshake e disconnessione.
| Messaggio | Descrizione |
|---|---|
| SYN | Avvia una connessione e sincronizza i numeri di sequenza tra i dispositivi. |
| ACK | Conferma all'altra parte che il segmento precedente รจ stato ricevuto. |
| SIN-ACK | Un messaggio combinato: un SYN dal dispositivo locale piรน un ACK del SYN precedente del peer. |
| END | Utilizzato per terminare una connessione in modo corretto. |
Processo di handshake a tre vie TCP
Il traffico TCP inizia sempre con un handshake a tre vie. Il client avvia la conversazione richiedendo una sessione al server.
Diagramma di una stretta di mano a tre vie.
- Passo 1 โ SIN: Il client invia un segmento con il flag SYN impostato. In questo modo comunica al server "Voglio iniziare la comunicazione" e propone un numero di sequenza iniziale.
- Passaggio 2 โ SYN-ACK: Il server risponde con un segmento in cui sono impostati entrambi i flag SYN e ACK. L'ACK conferma la ricezione del SYN da parte del client, mentre il SYN propone al server il proprio numero di sequenza iniziale.
- Passaggio 3 โ ACK: Il client conferma il SYN-ACK del server con un ACK finale. La connessione รจ ora stabilita ed entrambe le parti possono iniziare transmitdati dell'applicazione ting.
Esempio del mondo reale
Ecco un esempio pratico con numeri di sequenza concreti.
- L'host X avvia la connessione inviando un pacchetto TCP SYN al server. Il pacchetto contiene un numero di sequenza iniziale casuale, ad esempio,
4321โ questo segna l'inizio del flusso di byte che l'Host X invierร . - Il server riceve il SYN e risponde con un SYN-ACK. Il numero ACK รจ il numero di sequenza dell'Host X incrementato di 1 (
4322), e il SYN propone il numero di sequenza iniziale del server. - L'host X risponde con un ACK finale il cui numero di riconoscimento รจ il numero di sequenza del server incrementato di 1.
Una volta completato lo scambio di dati, TCP chiude la connessione con una sequenza FIN/ACK a quattro vie in modo che entrambi gli endpoint possano rilasciare il socket in modo pulito.
Perchรฉ TCP necessita di un handshake a tre vie
La stretta di mano non รจ solo una formalitร : risolve tre problemi concreti legati al trasporto affidabile di flussi di byte:
- Sincronizzazione del numero di sequenza: Entrambi i peer apprendono il numero di sequenza iniziale dell'altro lato, che รจ ciรฒ che TCP utilizza per rilevare segmenti persi o fuori sequenza.
- Accordo sullo stato della connessione: il terzo ACK conferma che il SYN-ACK del server รจ arrivato, quindi nessuna delle due parti inizia a inviare dati finchรฉ entrambe non sono nella STABILITO stato.
- Protezione contro i pacchetti duplicati: Numeri di sequenza iniziali casuali e stati di handshake temporizzati impediscono che segmenti obsoleti provenienti da una sessione precedente vengano accettati per errore.
Problemi comuni con l'handshake TCP
La stretta di mano รจ robusta, ma puรฒ interrompersi in modi identificabili. Gli ingegneri di rete in genere riscontrano uno dei seguenti problemi:
- Attacchi di tipo SYN flood: Un client malevolo invia migliaia di SYN senza rispondere ai SYN-ACK, saturando la tabella delle connessioni del server. I cookie SYN rappresentano la difesa standard.
- Connessioni semiaperte: Quando si perde il terzo ACK, la connessione rimane semiaperta e viene infine chiusa da un timeout.
- Firewall o NAT interrompono il flusso di dati durante il trasferimento: I dispositivi intermedi con stato che perdono lo stato possono scartare i pacchetti SYN-ACK e costringere il client a ritentare la connessione.
- RST ripristina: Se il server non รจ in ascolto sulla porta richiesta, risponde a un SYN con un RST, che chiude immediatamente il tentativo.


