Page 426 - 《软件学报》2024年第4期
P. 426
2004 软件学报 2024 年第 35 卷第 4 期
如前面所述, Bounded ACK 机制和 TACK 机制相比于 Delayed ACK 机制的区别, 在于 ACK 发送频率控制逻
辑正好相反 (max 和 min). Delayed ACK 机制中, 触发发送 ACK 的两个条件是“或”的关系, 而 Bounded ACK 机制
和 TACK 机制使用的是“与”的逻辑. 因此, 在不同的网络条件下, Bounded ACK 机制、TACK 机制和 Delayed
ACK 机制的 ACK 发送频率大小截然不同. 例如, 当带宽很大的时候, 在 ACK 数目方面, Delayed ACK 可能会比
Bounded ACK 机制和 TACK 机制高出若干个数量级 [30] . 进一步地, TACK 机制相比 Bounded ACK 机制, 除了同
样具有良好的带宽适应性以外, 还增加了对时延的适应性, 因此 TACK 机制能够更好地适应时延和带宽同时动态
变化的场景.
3.2 主流传输协议中的确认机制
3.2.1 TCP 的确认机制
(1) TCP 报文和选项
TCP 报文格式如图 12 所示. 从上到下的源端口字段到选项区域, 属于报文头. 报文头后续部分为数据区域, 携
带来自上层 (如应用层) 的数据. 下面, 以 ACK 标记位、PSH 标记位和选项区域等与确认机制密切相关的字段为
例, 对 TCP 报文格式进行介绍.
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 bit
源端口号 目的端口号
数据序号
确认号
头部 保留 U A P R S F 窗口大小
G K H T N
长度 R C S S Y N I
校验和 紧急指针
选项区域
数据区域
图 12 TCP 报文结构
针对 ACK 标记位, 如果值为 1, 则表示该报文是一个 ACK 报文, 否则是一个数据报文. 更进一步, 如果 ACK
标记位为 1 并且数据区域不为空, 则表示处于 ACK Piggybacking 模式——如果 (数据) 接收方在接收数据的同时
也有数据要发送给 (数据) 发送方, 那么可以在数据报文中带上 ACK 需要携带的反馈信息, 从而避免大量的 ACK
以一个单独的报文发送, 减少网络资源请求的次数, 降低通信开销.
发送方在发送数据时可以设置 PSH 标记位, 用于通知接收方立即进行响应. 默认情况下, 接收方的响应是将
缓冲区的数据立即提交到上层应用. 然而, 如果与确认机制相结合, 则可以重新定义接收方的响应方式, 例如, 无需
满足 Delayed ACK 机制下的触发条件, 就可以立即回复一个 ACK 报文. 值得一提的是, 即使不修改已有标记位的
含义, TCP 报文头中的保留字段, 也为上述确认机制的扩展提供了条件.
TCP 选项区域可包含多个选项 (Option) 字段, 采用经典的 TLV (type-length-value) 结构来表示. 选项字段都
以 1 字节的“Type”开头, 指明 Option 的类型, 1 字节的 Length 指明选项字段的总长度 (包括 Type, Length 和
Value 的总长度). TCP 定义了丰富的选项字段, 例如 SACK 选项、Timestamp 选项、window scale (WSCALE 或
WSopt) 选项和 maximum segment size (MSS) 选项等. 下面, 针对 SACK 选项的设计进行详细讨论.
(2) SACK
SACK (selective acknowledgment) 选项扩展了传统 ACK 的反馈信息量, 由 RFC 2018 定义 [31] . 具体地, 它允许
接收方单独确认非连续的片段, 用于告知发送方哪些报文收到了. SACK 选项可以帮助发送端确认真正丢失的报
文, 从而只重传丢失的片段. SACK 选项可以减少不必要的重传, 提升传输效率.
要使用 SACK, 收发双方必须同时支持 SACK 选项. 因此双发双方需要在建立连接的时候使用 SACK
Permitted 选项进行协调. 如果双方都支持 SACK, 则后续的传输过程中 ACK 报文可以携带 SACK 选项. SACK 选
项由数据接收方发送, 以通知数据发送方已经接收、并且在接收方接收缓存中排队的非连续数据块 (本文称