系统说明流量控制与可靠传输机制,重点覆盖停止等待、后退 N 帧、选择重传和滑动窗口协议。

# 流量控制与可靠传输

数据链路层中的流量控制和可靠传输经常一起考。流量控制解决 “发送方太快,接收方处理不过来” 的问题;可靠传输解决 “帧出错、丢失、确认丢失后如何恢复” 的问题。

机制目标
流量控制控制发送速率,避免接收方缓冲区溢出
差错控制检测或纠正比特错误
可靠传输通过确认、超时和重传保证帧可靠到达

链路层可靠传输不是所有链路都需要。以太网通常只检错丢弃,不做重传;无线链路、卫星链路等误码率较高的场景更可能在链路层使用重传机制。

# ARQ 协议

ARQ(Automatic Repeat reQuest,自动重传请求)是一类可靠传输协议。它的基本思想是:

  1. 发送方发送数据帧。
  2. 接收方正确收到后返回 ACK。
  3. 发送方若超时未收到 ACK,就认为数据帧或确认帧丢失,需要重传。

ARQ 的三个典型协议:

  • 停止 - 等待协议。
  • 后退 N 帧协议(GBN)。
  • 选择重传协议(SR)。

1
2
3
4
5
flowchart TB
A[ARQ 可靠传输] --> B[停止-等待]
A --> C[连续 ARQ]
C --> D[GBN<br/>后退 N 帧]
C --> E[SR<br/>选择重传]

# 停止 - 等待协议

停止 - 等待协议每次只发送一个帧,收到确认后才发送下一个帧。

1
2
3
4
5
6
7
8
9
10
sequenceDiagram
participant S as 发送方
participant R as 接收方
S->>R: Frame 0
R-->>S: ACK 0
S->>R: Frame 1
R--xS: ACK 1 丢失
Note over S: 超时
S->>R: 重传 Frame 1
R-->>S: ACK 1

# 工作过程

  1. 发送方发送一个数据帧,并启动计时器。
  2. 接收方检错:
    • 正确接收:返回 ACK。
    • 检测出错:丢弃该帧,不返回 ACK。
  3. 发送方收到 ACK 后发送下一帧。
  4. 若计时器超时,则重传原帧。

# 序号问题

停止 - 等待协议至少需要 1 bit 序号,即 01 交替使用。

原因:确认帧可能丢失,导致发送方重传旧帧。接收方必须能区分 “新帧” 和 “重复帧”。

1
Frame 0 -> ACK 0 丢失 -> 重传 Frame 0

若没有序号,接收方可能把重传帧当作新数据交付。

# 特点

优点:

  • 实现简单。
  • 接收方不需要复杂缓存。
  • 适合低速、短距离、简单链路。

缺点:

  • 信道利用率低。
  • 传播时延较大时,大量时间浪费在等待 ACK。

# 滑动窗口机制

滑动窗口允许发送方在未收到确认前连续发送多个帧,以提高信道利用率。

核心概念:

名称含义
发送窗口发送方允许连续发送但尚未确认的帧集合
接收窗口接收方当前允许接收的帧集合
序号空间n 位序号能表示的编号集合,大小为 2n2^n

窗口会随着 ACK 到达向前滑动。

1
2
3
发送窗口: [0 1 2 3] 4 5 6 7
收到 ACK0 后:
发送窗口: 0 [1 2 3 4] 5 6 7

# 后退 N 帧协议 GBN

GBN(Go-Back-N)允许发送方连续发送多个帧,但接收方只按序接收。

# GBN 规则

发送方:

  • 发送窗口大小 Ws>1W_s > 1
  • 可以连续发送窗口内的多个帧。
  • 为最早未确认帧设置计时器。
  • 若超时,从出错帧开始重传后续所有已发送但未确认帧。

接收方:

  • 接收窗口大小 Wr=1W_r = 1
  • 只接受当前期望序号的帧。
  • 对乱序帧直接丢弃。
  • 发送累积确认。

# 累积确认

ACK k 通常表示:接收方已经正确收到 k 之前的所有帧,下一次期望收到第 k 帧。

不同教材对 ACK 编号含义可能略有差异,做题时以题目说明为准。

# GBN 示例

1
2
3
4
5
6
7
8
9
10
11
12
13
sequenceDiagram
participant S as 发送方
participant R as 接收方
S->>R: Frame 0
S->>R: Frame 1
S->>R: Frame 2 丢失
S->>R: Frame 3
R-->>S: ACK 1
R-->>S: ACK 2
Note over R: Frame 3 乱序,丢弃
Note over S: Frame 2 超时
S->>R: 重传 Frame 2
S->>R: 重传 Frame 3

