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:
- S'assurer que l'ACK final atteint le distant
- 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?
-
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
-
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.