Appearance
题目
如图所示,主机甲向乙发送数据,采用 SR 滑动窗口协议,发送窗口为 4,序号为 0 ~ 7。在 t1 时刻,帧 F1 出错,甲在 t1 和 t2 时刻发送的数据帧分别是( )。
图中 F1 在传输中丢失(接收方未收到、所以不会有 ACK1);ACK0、ACK2、ACK3 是接收方对应每帧的单独确认(SR 协议特征);ACK3 在返回甲的路上丢失。t1 标在甲收到 ACK0 的时刻;t2 是后续 F1 超时(图中省略,下文计算)。
错因
A
两端都错:
- t1 误填 F1:t1 是甲刚收到 ACK0 的时刻,F0 确认后窗口右移、应该发新帧 F4。F1 此时还没超时(甲不知 F1 已丢,得等定时器到期)
- t2 误填 F3:F3 已经发过、且接收方实际收到(ACK3 是乙发的,丢失发生在返程)。即便 ACK3 丢导致 F3 进入"待确认"状态,t2 时刻是F1 超时触发的——SR 协议只重传出错那一个帧
B
t1 误填 F1(同 A 第一项),t2 答 F4 错——t2 是F1 超时触发的重传时刻,应该重传 F1,不是发新帧 F4。
C
顺序颠倒 + 第一项错——把"先重传后发新"反着来了。SR 协议的核心是接收方缓存乱序帧、发送方窗口在最早未确认帧被确认时才右移。t1 时甲收到 ACK0,最早未确认帧(F0)被确认 → 窗口右移 → 应该发 F4 而不是 F3(F3 已经发过)。
总解析
SR 协议(Selective Repeat)的两个核心规则:
- 接收方对每个正确接收的帧单独发 ACK(不像 GBN 那样累积 ACK)
- 发送方窗口仅当最早未确认帧被确认时右移(即便后续帧已 ACK 也不能跳过)
追踪甲发送窗口的演进:
| 时刻事件 | 甲已发未确认 | 已收 ACK | 发送窗口 | 此时甲能发 |
|---|---|---|---|---|
| 初始 | — | — | [F0, F1, F2, F3] | F0 ~ F3 |
| 发送 F0~F3 后 | F0, F1, F2, F3 | — | [F0, F1, F2, F3](满) | 不能发新(窗口满) |
| t1:收到 ACK0 | F1, F2, F3 | F0 | [F1, F2, F3, F4](右移 1) | F4(新帧) |
| 收到 ACK2 | F1, F2 实际已发 + F4 | F0, F2 | [F1, F2, F3, F4](不动;F1 是最早未确认) | F4 已发 |
| ACK3 丢失(甲未收到) | F1, F2, F3, F4(按甲视角 F3 仍未确认) | F0, F2 | 不动 | — |
| t2:F1 定时器超时 | — | — | — | 重传 F1(仅重传出错的那一帧,SR 特征) |
SR 协议下 t2 不会重传 F2/F3/F4(GBN 协议才会"回退 N"重传)——只重传超时的 F1。
最终答案:
- t1 时刻 → F4(窗口右移后发的新帧)
- t2 时刻 → F1(F1 超时后选择性重传)
最终答案是 D(F4、F1)。
理解要点:SR 与 GBN 的关键差别都集中在"出错时怎么处理"——
- GBN(回退 N):F1 超时后回退到 F1 重发整窗(F1, F2, F3 全重发)
- SR(选择重传):F1 超时后只重传 F1,其他帧已被接收方缓存
SR 网络利用率高、但接收方需要更多缓存。本题选 D 的核心是认对 SR 的"选择"特征。
编者注(答案存疑):题面"在 t1 时刻,帧 F1 出错"对应图里 F1 在传输中丢失(出错的一种)。骨架原文有的版本里是"F3 出错"但与图中实际事件不符——按图实际事件 F1 丢失 + ACK3 丢失推理出答案 D,与骨架一致。我们在题面里采用了与图一致的"F1 出错"表述。