Warum unter Windows 7 / PuTTY TCP-Verbindungen auch bei sehr kurzen Ausfällen unterbrochen werden?

15

Ich besitze ein kleines lokales Netzwerk, das auf einem eigenen WLAN aufsteckt, und verwende sshunter OS X -oServerAliveInterval=240und PuTTY 0.62 unter Windows 7 Professional, um Verbindungen zu Linode, Hetzner und anderen Servern herzustellen.

Mit PuTTY wähle ich ConnectionSending of null packets to keep session activebis 240. Das Enable TCP keepalives (SO_KEEPALIVE option)ist standardmäßig ausgeschaltet.

Wenn mein Internet für ungefähr eine Minute vorübergehend außer Betrieb ist (ich muss mich im Captive-Portal erneut authentifizieren), verliert PuTTY fast immer alle offenen SSH-Sitzungen, die ich habe, und insbesondere diejenigen, bei denen irgendeine Aktivität stattgefunden hat, außer OpenSSH unter OS X Verliert nie eine Sitzung, solange mein Internet innerhalb von ein oder zwei Minuten wiederhergestellt ist, auch wenn ich tatsächlich versuche, etwas in ssh einzugeben, und die gesamten 60 Sekunden lang keine Antwort sehe, bis meine Verbindung wieder aktiv ist. (So ​​weiß ich sicher, dass NAT-Zustände immer erhalten bleiben.)

Kann ich Windows / PuTTY daran hindern, gute Verbindungen zu verwerfen?

Es scheint mir, als ob SO_KEEPALIVE oder so in Windows standardmäßig aktiviert ist und die Zeitüberschreitung für die Erkennung veralteter Verbindungen viel zu gering ist. Ich würde es gerne auf etwas mehr als ein paar Sekunden erhöhen, ähnlich wie OS X gegen diese kurzen vorübergehenden Ausfälle immun ist, solange der Ausfall nur ein paar hundert Sekunden beträgt und unter dem Wert von -oServerAliveInterval(times ServerAliveCountMax) liegt.

cnst
quelle
Wenn ich nur schreibe, um zu sagen, dass ich das gleiche Problem habe, und um zu stimmen ... werde ich diese Frage beobachten. Ich nehme an, es hat etwas mit der Implementierung des Netzwerktreibers unter Windows zu tun.
allquixotic
Ich benutze Putty seit 10 Jahren und habe von Anfang an nach einer Lösung dafür gesucht. Dieser Schmerzpunkt kann nur gemildert, nicht gelöst werden. Putty erfordert eine 100.00% zuverlässige Internetverbindung und 0.00% verworfene Pakete. In der neuen Welt des Always-Spotty-Internet wird Putty im Laufe der Jahre immer weniger nützlich, da es nur noch wenige Minuten auf einmal funktionieren kann, bevor Sie Ihre Arbeit unterbrechen und Putty neu starten und die Verbindung wiederherstellen müssen Klicken Sie dann auf die Stelle, an der Sie aufgehört haben, um die beschädigten Dateien zu löschen, und versuchen Sie, Ihre Arbeit vor dem nächsten Ausfall zu erledigen.
Eric Leschinski
@EricLeschinski, du bist falsch. Diese in dieser Frage umrissene Abhilfe funktioniert einwandfrei. Ich habe meine IPv4-Verbindungen seit sehr, sehr langer Zeit nicht mehr unterbrochen. (Abgesehen von Fällen, in denen sich die gesamte IPv4-Adresse ändert oder ich schlafe usw. - in diesen Fällen moshist dies eine bessere Alternative.)
27.

Antworten:

8

http://www.chiark.greenend.org.uk/~sgtatham/putty/faq.html#faq-timeout


Es scheint, dass TcpMaxDataRetransmissions(REG_DWORD) dies direkt beeinflusst. Der Wert kann mit ergänzt HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameterswerden regedit.exe(der Schlüssel fehlt standardmäßig, Sie müssen ihn also zuerst hinzufügen, um ihn zu ändern). Wenn deaktiviert, ist es 5. Fügen Sie es hinzu und setzen Sie es mindestens auf f(15) und starten Sie es neu.


Der Standardwert von 5 scheint völlig unzureichend zu sein, um Verbindungen bei kurzen und vorübergehenden Netzwerkausfällen aufrechtzuerhalten. Sie würden innerhalb weniger Sekunden eine Auszeit bekommen. Ich habe diesen TcpMaxDataRetransmissionsSchlüssel zur Registrierung hinzugefügt und seinen Wert auf f(15) gesetzt, den Computer neu gestartet und nach dem Ausführen sysctl net.inet.ip.forwarding=0auf dem Router direkt vor dem Eingeben eines Zeichens in PuTTY das Zeichen nach dem Aktivieren der Weiterleitung wieder zu mir zurückgesendet auf meinem Router nach 5 Minuten Wartezeit (Ich habe getestet, dass bei einem Wert von 0x0000000c (12) die Verbindung genau 7 Minuten nach dem ersten Versuch, während eines Ausfalls ein Paket zu senden, getrennt wird). Vor dem Neustart unterbrach PuTTY die Verbindung innerhalb weniger Sekunden. Beachten Sie, dass ein Neustart erforderlich war - zumindest unter Windows 7 Professional.Das einfache Ändern der Registrierung hat keine Auswirkungen auf bestehende oder neue Verbindungen ! In Windows ändert sich nie etwas!

Währenddessen kann der Standardwert (1 Sek.) Hinzugefügt und KeepAliveIntervalauf 60000Dezimal (60 Sek.) Gesetzt werden. 1000In meinem speziellen Fall sollte dies jedoch keine Auswirkung haben, da TCP-Keepalives nicht aktiviert waren.

cnst
quelle