tcp连接主动关闭的一方会有三个状态,fin_wait1, fin_wait2, time_wait
发送fin后进入fin_wait1
收到ack后进入fin_wait2
收到被动一方的fin并发送完ack后进入time_wait
主要有两个原因
1。防止上一次连接中的包,迷路后重新出现,影响新连接
(经过2MSL,上一次连接中所有的重复包都会消失)
2。可靠的关闭TCP连接
在主动关闭方发送的最后一个 ack(fin) ,有可能丢失,这时被动方会重新发
fin, 如果这时主动方处于 CLOSED 状态 ,就会响应 rst 而不是 ack。所以
主动方要处于 TIME_WAIT 状态,而不能是 CLOSED 。
TIME_WAIT 并不会占用很大资源的,除非受到攻击。
被动关闭的一方不会有
转载于:https://www.cnblogs.com/traxex/p/5850881.html