Appearance
题目
某客户通过一个 TCP 连接向服务器发送数据的部分过程如下图所示。客户在 t0 时刻第一次收到确认序列号 ack_seq = 100 的段,并发送序列号 seq = 100 的段,但发生丢失。若 TCP 支持快速重传,则客户重新发送 seq = 100 段的时刻是( )。
图中还有一个 t4 时刻——若没有快速重传机制,t4 是 seq = 100 超时重传的时间点。本题问的是"在快速重传机制下何时重传",所以 t4 不会真的发生。
错因
A
只收到 1 个重复 ack 就重传——可能误以为"任何重复 ack 就立刻触发重传"。但快速重传的硬规则是:连续收到 3 个重复 ack 才触发。t1 时刻是收到的第 1 个重复 ack(重复 = 与 t0 那次的 ack 序列号相同),还差 2 个才到阈值。
B
收到 2 个重复 ack 就重传——与 A 同样的错因,提前一步。t2 是第 2 个重复 ack,仍未达到 3 个的阈值。这是最常见的"差一格"错误。
D
等到超时重传时刻——把题目里的"快速重传"当成了"超时重传"。t4 是没有快速重传机制时的兜底(超过 RTO 仍未收到正向 ack 才重传)。题面已经明说"TCP 支持快速重传",应该走快速重传路径而不是超时。如果题面没说支持快速重传,才该选 t4。
总解析
快速重传的两个关键条件:
- 重复 ack 的判定:服务器每次收到一个失序段(如 seq=200 / 300 / 400 但缺 100)都会重发当前期待的 ack =
ack_seq = 100,这些都是"重复 ack" - 触发阈值:客户连续收到 3 个 重复 ack 立即重传那个被怀疑丢失的段,不等 RTO 超时
逐时刻追踪:
| 时刻 | 客户状态 | 累计重复 ack 数 | 是否触发 |
|---|---|---|---|
| t0 | 第一次收到 ack_seq=100(原始 ack,不算重复) | 0 | ✗ |
| t1 | 第 2 次收到 ack_seq=100(第 1 个重复) | 1 | ✗(< 3) |
| t2 | 第 3 次收到 ack_seq=100(第 2 个重复) | 2 | ✗(< 3) |
| t3 | 第 4 次收到 ack_seq=100(第 3 个重复) | 3 | ✅ 触发快速重传 |
| t4 | 不会到 t4(已在 t3 重传),但若没快速重传机制,t4 是超时时刻 | — | — |
为什么阈值定 3:
- 1 个 ack 重复可能只是 IP 包乱序到达(接收方暂时跳过、稍后排好序就好),不能直接断丢失
- 2 个连续重复 ack 仍然有"乱序"的可能性
- 3 个连续重复就基本可以断定"丢失"——这条经验阈值在 RFC 5681 里定下,408 直接背就好
最终答案是 C(t3)。
编者注(生僻术语):"快速重传"是 TCP 拥塞控制的"两快"之一(另一个是"快速恢复")。除快速重传外,TCP 还有 SACK(Selective Acknowledgment)扩展能更精确地告诉发送方"哪些段没收到",但 408 真题主要考标准重复 ack 机制。