从 FACK 到 RACK-TLP:TCP 丢包检测机制的演进与现代化之路
在传输控制协议(TCP)数十年的演进中,丢包检测与恢复机制始终是影响传输性能的核心环节。从最初依赖序列号判断丢包的 Reno 模式,到引入选择性确认的 SACK,再到基于时间判定的 RACK,乃至进一步强化的 RACK-TLP,TCP 的恢复能力经历了逐步现代化的升级。
本文将带你从理论层面,深入理解 TCP 的四种关键丢包检测机制:FACK、SACK、RACK 与 RACK-TLP,并对比它们的工作原理、适用场景与演进关系。
丢包是 TCP 面临的常见网络问题。能否及时发现丢包并快速恢复,直接决定了 TCP 在以下场景中的表现:
- 弱网或移动网络(丢包率高、时延抖动大);
- 数据中心高吞吐场景(对恢复速度敏感);
- 中间设备存在乱序、ACK 压缩行为。
传统 TCP 采用 RTO(Retransmission Timeout) 机制来兜底触发重传。但初始 RTO 延迟高达 1 秒,误判多,恢复慢,成为瓶颈。因此,TCP 社区不断探索更快、更精准的丢包检测算法。
原理:
接收方在 ACK 中显式告诉发送方:“我已经收到哪些数据段”,而不是仅告诉“收到到哪了”。
优点:
- 精确指出哪些段被接收;
- 适用于多段丢包场景;
- 避免不必要的重复重传。
局限:
- 虽然能知道“哪里没收到”,但仍依赖序列号判断丢包;
- 容易受到网络乱序、ACK 压缩的干扰,误判丢包或延迟重传。
原理:
FACK 在 SACK 的基础上进一步演化。它不仅看 SA...