# GBN 特点

优点:

  • 发送方可以连续发送,效率高于停止 - 等待。
  • 接收方简单,不需要缓存乱序帧。

缺点:

  • 一个帧出错,后续已发送帧也要重传。
  • 信道误码率高时浪费较大。

# 选择重传协议 SR

SR(Selective Repeat)允许接收方接收并缓存乱序帧,只重传出错或丢失的帧。

# SR 规则

发送方:

  • 连续发送窗口内帧。
  • 每个未确认帧通常有独立计时器。
  • 哪个帧超时,只重传哪个帧。

接收方:

  • 接收窗口大小 Wr>1W_r > 1
  • 可以接收乱序帧并缓存。
  • 对每个正确收到的帧分别确认。
  • 当窗口前沿之前的帧都到齐后,按序交付给网络层。

# SR 示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sequenceDiagram
participant S as 发送方
participant R as 接收方
S->>R: Frame 0
S->>R: Frame 1
S->>R: Frame 2 丢失
S->>R: Frame 3
R-->>S: ACK 0
R-->>S: ACK 1
R-->>S: ACK 3
Note over R: 缓存 Frame 3,等待 Frame 2
Note over S: Frame 2 超时
S->>R: 重传 Frame 2
R-->>S: ACK 2
Note over R: 按序交付 2 和 3

# SR 特点

优点:

  • 只重传出错帧,信道利用率高。
  • 适合长时延、高带宽或误码较高的链路。

缺点:

  • 接收方需要缓存乱序帧。
  • 发送方计时器和状态管理复杂。
  • 对窗口大小有更严格限制。

# 三种协议对比

项目停止 - 等待GBNSR
发送窗口1大于 1大于 1
接收窗口11大于 1
是否连续发送
乱序帧处理不涉及丢弃缓存
确认方式单帧确认累积确认单独确认
重传策略重传当前帧从出错帧开始重传后续帧只重传出错帧
实现复杂度
信道利用率

# 窗口大小限制

设序号字段有 nn 位,则序号空间大小为:

2n2^n

为了避免序号回绕造成新旧帧混淆,发送窗口 WsW_s 与接收窗口 WrW_r 需要满足:

Ws+Wr2nW_s + W_r \le 2^n

# 停止 - 等待

Ws=1,Wr=1W_s = 1,\quad W_r = 1

至少需要 1 bit 序号。

# GBN

GBN 中:

Wr=1W_r = 1

因此:

Ws+12nW_s + 1 \le 2^n

所以:

Ws2n1W_s \le 2^n - 1

# SR

SR 中一般令:

Ws=WrW_s = W_r

由:

Ws+Wr2nW_s + W_r \le 2^n

得到:

Ws2n1,Wr2n1W_s \le 2^{n-1},\quad W_r \le 2^{n-1}

常考结论:n 位序号时,GBN 发送窗口最大为 2n12^n-1;SR 发送窗口和接收窗口最大通常为 2n12^{n-1}

# 信道利用率

信道利用率表示信道用于传输有效数据的比例。

设:

  • 数据帧发送时间为 TdT_d
  • ACK 发送时间为 TaT_a
  • 单程传播时延为 TpT_p
  • 往返传播时延 RTT=2TpRTT = 2T_p
  • 发送窗口大小为 NN

停止 - 等待协议的近似信道利用率:

U=TdTd+RTT+TaU = \frac{T_d}{T_d + RTT + T_a}

连续 ARQ 协议在不考虑出错重传时:

U=min(1,NTdTd+RTT+Ta)U = \min\left(1,\frac{N \cdot T_d}{T_d + RTT + T_a}\right)

如果 ACK 发送时间可忽略:

Umin(1,N1+2a)U \approx \min\left(1,\frac{N}{1+2a}\right)

其中:

a=TpTda = \frac{T_p}{T_d}

做题时先判断是否给出 ACK 发送时间。如果题目说 ACK 很短或忽略确认帧发送时间,就可以去掉 TaT_a

# 本节考点

  1. ARQ 的核心是 ACK、超时、重传。
  2. 停止 - 等待一次只发一帧,至少需要 1 bit 序号。
  3. GBN 发送窗口大于 1,接收窗口为 1,乱序帧丢弃,出错后回退重传。
  4. SR 发送窗口和接收窗口都大于 1,接收方缓存乱序帧,只重传出错帧。
  5. n 位序号:GBN 最大发送窗口 2n12^n-1,SR 最大窗口 2n12^{n-1}
  6. 信道利用率题目要区分发送时延、传播时延、ACK 发送时间和窗口大小。

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