🔥 高优先级
选择题和解答题都经常考查 ARQ 协议,三个重点不能忽略:1. 三种 ARQ 协议的 实现原理 。 2. 窗口大小的限制 。3. 信道利用率 的计算方法。
这一节都是理解性内容,需要理清背后的原理。
ARQ 协议
ARQ 协议是一类 可靠数据传输协议 ,用于在 不可靠的信道 (比如可能出错或丢包的网络链路)上实现 可靠通信 。
ARQ 协议的 核心思想 是:
- 发送方在发送数据后,必须等待接收方的确认(ACK)。
- 如果在规定时间内没有收到确认,就认为数据丢失或出错,需要重传。
ARQ 协议主要包括三种形式:停等 (Stop‑and‑Wait)、回退 N 帧 (Go‑Back‑N)以及 选择性重传 (Selective Repeat)。其中,回退 N 帧和选择性重传统称为 连续 ARQ 协议 。
考研模型里默认:
链路层:可能用 ARQ(作为差错控制手段之一),适用于误码率较高的链路
以太网不使用
无线链路、卫星通信会用
- 传输层:一定用 ARQ(TCP)
但要记住一句本质话:
ARQ 不是某一层专属,而是一种“机制”,可以出现在不同层。
如果 TCP 是保证可靠传输,那么链路层为什么还需要使用 ARQ?
如果链路层不大可靠的话,链路层 ARQ 可以在底层迅速修补了大多数偶发的比特错误,让上面的 TCP 以为链路几乎从不丢包,从而避免了频繁进入“拥塞控制”状态,大幅提升了吞吐量。
停等协议
停等(Stop‑and‑Wait)是一种最基本的 自动重传请求 (ARQ)协议。其核心思想是:发送方在发送完每一个数据帧后立即停止发送,并 等待 接收方的 确认 (ACK)。只有在收到确认后,发送方才会继续发送下一个帧。由于任意时刻网络中只会有一个 帧在传输,所以该协议也被称为“停等”。
停等协议的 工作过程 如下:
- 发送数据
- 发送方将一个数据帧发送给接收方。
- 同时启动 计时器 ,用于监控该帧的确认是否在规定时间内到达。
- 等待确认
- 在计时器超时之前,发送方保持在“等待”状态。
- 此期间若收到 确认帧 (ACK),则说明该帧已成功到达并被正确接收。
- 确认的接收
- 接收方收到数据帧后,首先检验其完整性(如校验和、序号等)。
- 若数据帧无误,接收方立即发送 确认帧 (ACK)回给发送方;若检测到错误,则不发送 ACK,导致发送方超时后重传。
- 计时器到期
- 若计时器在收到确认之前到期,发送方认为该帧或其确认已丢失。
- 发送方随后 重新发送 同一数据帧,并重新启动计时器,重复上述过程直至收到有效的确认。
通过上述四个步骤,停等协议实现了可靠的点对点数据传输,尽管其效率受限于 “每次只能发送一个帧” 的特性。
回退 N 帧
在 回退 N 帧 (GBN,Go‑Back‑N)协议中,发送窗口 指的是发送方在未收到确认的情况下,最多可以连续发送的数据帧数量。它像一个滑动窗口,控制着数据的发送节奏。
发送方可以在等待确认的过程中,连续发送多个帧,但总数不能超出发送窗口的大小。当窗口被填满时,发送方必须停下来等待确认,收到确认后窗口才能向后滑动,从而腾出空间发送新的帧。
补充
回退 N 帧的语义如何理解?
当发送方检测到某个数据帧超时(或收到重复的 ACK / NAK)时,它不会只重传那一帧,而是“回退”到该丢失帧的序号,并重新发送从该序号开始的所有后续帧 —— 即使这些帧之前已经发送过。
回退 N 帧的 核心要点 如下:
- 窗口大小
- 若帧序号使用 n 位二进制,则序号空间大小为 2n 。
- 为保证不产生歧义,GBN 的发送窗口大小 W 必须满足 W≤2n−1 ,因此 最大窗口大小 为 2n−1 。
- 接收窗口的大小固定为 1 ,即接收方只能一次接受并确认期望的序号。
- 发送过程
- 只要发送窗口未满,发送方就可以把窗口内的帧依次发送出去。
- 对于 最早发送且尚未被确认的帧 (即窗口中的第一个未确认帧),发送方启动 单一的超时计时器 。
- 其余已发送但尚未确认的帧不再单独维护计时器,而是共享这一个计时器。
- 接收过程
- 接收方维护一个 期望序号 (expected sequence number)。
- 当收到的帧序号等于期望序号时,接收方接受该帧并发送 累计确认 ACK (确认该帧及其之前的所有帧)。随后期望序号加 1。
- 若收到的帧序号不是期望序号(说明前面的某帧丢失),接收方直接 丢弃该帧 ,并 重新发送最近一次正确接收的帧的 ACK 。由于接收窗口为 1,后续已到达但序号不连续的帧都会被丢弃。
- 超时与重传
- 当 超时计时器 触发时,发送方认为窗口中最早的未确认帧已丢失。按照 GBN 的工作原理,发送方会 从该帧开始 ,把窗口内的所有帧全部 重新发送 。
- 这样做的原因是:即使后面的帧已经到达接收方,由于接收窗口仅能接受连续的序号,这些帧会在接收方被丢弃,只有最早丢失的帧被重新发送后,后续帧才能被顺利接收。
通过 GBN、SR 交互演示 可以直观地了解 Go‑Back‑N 与 Selective Repeat 的工作流程,加深对上述概念的理解。
选择性重传
选择性重传 (SR,Selective Repeat)是一种 自动重传请求 (ARQ )协议,专门用于克服回退 N 帧(Go‑Back‑N)在高误码率环境下的效率低下。与 Go‑Back‑N 不同,SR 只 重传 那些真正丢失或出错的帧,而不必重新发送随后所有的帧,从而在误码率较高的链路上表现得更为高效。
选择性重传的 核心要点 如下:
- 窗口大小
- 在 SR 中,发送窗口和接收窗口的大小保持一致。
- 若帧序号采用 n 位二进制表示,则窗口的最大取值为 **2 n−1 **(即序号空间的半数),以避免发送方和接收方窗口的重叠产生歧义。
- 发送过程
- 发送方在其发送窗口范围内连续发帧。
- 每发送一帧,就为该帧启动一个 计时器 ;计时器独立于其他帧,超时后仅针对该帧进行重传。
- 接收过程
- 接收方接受所有落在接收窗口中的帧,即使这些帧顺序错乱。
- 对于每一正确收到的帧,接收方立即发送 确认 (ACK)。
- 乱序到达的帧会被 缓存 ,待窗口前面的缺失帧补齐后,按正确顺序交付给上层。
- 超时与重传
当某帧的计时器到期,发送方只 重传 该帧,而不是窗口内的全部帧。这一点是 SR 与 GBN 的根本区别,也是 SR 在高误码率下保持高吞吐量的关键。
- 滑动窗口机制
发送方 :收到帧的确认后,窗口左边界向前移动,释放已确认的帧槽位,随后可以发送新的帧。
接收方 :当缓存的帧已能够连续组成一个完整序列并交付给上层后,接收窗口也向前滑动,腾出空间接收后续帧。
- 冲突确认的处理
- 由于网络延迟,发送方可能在重传帧后才收到该帧的早期确认。
- 为避免误判,SR 协议必须具备 识别并丢弃重复确认 (duplicate ACK)的机制,只对最新、有效的确认作出响应。
协议对比
几种 ARQ 协议的主要区别是通过发送和接收窗口体现的:
发送窗口
- 定义 :发送方在未收到对方确认(ACK)的情况下,允许连续发送的最大帧数量(或数据单元数量)。
- 作用 :控制发送方的数据发送速率,避免因发送过快导致网络拥塞或接收方处理不过来。
接收窗口
- 定义 :接收方允许接收并缓存(或直接交付)的帧的最大数量,通常决定了接收方可以接受乱序或非连续帧的能力。
- 作用 :明确接收方能够处理的数据范围(包括按序和乱序数据),超出窗口的数据会被丢弃。
补充
- 发送窗口 :决定发送方能“同时发多少”。
- 接收窗口 :决定接收方能“同时收多少”以及“是否支持乱序接受”。
三个 ARQ 协议的具体区别如下:
| 特性 | 停等协议 | GBN(Go‑Back‑N)协议 | SR(Selective‑Repeat)协议 |
|---|---|---|---|
| 发送方窗口大小(序号位数为 n) | 1(一次只能发送一帧) | 最多 2n−1 (可并发发送多帧) | 最多 2n−1 (可并发发送多帧) |
| 接收方窗口大小(序号位数为 n) | 1(只接受一帧) | 1(只能接受按序的下一帧) | 与发送方窗口大小相同(可接受乱序帧) |
| 超时重传单位 | 单个数据帧即整个发送窗口 | 整个发送窗口 | 单个数据帧 |
| 发送方效率 | 低——每发送一帧必须等待确认 | 高——在确认到达前可连续发送多帧 | 高——仅对出错帧进行重传,其他帧不受影响 |
| 接收方效率 | 高——无需缓存,按序直接交付 | 低——必须按照顺序接收 | 高——可以缓存并按序交付已收到的乱序帧 |
| 错误处理方式 | 只重传丢失的那一帧 | 从第一个出错帧起,全部帧都要重传 | 只重传出错或乱序的那一帧(或若干孤立的帧) |
| 带宽利用率 | 低——大量空闲时间 | 高——大多数时间都在利用链路带宽 | 高——仅在必要时占用带宽进行重传 |
窗口大小限制
在说明窗口大小限制之前,必须先区分三种不同的“编号”概念:

