(1)存在TIME_WAIT状态的原因
- 原因一:保证TCP全双工连接的可靠释放
解析:假设场景为客户端主动向服务器发起断开连接,假如在主动方(客户端)最后一次发送的ACK在网络中丢失,根据TCP的超时重传机制,被动方(服务器)需要重新向客户端发送FIN+ACK,在FIN未达到之前,必须维护这条连接;并且要接收到客户端发出的ACK确认后才能终止连接;如果直接在重传的FIN到达之前而关闭连接,当FIN到达后会促使客户端TCP传输层发送RST重新建立连接,而本质上这是一个正常断开连接的过程。
另一种解释是:
- 原因二:为了使就得数据包在网络中因过期而失效
(2)TIME_WAIT状态过多有何危害?如何解决TIME_WAIT过多情况?
- 危害:占用太多资源,阻塞其他正常连接;
- 解决方法
第二种:修改内核参数来减少time_wait状态?
编辑文件/etc/sysctl.conf,加入以下内容
(3)如果修改修改time_wait的时间有什么影响?
如果修改time_wait的时间会造成上一个连接的数据没有完全接收到,会重建连接错误;另一个是造成新建的连接出现错误,收到不期望收到的数据;
注意:Linux是无法修改tcp的time_wait值的;
(4)netstat 命令的使用
- netstat -rn 打印路由表信息
文章来源: TCP四次挥手终止连接的TIME_WAIT状态