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?

Laser
quelle
siehe 'man netstat', scrolle
MaQleod
1
Shameless Stecker zu einer Antwort auf unsere sistersite Server Fehler .
Hennes
Cross site dupe: askubuntu.com/questions/538443/…
Mokubai

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 .

BillThor
quelle
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

sleske
quelle
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
1

TIME_WAIT repräsentiert das Warten auf genügend Zeit, um sicherzustellen, dass Remote-TCP die ACK seiner FIN-Anforderung empfangen hat. Siehe en.wikipedia.org/wiki/Transmission_Control_Protocol (und auch RFC 793)

Denio Mariz
quelle
1
Was trägt dies zu den Informationen bei, die in den vorhandenen Antworten enthalten sind?
Fixer1234
Fügt einen Verweis auf RFC 793
Denio Mariz,