可靠传输-回退N帧协议

本文最后更新于:2025年11月10日 下午

回退 N 帧协议(Go-Back-N, GBN)详解

一、协议背景与定位

回退 N 帧协议(Go-Back-N,GBN)是数据链路层实现可靠传输的关键协议,属于连续 ARQ 协议滑动窗口协议的一种。其设计初衷是解决停止 - 等待协议(SW)信道利用率低的问题 —— 停止 - 等待协议一次只能发送 1 个分组,需等待确认后再发下一个,若出现超时重传,利用率更低;而 GBN 通过 “流水线传输” 机制,允许发送方连续发送多个分组,大幅提升信道利用率。

二、协议核心参数与规则

1. 分组编号(序号)

  • 比特数:文档中以 3 个比特为例,分组序号范围为0~7(共 23=82^3=8 个序号)。
  • 作用:标识分组顺序,避免接收方混淆新 / 旧分组,确保按序传输。

2. 窗口尺寸规则

窗口是协议的核心机制,分为发送窗口(WTW_T)和接收窗口(WRW_R),尺寸需严格遵循以下规则:

窗口类型 尺寸范围(n 为序号比特数) 文档示例(n=3) 核心作用
发送窗口(WTW_T 1<WT2n11 < W_T \leq 2^n - 1 WT=5W_T=5(≤7) 限制发送方未确认时可连续发送的分组数量
接收窗口(WRW_R WR=1W_R=1(固定) WR=1W_R=1 仅允许按序接收分组,不支持乱序缓存
  • 关键注意点:若发送窗口尺寸超过 2n12^n - 1(如文档中 WT=8W_T=8),接收方将无法分辨新 / 旧分组(例如序号 0 可能是 “新分组 0” 或 “重传分组 0”),导致传输错误。

三、发送方核心逻辑

  1. 连续发送:在未收到接收方确认的情况下,可将序号落在 “发送窗口内” 的所有分组连续发送(无需等待单个确认)。
  2. 窗口滑动条件:仅当收到对已发送分组的确认时,发送窗口才向前滑动对应位数(例如确认了序号 3 的分组,窗口从 “0~4” 滑动到 “1~5”)。
  3. 重传机制
    • 超时重传:若某个分组超时未收到确认,发送方需回退重传该分组及后续所有已发送的分组(即 “回退 N 帧” 的由来)。例如:发送了 4、5、6、7 号分组,若 4 号超时,需重传 4、5、6、7 共 4 个分组。
    • 快速重传:若收到多个重复确认(如连续收到 ACK3),可在超时计时器到期前提前重传(具体收到多少个重复确认触发重传,由实际实现决定)。

四、接收方核心逻辑

  1. 按序接收:因 WR=1W_R=1,仅接收 “序号落在接收窗口内” 且无差错的分组,接收后将窗口向前滑动 1 位。
  2. 确认机制:采用累积确认(核心优化),而非逐个确认:
    • 无需对每个收到的分组单独发确认,可在连续收到多个按序分组后,仅对 “最后一个按序分组” 发送确认(例如收到 0、1、2 号分组,仅发 ACK2,表示 0~2 号均已正确接收)。
    • 可通过 “捎带确认” 减少开销:在接收方自身有数据分组要发送时,顺带确认之前按序接收的分组。
  3. 乱序处理:收到未按序的分组(如期望接收 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 号分组虽正确到达;
  • 接收方因 WR=1W_R=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) WT=1W_T=1 WR=1W_R=1 简单但利用率低,一次发 1 个
回退 N 帧协议(GBN) 1<WT2n11 < W_T \leq 2^n - 1 WR=1W_R=1 连续发送,差错时牵连重传
选择重传协议(SR) WT=WR=2n1W_T=W_R=2^{n-1} WR=2n1W_R=2^{n-1} 支持乱序缓存,仅重传差错分组(利用率更高,但复杂度高)

可靠传输-回退N帧协议
https://hellowydwyd.github.io/2025/10/08/可靠传输-回退N帧协议/
作者
YuDong Wang
发布于
2025年10月8日
许可协议