Skip to content

2009年 408 计算机网络 第 35 题

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

题目

数据链路层采用后退 N 帧(GBN)协议,发送方已经发送了编号为 0~7 的帧。当计时器超时时,若发送方只收到 0、2、3 号帧的确认,则发送方需要重发的帧数是( )

错因

A

只重传 2 帧。可能误把"已确认的帧数"或"最早未确认的两帧"当成重传数。本题超时后要重传的是 GBN 窗口内所有未被(累积)确认的帧,远不止 2 帧。

B

重传 3 帧。常见错法是把 0、2、3 三个 ACK 当作"恰好确认了这 3 帧",于是数出 1、4、5、6、7 里靠后的 3 个,或漏掉某帧。根源是没用 GBN 的累积确认:ACK 3 已经把 1 一并确认了,1 不在重传之列。

D

重传 5 帧。这是把 GBN 错当成"每个 ACK 只独立确认对应那一帧"得到的结果——于是认为 1 号也未确认,凑成 {1,4,5,6,7} 共 5 帧。GBN 不存在独立确认:ACK 是累积的,收到 ACK 3 就意味着 1、2 早已被确认。按独立确认解读是把 GBN 和选择重传(SR)的确认语义搞混了。

总解析

第一步:抓住 GBN 的核心——累积确认

GBN(后退 N 帧)的接收方只按序接收,发出的是累积确认:ACK n 表示编号 n 及其之前的所有帧都已正确收到。因此每个收到的 ACK 不只确认它自己那一帧,而是确认"到该编号为止"的全部帧。

第二步:用累积确认折算真正被确认的帧

发送方收到了 0、2、3 三个确认。取其中编号最大的 ACK 3——它累积确认了 0、1、2、3 全部四帧(哪怕 1 号的单独 ACK 丢了,也已被 ACK 3 覆盖)。

帧号是否被确认依据
0ACK 0 / ACK 3 累积
1ACK 3 累积确认
2ACK 2 / ACK 3 累积
3ACK 3
4无 ACK ≥ 4
5无 ACK ≥ 4
6无 ACK ≥ 4
7无 ACK ≥ 4

未确认帧 = {4, 5, 6, 7} 共 4 帧。

第三步:超时重传策略

GBN 超时后从最早一个未确认帧开始,回退重传该帧及其之后已发送的所有帧。这里最早未确认帧是 4,于是重传 4、5、6、7 共 4 帧

第四步:核对

选项重传帧数推导
A2严重少算
B3漏算 1 帧(多半误判 1 号状态)
C4累积确认到 3,回退重传 4~7
D5误把 1 号当未确认(错当独立确认)

最终答案是 C(4)

编者注(生僻术语):GBN 的确认是累积确认(cumulative ACK)——ACK n 代表 n 及之前所有帧都已收到;而选择重传 SR 才是对每帧独立确认。本题易错点正是把两者的确认语义混淆。记住一句话:GBN 看"收到的最大 ACK 编号",它之前的全算确认。

最后更新:

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

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