首先四次挥手时,主动关闭方才会有 time_wait 状态。然后之所以要存在 time_wait 状态,(其中一个原因)就是因为有一些旧分组在网络中逗留,但我们需要 这个 tcp 连接的下一个实例 不会收到这些旧分组,让它们在网络被自然丢弃掉。
但是我觉得,好像只需要一个 MSL 不就行了吗,毕竟自己是主动关闭方,那网络中不就只存在 对方的一些旧分组在网络中徘徊,那只等待一个 MSL 不就行了吗
另外,2MSL > RTT ,这对吗
1
LinJunzhu 2021-12-01 23:38:05 +08:00
如果 主动关闭方 在 TIME_WAIT 状态,响应的 ACK ,被动方未收到; 那么被动方会重发一次 FIN 包;
所以实际上需要等待 被动方 -> 主动方. 主动方->被动方 即两次包 |
2
mawerss1 2021-12-01 23:45:39 +08:00
主要就是防止发送响应的 ack 如果丢失了,被动方重试发 fin
等待 2 个 msl 就是 一个 ack + fin 两个包的时间 |
3
weyou 2021-12-02 09:10:20 +08:00 via Android
为了防止自己的 ACK 对方没有收到,一个 MSL 后被动端才会重发 FIN ,FIN 到达主动端最多 1 一个 MSL ,所以是 2×MSL 的时间)
|
4
amiwrong123 OP |
5
amiwrong123 OP 说错了,是重传的 FIN
|