Appearance
三种ARQ协议对比
2026 大纲 三(四)1 流量控制、可靠传输与滑动窗口机制。本篇是这一条的通论承载,只给结论与横向对照:利用率推导在《停止-等待协议》,
的绕回反例在《GBN》, 的一般推导在《SR》。
一、三个协议其实只差一个参数
前三节的三个协议看着是三套机制,但它们的全部差异都由一个参数推出来:接收窗口
在做横向对比之前,先把三组容易混的概念钉死。
三个"控制"的瓶颈各在哪
| 解决什么问题 | 谁在限制谁 | 依据什么信息 | |
|---|---|---|---|
| 差错控制 | 数据被弄坏了 / 丢了 | — | 校验和、确认与超时 |
| 流量控制 | 接收方处理不过来 | 接收方限制发送方 | 接收方的缓存余量 |
| 拥塞控制 | 网络处理不过来 | 网络(间接)限制发送方 | 丢包与时延等拥塞信号 |
流量控制与拥塞控制的瓶颈位置不同:前者在端,后者在网。链路层只有前者——一条链路中间没有网络可拥塞。
流量控制还不需要额外机制,它是滑动窗口的副产品:接收方处理得慢 → 确认发得慢 → 发送窗口迟迟滑不动 → 发送速率被压下来。
可靠传输不等于差错控制
可靠传输=发送端发送什么、接收端就收到什么,三条承诺:不丢(超时重传)、不重(帧编号 + 去重)、按序(接收窗口 + 按序交付)。
CRC 只给"无比特差错";帧丢失、帧重复、帧失序里一个比特都没错,要靠编号 + 确认 + 重传。
而且可靠传输不是链路层的义务——有线链路交给 TCP,无线链路才自己做。所以这三个协议讲的是可靠传输的一般原理,真正的大规模落地在 TCP。
二、滑动窗口机制
②+③ 合起来就是发送窗口;② 必须保留副本,这是可靠传输的物质基础;④ 的存在就是流量控制——不是发不出去,是不允许发。
发送窗口按"最早的未确认帧是否被确认"滑动,接收窗口按"最左端起是否连续收齐"滑动。判据不同,所以两个窗口的位置从不必同步。发送窗口里甚至可以出现"洞"(后面的帧已确认、前面的还没有),这只会出现在 SR 里——GBN 的累积确认让洞不可能存在。
三、三种协议全面对比
| 对比项 | 停止-等待 | GBN(后退 N 帧) | SR(选择重传) |
|---|---|---|---|
| 发送窗口 | 1 | ||
| 接收窗口 | 1 | 1 | |
| 确认方式 | 逐帧确认 | 累积确认 | 逐个确认 |
| ACK 丢失的后果 | 超时重传该帧 | 后续更大的 ACK 自动覆盖 | 无法覆盖,必然引发一次多余重传 |
| 重传策略 | 重传当前帧 | 回退到最早未确认帧,重传它及其后全部已发帧 | 只重传出错的那一帧 |
| 接收方对乱序帧 | 不存在乱序 | 丢弃,重发上一个按序帧的 ACK | 缓存,发本帧的 ACK |
| 接收方缓冲区 | 不需要 | 不需要 | 需要,能存 |
| 计时器数量 | 1 个 | 1 个(对最早未确认帧) | |
| 实现复杂度 | 低 | 中 | 高 |
| 无差错时利用率 | 低 | 高(窗口可开更大) | 中(窗口被压小) |
| 高误码率时效率 | 低 | 低(成批连坐重传) | 高 |
最后两行的方向是反的——GBN 与 SR 谁更优,取决于前提是"无差错"还是"高误码率"。题面写着"不考虑差错",等于把 SR 的优势条件删光了。
三条窗口上限也不必分开记,它们是同一条式子的三次代入:
停等
四、同一丢帧场景,三种协议各重传几帧
| 停止-等待( | GBN( | SR( | |
|---|---|---|---|
| 能连续发出的帧 | 只能发帧 0,等 ACK 0 后发帧 1 | 0,1,2,3,4 | 0,1,2,3(窗口满) |
| 对帧 2、3 的处理 | 尚未发出,不涉及 | 丢弃(期待 1,不匹配) | 缓存(落在接收窗口内) |
| 接收方回送 | ACK 0 后无 | ACK 0,此后是重复 ACK 0 | ACK 0、ACK 2、ACK 3 |
| 超时后重传 | 帧 1 | 帧 1,2,3,4 | 帧 1 |
| 重传帧数 | 1 | 4 | 1 |
| 代价 | 全程只有 1 帧在途,慢 | 连坐 3 个正确的帧 | 接收方缓冲 2 帧,发送方管 4 个计时器 |
停止-等待的重传数也是 1,但它的问题从来不是重传多,而是根本没发几帧。真正的对照在 GBN 与 SR 之间——SR 省下的帧数 = 丢失帧之后已正确到达的帧数。
交互可视化
五、利用率:四步走,第三步不能跳
- 算
与 ; - 定
(题目给了就用,没给就用协议的窗口上限); - 比较
与 ; - 代入对应的那一段。
第三步不能跳,跳了会算出大于 1 的"利用率"。
还有两处口径要看题面:
ACK 的时间该不该算进分母。 说"忽略 ACK 传输时间"则分母是
利用率不等于有效吞吐率。
代进去算一遍
已知:数据率 2 Mbps,帧长 1000 bit,单程传播时延 250 ms,序号位数
先算这个的意义:
| 协议 | 窗口上限 | 百分比 | 有效吞吐率 | ||
|---|---|---|---|---|---|
| 停止-等待 | 固定 1 | 1 | |||
| GBN | 15 | ||||
| SR | 8 |
这组数字要读出三件事:
- 在高时延链路上,用了滑动窗口也可能依然很低。 GBN 把利用率从 0.1% 提到 1.5%,看似 15 倍,但离满载还差 66 倍——因为
。窗口不够大时,换协议不如加窗口。 - 无差错前提下 SR 输给 GBN(0.80% 对 1.50%),因为同样
时 SR 的窗口只有 GBN 的一半略多。 - 要满载需要
:GBN 需 即 ;SR 需 即 。序号位数是这类链路的真正瓶颈。
附:窗口上限数值速查(别对着表记数字,记那条通用式)
| 序号范围 | 停等 | GBN 最大 | SR 最大 | |
|---|---|---|---|---|
| 1 | 0~1 | 1 | 1 | 1 |
| 2 | 0~3 | 1 | 3 | 2 |
| 3 | 0~7 | 1 | 7 | 4 |
| 4 | 0~15 | 1 | 15 | 8 |
| 5 | 0~31 | 1 | 31 | 16 |
遇到"
六、选型与跨层对照
| 场景 | 推荐 | 理由 |
|---|---|---|
| 低速短距离( | 停止-等待 | |
| 误码率低、链路质量好 | GBN | 同样 |
| 误码率高、带宽珍贵 | SR | 避免成批连坐重传,省下的正是"丢失帧之后已到达的那些帧" |
| 高时延链路(卫星等) | 先加窗口再谈选型 | 瓶颈通常是 |
最后一行最实用:先看瓶颈在哪。
同样的机制在传输层还会再出现一次,但参数完全不同:
| 数据链路层 | 传输层(TCP) | |
|---|---|---|
| 控制范围 | 相邻两节点之间(一跳) | 端到端 |
| 窗口大小 | 通常固定,由协议或配置定死 | 动态调整,逐段协商 |
| 窗口由谁决定 | 协议参数 | |
| 是否含拥塞控制 | 否(一跳之内没有"网络"可拥塞) | 是 |
| 单位 | 帧 | 字节 |
两层的可靠传输也不能互相替代:逐跳可靠推不出端到端可靠——每跳都不丢帧,路由器内部仍可能因缓冲区溢出丢弃分组,而那一刻分组处在任何链路层协议的管辖之外;端到端可靠也不能取代逐跳——无线链路上等端到端超时才重传,代价是整条路径的往返,链路层就地重传快得多,这正是 802.11 的做法。
本节小结
- 三个"控制"的瓶颈分别在端(流量控制)、在网(拥塞控制)、在数据本身(差错控制),链路层只有流量控制。可靠传输的三条承诺是不丢、不重、按序,它不等于差错控制,也不是链路层的义务。
- 接收窗口
是分水岭,其余差异全是后果: → 乱序帧丢弃 → 累积确认 → 成批重传 → 上限 ; → 缓存乱序 → 逐个确认 → 每帧一个计时器 → 上限 。三条上限是 的三次代入。 - 利用率分段,
是让信道满载所需的最小窗口,解题四步:算 与 → 定 → 比较 与 → 代入。选型先看瓶颈: 时该加序号位数;误码率低时 GBN 更优,误码率高、带宽珍贵时 SR 更优。
考点速记
本节在真题里被考过的形式是由目标利用率反求帧序号位数(cn-2015-35)——它把上面那四步倒着走了一遍。
128 kbps 卫星链路、单向传播 250 ms、帧长 1000 B、不考虑确认帧的开销,要求链路利用率不小于 80%,问帧序号比特数至少是多少。
最后一步把窗口换成序号位数:
这道题有两处值得留意。 一是
三种协议的最大利用率比大小这一类(cn-2023-35),题渲染在停止-等待、GBN、SR 三篇的练习区,完整解法记在 GBN 那一篇;用的判据就是本节第三部分那三条窗口上限——不必算数值,只比
易错:先比较
与 ,再决定用哪一段公式。 已经封顶还去乘 ,会算出大于 1 的利用率。
易错:反求窗口时向上取整。
只能取 8;再换成位数时又要满足 ,两次取整都不能省。
易错:
时回一般式 。 速查表里那三列只覆盖了三个特例。
易错:GBN 的窗口上限比 SR 大。 无差错前提下 GBN 的利用率反而更高——"更先进"不等于每项指标都更好。
易错:流量控制在端、拥塞控制在网,链路层只有前者。 一条链路中间没有网络可拥塞。
教材出处
- 谢希仁《计算机网络》(第 8 版)p221(5.4 可靠传输的工作原理):给出理想传输条件的两条前提,正好对应本篇的两条主线——"(1) 传输信道不产生差错"(差错控制/可靠传输)与"(2) 不管发送方以多快的速度发送数据,接收方总是来得及处理收到的数据"(流量控制);并指出可靠传输协议的做法是"当出现差错时让发送方重传出现差错的数据,同时在接收方来不及处理收到的数据时,及时告诉发送方适当降低发送数据的速率"。
- 同书 p224(4. 信道利用率):
的推导与数值例子(1200 km、 ms、1200 bit、1 Mbit/s 时 ;速率提到 10 Mbit/s 后 反降到 ),以及流水线传输的引入。 - 同书 p225(5.4.2 连续 ARQ 协议):滑动窗口的滑动规则"发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置";累积确认的优缺点——"优点是容易实现,即使确认丢失也不必重传;但缺点是不能向发送方及时反映接收方已经正确收到所有分组的信息";以及 Go-back-N 的命名与代价。
- 同书 p78:区分"无比特差错"与"无传输差错"——列出帧丢失、帧重复、帧失序三类非比特差错,并说明"在数据链路层使用 CRC 检验,能够实现无比特差错的传输,但这还不是可靠传输";同页给出互联网对有线/无线链路"区别对待"的现行做法(有线不要求链路层提供可靠传输,改正差错的任务由上层的 TCP 完成;无线则使用确认和重传)。
相关知识
停止-等待协议|后退 N 帧协议(GBN)|选择重传协议(SR)|TCP 流量控制|TCP 可靠传输