TCP的TIME_WAIT状态

TCP链接的Client和Server拆除链接时,主动close链接的一方会出现该状态,原因有二(以Client主动close为例):

1,如果没有TIME_WAIT状态,Client主动关闭时,Client发送ACK后即关闭本端链接。如果ACK传输过程中丢失的话,Server会重发FIN,Client收到该FIN由于本端链接已经关闭,会发送RST给Server,导致Server端关闭异常。

    如果ACK一直丢失,Server端一直重发FIN,Client在2*MSL时间内一直发送ACK,直到超时后关闭链接,再收到FIN,发送RST,Server端收到RST异常关闭链接。

2,Client主动拆链后,马上以相同的四元组(local ip,local port,remote ip,remote port)和Server建链后,Server如果收到已经拆链的老链接的报文,会认为是新建链的报文,但是实际上seq number等都是错误异常的,该报文是错乱的,可能引起Server端的未知异常。增加TIME_WAIT状态后,Client进入TIME_WAIT时间后2MSL时间内,local port是处于占用状态的,不能再建立新的链接,避免了上述问题。实际应用中可以通过设置 SO_REUSEADDR选项达到不必等待2MSL时间结束再使用此端口。

参考:

http://blog.csdn.net/slvher/article/details/8941873

http://blog.51cto.com/wushank/1135060


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值