Que sont les états CLOSE_WAIT et TIME_WAIT?

166

Lorsque je le fais netstat -asur ma machine Windows, je reçois une liste des ports avec l’un des quatre états suivants:

- LISTENING
- CLOSE_WAIT
- TIME_WAIT
- ESTABLISHED

Que font CLOSE_WAITet TIME_WAITsignifient / indiquent?

Lazer
la source
voir 'man netstat', faites
MaQleod
1
Prise sans vergogne à une réponse sur notre défaut de serveur de sistersite .
Hennes
Cross site dupe: askubuntu.com/questions/538443/…
Mokubai

Réponses:

179

En raison du fonctionnement de TCP / IP, les connexions ne peuvent pas être fermées immédiatement. Les paquets peuvent arriver hors service ou être retransmis après la fermeture de la connexion. CLOSE_WAIT indique que le point de terminaison distant (de l'autre côté de la connexion) a fermé la connexion. TIME_WAIT indique que le point de terminaison local (de ce côté) a fermé la connexion. La connexion est conservée afin que tous les paquets retardés puissent être mis en correspondance avec la connexion et gérés de manière appropriée. Les connexions seront supprimées quand ils expireront dans les quatre minutes. Voir http://en.wikipedia.org/wiki/Transmission_Control_Protocol pour plus de détails.

BillThor
la source
Mais cela ne signifie-t-il pas que, même si les paquets arrivent après le retour de la fonction, ils seraient quand même rejetés par l'application?
MonsterMMORPG
@MonsterMMORPG Les paquets qui arrivent en panne après la fermeture de la connexion seront traités par la pile réseau. Celles-ci peuvent généralement être éliminées en toute sécurité conformément aux règles normales de duplication de paquets. Les paquets qui semblent être liés à une connexion active inconnue sont normalement rejetés et génèrent une réponse. Les états WAIT protègent contre ce trafic.
BillThor
29

En gros, les états "WAIT" signifient qu'un côté a fermé la connexion mais que la confirmation finale de la fermeture est en attente.

Voir par exemple ce diagramme d'états TCP pour plus de détails:

http://www.jxos.org/Projects/TCP/tcpstate.html

sleske
la source
14
Ceci décrit avec précision CLOSE_WAIT mais pas TIME_WAIT. TIME_WAIT indique que l'application locale a fermé la connexion et que l'autre partie a accusé réception et a envoyé sa propre FIN. Nous attendons maintenant les paquets en double égarés susceptibles de gêner un nouvel utilisateur du même port.
Chris Smowton
1
@ChrisSmowton, alors qui utilise la bonne terminologie? Le schéma ou netstat? ( cf. )
Pacerier le
@ Pacerier, je pense qu'ils correspondent - en quoi, selon vous, ne sont-ils pas d'accord?
Chris Smowton
@ChrisSmowton Cela signifie donc que le prochain propriétaire du port peut obtenir des octets supplémentaires, ce qui peut interrompre la réponse si nous définissons TIME_WAIT = 0?
MonsterMMORPG
Possible mais très improbable, car les numéros de séquence doivent être identiques pour que l'application puisse voir le paquet non autorisé fusionné dans le flux, ou le destinataire doit mettre en mémoire tampon le paquet apparemment hors d'usage jusqu'à ce que le bon numéro de séquence apparaisse. Je ne connais pas suffisamment les implémentations pratiques pour vous dire si cette dernière est faite dans la pratique.
Chris Smowton
1

TIME_WAIT signifie attendre suffisamment de temps pour être sûr que TCP distant a reçu le ACK de sa demande FIN. Voir en.wikipedia.org/wiki/Transmission_Control_Protocol (et aussi RFC 793)

Denio Mariz
la source
1
Qu'est-ce que cela ajoute aux informations fournies par les réponses existantes?
fixer1234
Ajoute une référence à la RFC 793
Denio Mariz