Page 420 - 《软件学报》2024年第4期
P. 420
1998 软件学报 2024 年第 35 卷第 4 期
(3) 抖动相关的信息
抖动相关的信息包括时延抖动、带宽抖动等其中的一种或多种.
(4) 控制信息
用于发送方进行决策的控制参数可以是一个阈值参数, 也可能是一个指示某种状态的标记.
(5) 丢包信息
携带丢包信息的 ACK 分为携带最新丢包信息的 ACK 和携带冗余历史丢包信息的 ACK. 丢包信息是指接收
方接收缓存中不连续的数据段序列之间的间隔. 例如, 接收端缓存中有序列号分别为 (2, 5, 6, 8, 9) 的 5 个报文, 则
最新丢包信息为 7 这个报文的序列号, 历史丢包信息为 1, 3 和 4 这 3 个报文的序列号.
(6) 其他网络状态信息
其他网络状态信息包括接收端缓存中已接收但未提交到上层应用的数据量、接收端缓存剩余大小、乱序程
度、用于发送方进行决策的控制参数等其中的一种或多种.
2.3.3 ACK 的类型
ACK 的类型通常可以按触发条件进行分类, 或者按报文格式进行分类.
(1) 按触发条件分类
触发条件不同的 ACK 能否视为不同种类的 ACK, 取决于 ACK 的功能是否有差异. 例如, 周期性发送 ACK,
和根据即时事件回复 ACK, 由于前者保证反馈的鲁棒性, 后者保证反馈的实时性, 因此可以视为两种不同类型的
ACK. 又比如, 每收到 A 个报文触发的 ACK 和每收到 B (A≠B) 个报文触发的 ACK, 如果只是 ACK 频率上的区别,
ACK 功能上没有差异, 一般地, 可以视为同一种 ACK 类型.
(2) 按报文格式分类
一般地, 先后生成的 ACK 携带的内容是有差异的, 例如确认的序列号可能不同. 但如果差异只是体现在信息
的内容上, 则可以视为同一种 ACK 类型. 例如, TCP 协议中带 SACK 选项的 ACK 和不带 SACK 选项的 ACK, 可
以视为同一种 ACK 类型, 原因是 ACK 的报文格式没有发生变化, 不带 SACK 选项时, 对应字段的内容为空而已.
然而, 如果 ACK 报文格式发生了变化, 即 ACK 中的相应字段表示的含义不同, 则应该视为不同种类型的 ACK. 例
如, 仅携带时延信息的 ACK 和仅携带丢包信息的 ACK, 是两种不同的 ACK 类型.
2.4 确认机制与其他模块的耦合关系
从图 1 所示传输控制的功能模块关系可以看出, 不论是状态监测、丢包恢复、还是速率控制, 这些功能模块
都需要与确认机制进行交互. 下面, 我们将讨论传输控制协议中确认机制与上述功能模块之间的耦合关系.
2.4.1 确认机制与状态监测
状态监测可以发生在发送方, 也可以发生在接收方. 在接收方, 状态监测为确认机制提供信息输入, 用于决策
ACK 的触发时机和 ACK 应该携带的反馈信息等; 在发送方, 确认机制决定以何种方式解析 ACK 报文, 解析结果
将用于传输过程中的状态监测.
确认机制中的 ACK 触发条件和携带的信息, 会直接影响状态监测的精准性. 如图 5 所示, 假设每个 ACK
报文默认只携带最近接收到的数据报文的发送时间戳 t 1 、最近接收到的数据报文的接收时间戳 t 3 和该 ACK
报文的发送时间戳 t 4 , 则发送方可以根据每一个 ACK 报文的到达时间戳 t 2 , 计算一个 RTT 采样值: RTT = t 1 – t 2 –
(t 4 – t 3 ).
考虑不同 ACK 数目下的 RTT 评估. 假设发送方共发送 6 个数据报文, 每个数据报文对应的实际 RTT 分别为
18 ms, 20 ms, 16 ms, 22 ms, 15 ms 和 30 ms, 最小 RTT 实际值为 15 ms. 如图 6(a) 所示, 若每收到 1 个数据报文回
复 1 个 ACK 报文, 则发送方的 RTT 采样值集合为{18, 20, 16, 22, 15, 30}, 则最小 RTT 测量值为 15 ms, 与实际值
相等; 如图 6(b) 所示, 若每收到 2 个数据报文回复 1 个 ACK 报文, 则发送方的 RTT 采样值集合为{20, 22, 30}, 则
最小 RTT 测量值为 20 ms, 与实际值偏差 30%; 如图 6(c) 所示, 若每收到 6 个数据报文回复 1 个 ACK 报文, 则发
送方的 RTT 采样值集合为{30}, 则最小 RTT 测量值为 30 ms, 与实际值偏差 1 倍.