简说linux TCPIP 11讲
TIME_WAIT
一个数据包在网络中传输的最长时间是 2MSL(发送 MSL + 等待确认ACK MSL)
当主动关闭方接收到被动方的FIN+ACK后发出确认ACK后进入TIME_WAIT状态
为什么会有TIME_WAIT状态?
从TCP可靠性讲,主动关闭方必须确认被动关闭方收到最后的ACK。所以必须有一个TIME_WAIT的等待时间
如果最后的ACK被动关闭方没有收到,那么被动关闭方将重新发送FIN+ACK,主动关闭方将重新进入TIME_WAIT状态
为什么是2MSL?
2MSL可以保证 如果最后一个ACK丢失,被动关闭方可以重发FIN+ACK 2MSL= 最后一个ACK发送时间 + 被动关闭方发一个FIN+ACK时间
TIME_WAIT的时间设置
在Linux系统中,MSL = 60 s, 2 * MSL = 120 s,所以一条待关闭的TCP连接会在 TIME_WAIT 状态等待 120秒(2分钟)
刚才说到MSL是一个网络的传输时间,那么说明MSL的时长根据网络情况有所差异。
TIME_WAIT是TCP的一个参数
修改方法:
sysctl -w "net.ipv4.tcp_tw_timeout=[$TIME_VALUE]
符链接:
https://zhuanlan.zhihu.com/p/374135294