首页/计算机网络/03-data-link/停止-等待协议 🔗 在 Obsidian 中打开
计算机网络 · 03-data-link

停止-等待协议

重要度 ★★★★★ 计算机网络/数据链路层停止等待SWARQ信道利用率
速查
发送方发送一帧后停止,等待接收方的确认(ACK),收到确认后才发送下一帧。信道利用率 $U = T_D / (T_D + RTT + T_A)$。考试频率 ⭐⭐⭐⭐。

一、核心概念

基本原理

发送方发送一帧后停止,等待接收方的确认(ACK),收到确认后才发送下一帧

发送方                    接收方
  │                        │
  │──── 发送帧0 ────→│
  │                    │  接收帧0
  │←── ACK1 ─────────│  (ACK1表示期望收到下一帧序号为1)
  │                        │
  │──── 发送帧1 ────→│
  │                    │  接收帧1
  │←── ACK0 ─────────│  (ACK0表示期望收到下一帧序号为0)
  │                        │

序号机制

  • 只需要 1 位序号(0 和 1 交替)
  • 发送方和接收方维护当前序号
  • 序号用于检测重复帧
为什么 1 位就够因为发送窗口 $W_T = 1$、接收窗口 $W_R = 1$,同一时刻信道上最多只有一帧未确认,用 0/1 交替即可区分"新帧"与"重传帧"。

二、正常工作流程

无差错情况

时间→
发送方: [发送0]────等待────[收到ACK1]──[发送1]────等待────[收到ACK0]
接收方:        [收到0,发ACK1]                  [收到1,发ACK0]

有差错情况

帧出错

发送方: [发送0]────等待────[超时]──[重传0]────等待────[收到ACK1]
接收方:        [收到0(有错),丢弃]          [收到0(正确),发ACK1]

帧丢失

发送方: [发送0]────等待────[超时]──[重传0]────等待────[收到ACK1]
接收方:        [未收到]                    [收到0(正确),发ACK1]

ACK 丢失

发送方: [发送0]────等待────[超时]──[重传0]────等待────[收到ACK1]
接收方:        [收到0,发ACK1]  ↓ACK丢失    [收到0(重复),丢弃,重发ACK1]

ACK 迟到

发送方: [发送0]──[等待]──[收到ACK1]──[发送1]──[收到迟到的ACK1(忽略)]
接收方:              [收到0,发ACK1(迟到)]         [收到1,发ACK0]
四种异常统一处理发送方只有超时重传一种手段;接收方只有按序号丢弃重复帧并重发 ACK一种手段。两者组合即可覆盖帧出错、帧丢失、ACK 丢失、ACK 迟到四种情况。

三、信道利用率

计算公式

$$U = \frac{T_D}{T_D + RTT + T_A}$$

  • $T_D =$ 发送时延 $=$ 帧长度 $L$ / 数据速率 $C$
  • $RTT =$ 往返时延
  • $T_A = ACK$ 发送时延(通常很小,可忽略)

简化:$U \approx T_D / (T_D + RTT)$

计算示例

帧长 $L=1000\text{B}$,数据速率 $C=1\text{Mbps}$,$RTT=20\text{ms}$。

$T_D = 1000 \times 8 / 1 \times 10^6 = 8\text{ms}$

$U = 8 / (8 + 20) = 8/28 \approx 28.6\%$

结论当 $RTT$ 远大于 $T_D$ 时,信道利用率很低

利用率限制

  • 停止-等待协议的信道利用率通常 $\leq 50\%$
  • $RTT$ 越大,利用率越低
  • 帧越短,利用率越低

四、常见考法

考点说明
信道利用率计算$U = T_D / (T_D + RTT)$
各种差错情况分析帧出错 / 丢失、ACK 丢失 / 迟到
序号交替规则0 和 1 交替,ACK 表示期望收到的下一帧序号
与 GBN / SR 的对比窗口大小、信道利用率
高频设问给定 $L$、$C$、$RTT$ 求 $U$;或反过来给定目标 $U$ 求最小帧长。牢记先把帧长换算成 bit 再除以速率。

五、易错点

注意
  • ACK1 表示"已正确收到帧 0,期望下一帧序号为 1"。
  • 重传后接收方需要处理重复帧(靠序号检测)。
  • 超时时间必须大于 $RTT + T_D$,否则会误重传
  • 停止-等待不是 GBN 的特例(虽然 $W_t = 1$),因为确认方式不同。

六、核心结论

必背
  1. 停止-等待是最简单的可靠传输协议
  2. 窗口大小 $W_t = 1,\ W_r = 1$,只需要 1 位序号
  3. 信道利用率低是主要缺点。
  4. 是理解 GBNSR 协议的基础。

记忆卡片

停止-等待需要几位序号?
1 位(0 和 1 交替)。
ACK1 表示什么?
已正确收到帧 0,期望下一帧序号为 1。
停止-等待的信道利用率公式?
$U \approx T_D / (T_D + RTT)$。
停止-等待的主要缺点?
信道利用率低,特别是 $RTT$ 远大于 $T_D$ 时。

交互动画 · 停止-等待 ARQ 四种情形

发送方 接收方 ① 帧 0(seq=0) ✕ 丢失 / 出错 ② ACK1(期望下一帧 seq=1) ✕ ACK 丢失 ⏱ 超时重传 ③ 重传帧 0 ④ ACK1(重复帧丢弃后重发)
无差错:发送帧 0 → 收到 ACK1 → 可以发送帧 1
点击上方按钮切换四种情形
时序图:橙色 = 发送方→接收方的数据帧,绿色 = 接收方→发送方的 ACK,红色虚线 + ✕ = 丢失,⏱ = 发送方超时计时器到期触发重传。

相关知识点

flow-control go-back-n-gbn selective-repeat-sr

↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。