Halten Sie die Semantik ESTABLISHED und TIME_WAIT am Leben

1626
Justin Wood

Wenn ich den folgenden Befehl verwende

netstat -ant | grep :9111 | awk '' | sort | uniq -c | sort -n 

Ich bekomme folgendes

 1 LAST_ACK 1 LISTEN 2 SYN_RECV 7 FIN_WAIT1 51 ESTABLISHED 71 FIN_WAIT2 8779 TIME_WAIT 

Ich glaube, ich verstehe, TIME_WAITwas bedeutet, dass ich die Verbindung innerhalb meiner Anwendung geschlossen habe und es einige Zeit wartet, um sicherzustellen, dass der Client die Verbindung erfolgreich geschlossen hat. Bitte korrigieren Sie mich, wenn ich damit nicht recht habe.

Meine Frage ist um Keep Alive Requests. Die große Mehrheit des Verkehrs, den ich erwarte, sollte am Leben bleiben.

  1. Wann würde eine Keep-Alive-Verbindung in die TIME_WAITPeriode eingehen ?
  2. Ist es möglich, dass eine kep alive Verbindung zu gehen aus TIME_WAITzu ESTABLISHED? Wenn ja, unter welchen Bedingungen?
3

1 Antwort auf die Frage

4
artistoex

Unabhängig davon, ob der Keep-Alive-Mechanismus auf beiden Seiten aktiviert oder deaktiviert ist: Eine Verbindung wird niemals von TIME_WAIT zu ESTABLISHED gehen. TIME_WAIT ist der Status eines Socketpaares aus einer kürzlich geschlossenen Verbindung, die vorübergehend nicht verwendet wird.

Eine Verbindung geht in den Zustand TIME_WAIT über, nachdem das lokale Ende erfolgreich einen Verbindungsabbruch initiiert hat ("aktiver SCHLIESSEN") und vom entfernten Ende das Signal erhalten hat, dass auch die Verbindung geschlossen werden soll. Das Betriebssystem hält dann an dem Socket-Paar fest und wartet auf zwei MSLs, bevor es für eine neue Verbindung freigegeben wird. Dadurch wird sichergestellt, dass kein Segment der alten Verbindung mit einer neu erstellten Verbindung interferiert, was dazu führt, dass das Socket-Paar der alten Verbindung wiederverwendet wird.

Funktioniert das wirklich? Warum genügt es, dass nur das Socket-Paar des aktiv schließenden Endes TIME_WAIT eintritt? Weil die Wiederverwendung von Socketpaaren an einem Ende die Wiederverwendung von Socketpaaren am anderen Ende impliziert. Was ist, wenn das aktiv schließende Ende innerhalb von zwei MSLs abstürzt und neu gestartet wird? Dann wird die Ruhezeit eingegeben, während der keine Verbindung hergestellt wird.

TCP state machine