9. 将 PRR 适配到其他传输协议
PRR 主算法和降低边界可适配到任何能够支持 [RFC6675] 的传输协议. 在一个主要实现 (Linux TCP) 中, 自 2011 年引入 PRR 以来 [First_TCP_PRR], PRR 一直是其默认和受支持拥塞控制模块的快速恢复算法.
SafeACK 启发式方法可以泛化到任何不会导致其他段被标记为重传的重传 ACK.
10. 测量研究
对于 [RFC6937], 一篇配套论文 [IMC11] 在大规模测量研究中评估了 [RFC3517] 和多个实验版本的 PRR. 在本文档发布时, 研究中使用的遗留算法已经不存在于该研究所用代码库中, 因此如果不重建历史算法, 很难进行此类比较.
对测量研究感兴趣的读者应查阅 [RFC6937] 第 5 节和 IMC 论文 [IMC11].
11. 运行考虑
11.1. 增量部署
PRR 可以增量部署, 因为它只利用现有传输协议机制来确认数据交付并检测丢失数据.
部署要求:
- PRR 只需要修改数据发送方的传输协议实现
- 不需要修改数据接收方
- 不需要修改网络
这使使用 PRR 的数据发送方能够与任何现有数据接收方或网络正确协同工作. PRR 不要求网络中的路由器, 交换机或其他设备做出任何改变或提供任何协助.
11.2. 公平性
PRR 旨在维持其所部署拥塞控制算法的公平性属性.
工作方式:
- PRR 只在拥塞控制响应阶段运行, 例如快速恢复, 或 [RFC3168] 中定义的 TCP ECN 反应导致的 cwnd 阶跃降低
- 在调节阶段只做短期的, 逐确认的决策, 以平滑调节 inflight 数据量
- 使其在该阶段结束时尽可能接近拥塞控制算法确定的慢启动阈值 (ssthresh)
未修改的机制:
- PRR 不修改拥塞控制响应阶段之外的拥塞控制 cwnd 增加或降低机制
11.3. 保护网络免受过度排队和丢包影响
长期影响
在较长时间尺度上, PRR 旨在维持其所部署拥塞控制算法的排队和丢包属性.
如上所述, PRR 只在拥塞控制响应阶段运行, 例如快速恢复或响应 ECN. 它在调节阶段只做短期的, 逐确认的决策, 以平滑调节 inflight 数据量, 使其在该阶段结束时尽可能接近拥塞控制算法确定的慢启动阈值 (ssthresh).
短期影响
在较短时间尺度上, PRR 旨在实现比 [RFC6675] 等先前方法更低的丢包率.
优势原则:
- PRR 受包守恒原则启发
- 尽可能依赖自时钟过程
- 使用 [RFC6675] 时, 单个携带 SACK 选项且暗示大量数据缺失的 ACK 可能导致 pipe 估计器出现阶跃不连续
- 这可能导致快速重传发送远超已交付数据量的大量突发数据
- PRR 基于已交付数据量而非丢失数据量做出传输决策, 从而避免此类突发
性能改进:
- 如上所述, PRR-SSRB 没有 [RFC6675] 激进, 即发送更少段或花费更多时间发送这些段
- 由于恢复期间发生额外丢包的概率更低, 它的表现优于后者
12. IANA 考虑
本文档没有 IANA 操作.
13. 安全考虑
PRR 不改变传输协议的风险特征.
ACK 分割攻击防护:
将 PRR 从按字节计数适配为按段计数的实现者, 必须注意 ACK 分割攻击 [Savage99] 的影响. 在这种攻击中, 接收方确认部分段, 目的是混淆发送方的拥塞记账.
建议: 使用字节计数而不是段计数可以更好地防御此类攻击.