TCP连接寿命

TCP连接寿命,tcp,Tcp,客户机/服务器TCP连接在野外可以持续多长时间 我希望它保持永久连接,但是事情发生了,所以客户端必须重新连接。在什么情况下,我应该说代码中有问题,而不是某些外部设备有问题?这其实并不重要,您应该将代码设计为自动重新连接,如果这是所需的行为。真的没有办法判断。TCP本身没有任何东西会导致连接在一段时间后中断。可靠连接上的某个人可能有多年的正常运行时间,而另一个连接上的某个人可能需要每5分钟重新连接一次。没有办法判断甚至猜测。选择一个值。每小时滴一滴大概可以。5分钟内出现10次意外连接中断可能表示出

客户机/服务器TCP连接在野外可以持续多长时间


我希望它保持永久连接,但是事情发生了,所以客户端必须重新连接。在什么情况下,我应该说代码中有问题,而不是某些外部设备有问题?

这其实并不重要,您应该将代码设计为自动重新连接,如果这是所需的行为。

真的没有办法判断。TCP本身没有任何东西会导致连接在一段时间后中断。可靠连接上的某个人可能有多年的正常运行时间,而另一个连接上的某个人可能需要每5分钟重新连接一次。没有办法判断甚至猜测。

选择一个值。每小时滴一滴大概可以。5分钟内出现10次意外连接中断可能表示出现问题

TCP连接通常会持续大约两个小时,没有任何流量。任何一端都可以发送keep-alive数据包,我认为这只是最后一个接收到的数据包上的一个ACK。这通常可以在每个套接字上设置,或者默认情况下在每个TCP连接上设置


应用程序级别保持活动状态也是可能的。对于telnet风格的协议,如FTP、SMTP、POP或IMAP,例如发送返回、换行和返回命令提示符。

您需要定期通过连接发送一些数据以保持其活动性-许多操作系统或防火墙将删除非活动连接。

我同意Zan Lynx的观点。虽然不能保证,但如果不存在连接或带宽问题,您可以通过在连接上发送数据来几乎无限期地保持连接

一般来说,我会选择应用程序级别的保持活动方法,尽管这通常是因为它在客户机规范中,所以我不得不这样做。但只要每隔一两分钟发送一小段数据,你就可以得到某种形式的确认

是否将一次失败确认为连接失败取决于您。一般来说,这就是我过去所做的,尽管有一个案例,我不得不连续等待三次失败的响应才能断开连接,因为连接另一端的应用程序在响应“你在吗?”请求时非常不稳定

如果连接失败,即使机器在同一个网络上,在某个时候也可能会失败,那么就尝试重新建立连接。如果失败了一定次数,那么您就有问题了。如果您的连接在连接一段时间后持续失败,那么您就有问题了。在这两种情况下,很可能是网络问题,而不是代码问题,或者是机器上的TCP/IP堆栈问题(众所周知:我在旧版本的QNX上遇到了这个问题——它只是随机失效)。已经说过,您可能有软件问题,唯一确定的方法通常是附加一个调试器,或者在那里进行一些登录。例如,如果您始终可以成功连接,但在一段时间后,即使在重新连接之后,您也无法获得确认,那么您的服务器可能会死锁,或者陷入循环或其他情况

真正有用的是在各种负载条件下设置一系列长时间运行的测试,从发送keep alive you there?/ack请求和响应到彻底破坏服务器。这通常会让你对你的软件组件更有信心,并且在解决一些非常奇怪的问题时非常有用,这些问题不一定会导致你的连接出现问题,尽管它们可能会导致事务发生问题。例如,我曾经在编写一个电信应用服务器,它提供数字翻译等服务,而我们只是让它一次运行几天。问题是,当周六到来的时候,整整一天,它都会拒绝每一个来电请求,这相当于数百万个电话,我们不知道为什么。事实证明,这是因为某些日期转换代码中的一个打字错误,只在星期六造成了一个问题


希望能有所帮助。

我认为这里最重要的想法是理论与实践的对比

最初的理论是连接没有生命周期。如果你有一个连接,它永远保持开放,即使没有流量,直到一个事件导致它关闭

新的理论是,大多数操作系统版本都开启了“保持活动”计时器。这意味着,只要另一端的系统响应偶尔的TCP级交换,连接将永远持续

实际上,许多连接会在一段时间后终止,有各种标准和情况

两个非常好的例子是:远程客户端正在使用DHCP,租约到期,IP地址更改

另一个例子是防火墙,它似乎越来越智能化,可以根据任何高级标准(尤其是空闲时间)识别保持活动的流量和真实数据,以及紧密的连接


如何实现重新连接逻辑在很大程度上取决于您的体系结构、工作环境和性能目标。

TCP keepalive是一个随操作系统而变化的计时器,因此在特定环境中,2小时可能会有所不同。我知道这是一个旧版本,但由于它尚未被删除,我想指出它是不正确的。连接“通常不会持续大约两个小时而没有任何流量”。除非端点离开(例如重新启动)或介入设备(防火墙)“忘记”连接,否则连接将永远保持连接。即便如此,它似乎也会一直持续到端点尝试发送数据时,此时防火墙会重新设置数据。@DavidHoelzer:当时,根据我的经验,每隔两个小时就会有什么东西重置连接。NAT、防火墙、随机DSL网桥重置、PPPoE重新连接、DHCP地址更改,谁知道会发生什么。警察局