TCP连接生活(TCP Connection Life)

2019-08-20 04:05发布

我多久可以期待一个客户机/服务器的TCP连接将持续在野外?

我希望它一直连接,但事情发生,所以客户端必须重新连接。 在哪一点我说,有一个在,而不是有一些外部设备的问题的代码有问题吗?

Answer 1:

我同意咱山猫。 有没有保证,但你可以通过在其发送的数据几乎无限期地保持连接活着,假设没有连接或带宽问题。

一般来说,我已经走了应用程序级别的保持活动的办法,虽然这有通常是因为它已经在客户端的规范,这样,我不得不这样做。 但是,仅仅发送一些短的数据每隔一两分钟的,到你所期望的某种确认。

无论你算一个不承认作为连接已经失败是你的。 一般来说,这是我在过去所做的那样,虽然有我不得不等待三的情况下,连续的失败响应丢弃连接,因为在连接的另一端的应用程序是关于应对极端片状“你在那里?” 要求。

如果连接失败,这在某些时候它可能会,即使在同一网络上的机器,那么就尝试重新建立它。 如果失败的次数一组号码,然后你有问题。 如果它已经连接了一段时间后,你的连接失败,坚持还是那句话,你有问题。 最有可能在两种情况下,它可能是一些网络问题,而不是你的代码,或者可能与你的机器(在TCP / IP协议栈的问题已经知道:我遇到的问题与此有关的是旧版本的QNX的 - it'd只是随机翻倒)。 说了这么多,你可能有一个软件问题,只有这样,才能知道肯定是经常附加调试器,或者得到一些记录在那里。 例如,如果你总是可以成功连接,但一段时间后,你停止获取的ACK,甚至重新连接后,那么也许您的服务器死锁,或者陷在一个循环或东西。

什么是真正有用的是建立了一系列的长时间运行的测试在各种负载条件下,只需发送永葆你在吗?/ ACK请求和响应,以绝对殴打服务器。 这通常会给你更多的信心,你的软件组件,可在震出一些很奇怪的问题,这将不一定会导致一个问题,您的连接非常有用,虽然他们可能会导致与正在发生的交易问题。 例如,我曾经写所提供的服务,如数字转换的电信应用服务器,我们刚刚离开它同时运行数天。 事情是,当周六来到了,整个一天,它会拒绝进来的每个呼叫请求,这相当于数以百万计的电话,我们不知道为什么。 它原来是因为在某些日期转换代码的单个错字,只有在周六引起的问题。

希望帮助。



Answer 2:

我觉得这里最重要的思想是理论与实践。

该理论认为连接没有寿命。 如果你有一个连接,它停留永远开放,即使没有流量,直到事件导致它关闭。

新的理论是,大多数操作系统的发布已经打开保活定时器。 这意味着连接将永远持续下去,只要在另一端的系统响应偶尔TCP层次的交流。

在现实中,许多连接将时间后终止,与各种标准和情况。

两个真的很好的例子是:远程客户端使用DHCP,租约到期,而IP地址的变化。

另一个例子是防火墙,这似乎是越来越智能化,可以识别保持活动的通信与真实数据,并基于任何高水平的标准有着密切的联系,尤其是空闲时间。

你怎么想实现重新连接逻辑,在很大程度上取决于你的架构,工作环境,你的性能目标。



Answer 3:

它不应该真正的问题,您应该设计自己的代码,如果这是所期望的行为自动重新连接。



Answer 4:

实在没有办法告诉。 没有什么固有的TCP,将导致连接到了一定的时间后,只是下降。 可靠的连接上可能有人有多年的正常运行时间,而有人在不同的连接可能要每5分钟重新连接。 有没有办法告诉甚至猜测。



Answer 5:

你会需要一些数据会通过连接定期保持它活着 - 许多操作系统的防火墙或将下降的非活动连接。



Answer 6:

选择一个值。 一滴每隔一小时可能是罚款。 十大令人意想不到的联系在5分钟内下降可能表明一个问题。

TCP连接通常会持续大约两个小时,没有任何流量。 任何一方都可以发送keep-alive包,这是,我认为,只是对上次接收数据包的ACK。 这通常可以每个插座或默认每个TCP连接上设置。

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



文章来源: TCP Connection Life
标签: tcp