Appearance
后退N帧协议(GBN)
考情分析
GBN 是 408 数据链路层的超高频考点,经常和 SR 放在一起出综合题。常见考法:给定序号位数,求最大窗口大小;给定帧传输场景,分析哪些帧需要重传;计算信道利用率。大题中也时常出现。
考频:★★★★★
为什么需要 GBN
停止-等待协议一次只发一帧,效率太低。GBN 的思路是:允许发送方连续发送多帧,不用逐帧等待确认。这就是流水线传输的基本思想。
GBN 通过滑动窗口来控制发送方最多可以有多少个"已发送但未确认"的帧。
发送窗口与接收窗口
| 参数 | GBN |
|---|---|
| 发送窗口大小 | |
| 接收窗口大小 | |
| 序号位数 |
为什么发送窗口最大是
如果
累积确认
GBN 使用累积确认(Cumulative ACK):
- ACK
表示"第 帧及之前的所有帧都已正确接收" - 接收方不需要逐帧确认,可以在收到多帧后发送一个 ACK
- 如果 ACK 丢了,后续的 ACK 可以"覆盖"前面的——因为 ACK 5 隐含了 ACK 0~4 的含义
接收方行为
GBN 的接收窗口 = 1,意味着接收方只接受按序到达的帧:
- 收到期望的帧 → 接收,发送 ACK,窗口前移
- 收到非期望的帧(乱序)→ 直接丢弃,重新发送上一个按序帧的 ACK
这一点非常关键。即使后面的帧是正确的,只要中间有一帧丢了,后面的帧全部丢弃。
超时回退重传
当发送方的计时器超时(最早的未确认帧超时),发送方回退到那一帧,重传它及其后所有已发送的帧。
帧 3 和帧 4 本身没有错,但因为帧 2 丢了,接收方按 GBN 的规则把它们丢弃了,发送方只能把它们全部重传。这就是"后退 N 帧"名称的由来。
窗口滑动过程
以
初始状态:
发送窗口: [0 1 2 3 4 5 6] 可发送
接收窗口: [0] 期望收到帧0
发送帧 0,1,2 后:
发送窗口: [0 1 2 3 4 5 6]
^^^ 已发送未确认 ^^^^ 可发送
收到 ACK 2 后(累积确认 0,1,2):
发送窗口: [3 4 5 6 7 0 1] 窗口滑动3格
接收窗口: [3] 期望收到帧3信道利用率
GBN 通过流水线传输提高了信道利用率:
当
对比停止-等待协议:
GBN 的效率是停止-等待的
交互可视化
GBN 的局限
GBN 在误码率较高的链路上性能会急剧下降。因为一帧出错就要重传从该帧起的所有帧,误码率越高,浪费的重传就越多。
改进方案 → 选择重传协议 SR:只重传出错的帧,不连带重传后续帧。
易错点
1. 发送窗口上限是
2. 接收方丢弃乱序帧
GBN 的接收窗口 = 1,意味着不缓存乱序帧。收到不是期望序号的帧,直接丢弃。这是 GBN 和 SR 的关键区别。
3. 累积确认的含义
ACK
4. 超时重传的范围
是从丢失帧开始的所有已发送帧都要重传,不只是重传丢失的那一帧。比如发了帧 2,3,4,5 后帧 2 超时,需要重传 2,3,4,5 四帧。
高频考点清单
- 发送窗口最大值:
,以及为什么不能等于 - 接收窗口 = 1,只接受按序帧
- 累积确认机制:ACK
确认了 所有帧 - 一帧出错导致该帧及后续帧全部重传
- 给定场景分析哪些帧需要重传
- 信道利用率计算
- 与停止-等待和 SR 的对比