本地资料流量控制
SCHEDULE LOCAL高优先级13 个小节覆盖真题 20092025
关联考点ARQ协议11信道利用率7窗口大小限制1做相关真题 · 12 道 →
做相关真题 · 12 道选中文字可高亮或加下划线
选中文字高亮 · 下划线

流量控制

真题练习

选择题和解答题都经常考查 ARQ 协议,三个重点不能忽略:1. 三种 ARQ 协议的 实现原理。 2. 窗口大小的限制。3. 信道利用率 的计算方法。

这一节都是理解性内容,需要理清背后的原理。

ARQ 协议

ARQ 协议是一类 可靠数据传输协议,用于在 不可靠的信道(比如可能出错或丢包的网络链路)上实现 可靠通信

ARQ 协议的 核心思想 是:

  • 发送方在发送数据后,必须等待接收方的确认(ACK)。
  • 如果在规定时间内没有收到确认,就认为数据丢失或出错,需要重传。

ARQ 协议主要包括三种形式:停等(Stop‑and‑Wait)、回退 N 帧(Go‑Back‑N)以及 选择性重传(Selective Repeat)。其中,回退 N 帧和选择性重传统称为 连续 ARQ 协议

停等、回退 N 帧和选择重传三种 ARQ 协议的窗口差异

ARQ 在哪一层使用?

考研模型里默认:

  • 链路层:可能用 ARQ(作为差错控制手段之一),适用于误码率较高的链路
    • 以太网不使用
    • 无线链路、卫星通信会用
  • 传输层:TCP 使用确认、超时与重传来实现可靠传输;UDP 不使用 ARQ。

但要记住一句本质话:

ARQ 不是某一层专属,而是一种“机制”,可以出现在不同层。

如果 TCP 是保证可靠传输,那么链路层为什么还需要使用 ARQ?

如果链路不大可靠,链路层 ARQ 可以在本地迅速修补大多数偶发的比特错误,减少 TCP 端到端重传,通常能提升吞吐量。但链路层连续重试也会增加时延,并可能与 TCP 的重传计时器相互影响,所以它不是“重试越多越好”。

停等协议

停等(Stop‑and‑Wait)是一种最基本的 自动重传请求(ARQ)协议。其核心思想是:发送方在发送完每一个数据帧后立即停止发送,并 等待 接收方的 确认(ACK)。只有在收到确认后,发送方才会继续发送下一个帧。由于任意时刻网络中只会有一个帧在传输,所以该协议也被称为“停等”。

sequenceDiagram
    participant S as 发送方(Sender)
    participant R as 接收方(Receiver)

    S->>R: 发送数据帧 Frame[0]
    Note over S: 启动计时器

    R--xS: ACK[0] 丢失
    Note over S: 计时器超时,未收到 ACK

    S->>R: 重传数据帧 Frame[0]
    Note over S: 重新启动计时器

    R-->>S: 发送确认帧 ACK[0]
    Note over S: 收到 ACK[0],停止计时器

    S->>R: 发送数据帧 Frame[1]
    Note over S: 启动计时器

    R-->>S: 发送确认帧 ACK[1]
    Note over S: 收到 ACK[1],停止计时器

停等协议的 工作过程 如下:

  1. 发送数据
    • 发送方将一个数据帧发送给接收方。
    • 同时启动 计时器,用于监控该帧的确认是否在规定时间内到达。
  2. 等待确认
    • 在计时器超时之前,发送方保持在“等待”状态。
    • 此期间若收到 确认帧(ACK),则说明该帧已成功到达并被正确接收。
  3. 确认的接收
    • 接收方收到数据帧后,首先检验其完整性(如校验和、序号等)。
    • 若数据帧无误,接收方立即发送 确认帧(ACK)回给发送方;若检测到错误,则不发送 ACK,导致发送方超时后重传。
  4. 计时器到期
    • 若计时器在收到确认之前到期,发送方认为该帧或其确认已丢失。
    • 发送方随后 重新发送 同一数据帧,并重新启动计时器,重复上述过程直至收到有效的确认。
停等协议每发一帧便等待确认,超时后重传同一帧

通过上述四个步骤,停等协议实现了可靠的点对点数据传输,尽管其效率受限于 “每次只能发送一个帧” 的特性。

回退 N 帧

回退 N 帧(GBN,Go‑Back‑N)协议中,发送窗口 指的是发送方在未收到确认的情况下,最多可以连续发送的数据帧数量。它像一个滑动窗口,控制着数据的发送节奏。

发送方可以在等待确认的过程中,连续发送多个帧,但总数不能超出发送窗口的大小。当窗口被填满时,发送方必须停下来等待确认,收到确认后窗口才能向后滑动,从而腾出空间发送新的帧。

