为什么 time_wait 状态要等两个 MSL,我咋觉得一个 MSL 就够了呢?

2021-12-01 23:20:12 +08:00
 amiwrong123

首先四次挥手时,主动关闭方才会有 time_wait 状态。然后之所以要存在 time_wait 状态,(其中一个原因)就是因为有一些旧分组在网络中逗留,但我们需要 这个 tcp 连接的下一个实例 不会收到这些旧分组,让它们在网络被自然丢弃掉。

但是我觉得,好像只需要一个 MSL 不就行了吗,毕竟自己是主动关闭方,那网络中不就只存在 对方的一些旧分组在网络中徘徊,那只等待一个 MSL 不就行了吗

另外,2MSL > RTT ,这对吗

1483 次点击
所在节点    程序员
5 条回复
LinJunzhu
2021-12-01 23:38:05 +08:00
如果 主动关闭方 在 TIME_WAIT 状态,响应的 ACK ,被动方未收到; 那么被动方会重发一次 FIN 包;

所以实际上需要等待 被动方 -> 主动方. 主动方->被动方 即两次包
mawerss1
2021-12-01 23:45:39 +08:00
主要就是防止发送响应的 ack 如果丢失了,被动方重试发 fin
等待 2 个 msl 就是 一个 ack + fin 两个包的时间
weyou
2021-12-02 09:10:20 +08:00
为了防止自己的 ACK 对方没有收到,一个 MSL 后被动端才会重发 FIN ,FIN 到达主动端最多 1 一个 MSL ,所以是 2×MSL 的时间)
amiwrong123
2021-12-02 09:28:17 +08:00
@weyou
@mawerss1
@LinJunzhu
那主动关闭方 收到了对方的 重传的 ack 后,timewait 状态重新开始计时嘛
amiwrong123
2021-12-02 09:29:42 +08:00
说错了,是重传的 FIN

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/819411

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX