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.