Page 437 - 《软件学报》2024年第4期
P. 437
李彤 等: 传输控制中的确认机制研究 2015
能会将无法识别的选项字段丢弃或者二次处理. 因此, 基于 TCP 实现 TACK 机制, 其应用场景受到极大限制. TCP-
TACK 通常只能用于相对封闭的场景中, 例如无线局域网. 如果要实现广泛的部署, 则需要设计一些逃生机制, 以
适应 TCP 扩展字段被修改或者移除的场景 [30] .
4.3.3 基于 QUIC 的实现
QUIC 是一个灵活的传输协议框架, 使用 UDP 作为底层抽象, 避免修改内核操作系统; QUIC 报文头以加密形
式进行传输, 避免受到中间盒的修改和移除 [2] . 因此, TACK 机制在 QUIC 中的实现, 本质上是一种特殊的基于
UDP 的实现, 区别在于 QUIC-TACK 的实现可以最大程度地复用现有 QUIC 框架的原始设计, 既可减少开发工作
量, 又可提升兼容性.
一个 QUIC 报文包含一个或者多个帧 (frame). QUIC 收发双方通常通过传输参数 (transport parameter) 协商各
自支持的版本和特性. 由于 TACK 机制是一种 QUIC 框架的扩展, 因此, 可以在 QUIC 传输参数中增加一个标记,
例如 tack-support. 当某个通信节点设置 tack-support 参数时, 表明其支持 TACK 机制, 如果对端不支持 TACK 机
制, QUIC-TACK 需要回退到 QUIC 默认的确认机制.
当收发双方都支持 TACK 机制时, QUIC-TACK 将生成 TACK 帧和 IACK 帧, 用于收发双方之间的信息同步
和反馈; 同时, 根据网络条件和传输状态, 发送方按需生成 ACK-FREQUENCY 帧, 用于指示接收方动态调整
TACK 发送频率. 具体的 TACK 帧、IACK 帧和 ACK-FREQUENCY 帧的设计, 可以参考 Li 等人在文献 [24] 中的
示例. 此处不再赘述.
4.3.4 不同实现方案对比
由于协议底座的差异, 不同的 TACK 机制的实现方案之间在开发难度、适用范围和运行开销等方面差别较
大. 如表 3 所示, 由于用户态协议栈相比内核态协议栈具有更大的灵活性, 方便调试和修改, 因此基于内核 TCP 的
实现方案开发难度最大; 在 QUIC 协议框架中, TACK 机制的实现可以最大程度地复用如 packet number (对应本
文中的 PKT.SEQ)、ACK Gap (对应本文中的 RBB) 等机制, 加上 QUIC 框架本身是用户态实现方式, 因此, 基于
QUIC 的实现方案开发难度最低. 适用范围方面, 根据部署和修改难度, 以及中间盒的适应性, 可以推断基于 QUIC
的实现方案适应各种应用场景的能力最强, 基于 UDP 的实现次之, 基于内核 TCP 的实现最小. 运行开销方面, 尤
其内核 TCP 实现了 TSO/GRO/LRO 等优化, 在带宽相同的情况下, 基于内核 TCP 的实现方案运行开销最小; 由于
QUIC 除了实现基本的传输控制以外, 还引入了多路复用和 stream 等机制, 框架的复杂性不可避免地引入了一些
额外开销, 因此基于 QUIC 的实现方案运行开销最大.
表 3 TACK 机制实现方案对比
实现方案 开发难度 适用范围 运行开销
基于UDP 小 中 大
基于内核TCP 大 较小 较小
基于用户态TCP 中 小 小
基于QUIC 较小 大 较大
4.4 TACK 机制的实验评估结果
4.4.1 TACK 机制的定量分析
为了简单起见, 便于理解, 我们假设 L=1, 同时假设每个数据报文的大小都等于最大段长 (MSS). 根据 ACK 频
率公式 (4) 和公式 (6), TCP 的 Delayed ACK 机制和 TACK 机制的对比如图 22 所示. 图中的拐点指示了 TACK 机
制相比传统 TCP 产生收益的边界条件. 从图中容易得到以下 3 个基本结论.
首先, 给定 L 的值, TACK 机制的 ACK 频率总是不超过 TCP 的 Delayed ACK 机制的 ACK 频率, 即 f tack ⩽
f tcp . 例如, 当 bw = 48 Mb/s, RTT = 10 ms 时, TACK 机制的 ACK 频率是 TCP 的 1/10.
其次, 吞吐量越大, 应用 TACK 机制减少的 ACK 数目越多, 收益越大. 例如, 如图 22(a) 所示, 当 RTT = 10 ms