假设序列号位数为 3,那么序列号范围为 [0, 7]
- 绝对编号 :指帧在整个逻辑发送流中的真实顺序编号。 该编号会随着发送不断递增:
0,1,2,3,4,5,6,7,8,9,…
绝对编号本身通常认为是无限增长的,仅用于逻辑分析。
- 序列号(循环编号) :协议首部中的编号字段长度有限。 若序列号字段使用 n 位,则序列号范围为:
0∼2n−1
超过后重新从 0 开始循环。
例如当 (n=3) 时:
0,1,2,3,4,5,6,7,0,1,2,…
- 窗口内编号 :是序列号范围的一个子集
协议真正传输的是 序列号(循环编号) 。
发送窗口与接收窗口本质上是在“循环序列号空间”上滑动。 这可以与 TCP 中的 绝对下标和序列号 进行类比。
假设协议中的序列号字段使用 n 位,则序列号空间大小为:
2n
发送窗口大小( Ws )与接收窗口大小( Wr )必须满足:
Ws+Wr≤2n
为什么有这个限制?
根本原因是防止 序列号回绕(wrap around)带来的歧义 。
当发送窗口和接收窗口的大小之和超过 2n 时,可能出现以下情况:
- 一个新帧使用了与之前某个仍在网络中滞留的旧帧相同的序列号;
- 接收方无法区分该帧是“新的合法帧”还是“旧的延迟到达帧”。
通过保证:
Ws+Wr≤2n
可以确保在任何时刻,发送窗口与接收窗口不会在序列号空间中发生重叠,从而避免不同绝对编号的帧使用同一序列号时产生歧义。

