5. 与其他标准的关系 (Relationships to Other Standards)
PRR可以与任何拥塞控制算法结合使用,只要该算法打算在大约一个往返时间的时间尺度上对其发送速率进行乘法减少,并且当前飞行中数据量由拥塞窗口(cwnd)限制,并且在该减少期间的目标飞行中数据量是由ssthresh给出的固定值。
特别是,PRR适用于Reno[RFC5681]和CUBIC[RFC9438]拥塞控制。
与丢包恢复算法的关系
PRR被描述为对"基于选择确认的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的性能特性,包括对尾部丢包、重新排序和丢失重传的弹性,建议将PRR与RACK-TLP丢包恢复[RFC8985]一起实现。
SafeACK启发式的起源
SafeACK启发式方法是在[RFC8985]的早期前身中开发健壮的丢失重传检测的结果。
没有丢失重传检测,导致非常高丢包率的管制器面临导致重传超时的极高风险,因为Reno[RFC5681]、CUBIC[RFC9438]和[RFC6675]可以发送远高于管制速率的重传。
与拥塞控制算法的兼容性
PRR的设计使其能够与各种拥塞控制算法良好配合:
Reno拥塞控制
- PRR平滑了Reno的快速恢复过程
- 避免了Reno在恢复开始时的大幅窗口减少
- 提供了更稳定的发送速率
CUBIC拥塞控制
- PRR与CUBIC的窗口减少机制兼容
- 在快速恢复期间提供精确的速率控制
- 保持CUBIC在恢复后的增长特性
ECN兼容性
PRR可以适配用于显式拥塞通知(ECN)[RFC3168],通过使用丢包恢复状态机的某些部分来调用PRR处理,以响应ECN标记而非实际丢包。
与传输协议的兼容性
虽然PRR最初是为TCP设计的,但其核心原理可以应用于其他传输协议,只要这些协议:
- 使用基于窗口的拥塞控制
- 有类似快速恢复的机制
- 可以估计飞行中的数据量
- 接收到对已发送数据的确认
第9章详细讨论了将PRR适配到其他传输协议的考虑因素。