J'ai trouvé que la raison pour laquelle le plus proche actif entre dans TIME WAIT est de s'assurer que le dernier ACK n'est pas perdu. Mais comment savoir si l'ACK final est perdu? Le plus proche passif renverra-t-il le FIN et le plus proche actif saura-t-il que l'ACK a été perdu? Voici une image du TCP FSM.
12
Réponses:
Oui. Citant du volume illustré TCP / IP 1 , dans la section Gestion de la connexion TCP:
Il y a un délai d'attente. Une fois dedans
LAST_ACK
, le plus proche passif renverraFIN
quand il y a un timeout, en supposant qu'il a été perdu. S'il était en effet perdu, alors le plus proche actif recevra finalement le retransmisFIN
et entreraTIME_WAIT
. Si leFIN
n'a pas été perdu mais que la finale aACK
été perdue, alors le plus proche actif est dedansTIME_WAIT
et reçoit àFIN
nouveau. Lorsque cela se produit - recevoir unFIN
inTIME_WAIT
- leACK
est retransmis.La valeur de délai d'attente dans
TIME_WAIT
n'est PAS utilisée à des fins de retransmission. Lorsqu'il y a un délai d'attenteTIME_WAIT
, il est supposé que la finale aACK
été livrée avec succès car le plus proche passif n'a pas retransmis lesFIN
paquets. Donc, le délai d'attenteTIME_WAIT
n'est qu'une période de temps après laquelle nous pouvons supposer que si l'autre extrémité n'a rien envoyé, c'est parce qu'il a reçu la finaleACK
et fermé la connexion.la source
Parce qu'il ne l'a pas reçu dans le délai imparti. Je sais que c'est une réponse "duh", mais c'est exactement pourquoi ces états et délais d'expiration existent.
Non, sauf si d'autres paquets arrivent pour ce flux, ce qui entraînerait l'envoi de "RST" (réinitialisation).
L'ensemble du processus est une machine à états compliquée pour exécuter un arrêt ordonné malgré la possibilité de pannes de réseau. Les réseaux se rompent, les liens rencontrent des erreurs, les liens deviennent saturés et doivent abandonner les paquets, les appareils tombent en panne, etc. En tant qu'exercice, exécutez l'arborescence d'état pour une connexion active lorsque l'un des points finaux disparaît juste (par exemple, panne de courant).
TL; DR Cet arbre d'état est conçu pour gérer tous les modes de défaillance possibles.
la source
Le but de TIME_WAIT est de permettre au réseau de distinguer les paquets qui arrivent comme appartenant à la "vieille connexion existante" d'une nouvelle. La recommandation est de régler le temporisateur TIME_WAIT sur deux fois la durée de vie maximale du segment (MSL), sur mon système, le MSL est de 1 minute, donc les connexions restent dans l'état TIME_WAIT pendant 2 minutes.
Passé ce délai, les paquets qui arrivent ne sont plus associés à l'ancienne connexion.
TIME_WAIT n'est pas directement attendu pour envoyer des paquets ACK; qui est piloté par les états CLOSE_WAIT et FIN_WAIT. Lorsque vous arrivez à l'état TIME_WAIT, le socket est déjà fermé.
Références: http://www.tcpipguide.com/free/t_TCPConnectionTermination-3.htm https://en.wikipedia.org/wiki/Maximum_segment_lifetime http://www.lognormal.com/blog/2012/09/27/ linux-tcpip-tuning /
la source