跳到主要内容

5. 与其他标准的关系

PRR 可与任何打算在大约一个往返时间尺度内对发送速率应用乘法降低的拥塞控制算法一起使用, 前提是当前 inflight 数据量受拥塞窗口 (cwnd) 限制, 且降低期间的目标 inflight 数据量由 ssthresh 给出的固定值确定.

特别是, PRR 适合与 Reno [RFC5681] 和 CUBIC [RFC9438] 拥塞控制一起使用.

与丢失恢复算法的关系

PRR 被描述为对 "The Conservative Loss Recovery Algorithm for SACK-based TCP" [RFC6675] 的修改. 与 SACK [RFC2018] 一起使用时它最准确, 但并不要求必须使用 SACK.

PRR 可以与多种丢失检测算法组合使用. 原因是 PRR 不依赖丢失检测算法如何估计哪些包已交付以及哪些包已丢失的细节. 每收到一个 ACK, PRR 只需要丢失检测算法告知有多少包已标记为丢失, 以及有多少包已标记为交付.

因此, PRR 可以与以下文档规定或描述的丢失检测算法组合使用:

  • Reno [RFC5681]
  • NewReno [RFC6582]
  • SACK [RFC6675]
  • Forward Acknowledgment (FACK) [FACK]
  • Recent Acknowledgment Tail Loss Probe (RACK-TLP) [RFC8985]

由于 RACK-TLP 具有良好的性能特征, 包括对尾部丢失, 重排序和重传丢失的韧性, RECOMMENDED 将 PRR 与 RACK-TLP 丢失恢复 [RFC8985] 一起实现.

SafeACK 启发式方法的来源

SafeACK 启发式方法源自 [RFC8985] 的早期前身中对稳健的重传丢失检测的开发.

如果没有重传丢失检测, 造成极高丢包率的管制器会带来极高的重传超时风险, 因为 Reno [RFC5681], CUBIC [RFC9438] 和 [RFC6675] 可能以远高于管制速率的速率发送重传.

与拥塞控制算法的兼容性

PRR 设计为可与多种拥塞控制算法良好配合:

Reno 拥塞控制

  • PRR 平滑 Reno 的快速恢复过程
  • 避免 Reno 在恢复开始时突然大幅降低窗口
  • 提供更稳定的发送速率

CUBIC 拥塞控制

  • PRR 与 CUBIC 的窗口降低机制兼容
  • 在快速恢复期间提供精确的速率控制
  • 在恢复后保持 CUBIC 的增长特征

ECN 兼容性

通过使用丢失恢复状态机的一部分来响应 ECN 标记而非实际丢包并调用 PRR 处理, PRR 可以适配为与显式拥塞通知 (Explicit Congestion Notification, ECN) [RFC3168] 一起使用.

与传输协议的兼容性

虽然 PRR 最初为 TCP 设计, 但只要其他传输协议满足以下条件, 其核心原则也可应用于这些协议:

  1. 使用基于窗口的拥塞控制
  2. 具有类似快速恢复的机制
  3. 能够估计 inflight 数据量
  4. 接收对已发送数据的确认

第 9 章详细讨论了将 PRR 适配到其他传输协议时的考虑事项.