TCP/IP之(三)四次挥手

网友投稿 285 2022-10-17


TCP/IP之(三)四次挥手

关于TIME_WAIT:

从上图中可以看到TIME_WAIT状态是客户端受到服务器的FIN并且客户端并返回ACK之后处于的状态,当处于该状态时无法创建新连接,因为端口被占用。存在该状态的原因有2点:

可靠的终止TCP连接,网络是不可靠的,如果服务器没有收到客户端的ACK,那么服务器将在超时之后重新发送FIN,那么客户端必须处于一个可接受的状态就是time_wait,如果直接closed那显然是收不到的。确保对方有充足的时间收到ACK。如果被动关闭的那方没有收到ACK,它会重新发送FIN,这正好是2个MSL。让后面的数据包不会和这个ACK包混在一起。因为有些路由器会缓存IP数据包。而且客户端连接服务器可能前后两次使用的相同端口这是有可能的,如果客户端不等2MSL而是直接关闭,然后又马上使用相同端口建立连接,连接建立后,刚好有之前连接的数据到达服务器,对于服务器来说无法判断是上一次的还是这一次的,所以等待2MSL也是为了让之前的数据在网络中消失。

1个MSL在Linux中是30秒。

TIME_WAIT主动发起断开的一方(可以是客户端主动断开也可以是服务器主动断开)。如果客户端一般不同担心,但是如果是服务器主动关闭连接则因为它总是使用相同端口比如80或者3306之类的,该端口上存在大量的TIME_WAIT状态连接则会影响后续新连接。所以当遇到这个问题的是可以设置内核参数来优化比如允许重复使用和快速回收。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:TCP/IP之(四)Delay ack 和 Nagle算法
下一篇:Maven中央仓库发布的实现方法
相关文章

 发表评论

暂时没有评论,来抢沙发吧~