Page 435 - 《软件学报》2024年第4期
P. 435
李彤 等: 传输控制中的确认机制研究 2013
4.2.7 不同机制和算法对比
业界往往容易混淆 ACK 相关的机制和算法. ACK 机制是指定义了 ACK 类型、各类型对应的触发条件、各
类型对应携带的信息的一个方法的总称; 而 ACK 相关的算法, 例如 RACK 和 FACK, 这些并不是 ACK 机制, 而是
基于某种 ACK 机制的丢包检测算法. 因此, 我们在表 2 中对比了上述的 ACK 相关机制和算法, 以便更明确地阐
述他们之间的区别和联系.
表 2 ACK 相关机制和算法对比
机制/算法 类别 ACK频率 携带的信息
bw
TCP ACK ACK报文 后续需要的报文信息ACK number等. 参考TCP标准报文头部字段定义
L·MSS
SACK ACK报文 乱序事件触发 已接收的报文信息. 除标准报文头外, 选项区域携带不超过4个Range
HACK ACK机制 随MAC层ACK发送 传输层ACK不携带信息
RACK 丢包检测算法 - SACK选项
FACK 丢包检测算法 - SACK选项
NACK ACK报文 乱序事件触发 丢包信息
( β )
TACK ACK机制/ACK报文 min bw max , 带宽信息、时延信息、丢包信息等
L·MSS RTT min
IACK ACK报文 乱序等即时事件触发 丢包信息
4.3 TACK 机制的实现方案
TACK 机制在协议栈中的可以有如图 17 所示的 4 种形态: 依次是基于内核 UDP 的用户态实现、基于内核
TCP 的改进、基于用户态 IP 的 TCP 实现和基于用户态协议 QUIC 的实现.
应用
TACK QUIC-TACK
TCP-TACK TCP-TACK
UDP UDP
IP IP IP IP
驱动 驱动 UIO (Netmap) 驱动
网卡
内核态 用户态
图 17 TACK 机制在协议栈中的实现方式
4.3.1 基于 UDP 的实现
基于 UDP 的 TACK 机制实现, 就是基于 TACK 机制实现可靠的、有连接、有序的传输控制. 下面从报文格
式和接口设计两个角度来举例说明具体的实现要点.
报文主要分为数据报文和 ACK 报文, ACK 报文则主要分为 IACK 报文和 TACK 报文两种. 数据报文的格式
的设计可参考如图 18 所示. 首先, 不论是数据报文还是 ACK 报文, 都应该携带一个自定义的、公共的、基于
TACK 的协议报文头, 其中类型字段指示报文的类型, 长度字段指示报文长度, 其他字段可根据报文类型灵活定
义. 数据报文中, 由于要保证有序的数据组装, 因此数据报文需携带一个类似于 TCP 协议中定义的数据序号
(DATA.SEQ). 数据序号只与数据的内容相关, 因此重传报文与其对应的原始报文的数据序号是相同的. 同时,
TACK 机制要求数据报文携带一个报文序号 (PKT.SEQ), 报文序号只与报文的发送顺序相关, 与数据的内容无关,
因此重传报文与其对应的原始报文的报文序号是不同的. 图 18 中给出了这种双序号设计的样例.
基于 UDP 实现的 IACK 报文格式如图 19 所示. 如果接收方检测到前后两个数据报文的 PKT.SEQ 差值大于