Skip to content

2019年 408 计算机网络 第 38 题

计算机网络2019年选择题2分

题目

某客户通过一个 TCP 连接向服务器发送数据的部分过程如下图所示。客户在 t0 时刻第一次收到确认序列号 ack_seq = 100 的段,并发送序列号 seq = 100 的段,但发生丢失。若 TCP 支持快速重传,则客户重新发送 seq = 100 段的时刻是( )。

客户服务器ack_seq = 100seq = 100丢失seq = 200seq = 300seq = 400ack_seq = 100ack_seq = 100ack_seq = 100t0t1t2t3时间

图中还有一个 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。

总解析

快速重传的两个关键条件

  1. 重复 ack 的判定:服务器每次收到一个失序段(如 seq=200 / 300 / 400 但缺 100)都会重发当前期待的 ack = ack_seq = 100,这些都是"重复 ack"
  2. 触发阈值:客户连续收到 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 机制。

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数