首页/计算机网络/03-data-link/选择重传协议(SR) 🔗 在 Obsidian 中打开
计算机网络 · 03-data-link

选择重传协议(SR)

重要度 ⭐⭐⭐⭐⭐ 计算机网络/数据链路层SR选择重传滑动窗口逐帧确认
速查
SR:发送方连续发多帧,接收方缓存失序帧(Wr > 1)。出错时只重传出错的帧。约束 Wt + Wr ≤ 2ⁿ,通常 Wt = Wr = 2ⁿ⁻¹。与 GBN 最大区别:接收方缓存失序帧。考试频率 ⭐⭐⭐⭐⭐。

核心概念

基本原理

发送方可以连续发送多个帧,接收方缓存失序帧。出错时发送方只重传出错的帧,而不是后续所有帧。

窗口设置

发送窗口 Wt: 可连续发送的帧数
接收窗口 Wr: 可接收的失序帧数(Wr > 1)
约束:Wt + Wr ≤ 2ⁿ(n 为序号位数)
通常取 Wt = Wr = 2^(n-1)
例:3 位序号 → Wt + Wr ≤ 8 → Wt = Wr = 4

与 GBN 的关键区别

特性GBNSR
接收窗口Wr = 1Wr > 1
失序帧处理丢弃缓存
确认方式累积确认逐帧确认
重传范围出错帧及后续所有帧只重传出错帧
实现复杂度简单复杂

工作流程

正常情况

发送方: [发0][发1][发2][发3]──等待──[收ACK0]──[发4]...
接收方: [收0][收1][收2][收3]──[发ACK0][ACK1][ACK2][ACK3]
逐帧确认,每个帧单独 ACK

出错情况

发送方: [发0][发1][发2(出错)][发3]...
接收方: [收0][收1][2出错→缓存3][3缓存(失序)]
接收方: 发 ACK0, ACK1, NAK2(请求重传帧2)
发送方收 NAK2 后:只重传帧2(不重传帧3)
接收方收帧2后:按序提交帧2和帧3,发 ACK2 和 ACK3

接收方缓存机制

接收窗口(Wr=4): [0][1][2][3]
收到帧0: 接收,提交,窗口滑动→[1][2][3][4]
收到帧2(跳过帧1): 缓存帧2,不提交
收到帧1: 接收,按序提交帧1和帧2,窗口滑动→[3][4][5][6]

否定确认(NAK)

NAK 的作用:
- 接收方检测到帧出错时,发 NAK 通知发送方
- NAKn 表示:请求重传帧 n
- 加速重传过程(不必等待超时)
与 ACK 的区别:
ACKn: 帧 n 正确接收
NAKn: 请求重传帧 n

序号空间约束

为什么 Wt + Wr ≤ 2ⁿ

假设 n=3(序号0~7), Wt=5, Wr=4
问题场景:
发方窗口[0,1,2,3,4],收方窗口[0,1,2,3]
发方发0~4,收方全部接收但 ACK 全丢失
发方超时重发0,收方窗口已滑到[4,5,6,7]
此时收方收到"序号0"的帧→无法判断是新帧还是旧帧
解决:Wt + Wr ≤ 2ⁿ = 8,Wt=4,Wr=4 → 可以区分

常见考法

考点说明
SR 工作流程发送、缓存、按序提交、选择性重传
窗口大小约束Wt + Wr ≤ 2ⁿ
与 GBN 对比缓存、确认、重传范围
NAK 的作用请求重传特定帧

易错点

注意
  • SR 接收方需要缓存失序帧,是与 GBN 最大区别
  • 窗口约束是 Wt + Wr ≤ 2ⁿ,不是 Wt ≤ 2ⁿ − 1
  • SR 的确认是逐帧确认,不是累积确认
  • 选择重传减少了不必要重传,但增加缓存和排序复杂度

核心结论

必背
  1. SR 只重传出错帧,避免 GBN 的大范围重传
  2. 接收方需要缓存失序帧并按序提交
  3. 窗口约束 Wt + Wr ≤ 2ⁿ 保证序号无歧义
  4. 适合高带宽延迟积信道(出错概率高、重传代价大)

记忆卡片

SR 和 GBN 最大区别?
SR 接收方缓存失序帧(Wr > 1),GBN 直接丢弃(Wr=1)。
SR 的窗口约束?
Wt + Wr ≤ 2ⁿ
SR 出错时重传什么?
只重传出错的帧(选择性重传)。
NAK 的作用?
通知发送方重传特定帧(不必等超时)。

图示 · SR 出错只重传一帧

SR:失序帧被缓存,仅重传出错帧 帧0 ✓ 帧1 ✓ 帧2 ✗ 帧3 缓存 仅重传2 帧3 在缓存 收 NAK2 → 只重传帧2 帧3 即便失序也留在接收方缓存,待帧2重传到达后按序提交 → 不浪费重传
图:SR 因缓存失序帧,出错时只需重传真正出错的帧,避免了 GBN 的大量重复重传。

交互动画 · 选择重传的乱序缓存与重传

待播放
选择重传(SR): 接收缓存乱序帧,只重传丢失帧 发送方 S窗口 W=4 接收方 R窗口 W=4 0 1 2 3 4 5 6 7 乱序缓存: 帧 3,4,5(暂不交付上层)接收窗口缓冲,等待缺失帧拼齐 帧 2 超时 → 只重传 2(选择重传) 帧 2 到达 → 拼齐 0~5 按序交付 ✓ 代价: 接收缓存 + 序号空间需 2^m ≥ 2W 防止二义性
演示选择重传(SR): 乱序缓存 + 仅重传丢失帧。
接收端有缓存;只补缺失帧,不重复传。

相关知识点

stop-and-wait go-back-n-gbn flow-control

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