Was sind die Zustände CLOSE_WAIT und TIME_WAIT?


166

Wenn ich netstat -aauf meinem Windows - Rechner, erhalte ich eine Liste der Ports mit einem der vier Zustände:

- LISTENING
- CLOSE_WAIT
- TIME_WAIT
- ESTABLISHED

Was tun CLOSE_WAITund TIME_WAITbedeuten / anzeigen?



siehe 'man netstat', scrolle
MaQleod

1
Shameless Stecker zu einer Antwort auf unsere sistersite Server Fehler .
Hennes

Antworten:


179

Aufgrund der Funktionsweise von TCP / IP können Verbindungen nicht sofort geschlossen werden. Pakete können unordentlich ankommen oder erneut übertragen werden, nachdem die Verbindung geschlossen wurde. CLOSE_WAIT zeigt an, dass der Remote-Endpunkt (andere Seite der Verbindung) die Verbindung geschlossen hat. TIME_WAIT zeigt an, dass der lokale Endpunkt (diese Seite) die Verbindung geschlossen hat. Die Verbindung wird aufrechterhalten, damit verspätete Pakete an die Verbindung angepasst und entsprechend behandelt werden können. Die Verbindungen werden entfernt, wenn die Zeit innerhalb von vier Minuten abgelaufen ist. Weitere Informationen finden Sie unter http://en.wikipedia.org/wiki/Transmission_Control_Protocol .


Aber heißt das nicht, dass die Pakete auch dann von der Anwendung verworfen werden, wenn sie nach der Rückkehr der Funktion eintreffen?
MonsterMMORPG

@MonsterMMORPG Pakete, die nach dem Schließen der Verbindung nicht in der richtigen Reihenfolge eintreffen, werden vom Netzwerkstapel verarbeitet. Diese können normalerweise gemäß den normalen Regeln für doppelte Pakete sicher verworfen werden. Pakete, die mit einer unbekannten aktiven Verbindung in Beziehung zu stehen scheinen, werden normalerweise verworfen und generieren eine Antwort. Die WAIT-Staaten schützen vor diesem Verkehr.
BillThor

29

Grundsätzlich bedeuten die "WAIT" -Zustände, dass eine Seite die Verbindung geschlossen hat, die endgültige Bestätigung des Abschlusses jedoch aussteht.

Siehe zB dieses Diagramm der TCP-Zustände für Details:

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


14
Dies beschreibt genau CLOSE_WAIT aber nicht TIME_WAIT. TIME_WAIT gibt an, dass die lokale Anwendung die Verbindung geschlossen und die andere Seite eine eigene FIN bestätigt und gesendet hat. Wir warten jetzt auf doppelte Streupakete, die einen neuen Benutzer desselben Ports verärgern könnten.
Chris Smowton

1
@ ChrisSmowton, wer verwendet die richtige Terminologie? Das Diagramm oder netstat? ( vgl. )
Pacerier

@ Pacerier Ich denke, sie passen zusammen - wo sind sie Ihrer Meinung nach nicht einverstanden?
Chris Smowton

@ChrisSmowton Das bedeutet also, dass der nächste Portbesitzer möglicherweise zusätzliche Bytes erhält. Dies kann die Antwort unterbrechen, wenn TIME_WAIT = 0 gesetzt wird.
MonsterMMORPG

Möglich, aber sehr unwahrscheinlich, da die Sequenznummern übereinstimmen müssten, damit die Anwendung das Rogue-Paket im Stream sehen kann, oder der Empfänger das anscheinend nicht in der richtigen Reihenfolge befindliche Paket puffern muss, bis die richtige Sequenznummer vorliegt. Ich weiß nicht genug über praktische Implementierungen, um zu sagen, ob letztere in der Praxis durchgeführt werden.
Chris Smowton

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.