回退 N 帧的语义如何理解?

当发送方检测到某个数据帧超时(或收到重复的 ACK / NAK)时,它不会只重传那一帧,而是“回退”到该丢失帧的序号,并重新发送从该序号开始的所有后续帧 —— 即使这些帧之前已经发送过。

sequenceDiagram
    participant S as 发送方 (Sender)
    participant R as 接收方 (Receiver)

    Note over S,R: 窗口大小 W = 3,2 位序号空间为 0-3

    S->>R: Frame[0]
    R->>S: ACK0 (确认帧0)

    S->>R: Frame[1] (丢失)
    S->>R: Frame[2]
    R->>S: ACK0 (仍期望帧1,丢弃帧2)

    Note over S: 定时器超时,回退到Frame[1]

    S->>R: Frame[1] (重传)
    R->>S: ACK1 (确认帧1)

    S->>R: Frame[2] (重传)
    R->>S: ACK2 (确认帧2)

    Note over S,R: 全部确认完毕,窗口前移

回退 N 帧的 核心要点 如下:

  1. 窗口大小

    • 若帧序号使用 nn 位二进制,则序号空间大小为 2n2^n
    • 为保证新旧帧不产生歧义,GBN 的发送窗口大小 WSW_S 必须满足
    1WS2n1,1\le W_S\le 2^n-1,

    因此最大窗口大小为 2n12^n-1

    • 接收窗口的大小固定为 1,即接收方只能一次接受并确认期望的序号。
  2. 发送过程

    • 只要发送窗口未满,发送方就可以把窗口内的帧依次发送出去。
    • 对于 最早发送且尚未被确认的帧(即窗口中的第一个未确认帧),发送方启动 单一的超时计时器
    • 其余已发送但尚未确认的帧不再单独维护计时器,而是共享这一个计时器。
  3. 接收过程

    • 接收方维护一个 期望序号(expected sequence number)。
    • 当收到的帧序号等于期望序号时,接收方接受该帧并发送 累计确认 ACK(确认该帧及其之前的所有帧)。随后期望序号加 1。
    • 若收到的帧序号不是期望序号(通常说明前面的某帧丢失),接收方直接 丢弃该帧,并可 重新发送最近一次正确接收的帧的 ACK。由于接收窗口为 1,后续已到达但序号不连续的帧都会被丢弃。
  4. 超时与重传

    • 超时计时器 触发时,发送方认为窗口中最早的未确认帧已丢失。按照 GBN 的工作原理,发送方会 从该帧开始,把窗口内的所有帧全部 重新发送
    • 这样做的原因是:即使后面的帧已经到达接收方,由于接收窗口仅能接受连续的序号,这些帧会在接收方被丢弃,只有最早丢失的帧被重新发送后,后续帧才能被顺利接收。
GBN 在某帧超时后重传该帧及其后所有未确认帧

下面的站内交互把 GBN 与 SR 放在同一个循环序号空间中。例如让帧 1 丢失后,可以逐步观察窗口移动以及旧帧、新帧发生歧义的条件。

交互中的序号空间与窗口约束统一记为:2n2^nWS+WR2nW_S+W_R\le 2^nWS,GBN2n1W_{S,\mathrm{GBN}}\le 2^n-1WSR2n1W_{\mathrm{SR}}\le 2^{n-1}

过程流

循环序号空间中的 GBN 与 SR

逐步观察 3 位循环序号、窗口滑动和帧 1 丢失时 GBN 与 SR 的不同处理,并理解窗口为何不能覆盖新旧两轮的同一序号。

建立窗口帧 1 丢失帧 1 丢失GBN 处理帧 1 丢失SR 处理GBN 处理检查回绕SR 处理检查回绕

当前查看:建立窗口取 n=3,序号空间为 0~7;SR 令发送、接收窗口均为 4,恰好占序号空间一半。

选择性重传

选择性重传(SR,Selective Repeat)是一种 自动重传请求ARQ)协议,专门用于克服回退 N 帧(Go‑Back‑N)在高误码率环境下的效率低下。与 Go‑Back‑N 不同,SR 只 重传 那些真正丢失或出错的帧,而不必重新发送随后所有的帧,从而在误码率较高的链路上表现得更为高效。

sequenceDiagram
    participant S as 发送方 (Sender)
    participant R as 接收方 (Receiver)

    Note over S,R: 窗口大小 W = 4,序号空间 0-7

    S->>R: Frame[0]
    R->>S: ACK0 (确认帧0,交付上层)

    S->>R: Frame[1] (丢失)
    S->>R: Frame[2]
    R->>S: ACK2 (缓存帧2,等待帧1)

    S->>R: Frame[3]
    R->>S: ACK3 (缓存帧3,等待帧1)

    Note over R: 已缓存 {2,3},但因缺少1不能交付

    Note over S: 定时器1超时,仅重传帧1

    S->>R: Frame[1] (重传)
    R->>S: ACK1 (确认帧1,立即交付 {1,2,3})

    Note over R: 交付顺序为 1,2,3,接收窗口滑动

    Note over S,R: 窗口继续前移,可发送后续帧4,5...

