可靠传输-回退N帧协议
本文最后更新于:2025年11月10日 下午
回退 N 帧协议(Go-Back-N, GBN)详解
一、协议背景与定位
回退 N 帧协议(Go-Back-N,GBN)是数据链路层实现可靠传输的关键协议,属于连续 ARQ 协议与滑动窗口协议的一种。其设计初衷是解决停止 - 等待协议(SW)信道利用率低的问题 —— 停止 - 等待协议一次只能发送 1 个分组,需等待确认后再发下一个,若出现超时重传,利用率更低;而 GBN 通过 “流水线传输” 机制,允许发送方连续发送多个分组,大幅提升信道利用率。
二、协议核心参数与规则
1. 分组编号(序号)
- 比特数:文档中以 3 个比特为例,分组序号范围为0~7(共 个序号)。
- 作用:标识分组顺序,避免接收方混淆新 / 旧分组,确保按序传输。
2. 窗口尺寸规则
窗口是协议的核心机制,分为发送窗口()和接收窗口(),尺寸需严格遵循以下规则:
| 窗口类型 | 尺寸范围(n 为序号比特数) | 文档示例(n=3) | 核心作用 |
|---|---|---|---|
| 发送窗口() | (≤7) | 限制发送方未确认时可连续发送的分组数量 | |
| 接收窗口() | (固定) | 仅允许按序接收分组,不支持乱序缓存 |
- 关键注意点:若发送窗口尺寸超过 (如文档中 ),接收方将无法分辨新 / 旧分组(例如序号 0 可能是 “新分组 0” 或 “重传分组 0”),导致传输错误。
三、发送方核心逻辑
- 连续发送:在未收到接收方确认的情况下,可将序号落在 “发送窗口内” 的所有分组连续发送(无需等待单个确认)。
- 窗口滑动条件:仅当收到对已发送分组的确认时,发送窗口才向前滑动对应位数(例如确认了序号 3 的分组,窗口从 “0~4” 滑动到 “1~5”)。
- 重传机制:
- 超时重传:若某个分组超时未收到确认,发送方需回退重传该分组及后续所有已发送的分组(即 “回退 N 帧” 的由来)。例如:发送了 4、5、6、7 号分组,若 4 号超时,需重传 4、5、6、7 共 4 个分组。
- 快速重传:若收到多个重复确认(如连续收到 ACK3),可在超时计时器到期前提前重传(具体收到多少个重复确认触发重传,由实际实现决定)。
四、接收方核心逻辑
- 按序接收:因 ,仅接收 “序号落在接收窗口内” 且无差错的分组,接收后将窗口向前滑动 1 位。
- 确认机制:采用累积确认(核心优化),而非逐个确认:
- 无需对每个收到的分组单独发确认,可在连续收到多个按序分组后,仅对 “最后一个按序分组” 发送确认(例如收到 0、1、2 号分组,仅发 ACK2,表示 0~2 号均已正确接收)。
- 可通过 “捎带确认” 减少开销:在接收方自身有数据分组要发送时,顺带确认之前按序接收的分组。
- 乱序处理:收到未按序的分组(如期望接收 4 号,却收到 5 号),直接丢弃,并重发最近一次按序接收的分组的确认(如重发 ACK3),提示发送方 “4 号分组丢失,需重传”。
五、典型场景分析
1. 无差错场景
- 发送方连续发送窗口内分组(如 0~4 号);
- 接收方按序接收 0、1、2、3、4 号,通过累积确认发送 ACK4(表示 0~4 均已接收);
- 发送方收到 ACK4 后,发送窗口从 “0~4” 滑动到 “1~5”,继续发送 5、6 等分组。
2. 有差错场景(分组丢失 / 误码)
- 例:发送方发送 0~7 号分组,其中 5 号分组误码,6、7、0、1 号分组虽正确到达;
- 接收方因 ,仅接收 0~4 号(按序),并发 ACK4;收到 5 号误码分组后丢弃,后续 6、7、0、1 号均为乱序,也丢弃,且持续重发 ACK4;
- 发送方未收到 5 号及以后的确认,超时后需回退重传 5、6、7 号分组(及后续已发送的分组)—— 即使 6、7 号曾正确到达,因 5 号丢失,仍需 “牵连重传”。
- 关键结论:若通信线路质量差(差错率高),GBN 的信道利用率会大幅下降,甚至接近停止 - 等待协议。
六、协议优缺点总结
| 优点 | 缺点 |
|---|---|
| 1. 流水线传输,大幅提升信道利用率(优于停止 - 等待协议); 2. 累积确认减少确认开销; 3. 快速重传机制降低超时等待时间。 | 1. 接收方不支持乱序缓存,差错分组后续的正确分组需 “牵连重传”; 2. 线路质量差时,重传开销大,利用率接近停止 - 等待协议; 3. 发送窗口尺寸受序号比特数限制,灵活性较低。 |
七、与其他协议的关联
文档中提及 GBN 与另外两种可靠传输协议的对比,核心差异如下:
| 协议类型 | 发送窗口尺寸 | 接收窗口尺寸 | 核心特点 |
|---|---|---|---|
| 停止 - 等待协议(SW) | 简单但利用率低,一次发 1 个 | ||
| 回退 N 帧协议(GBN) | 连续发送,差错时牵连重传 | ||
| 选择重传协议(SR) | 支持乱序缓存,仅重传差错分组(利用率更高,但复杂度高) |
可靠传输-回退N帧协议
https://hellowydwyd.github.io/2025/10/08/可靠传输-回退N帧协议/