为什么Windows 7 / PuTTY甚至在非常短暂的中断时仍会断开TCP连接?


15

我有一个小型局域网,可以ssh在自带的WiFi 上-oServerAliveInterval=240piggy 带,并且在OS X 和Windows 7 Professional上的PuTTY 0.62上使用,可以建立与我的Linode,Hetzner和其他服务器的连接。

使用PuTTY,我选择ConnectionSending of null packets to keep session active到240。Enable TCP keepalives (SO_KEEPALIVE option)默认情况下,该按钮为off。

当我的Internet暂时关闭大约一分钟(必须在强制门户上重新进行身份验证)时,PuTTY几乎总是会丢失我拥有的所有打开的ssh会话,尤其是那些进行任何活动但在OS X上使用OpenSSH的会话只要我的Internet在大约一两分钟内恢复,就不会丢失任何会话,即使我实际上尝试在ssh中键入内容,并且在整个60秒钟左右都看不到答复,直到我的连接再次恢复活动为止。(因此,我确定可以始终保留NAT状态。)

我可以阻止Windows / PuTTY抢先丢弃良好的连接吗?

在我看来,SO_KEEPALIVE或类似的东西实际上在Windows中默认情况下处于启用状态,并且检测陈旧连接的超时太小了。我想将其增加到几秒钟以上,就像OS X如何避免短暂的临时中断一样,只要中断只有几百秒且低于-oServerAliveInterval(times ServerAliveCountMax)的值。


只是写信说我也有同样的问题并赞成...将关注这个问题。我认为这与Windows上的网络驱动程序实现有关。
allquixotic

我已经使用腻子已有10年了,从一开始就一直在寻找解决方案。这个痛苦点只能缓解,不能解决。腻子要求100.00%的可靠互联网连接和0.00%的丢包。在无处不在的始终存在Internet的新世界中,随着时间的流逝,腻子的用途越来越少,因为它只能一次工作几分钟,然后中断工作,并且必须重新启动腻子,重新连接,然后从上次中断的地方继续工作,破坏损坏的文件,并尝试在下次中断之前完成工作。
Eric Leschinski 2014年

@EricLeschinski,您不正确。这个问题中概述的缓解措施效果很好,很长一段时间以来我都没有中断过IPv4连接。(除了整个IPv4地址更改的情况,或者我睡个觉等情况-对于这些情况,mosh是更好的选择。)
cnst 2014年

Answers:


8

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


似乎TcpMaxDataRetransmissions(REG_DWORD)直接影响了这一点。该值可以被添加到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parametersregedit.exe(关键是在默认情况下丢失,所以你首先必须将它添加,以改变它)。取消设置时为5。 添加它,并将其至少设置为f(15),然后重新启动。


默认值5似乎不足以在短暂和临时的网络中断期间保持连接。您会在几秒钟内收到超时。我已将此TcpMaxDataRetransmissions注册表项添加到注册表中,并将其值设置为f(15),重新启动了计算机,然后在sysctl net.inet.ip.forwarding=0路由器上进行了操作,然后在PuTTY中键入字符之前,在启用了转发功能后,该字符回显了我等待5分钟后在我的路由器上运行(我对其进行了测试,以确定值0x0000000c(12)使连接在中断期间首次尝试发送数据包后恰好7分钟断开)。在重新启动之前,PuTTY会在几秒钟内立即使连接超时。请注意,必须重新启动-至少在Windows 7 Professional上,仅仅更改注册表不会对现有连接或新连接都没有影响!Windows没有任何变化!

同时,它也可能会添加默认的未设置值(1 sec)并设置KeepAliveInterval60000十进制(60 sec)1000,但在上述特定情况下,由于未启用TCP keepalive,因此对我的特定情况没有任何影响。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.