注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

gmd20的个人空间

// 编程和生活

 
 
 

日志

 
 

tcp重传超时和keepalive选项  

2013-11-05 15:41:08|  分类: 程序设计 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

有同事发现,升级系统时,有的tcp连接在对端(可能在多层网络后面)已经重启的情况下,tcp连接没有收到通知,在差不多15分钟的时间里tcp的重传机制一致在重发网络包,但都没有收到回应。最后上层应用程序的send操作才收到 ETIMEDOUT /* Connection timed out */ 的错误返回码,才能检测到 socket连接已经不正常断开。


在网络上面搜索了一下,这个Linux内核重传多少次和多久才认为socket已经超时,是由下面这两个参数控制的。

https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt

tcp_retries1 - INTEGER
	This value influences the time, after which TCP decides, that
	something is wrong due to unacknowledged RTO retransmissions,
	and reports this suspicion to the network layer.
	See tcp_retries2 for more details.

	RFC 1122 recommends at least 3 retransmissions, which is the
	default.

tcp_retries2 - INTEGER
	This value influences the timeout of an alive TCP connection,
	when RTO retransmissions remain unacknowledged.
	Given a value of N, a hypothetical TCP connection following
	exponential backoff with an initial RTO of TCP_RTO_MIN would
	retransmit N times before killing the connection at the (N+1)th RTO.

	The default value of 15 yields a hypothetical timeout of 924.6
	seconds and is a lower bound for the effective timeout.
	TCP will effectively time out at the first RTO which exceeds the
	hypothetical timeout.

	RFC 1122 recommends at least 100 seconds for the timeout,
	which corresponds to a value of at least 8.



按照这里面的默认的超时924.6秒和实际抓包看到的现象是比较一致的。

?

听说tcp keepalive选项可以快速探测这种 死连接错误?

需要内核里面配置,然后应用程序也启动了才起作用。

http://tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/


  评论这张
 
阅读(515)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017