我们知道 MSL 全称 Maximum Segment Lifetime, 表示的是网络中报文存在的最大时间,即是说逻辑上每个报文都只能在网络中存活 MSL 的时间。但是问题来了,MSL 是怎么工作的?。
报文总不会自己消亡吧,同时,MSL 和网络层的 TTL 是不同的,所以有如下猜想:
- 发送方/接受方发现这个报文存活时间已经超过了 MSL,于是将其丢弃,这个时候也就宣判了报文死亡。
- 丢弃行为应该不会发生在网络层,如此的话,丢弃行为就只能出现在接受方了。
- 接受方检测报文是否已经死亡是通过 TCP 中的某个字段(例如时间戳)进行判断的
如果猜想没有错的话,就又有了接下来的问题,时间戳字段在 TCP 首部中是可选字段,总不能每次发送 TCP 包都带上该字段吧。当然了,如果我们只在 TCP 四次挥手的 TIME_WAIT 状态中使用该字段倒是解决了这个问题,但是又有新的问题,如果只在挥手过程中使用,那么又不是很符合 MSL 的定义“报文最大存活时间”,我个人理解这个 MSL 应该是所有报文都存在的属性才对。
疑问如上,烦请解惑,感谢。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于