摘要
- TIME-WAIT 在主动关闭后保留状态,防止早期连接的延迟报文被误认为同一四元组新连接的报文。
- RFC 1337 描述了三报文链:旧的不可接受报文引发 ACK;无匹配连接的对端返回 RST;RST 又提前删除 TIME-WAIT。
- RFC 1337 建议在 TIME-WAIT 中忽略 RST,但它是 Informational 文档,并非普遍适用的现行实现要求。
- RFC 6191 只在时间戳和序列号证明 SYN 属于更新的连接实例时,才允许某些提前复用。
等待保存的是边界
主动关闭后,TCP 通常让控制块存留 2×MSL。这样旧重复报文有机会从网络中消失,随后才能重新使用相同的地址和端口。TIME-WAIT 不是重传计时器,也不是应用交付超时;它保存的是两个连接实例之间的边界。
旧报文如何造成暗杀
在 RFC 1337 的场景中,A 处于 TIME-WAIT,B 已经回到 CLOSED。一个旧的数据报文或 ACK 到达 A,并因序列空间或时间戳原因被判定为不可接受。A 按通常规则发送 ACK。B 没有相应连接,于是对这个非 RST 报文返回 RST。A 接受该 RST,删除控制块,提前离开 TIME-WAIT。
每一步在局部都可能符合规则,组合起来却破坏了等待的用途。删除状态的报文是 RST;之后造成新连接混淆的报文,可能是网络中残留的另一个旧报文。
两种优化不能混为一谈
RFC 1337 的 F1 建议是在 TIME-WAIT 中忽略 RST。它把这称为简单的短期方案,同时要求实际生产测试,以发现意外影响。RFC 9293 的基础处理仍规定:经过序列检查后,TIME-WAIT 中接受的 RST 会使连接进入 CLOSED 并删除控制块。因此不能说 F1 已被整体纳入当前基础规范。
RFC 6191 针对的是高频新连接。它检查进入的 SYN:已有时间戳时比较时间戳,必要时结合序列号;证据不足则静默丢弃 SYN,并保留 TIME-WAIT。RFC 9293 只允许在序列号保护条件成立、且旧重复 SYN 会使端点返回 TIME-WAIT 时直接重开;对于高连接建立速率,它建议采用 RFC 6191 的时间戳算法。依据证据的复用不同于先删除证据。
来源
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance
