Perché Windows 7 / PuTTY rilasciano connessioni TCP anche in caso di interruzioni molto brevi?


15

Ho una piccola rete locale che trasporta sulle spalle su un WiFi in cattività e lo uso sshsu OS X con -oServerAliveInterval=240e PuTTY 0.62 su Windows 7 Professional per stabilire connessioni a Linode, Hetzner e altri server.

Con PuTTY, seleziono ConnectionSending of null packets to keep session activesu 240. Enable TCP keepalives (SO_KEEPALIVE option)È disattivato, come da impostazione predefinita.

Quando la mia connessione Internet è temporaneamente inattiva per circa un minuto (devo eseguire nuovamente l'autenticazione sul portale captive), PuTTY perde quasi sempre tutte le sessioni ssh aperte che ho, e in particolare quelle in cui c'è stato qualsiasi tipo di attività, ma OpenSSH su OS X non perde mai alcuna sessione fintanto che la mia connessione Internet viene ripristinata entro circa un minuto o due, anche se in realtà provo a digitare qualcosa in ssh e non vedo risposta per tutti i 60 secondi circa, fino a quando la mia connessione non sarà di nuovo attiva. (Quindi so per certo che gli stati NAT sono sempre preservati.)

Posso impedire a Windows / PuTTY di scartare preventivamente buone connessioni?

Mi sembra che SO_KEEPALIVE o alcuni di questi siano effettivamente attivi per impostazione predefinita in Windows e il timeout per il rilevamento di connessioni obsolete sia troppo piccolo. Vorrei aumentarlo a qualcosa di più di un paio di secondi, analogamente a come OS X è immune da queste brevi interruzioni temporanee, purché l'interruzione sia solo di un paio di centinaia di secondi ed è inferiore al valore di -oServerAliveInterval(volte ServerAliveCountMax).


Scrivo solo per dire che ho lo stesso problema e per votare ... guarderò questa domanda. Presumo che abbia qualcosa a che fare con l'implementazione del driver di rete su Windows.
allquixotic

Uso lo stucco da 10 anni e non ho mai cercato una soluzione fin dall'inizio. Questo punto di dolore può essere solo mitigato, non risolto. Putty richiede una connessione Internet affidabile al 100,00% e pacchetti scartati allo 0,00%. Nel nuovo mondo di Internet sempre spotty ovunque, lo stucco sta diventando sempre meno utile col passare degli anni perché può funzionare solo per pochi minuti alla volta prima che tu abbia interrotto il tuo lavoro e debba riavviare lo stucco, riconnetterti , quindi riprendi da dove eri rimasto, non corrompere i file danneggiati e prova a completare il lavoro prima dell'interruzione successiva.
Eric Leschinski,

@EricLeschinski, non sei corretto. Questa mitigazione delineata in questa domanda funziona bene, non ho interrotto le mie connessioni IPv4 da molto, molto tempo. (A parte i casi in cui l'intera cambiamenti di indirizzo IPv4, o faccio un sonno ecc - per questi casi, moshè un'alternativa migliore.)
CNST

Risposte:


8

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


Sembra che TcpMaxDataRetransmissions(REG_DWORD) influisca direttamente su questo. Il valore può essere aggiunto a HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameterscon regedit.exe(la chiave manca di default, quindi devi prima aggiungerla per cambiarla). Se non impostato - è 5. Aggiungilo e impostalo almeno su f(15) e riavvia.


Il valore predefinito di 5 sembra abbastanza inadeguato per mantenere le connessioni durante interruzioni di rete brevi e temporanee; otterresti un timeout nel giro di un paio di secondi. Ho aggiunto questa TcpMaxDataRetransmissionschiave al registro e impostato il suo valore su f(15), riavviato la macchina e dopo averlo fatto sysctl net.inet.ip.forwarding=0sul router prima di digitare un carattere in PuTTY, mi è stato fatto riecheggiare il personaggio dopo aver abilitato indietro l'inoltro sul mio router dopo aver atteso 5 minuti (l'ho testato per determinare che un valore di 0x0000000c (12) interrompe la connessione esattamente 7 minuti dopo il primo tentativo di invio di un pacchetto durante un'interruzione). Prima del riavvio, PuTTY ha subito il timeout della connessione entro un paio di secondi immediatamente. Tieni presente che è necessario il riavvio, almeno su Windows 7 Professional,la semplice modifica del registro non ha alcun effetto su connessioni esistenti o nuove ! Non cambia mai nulla in Windows!

Nonostante ciò, potrebbe anche aggiungere e impostare KeepAliveIntervalsu 60000decimale (60 sec) dal valore predefinito non impostato di 1000(1 sec), ma non dovrebbe avere alcun effetto nel mio caso specifico come sopra, poiché i keepalive TCP non erano abilitati.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.