选择性重传的 核心要点 如下:

  1. 窗口大小

    • 在 SR 中,发送窗口和接收窗口的大小保持一致。
    • 一般约束为 WS+WR2nW_S+W_R\le 2^n。教材通常令发送窗口与接收窗口同为 WW,于是
    W2n1,W\le 2^{n-1},

    即窗口最大为序号空间的一半,以避免发送方和接收方窗口重叠产生歧义。

  2. 发送过程

    • 发送方在其发送窗口范围内连续发帧。
    • 每发送一帧,就为该帧启动一个 计时器;计时器独立于其他帧,超时后仅针对该帧进行重传。
  3. 接收过程

    • 接收方接受所有落在接收窗口中的帧,即使这些帧顺序错乱。
    • 对于每一正确收到的帧,接收方立即发送 确认(ACK)。
    • 乱序到达的帧会被 缓存,待窗口前面的缺失帧补齐后,按正确顺序交付给上层。
  4. 超时与重传

    • 当某帧的计时器到期,发送方只 重传 该帧,而不是窗口内的全部帧。这一点是 SR 与 GBN 的根本区别,也是 SR 在高误码率下保持高吞吐量的关键。
  5. 滑动窗口机制

    • 发送方:收到帧的确认后,窗口左边界向前移动,释放已确认的帧槽位,随后可以发送新的帧。
    • 接收方:当缓存的帧已能够连续组成一个完整序列并交付给上层后,接收窗口也向前滑动,腾出空间接收后续帧。
  6. 重复确认的处理

    • 由于网络延迟,发送方可能在重传帧后才收到该帧的早期确认。
    • SR 要按序号识别重复确认(duplicate ACK);已经确认过的帧再次收到 ACK 时忽略即可,不能让窗口错误地重复滑动。
SR 为每个在途帧独立计时,只重传丢失或出错的帧

协议对比

几种 ARQ 协议的主要区别是通过发送和接收窗口体现的:

发送窗口

  • 定义:发送方在未收到对方确认(ACK)的情况下,允许连续发送的最大帧数量(或数据单元数量)。
  • 作用:控制发送方的数据发送速率,避免因发送过快导致网络拥塞或接收方处理不过来。

接收窗口

  • 定义:接收方允许接收并缓存(或直接交付)的帧的最大数量,通常决定了接收方可以接受乱序或非连续帧的能力。
  • 作用:明确接收方能够处理的数据范围(包括按序和乱序数据),超出窗口的数据会被丢弃。

记忆

  • 发送窗口:决定发送方能“同时发多少”。
  • 接收窗口:决定接收方能“同时收多少”以及“是否支持乱序接受”。
停等、GBN 与 SR 的发送窗口和接收窗口大小对照

三个 ARQ 协议的具体区别如下:

