Por que o Windows 7 / PuTTY descarta conexões TCP, mesmo em breves interrupções?


15

Eu tenho uma pequena rede local que pega carona em um WiFi cativo e uso sshno OS X com -oServerAliveInterval=240PuTTY 0.62 no Windows 7 Professional para estabelecer conexões com meu Linode, Hetzner e outros servidores.

Com PuTTY, seleciono ConnectionSending of null packets to keep session activea 240. O Enable TCP keepalives (SO_KEEPALIVE option)está desativado, conforme os padrões.

Quando minha internet fica temporariamente inativa por cerca de um minuto (é necessário se autenticar novamente no portal cativo), o PuTTY quase sempre perde todas as sessões abertas de ssh que eu tenho, e especialmente aquelas onde havia algum tipo de atividade, mas o OpenSSH no OS X nunca perde nenhuma sessão desde que minha internet volte a funcionar em cerca de um minuto ou dois, mesmo que eu tente digitar algo no ssh e não veja resposta por 60 segundos inteiros, até que minha conexão esteja ativa novamente. (Portanto, tenho certeza de que os estados NAT sempre são preservados.)

Posso parar o Windows / PuTTY de descartar preventivamente boas conexões?

Parece-me que SO_KEEPALIVE ou algo parecido está realmente ativado por padrão no Windows, e o tempo limite para detectar conexões obsoletas é muito pequeno. Gostaria de aumentá-lo para algo mais do que alguns segundos, da mesma forma que o OS X é imune a essas breves interrupções temporárias, desde que a interrupção seja de apenas algumas centenas de segundos e esteja abaixo do valor de -oServerAliveInterval(times ServerAliveCountMax).


Basta escrever para dizer que tenho o mesmo problema e para votar ... estará assistindo a essa pergunta. Suponho que tenha algo a ver com a implementação do driver de rede no Windows.
allquixotic

Eu uso massa de vidraceiro há 10 anos e tenho procurado uma solução para isso desde o início. Esse ponto de dor só pode ser mitigado, não resolvido. O Putty requer uma conexão à Internet 100,00% confiável e pacotes descartados de 0,00%. No novo mundo da Internet sempre irregular, em todos os lugares, a massa está se tornando cada vez menos útil com o passar dos anos, porque só pode funcionar por alguns minutos de cada vez antes que você interrompa seu trabalho e precise reiniciar a massa, reconectar , retire o local de onde parou, corrompa os arquivos corrompidos e tente concluir seu trabalho antes da próxima interrupção.
Eric Leschinski 26/10

@EricLeschinski, você está incorreto. Essa atenuação descrita nesta pergunta funciona muito bem, não tenho minhas conexões IPv4 interrompidas há muito, muito tempo. (Além de casos em todo o mudanças de endereços IPv4, ou eu faço um sono etc - para aqueles casos, moshé uma alternativa melhor.)
CNST

Respostas:


8

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


Parece que TcpMaxDataRetransmissions(REG_DWORD) afeta diretamente isso. O valor pode ser adicionado a HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameterswith regedit.exe(a chave está ausente por padrão, você deve primeiro adicioná-lo para alterá-lo). Quando desativado - é 5. Adicione-o e configure-o pelo menos para f(15) e reinicie.


O valor padrão 5 parece bastante inadequado para manter as conexões durante interrupções breves e temporárias da rede; você receberá um tempo limite em questão de segundos. Adicionei essa TcpMaxDataRetransmissionschave ao registro e defina seu valor como f(15), reiniciei a máquina e, depois de fazer sysctl net.inet.ip.forwarding=0o roteador antes de digitar um caractere no PuTTY, o eco retornou para mim depois de ativar o encaminhamento no meu roteador após aguardar 5 minutos (testei para determinar que um valor 0x0000000c (12) faz com que a conexão seja interrompida exatamente 7 minutos após a primeira tentativa de enviar um pacote durante uma interrupção). Antes da reinicialização, o PuTTY atingia o tempo limite da conexão em alguns segundos imediatamente. Observe que a reinicialização foi necessária - pelo menos no Windows 7 Professional,simplesmente alterar o registro não afeta as conexões existentes nem as novas ! Nada muda no Windows!

Enquanto isso, também pode adicionar e definir KeepAliveIntervalcomo 60000decimal (60 s) o valor padrão não definido de 1000(1 s), mas não deve ter nenhum efeito no meu caso específico, como acima, pois as keepalives do TCP não foram ativadas.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.