Passa al contenuto principale

Appendice A. Diagramma dello Stato di Connessione TCP

Questa appendice fornisce un'illustrazione dettagliata delle transizioni di stato della connessione TCP.

Diagramma di Transizione di Stato TCP

                              +---------+
| CLOSED |
+---------+
|
(passive OPEN)
|
v
+---------+
| LISTEN |
+---------+
(rcv SYN) | ^ (CLOSE)
| |
v |
+---------+
|SYN RCVD|
+---------+
(rcv ACK)|
|
(active OPEN) v
+---------+ +---------+
|SYN SENT |<---->| ESTAB |
+---------+ +---------+
| |
| (CLOSE/FIN)
| |
| v
| +---------+
| |FIN WAIT1|
| +---------+
| (rcv ACK) |
| |
| v
| +---------+
| |FIN WAIT2|
| +---------+
| (rcv FIN) |
| |
| v
| +---------+
| |TIME WAIT|
| +---------+
| (timeout) |
| |
| v
| +---------+
+---------->| CLOSED |
+---------+

Chiusura Simultanea: Chiusura Passiva:
FIN WAIT1 --rcv FIN--> CLOSING ESTABLISHED --rcv FIN--> CLOSE WAIT
CLOSING --rcv ACK--> TIME WAIT CLOSE WAIT --CLOSE--> LAST ACK
LAST ACK --rcv ACK--> CLOSED

Descrizioni degli Stati

CLOSED

  • Stato fittizio che rappresenta nessun TCB (Transmission Control Block), quindi nessuna connessione
  • Questo è il punto di partenza e di arrivo per tutte le connessioni

LISTEN

  • Server in attesa di richiesta di connessione da qualsiasi TCP remoto
  • Stato di apertura passiva

SYN-SENT

  • Client in attesa di richiesta di connessione corrispondente dopo aver inviato SYN
  • Stato di apertura attiva

SYN-RECEIVED

  • Server in attesa di ACK dopo aver ricevuto SYN e inviato SYN-ACK
  • Stato intermedio dell'handshake a tre vie

ESTABLISHED

  • Connessione stabilita, trasferimento dati possibile
  • Questo è lo stato normale durante la fase di trasferimento dati

FIN-WAIT-1

  • Chiusore attivo in attesa di ACK o FIN dal remoto
  • Primo stato di terminazione della connessione

FIN-WAIT-2

  • In attesa di FIN dal remoto dopo aver ricevuto ACK per il FIN inviato
  • Indica che il lato locale non invierà più dati, ma può ancora ricevere

CLOSE-WAIT

  • Chiusore passivo in attesa della chiusura dell'applicazione locale dopo aver ricevuto FIN
  • Può ancora inviare dati a questo punto

CLOSING

  • Stato durante la chiusura simultanea
  • In attesa di ACK del FIN dal remoto

LAST-ACK

  • Chiusore passivo in attesa di ACK dopo aver inviato FIN
  • Va direttamente a CLOSED dopo aver ricevuto ACK

TIME-WAIT

  • Il chiusore attivo entra in questo stato dopo aver ricevuto FIN dal remoto e inviato ACK
  • Attende 2MSL (Maximum Segment Lifetime)
  • Scopi:
    1. Garantire che l'ACK finale raggiunga il remoto
    2. Prevenire interferenze di vecchi segmenti con nuove connessioni

Transizioni di Stato Chiave

Stabilimento della Connessione (Handshake a Tre Vie)

CLOSED --> (active open) --> SYN-SENT
SYN-SENT --> (receive SYN-ACK) --> ESTABLISHED

CLOSED --> (passive open) --> LISTEN
LISTEN --> (receive SYN) --> SYN-RECEIVED
SYN-RECEIVED --> (receive ACK) --> ESTABLISHED

Chiusura della Connessione (Handshake a Quattro Vie)

Chiusura Attiva:
ESTABLISHED --> (send FIN) --> FIN-WAIT-1
FIN-WAIT-1 --> (receive ACK) --> FIN-WAIT-2
FIN-WAIT-2 --> (receive FIN) --> TIME-WAIT
TIME-WAIT --> (2MSL timeout) --> CLOSED

Chiusura Passiva:
ESTABLISHED --> (receive FIN) --> CLOSE-WAIT
CLOSE-WAIT --> (application close) --> LAST-ACK
LAST-ACK --> (receive ACK) --> CLOSED

Apertura Simultanea

CLOSED --> (send SYN) --> SYN-SENT
SYN-SENT --> (receive SYN) --> SYN-RECEIVED
SYN-RECEIVED --> (receive ACK) --> ESTABLISHED

Chiusura Simultanea

ESTABLISHED --> (send FIN) --> FIN-WAIT-1
FIN-WAIT-1 --> (receive FIN) --> CLOSING
CLOSING --> (receive ACK) --> TIME-WAIT
TIME-WAIT --> (2MSL timeout) --> CLOSED

Importanza dello Stato TIME-WAIT

Perché è Necessario TIME-WAIT?

  1. Garantire una Chiusura Affidabile:

    • Se l'ACK finale viene perso, il remoto ritrasmetterà FIN
    • Lo stato TIME-WAIT garantisce la capacità di rispondere al FIN ritrasmesso
  2. Prevenire l'Interferenza della Vecchia Connessione:

    • Vecchi segmenti ritardati possono esistere nella rete
    • Attendere 2MSL garantisce che i vecchi segmenti scompaiano dalla rete
    • Previene che i vecchi segmenti vengano scambiati per dati validi da nuove connessioni

Tempo 2MSL:

  • MSL (Maximum Segment Lifetime): Tempo massimo che un segmento può vivere nella rete
  • Tipicamente MSL = 2 minuti
  • Quindi TIME-WAIT = 2MSL = 4 minuti
  • Alcune implementazioni usano tempi più brevi (es., 30 o 60 secondi)

Nota: Per la logica completa di transizione di stato e la gestione dei casi limite, fare riferimento alla specifica completa in RFC 9293.