Page 428 - 《软件学报》2024年第4期
P. 428
2006 软件学报 2024 年第 35 卷第 4 期
Delay 表示接收方收到报文到接收方发出该 ACK Frame 所等待的时间; ACK Range Count 表示该 ACK Frame 中
包含的 ACK Range 数目; ACK Range 指示已接收的报文序号范围或者未接收的报文序号范围. 其中, (i) 表示这个
字段是整型, (..) 表示这个字段是可变长度的整型 (variable-length integer).
3.2.3 RTP/RTCP 的确认机制
RTP/RTCP 是实时传输协议 (real-time transport protocol, RTP) 和实时传输控制协议 (real-time control protocol,
RTCP) 的总称, 广泛使用于视频通话等实时流媒体应用中 [34] . RTP 工作在 UDP 之上, 其确认机制工作在应用层.
RTP 为端到端的实时传输提供时间信息和流同步, 但并不保证服务质量. 服务质量由 RTCP 来提供, 因此, RTCP
协议实现了确认机制的功能. 下面, 我们将通过确认机制三要素对 RTCP 进行简要介绍.
(1) RTCP 报文的触发条件
RTCP 报文本身等价于一种特殊的 ACK 报文. RTCP 报文发送频率与会话参与者的数量成比例变小, 是一种
带宽适应性的体现. RTCP 本质上属于 Bounded ACK 机制, 因此可以根据公式 (5) 计算发送频率 f bounded . RFC
3550 给出了 RTCP 报文的发送频率计算中的参数设定方法. 具体地, L 的取值与数据发送者的数目和会话成员总
数目相关; 根据是否发送过 RTCP 报文, α 的取值分别为 α =5 s 或者 α =2.5 s.
根据 RFC 3550 定义, 实际的 RTCP 报文发送频率 f rtcp 需要在 f bounded 的基础上进行一些随机化处理, 以解决多
个会话参与者之间的意外同步问题. 例如, 规定 f rtcp = λ· f bounded , 其中 λ 为服从均匀分布的系数.
(2) RTCP 报文的类型
RTCP 报文作为控制报文, 不仅可以由数据发送方发出, 还可以由数据接收方发出. 根据功能的不同,
RFC3550 将 RTCP 报文的类型主要分为 SR (源报告报文)、RR (接收方报告报文)、SEDS (源描述报文)、BYE
(离开申明报文) 和 APP (特殊应用报文) 这 5 类. 其中, SR (sender report) 用来使发送方以多播方式向所有接收方
报告发送情况; RR (receiver report) 用于接收方向发送方报告接收情况; SEDS (source description) 用于报告和站点
相关的信息, 包括 CNAME; BYE (goodbye) 用于表示会话参与者离开系统的报告; APP (application) 用于开发新应
用和新特征的实验.
(3) RTCP 报文携带的信息
不同类型的 RTCP 报文, 根据其功能的不同, 携带的信息也有差异. 每个 RTCP 报文携带的信息并非音视频数
据本身, 而是收发双方的统计信息. 统计信息主要包括实时数据的数据报文数目、传输过程中丢失的数据报文数
目、数据报文的抖动和往返时延等.
RTCP 规范没有指定上层应用如何使用 RTCP 报文中反馈的统计信息, 因此, 如何根据这些统计信息进行相
应措施, 完全由上层应用自行决定. 例如, 发送端可根据 RTCP 报文中的信息来修改视频输出码率、丢包是否重传
或者进行拥塞控制, 接收端可以根据 RTCP 报文中的信息进行故障诊断, 网络管理员也可以根据 RTCP 报文中的
信息来评估实时音视频传输的总体性能.
3.2.4 不同协议的确认机制对比
(1) QUIC 与 TCP 的确认机制对比
与经典 TCP 类似, QUIC 协议默认采用 Delayed ACK 机制, 但是赋予了 ACK 更多的灵活性. 具体表现在以下
3 个方面.
第一, ACK 携带的内容更多. 一方面, QUIC 协议的 ACK Frame 相比 TCP ACK 报文, 可以携带更多的 Range
(超过 4 个), 从而比 TCP 具有更好的反馈鲁棒性. 另一方面, QUIC ACK 携带 ACK Delay 字段, 在 ACK 延迟发送
的场景下, 能够使每个报文对应的 RTT 采样值更加准确, 这也是 QUIC 能够支持自定义的 ACK 频率的基本前提.
第二, 支持自定义 ACK 的发送频率. 一方面, QUIC 支持收发双方进行传输参数 (transport parameter) 协商, 其
中传输参数 max_ack_delay 用于指示发送 ACK 之前最长等待的时间 (即 α ). 通过在建连开始时协商 max_
ack_delay, QUIC 支持每个连接采用不同的 ACK 发送频率. 另一方面, Iyengar 等人 [35] 建议扩展 QUIC 协议, 新增
加 ACK-FREQUENCY Frame, 使得发送方能够按需地通知接收方更新 ACK 频率, 具体而言, ACK-FREQUENCY
Frame 支持发送方动态地修改公式 (4) 中的 L 和 α . 显然, 这种扩展仍然属于 Delayed ACK 的范畴.