Aller au contenu principal

Annexe A. Diagramme d'État de Connexion TCP

Cette annexe fournit une illustration détaillée des transitions d'état de connexion TCP.

Diagramme de Transition d'État 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 |
+---------+

Fermeture Simultanée: Fermeture Passive:
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

Descriptions des États

CLOSED

  • État fictif représentant aucun TCB (Transmission Control Block), donc aucune connexion
  • C'est le point de départ et d'arrivée pour toutes les connexions

LISTEN

  • Serveur en attente d'une demande de connexion de n'importe quel TCP distant
  • État d'ouverture passive

SYN-SENT

  • Client en attente d'une demande de connexion correspondante après avoir envoyé SYN
  • État d'ouverture active

SYN-RECEIVED

  • Serveur en attente d'ACK après avoir reçu SYN et envoyé SYN-ACK
  • État intermédiaire de la poignée de main à trois voies

ESTABLISHED

  • Connexion établie, transfert de données possible
  • C'est l'état normal pendant la phase de transfert de données

FIN-WAIT-1

  • Fermeur actif en attente d'ACK ou FIN du distant
  • Premier état de terminaison de connexion

FIN-WAIT-2

  • En attente de FIN du distant après avoir reçu ACK pour le FIN envoyé
  • Indique que le côté local n'enverra plus de données, mais peut toujours recevoir

CLOSE-WAIT

  • Fermeur passif en attente de la fermeture de l'application locale après avoir reçu FIN
  • Peut toujours envoyer des données à ce stade

CLOSING

  • État pendant la fermeture simultanée
  • En attente de l'ACK du FIN du distant

LAST-ACK

  • Fermeur passif en attente d'ACK après avoir envoyé FIN
  • Passe directement à CLOSED après réception de l'ACK

TIME-WAIT

  • Le fermeur actif entre dans cet état après avoir reçu FIN du distant et envoyé ACK
  • Attend 2MSL (Maximum Segment Lifetime)
  • Objectifs:
    1. S'assurer que l'ACK final atteint le distant
    2. Empêcher les anciens segments d'interférer avec les nouvelles connexions

Transitions d'État Clés

Établissement de Connexion (Poignée de Main à Trois Voies)

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

Fermeture de Connexion (Poignée de Main à Quatre Voies)

Fermeture Active:
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

Fermeture Passive:
ESTABLISHED --> (receive FIN) --> CLOSE-WAIT
CLOSE-WAIT --> (application close) --> LAST-ACK
LAST-ACK --> (receive ACK) --> CLOSED

Ouverture Simultanée

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

Fermeture Simultanée

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

Importance de l'État TIME-WAIT

Pourquoi TIME-WAIT est-il Nécessaire?

  1. Assurer une Fermeture Fiable:

    • Si l'ACK final est perdu, le distant retransmettra FIN
    • L'état TIME-WAIT garantit la capacité de répondre au FIN retransmis
  2. Empêcher l'Interférence de l'Ancienne Connexion:

    • D'anciens segments retardés peuvent exister dans le réseau
    • Attendre 2MSL garantit que les anciens segments disparaissent du réseau
    • Empêche les anciens segments d'être confondus avec des données valides par de nouvelles connexions

Temps 2MSL:

  • MSL (Maximum Segment Lifetime): Temps maximum qu'un segment peut vivre dans le réseau
  • Typiquement MSL = 2 minutes
  • Donc TIME-WAIT = 2MSL = 4 minutes
  • Certaines implémentations utilisent des temps plus courts (par ex., 30 ou 60 secondes)

Note: Pour la logique complète de transition d'état et la gestion des cas limites, référez-vous à la spécification complète dans RFC 9293.