1. 简介

在计算机网络的传输层中,可靠的数据传输机制是核心内容之一。滑动窗口协议(Sliding Window Protocol)是实现这一机制的关键技术。其中,Go-Back-N 和 Selective Repeat 是两个经典的滑动窗口协议实现方式。

本文将重点讲解 Go-Back-N 协议的工作原理。我们还将讨论窗口大小 N 与序列号空间 S 的关系,以及窗口大小如何影响协议性能。

2. Go-Back-N 协议概述

滑动窗口协议通过允许发送方在未收到确认前继续发送多个数据包,从而提高网络带宽的利用率。

在 Go-Back-N 协议中,流量控制由发送方主导,接收方相对简单。 因此,我们将首先从发送方的角度来分析其工作流程。

2.1 发送方机制

发送方维护一个待发送的数据帧序列。我们假设窗口大小为 N。此外,发送方使用两个指针来管理当前窗口:

  • send_base:表示当前已收到确认的最小序列号
  • nextseqnum:表示下一个待发送的序列号

这两个指针之间的所有帧都处于“已发送但未确认”的状态。

如下图所示:

GoBackN-4

3. 累积确认与序列号

Go-Back-N 使用累积确认机制。也就是说,如果接收方发送了一个对编号为 n 的帧的确认(ACK n),则表示编号小于等于 n 的所有帧都已被正确接收。

3.1 序列号与窗口大小的关系

S 为最大序列号值,N 为窗口大小。考虑如下场景:

  1. 发送方发送从 0 到 S 的一组帧
  2. 接收方返回 ACK S,表示所有帧都已正确接收
  3. 发送方再次发送从 0 到 S 的下一组帧
  4. 再次收到 ACK S

此时,发送方无法判断第二组的帧是否被成功接收 —— 因为 ACK 可能是对第一组帧的重复确认。

因此,必须满足:N < S,否则将导致确认歧义。

4. 网络利用率与窗口大小选择

相比传统的“停等协议(Stop-and-Wait)”,滑动窗口协议的优势在于可以同时发送多个数据包,提高链路利用率。

Go-Back-N 中的窗口大小 N 表示发送方在收到确认前最多可发送的数据包数量。若 N = 1,则等价于停等协议。

理论最大链路利用率公式如下(忽略传输开销):

$$ \text{Utilization} \leq \frac{N}{1 + 2 \times BD} $$

其中:

  • BD(Bandwidth-Delay Product)表示带宽时延乘积,即链路在往返时延内能容纳的数据量

4.1 窗口大小的选取限制

虽然理论上我们可以通过令利用率为 1 来反推最大 N 值,但在实际应用中,窗口大小应更小,原因如下:

流量控制(Flow Control)
接收方处理能力有限,若发送速率过快,会导致丢包。因此,窗口大小应受限于接收方的处理速度。

拥塞控制(Congestion Control)
过多的数据包在网络中堆积,会导致延迟增加和丢包,从而降低整体性能。发送方应根据网络状况动态调整窗口大小。

5. 总结

Go-Back-N 协议是一种基于滑动窗口和累积确认的可靠数据传输机制,适用于发送方主导、接收方相对简单的场景。

我们总结如下要点:

  • ✅ 累积确认机制要求窗口大小 N 必须小于序列号空间 S,以避免确认歧义
  • ✅ 窗口大小 N 的选择需综合考虑网络带宽、延迟、接收方处理能力和网络拥塞情况
  • ❌ 若窗口过大,可能导致接收方处理不过来或网络拥塞;若过小,则无法充分利用带宽

掌握 Go-Back-N 的原理对于理解 TCP 协议的流量控制和可靠传输机制具有重要意义。


原始标题:Go-Back-N Protocol