Page 436 - 《软件学报》2024年第4期
P. 436
2014 软件学报 2024 年第 35 卷第 4 期
1, 接收方进行丢包事件检测, 如果检测到发生了丢包事件, 就发送 IACK. 该 IACK 可以携带报文序号 (PKT.SEQ)
丢失区间, 该区间指示接收缓存中最大的 PKT.SEQ 和次大 (第 2 大) 的 PKT.SEQ, 最大的 PKT.SEQ 和次大的
PKT.SEQ 两者的差值可以指示哪些数据报文发生丢失. 发送方解析最大的 PKT.SEQ 和次大的 PKT.SEQ, 可以准
确找到对应的报文并重传.
... UDP 基于 TACK 的 数据
报文头 协议报文头
IACK 报文 基于 TACK 的 最大报文 次大报文
数据报文 类型 长度 数据序号 报文序号 ... 数据 (丢包驱动的) 协议报文头 序号 序号
图 18 基于 UDP 实现的数据报文格式 图 19 基于 UDP 实现的 IACK 报文格式
基于 UDP 实现的 TACK 报文格式如图 20 所示. 对于一个 TACK 报文, 其报文头可参照经典 TCP ACK 报文
包含一个确认号 SEQ, 指示当前收到的连续的数据序号的最大值, 含义是告知发送方该数据序号之前的数据报文
都已经接收到, 发送方可以释放这些数据占用的缓存. TACK 报文相比 TCP ACK 报文, 将携带更多的反馈信息.
例如, 丢包信息, 包含丢包率和 HOL.SEQ 字段.HOL.SEQ 可指示接收缓存中最小的数据序号. TACK 报文头中的
确认号 SEQ 和丢包信息中的 HOL.SEQ 字段, 共同指示了接收缓存中的第一个接收缓存空洞 (receive-buffer-
bubble, RBB), 即最早丢失的数据报文的字节范围 (byte range).
TACK 除了指示丢包信息以外, 其报文数据部分还可以指示带宽信息 (如 delivery rate)、窗口信息 (如
congestion window)、时延信息 (如 ACK Delay) 等. 作为扩展, 只要整个 TACK 报文不超过 MSS, TACK 还可以进
行扩展, 携带更多额外 RBB (Additional RBB) 用来指示更多的历史丢包信息等, 每个 Additional RBB 都由左边界
(left edge of additional RBB) 和右边界 (right edge of additional RBB) 共同表示.
基于 UDP 实现 TACK 机制, 可以参考经典 TCP 协议, 提供类 POSIX 套接字接口. 采用客户端-服务端模式,
则接口定义及其调用流程可参考如图 21 所示.
客户端接口
TACK 基于 TACK 的 反馈信息 扩展 tack_socket tack_connect tack_send tack_close
报文 协议报文头
服务端接口
时延信息带宽信息丢包信息 ... 历史丢包信息 ... tack_socket tack_listen tack_accept tack_recv tack_close
图 20 基于 UDP 实现的 TACK 报文格式 图 21 基于 UDP 实现的类 POSIX 套接字接口
4.3.2 基于 TCP 的实现
基于 TCP 实现 TACK 机制, 如图 17 所示的两种基本的形态: 基于内核 TCP 的改进和基于用户态 IP 的 TCP
实现. 其中, 用户态 IP 的 TCP 实现基于 Netmap 或者 DPDK 等 UIO 实现与网卡之间的数据交互. 不论采用哪种形
态, 基于 TCP 实现 TACK 机制需要的协议修改基本相同.
经典 TCP 通常使用报文头中的 40 字节选项 (Option) 字段区域对 TCP 进行扩展, 例如 Timestamp 选项、
SACK 选项和 MSS 选项等. 理论上, TCP-TACK 可利用 TCP 选项字段定义更多的 ACK 类型, 扩展报文以携带更
多的反馈信息. 然而, 由于选项字段区域限制为 40 字节, TACK 报文可能无法使用这些有限的长度, 来携带传输所
需要的所有反馈信息. 例如, 在丢包严重的情况下, 基于选项进行扩展的 TACK 报文无法携带超过 4 个 RBB.
在这种情况下, TCP-TACK 可通过扩展 TCP 选项区域定义更多 ACK 类型, 然后通过扩展 TCP 的数据区域
(data field) 以使 ACK 可携带更多的反馈信息. 这种设计来源于以下考虑: (1) TCP 选项的扩展可以充分地使用报
文头部剩余空间; (2) 数据区域的扩展, 只增加 ACK 报文大小, 不会增加报文数目, 不会违背 TACK 机制的设计初
衷; (3) 如前面所述, 基于 TACK 机制的传输控制, 可以不支持 ACK Piggybacking 机制. 扩展 ACK 报文的数据区域
以用于反馈控制信息具有可行性.
具体的 TCP 选项扩展和 TCP 数据区域扩展方案, 可以参考 Li 等人在文献 [30] 中示例. 此处不再赘述. 针对
TCP 进行选项字段扩展, 其报文可能无法通过网络路径中广泛存在的中间盒 (middlebox) 的过滤, 即某些中间盒可