上篇文章讲述了TCP三次握手原理,这次来了解一下TCP四次挥手,废话不多说,上图,一目了然:
最开始客户端和服务端都是处于ESTABLISHED状态,数据传输完毕,双方都可以释放连接,这里以客户端主动释放连接为例:
第四次挥手为什么要等待2MSL?
MSL(Maximum Segment LifeTime),即报文最大生成时间,它是指任何报文在网络上存在的最长时间,超过这个时间的报文将被丢弃。
要弄懂第四次挥手为何要等待2MSL时间,需要明白TIME-WAIT状态的目的:
> 优雅的关闭 TCP 连接,保证被动关闭的一端收到它自己发出去的 FIN 报文的 ACK 确认报文;
> 处理延迟的重复报文,避免前后两个使用相同四元组(源IP地址、目的IP地址、源端口、目的端口)的连接中的前一个连接报文干扰后一个连接。
TIME_WAIT状态过多有什么危害?
1)过多TIME_WAIT的会话占用内存资源,一个TIME_WAIT连接占用4k大小
2)TIME_WAIT状态结束以前,socket端口一直被占用,无法释放;若TIME_WAIT过多,端口资源耗尽,将不能创建新的连接请求。
如何解决过多TIME_WAIT?
在系统中启用TIME_WAIT的重用和快速回收,在Linux系统下可以修改以下参数:
(1)打开TCP对时间戳的支持,保持服务器与客户端时间同步 :
net.ipv4.tcp_timestamps=1(默认为 1)
(2)允许对处于TIME_WAIT的socket用于建立新的连接:
net.ipv4.tcp_tw_reuse = 1 (默认为0)
(3)修改TIME_WAIT连接状态的上限值,超过上限值,处于TIME_WAIT状态的socket将立刻被清除:
net.ipv4.tcp_max_tw_buckets = 3000 (默认为18000)
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有