TCP之TIME_WAIT

TCP的TIME_WAIT状态是为了防止迷路的FIN/ACK包出现后破坏已有的连接的防护机制,但等待的时间也太长了(应该是ip包在网络上的最大生存时间决定的),如果通过设置套接字的DONTLINNER选型或者修改系统内核参数使之变小,虽然可以暂时解决问题,但毕竟隐患始终存在,会造成不确定的情况下的服务器不稳定。
我个人认为有可能是TCP协议中的早期设计问题(个人观点):对于一个成功创建的TCP连接,协议中应该会有一个int型的标识符保存在该连接相关的任何ip包中,TCP协议本身要定义一个全局作用域的int型标识符(初始=0),每次成功进行三向握手的新连接都将该标识符增一赋予该连接(服务器端),在通讯过程中所有的TCP包和连接关闭时的四向握手(一方fin/fin+ack,另一方fin/fin+ack)的ip包中都包含所属连接标识,这样不论通讯两端哪一方主动关闭连接(等待最后发送的数据对等方接收完毕的确认,直接关闭连接)后都不需要进入TIME_WAIT状态了,因为此时对于本机而言该连接已关闭,后面收到的fin或fin ack中标识的连接已经不存在了,直接丢弃即可。
从根本上解决TCP TIME_WAIT问题只能是修改TCP协议。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值