tcp四次挥手

·  阅读 101

image.png

为什么要等待2MSL时间呢?

其实很好理解,Client在最后回复ACK报文时,这个报文到达Server的时间就是一个MSL时间,因为Client端需要确定Server端是否收到了这个报文,如果Server没有收到这个报文,那么就会再次发送FIN报文,这个FIN报文到达Client端的时间也是1MSL。所以,Client端要等待2MSL的时间来确保自己可以关闭连接。

time_wait过多如何处理?

在socket的TIME_WAIT状态结束之前,该socket所占用的本地端口号将一直无法释放。高TCP并发并且采用短连接方式进行通讯的通讯系统在高并发高负载下运行一段时间后,就常常会出现做为客户端的程序无法向服务端建立新的socket连接的情况。此时用“netstat -tanlp”命令查看系统将会发现机器上存在大量处于TIME_WAIT状态的socket连接,并且占用大量的本地端口号。最后,当该机器上的可用本地端口号被占完(或者达到用户可使用的文件句柄上限),而旧的大量处于TIME_WAIT状态的socket尚未被系统回收时,就会出现无法向服务端创建新的socket连接的情况。此时系统几乎停转,空有再好的性能也发挥不出来。

time_wait解决方式
  1. 修改TIME_WAIT连接状态的上限值
  2. 启动快速回收机制
  3. 开启复用机制
  4. 修改短连接为长连接方式
  5. 由客户端来主动断开连接
分类:
后端
标签:
分类:
后端
标签:
收藏成功!
已添加到「」, 点击更改