极端情况下:当接收方收到了所有数据帧,但是所有确认帧都丢失的情况下,
发送窗口和接收窗口会具有相同的 序列号,但是所对应的数据帧不同
假设序列号位数为 2,序列号范围为 0,1,2,3
假设发送窗口大小 4,接收窗口大小 1,
假设发送窗口大小 3,接收窗口大小 3,
信道利用率
在 ARQ 协议中,信道利用率 (也叫做链路利用率)是指信道用于传输有效数据的效率,通常定义为 成功传输数据的时间占总传输时间的比例 。它反映了协议在给定信道条件下的性能,是评估 ARQ 协议效率的重要指标。
信道利用率 U 可以表示为
U=TtotalTdata
其中:
- Tdata :成功传输有效数据的时间。
- Ttotal :总时间,包含数据传输、确认、重传以及等待。
计算方法
对于 ARQ 协议,假设信号传播时间为 Tp ,一个数据帧的传输时间为 Td ,一个确认帧的传输时间为 Ta ,发送窗口的最大值为 N ,信号往返时间 RTT=2⋅Tp 。
在此情况下,信道利用率 U = 发送数据的时间 / 从发送第一个帧的时间到收到第一个确认帧的时间:
U=RTT+Td+TaN⋅Td
停等协议

对于停等协议,信道利用率为
U=RTT+Td+TaTd
连续 ARQ 协议

滑动窗口协议,连续传输多个帧
对于使用了滑动窗口的协议(比如回退 N 帧和选择性重传),一次性可以传输 N 个数据帧,信道利用率为
U=RTT+Td+TaN⋅Td
注意有些时候确认帧比较小,在这种情况下确认帧传输时间 Ta 可以忽略。
此外, U≤1 ,所以当 N⋅Td>RTT+Td+Ta 时,信道利用率 U=1 。
相关笔记
- 通信概念
- 物理层设备
- 编码与调制
- 物理层
- 交换方式