特性 停等协议 GBN(Go-Back-N) SR(Selective Repeat)
发送窗口大小(序号位数为 nn 1,一次只能发送一帧 最大 2n12^n-1,可并发发送多帧 常令收发窗口相等,最大 2n12^{n-1}
接收窗口大小 1,只接受当前期望帧 1,只接受按序的下一帧 通常与发送窗口相同,可接受并缓存窗口内乱序帧
超时重传单位 单个数据帧;此时它也是整个发送窗口 从最早未确认帧起的所有已发送、未确认帧 仅超时或出错的单个数据帧
发送方效率 低,每发送一帧必须等待确认 无差错时高;发生丢帧时可能重复发送后续帧 高,仅对丢失或出错帧重传,其他帧不受影响
接收方处理 无需缓存,按序直接交付 不缓存乱序帧,必须按照顺序接收 可以缓存乱序帧,缺口补齐后按序交付
错误处理方式 只重传丢失的那一帧 从第一个丢失或出错帧起重传后续在途帧 只重传丢失或出错的帧;乱序但正确的帧会被缓存而不是重传
理想带宽利用率 往返时延较大时低,大量时间等待 ACK 窗口足够大时高 窗口足够大时高,误码率较高时通常优于 GBN

窗口大小限制

在说明窗口大小限制之前,必须先区分三种不同的“编号”概念:

绝对编号、循环序列号和窗口内编号的对应关系
  • 绝对编号:指帧在整个逻辑发送流中的真实顺序编号。该编号会随着发送不断递增:

    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, …

    绝对编号本身通常认为是无限增长的,仅用于逻辑分析。

  • 序列号(循环编号):协议首部中的编号字段长度有限。若序列号字段使用 nn 位,则序列号范围为

    02n1.0\sim 2^n-1.

    超过后重新从 0 开始循环。

    例如当 n=3n=3 时,序号会这样循环:

    0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, …

  • 窗口内编号:是当前序列号范围中的一个子集,窗口滑动后,这个子集也随之改变。

协议首部真正传输的是 序列号(循环编号),不是无限增长的绝对编号。

发送窗口与接收窗口本质上是在循环序列号空间上滑动。这可以与 TCP 中的 绝对下标和序列号 类比。

假设序列号字段使用 nn 位,则序列号空间大小为

2n.2^n.

为避免序列号回绕后新旧帧产生歧义,发送窗口大小 WSW_S 与接收窗口大小 WRW_R 应满足

WS+WR2n.W_S+W_R\le 2^n.

为什么有这个限制?

根本原因是防止 序列号回绕(wrap around)带来的歧义

当发送窗口和接收窗口的大小之和超过 2n2^n 时,可能出现以下情况:

  • 一个新帧使用了与之前某个仍在网络中滞留的旧帧相同的序列号;
  • 接收方无法区分该帧是“新的合法帧”还是“旧的延迟到达帧”。

通过保证 WS+WR2nW_S+W_R\le 2^n,可以让接收窗口不会同时覆盖“上一轮的旧帧”和“下一轮的新帧”,从而避免不同绝对编号的帧使用同一序列号时产生歧义。

窗口过大会使循环后的新帧与滞留旧帧使用相同序列号

三种协议的特例

  • 停等协议WS=WR=1W_S=W_R=1,只要 n1n\ge1 就满足约束。
  • GBNWR=1W_R=1,所以 WS2n1W_S\le2^n-1
  • SR:若 WS=WR=WW_S=W_R=W,则 2W2n2W\le2^n,所以 W2n1W\le2^{n-1}

信道利用率

在 ARQ 协议中,信道利用率(也叫做链路利用率)是指信道用于传输有效数据的效率,通常定义为 成功传输数据的时间占总传输时间的比例。它反映了协议在给定信道条件下的性能,是评估 ARQ 协议效率的重要指标。

信道利用率 UU 可以表示为

U=TdataTtotal.U=\frac{T_{\rm data}}{T_{\rm total}}.

其中:

  • TdataT_{\rm data}:成功传输有效数据的时间。
  • TtotalT_{\rm total}:总时间,包含数据传输、确认、重传以及等待。

计算方法

对于 ARQ 协议,假设单程传播时延为 TpT_p,一个数据帧的发送时延为 TdT_d,一个确认帧的发送时延为 TaT_a,发送窗口大小为 NN。若忽略处理与排队时延,往返传播时延为

RTTprop=2Tp.\mathrm{RTT}_{\rm prop}=2T_p.

从开始发送第一个数据帧到其 ACK 完整到达,理想的无差错周期为

Tcycle=Td+2Tp+Ta.T_{\rm cycle}=T_d+2T_p+T_a.

这里的公式默认没有帧丢失或重传,并把整个数据帧发送时间视为有效占用;若题目只把载荷计为有效数据,还需再乘以“载荷长度/帧总长度”。

停等协议

停等协议一个发送确认周期中的发送与等待时间

对于停等协议,一个周期只能发送一个数据帧,信道利用率为

USW=TdTd+2Tp+Ta.U_{\rm SW}=\frac{T_d}{T_d+2T_p+T_a}.

若确认帧发送时间可忽略,并令 a=Tp/Tda=T_p/T_d,则常写成

USW=11+2a.U_{\rm SW}=\frac{1}{1+2a}.

连续 ARQ 协议

连续 ARQ 用多个在途帧覆盖传播与确认等待时间

对于使用滑动窗口的协议(如 GBN 和 SR),发送方一个窗口最多可连续发送 NN 个数据帧。无差错且 ACK 能及时使窗口滑动时,理想信道利用率为

Uwindow=min(1,NTdTd+2Tp+Ta).U_{\rm window}=\min\left(1,\frac{N T_d}{T_d+2T_p+T_a}\right).

有些题目认为确认帧很小,此时确认帧发送时间 TaT_a 可以忽略,得到

Uwindow=min(1,N1+2a).U_{\rm window}=\min\left(1,\frac{N}{1+2a}\right).

利用率不可能超过 1。因此,当

NTdTd+2Tp+TaN T_d\ge T_d+2T_p+T_a

时,发送窗口已经足以填满链路,理想利用率取 U=1U=1。实际发生差错时,GBN 可能重复发送多个帧,SR 也要为丢失帧重传;此时有效数据利用率会低于上述理想值。