Page 419 - 《软件学报》2024年第4期
P. 419
李彤 等: 传输控制中的确认机制研究 1997
机制的大幅度的修改显得非常困难. 幸运的是, 用户态协议栈 (例如 QUIC) 的出现, 为人们提供了一个灵活、广阔
的“罗马广场”. 用户态协议栈允许大规模的日志跟踪和调试, 针对协议的修改和部署非常方便, 为确认机制的修改
乃至重新设计提供了基本前提.
2.3 确认机制三要素
确认机制通常包含类型、触发条件和信息 3 大要素. 类型是指 ACK 报文的类型, 不同类型的 ACK 报文, 可
能有不同的触发条件, 也可能携带不同的反馈信息. 例如 SACK 与 NACK (或 NAK) 就是两种不同的 ACK 报文类
型, 两者触发条件分别为接收方检测到发生乱序事件和接收方检测到发生丢包事件, 两者携带的反馈信息也正好
相反. 下面, 我们将对确认机制三要素进行详细介绍.
2.3.1 ACK 触发条件
ACK 触发条件决定 ACK 生成并发送的时机. 存在以下 3 种基本的触发条件.
基本条件 1: 如图 4(a) 所示, 接收方接收到指定数目的数据报文后, 立即回复一个 ACK 报文.
发送方 接收方 发送方 接收方 发送方 接收方
数据报文
指定数目
. . . ACK
ACK 数据报文 指定
时延 ACK 指定
异常事件
. . .
(a) 基于报文数目 (b) 基于指定时延 (c) 基于即时事件
图 4 触发 ACK 的 3 个基本条件
基本条件 2: 如图 4(b) 所示, 不管有没有数据报文到达, 接收方等待指定时延后, 回复一个 ACK 报文.
基本条件 3: 如图 4(c) 所示, 当发生指定即时 (instant) 事件时, 接收方回复一个 ACK 报文. 即时事件是指网络
状态异常或者在短时间内发生突变, 例如时延或带宽变化达到一个阈值, 或者丢包率、丢包数目或乱序程度达到
一个阈值, 又或者接收缓存剩余容量达到一个阈值等.
其他的 ACK 触发条件, 均是以上 3 种基本条件的一种或者多种的组合. 例如, 在经典 TCP 的延迟确认机制
中, 同时使用了上述 3 种基本条件. (1) 每收到两个数据报文后, 必须回复一个 ACK 报文, 采用了基本条件 1; (2)
如果没收到两个数据报文, 但是等待了超过 500 ms (实际的系统实现不一定是 500 ms, 它与系统版本相关, 例如
Linux 系统中是 200 ms, Windows 系统中是 100 ms), 必须回复一个 ACK 报文, 这里采用了基本条件 2; (3) 当发生
乱序时, 每收到一个数据报文, 回复一个 ACK 报文, 这里乱序视为即时的异常事件, 表示采用了基本条件 3, 同时
每收到一个数据报文回复一个 ACK 报文, 表示采用了基本条件 1.
在传输控制中, 存在一种特殊的 ACK 触发方式, 称为 ACK Piggybacking (捎带). ACK Piggybacking 同样可以
视为上述 3 个基本条件的组合. 具体地, 接收方收到数据报文后 (基本条件 1), 等待指定时间 (基本条件 2), 如果有
数据要发送 (基本条件 3), 则采用 Piggybacking 的方式发送数据报文, 其中数据报文中携带 ACK 报文需要反馈的
信息; 如果没有数据要发送, 直接发送 ACK 报文. 在这个例子中, 我们假设了基本条件 1 和基本条件 2 的优先级
高于基本条件 3, 实际的协议实现可以根据需求自由定义 3 个基本条件之间的优先关系, 从而实现灵活、多样化
的确认机制.
2.3.2 ACK 携带的信息
ACK 携带的信息, 用于 (数据) 接收方向 (数据) 发送方反馈传输状态. 反馈的传输状态信息包括但不限于以
下几种.
(1) 时延相关的信息
时延相关的信息包括往返时延、单向时延、排队时延、截止时间等其中的一种或多种.
(2) 带宽相关的信息
带宽相关的信息包括发送速率、接收速率、网络带宽等其中的一种或多种.