我打开一个TCP套接字并将其连接到另一个插座其他地方在网络上。 然后我就可以成功地发送和接收数据。 我有东西发送到插座每一秒的计时器。
然后我粗暴地打断强行失去连接(在这种情况下,拔出以太网电缆)的连接。 我的插座仍然报告它成功地将数据写入了每一秒。 这个持续约1小时30分钟,其中最终给出一个写错误。
什么指定此超时,其中一个插座终于接受另一端消失了? 难道是OS(Ubuntu的11.04),是指从TCP / IP规范,或者是一个插座配置选项?
我打开一个TCP套接字并将其连接到另一个插座其他地方在网络上。 然后我就可以成功地发送和接收数据。 我有东西发送到插座每一秒的计时器。
然后我粗暴地打断强行失去连接(在这种情况下,拔出以太网电缆)的连接。 我的插座仍然报告它成功地将数据写入了每一秒。 这个持续约1小时30分钟,其中最终给出一个写错误。
什么指定此超时,其中一个插座终于接受另一端消失了? 难道是OS(Ubuntu的11.04),是指从TCP / IP规范,或者是一个插座配置选项?
拉动网络电缆不会打破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)有例外。 操作系统,当注意到一个电缆被去除,可以通知所有连接应该被认为是“断开的”上层。