TCP套接字没有连接超时(TCP Socket no connection timeout)

2019-07-02 16:23发布

我打开一个TCP套接字并将其连接到另一个插座其他地方在网络上。 然后我就可以成功地发送和接收数据。 我有东西发送到插座每一秒的计时器。

然后我粗暴地打断强行失去连接(在这种情况下,拔出以太网电缆)的连接。 我的插座仍然报告它成功地将数据写入了每一秒。 这个持续约1小时30分钟,其中最终给出一个写错误。

什么指定此超时,其中一个插座终于接受另一端消失了? 难道是OS(Ubuntu的11.04),是指从TCP / IP规范,或者是一个插座配置选项?

Answer 1:

拉动网络电缆不会打破TCP连接(1)虽然将中断通信。 您可以将电缆回来,一旦IP连接建立后,所有后台数据将移动。 这是什么使TCP可靠,即使在蜂窝网络。

当TCP发送数据时,希望在应答的ACK。 如果没有出一定的时间内,它重新传送数据并再次等待。 它的传输之间的等待时间为时间一般呈指数增加。

经过一番的重传次数或没有ACK的总时间一定量,TCP会考虑连接“破”。 多少次,要不了多久,取决于你的操作系统和其配置上,但多分钟的顺序上通常将超时。

从Linux的tcp.7手册页 :

   tcp_retries2 (integer; default: 15; since Linux 2.2)
          The maximum number of times a TCP packet is retransmitted in
          established state before giving up.  The default value is 15, which
          corresponds to a duration of approximately between 13 to 30 minutes,
          depending on the retransmission timeout.  The RFC 1122 specified
          minimum limit of 100 seconds is typically deemed too short.

这可能是你要适应变化需要多长时间来检测,如果你的连接已经消失的值。

(1)有例外。 操作系统,当注意到一个电缆被去除,可以通知所有连接应该被认为是“断开的”上层。



文章来源: TCP Socket no connection timeout