摘要

  • 静默规则针对的是序列号记忆丢失,而不是每一次重启。
  • RFC 793 要求等待一个 MSL,让旧重复报文退出网络。
  • RFC 9293 保留这一安全边界,但认为触发条件在今天通常很少同时成立。
  • 保留状态和 PAWS 属于不同的防护方式。

本地状态消失,网络状态仍在

崩溃可以立即清除 TCP 的易失状态,而此前发出的报文仍可能位于队列、路径或接收端。若重启后再次使用相同的地址和端口,旧报文就可能看起来像新数据。数据、SYN 和 FIN 都占用有限的序列号空间,因此后续连接可能与旧空间重叠。

用静默替代缺失的历史

RFC 793 规定,丢失活动连接所用序列号记忆的 TCP,必须在一个最大报文生存期内保持静默。规范采用两分钟这一工程选择。它不是重传计时器,也不是往返时间估计,而是给旧的时空痕迹足够时间离开网络。

规则有明确条件。如果实现保留了最近使用的序列号,就可以不等待,但必须从已用号码之后继续分配。主机若已经运行至少一个 MSL,相关的等待边界也已经过去。

现代规范保留了什么

RFC 9293 仍要求在丢失序列号记忆后至少等待一个 MSL,同时说明该问题在多数现代实现中通常可以忽略:初始序列号和临时端口已随机化,网络加速使有效 MSL 变短,而重启过程常常长于一个 MSL。

这不是对机制的废除。随机化降低碰撞概率,却不等同于记住真实历史。在高速环境中,TCP 时间戳和 PAWS 还提供了另一种接收端可见的旧重复报文防护,用于应对 32 位序列空间快速循环。

来源