Frage

Warum ist es, dass TCP-Verbindungen zu einer Loopback-Schnittstelle in TIME_WAIT Ende (Buchse mit SO_DONTLINGER Satz geschlossen), aber identische Verbindungen zu einem anderen Host am Ende nicht in TIME_WAIT (sie sind reset / zerstört sofort)?

Hier sind Szenarien zu verdeutlichen:

(A) Zwei Anwendungen, ein Client und ein Server, auf dem gleichen Windows-Rechner beide laufen. Der Client stellt eine Verbindung mit dem Server über den Loopback-Schnittstelle des Servers (127.0.0.1, Port xxxx), sendet die Daten, empfängt Daten und schließt die Buchse (SO_DONTLINGER gesetzt ist).

Nehmen wir an, dass die Verbindungen sehr kurzlebig, so dass der Client-Anwendung etabliert und eine große Anzahl von Verbindungen pro Sekunde zu zerstören. Das Endergebnis ist, dass die Steckdosen in TIME_WAIT am Ende, und der Kunde schließlich erschöpft seine maximale Anzahl der Steckdosen (unter Windows, ist dies ~ 3900 standardmäßig und wir gehen davon aus, dass dieser Wert in der Registrierung nicht geändert werden).

(B) Gleiche zwei Anwendungen als Szenario (A), aber der Server ist auf einem anderen Host (der Client noch auf Windows ausgeführt wird). Die Anschlüsse sind in jeder Hinsicht identisch, mit der Ausnahme, dass sie nicht für 127.0.0.1 bestimmt sind, aber einige andere IP statt. Hier werden die Verbindungen auf dem Client-Rechner gehen nicht in TIME_WAIT und die Client-Anwendung können weiterhin Verbindungen auf unbestimmte Zeit machen.

Warum die Diskrepanz?

War es hilfreich?

Lösung

Der TIME_WAIT Zustand tritt nur an einem Ende der Verbindung - das Ende, das zuerst geschlossen wird. Für die Loopback-Schnittstelle sind beide Enden auf der gleichen Maschine, so dass Sie immer TIME_WAIT sehen.

In Ihrem anderen Fall versucht auf der anderen Maschine suchen. Ich denke, Sie werden die TIME_WAIT Steckdosen dort sehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top