当前位置: 主页 > 运维经验 > 运维故障 >

如何解决TIME_WAIT过多的解决办法(附Socket中的T(3)

时间:2013-04-03 23:52来源:转载 作者:网络 点击:
A: Andrew Gierth server程序总是应该在调用bind()之前设置SO_REUSEADDR套接字选项。至于 TIME_WAIT状态,你无法避免,那是TCP协议的一部分。 Q: 如何避免等待60秒之后
欢迎大家分享自己的文档,请点击查阅:分享方法,Linux系统运维
如果你喜欢这文章,可以点击文章结尾处百度分享,分享到你的各种社区收藏,或推荐给朋友……


A: Andrew Gierth 
server程序总是应该在调用bind()之前设置SO_REUSEADDR套接字选项。至于 
TIME_WAIT状态,你无法避免,那是TCP协议的一部分。 

Q: 如何避免等待60秒之后才能重启服务 

A: Erik Max Francis 

使用setsockopt,比如 

-------------------------------------------------------------------------- 
int option = 1; 

if ( setsockopt ( masterSocket, SOL_SOCKET, SO_REUSEADDR, &option, 
sizeof( option ) ) < 0 ) 

die( "setsockopt" ); 

-------------------------------------------------------------------------- 

Q: 编写 TCP/SOCK_STREAM 服务程序时,SO_REUSEADDR到底什么意思? 

A: 这个套接字选项通知内核,如果端口忙,但TCP状态位于 TIME_WAIT ,可以重用 
端口。如果端口忙,而TCP状态位于其他状态,重用端口时依旧得到一个错误信息, 
指明"地址已经使用中"。如果你的服务程序停止后想立即重启,而新套接字依旧 
使用同一端口,此时 SO_REUSEADDR 选项非常有用。必须意识到,此时任何非期 
望数据到达,都可能导致服务程序反应混乱,不过这只是一种可能,事实上很不 
可能。 

一个套接字由相关五元组构成,协议、本地地址、本地端口、远程地址、远程端 
口。SO_REUSEADDR 仅仅表示可以重用本地本地地址、本地端口,整个相关五元组 
还是唯一确定的。所以,重启后的服务程序有可能收到非期望数据。必须慎重使 
用 SO_REUSEADDR 选项。 

Q: 在客户机/服务器编程中(TCP/SOCK_STREAM),如何理解TCP自动机 TIME_WAIT 状 
态? 

A: W. Richard Stevens <1999年逝世,享年49岁> 

下面我来解释一下 TIME_WAIT 状态,这些在<> 
中2.6节解释很清楚了。 

MSL(最大分段生存期)指明TCP报文在Internet上最长生存时间,每个具体的TCP实现 
都必须选择一个确定的MSL值。RFC 1122建议是2分钟,但BSD传统实现采用了30秒。 

TIME_WAIT 状态最大保持时间是2 * MSL,也就是1-4分钟。 

IP头部有一个TTL,最大值255。尽管TTL的单位不是秒(根本和时间无关),我们仍需 
假设,TTL为255的TCP报文在Internet上生存时间不能超过MSL。 

TCP报文在传送过程中可能因为路由故障被迫缓冲延迟、选择非最优路径等等,结果 
发送方TCP机制开始超时重传。前一个TCP报文可以称为"漫游TCP重复报文",后一个 
TCP报文可以称为"超时重传TCP重复报文",作为面向连接的可靠协议,TCP实现必须 
正确处理这种重复报文,因为二者可能最终都到达。 

一个通常的TCP连接终止可以用图描述如下: 

client server 
FIN M 
close -----------------> (被动关闭) 
ACK M+1 
<----------------- 
FIN N 
<----------------- close 
ACK N+1 
-----------------> 

为什么需要 TIME_WAIT 状态? 

假设最终的ACK丢失,server将重发FIN,client必须维护TCP状态信息以便可以重发 
最终的ACK,否则会发送RST,结果server认为发生错误。TCP实现必须可靠地终止连 

转载请注明linux系统运维
http://www.linuxyw.com/linux/yunweiguzhang/20130403/18.html

------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
验证码: 点击我更换图片
栏目列表
推荐内容