跳到主要内容

7. 属性 (Properties)

除另有说明外, 以下属性同时适用于 PRR-CRB 和 PRR-SSRB:

1. 维持 ACK 时钟

PRR 试图在恢复事件期间维持发送方的 ACK 时钟, 包括突发丢失场景. 相比之下, [RFC6675] 可能在突发丢失后发送大量不受时钟驱动的突发数据.

收益: 避免向网络引入额外的突发流量, 有助于稳定拥塞控制.

2. 平滑窗口降低

通常, PRR 会在完整 RTT 内均匀分布自愿窗口降低. 这有可能总体降低 Internet 流量的突发性, 可视为一种软 pacing.

从假设上说, 任何 pacing 都会提高不同流相互交织的概率, 从而减少 ACK 压缩及其他会增加流量突发性的现象出现的机会. 但是, 这些影响尚未被量化.

3. 精确收敛到目标窗口

如果丢失很少, PRR 将精确收敛到拥塞控制算法选择的目标窗口. 注意, 随着发送方接近恢复结束, prr_delivered 将接近 RecoverFS, 并且 SndCnt 的计算会使 prr_out 接近 ssthresh.

数学保证: 在理想条件下, 恢复结束时 inflight = ssthresh.

4. 自动适应隐式窗口降低

恢复期间多个孤立丢失造成的隐式窗口降低会使后续自愿降低被跳过. 对于少量丢失, 窗口大小最终会精确达到拥塞控制算法选择的窗口.

机制: PRR 自动调整, 使实际丢失和自愿降低的总和达到目标降低量.

5. 处理突发丢失

对于突发丢失, 可以通过响应恢复后期到达的 ACK 发送额外段来抵消较早的自愿窗口降低. 注意, 只要部分自愿窗口降低没有被抵消且没有应用停顿, inflight 的最终值就会与 ssthresh 相同.

灵活性: 在检测到严重拥塞时允许更保守, 在情况改善时允许更激进.

6. 应用停顿处理

无论使用哪种降低边界, PRR 都能改善发生应用停顿时的情况. 例如, 发送应用没有足够快地排队待传输数据, 或接收方停止推进其接收窗口.

停顿场景处理

当应用停顿在恢复早期发生时:

  • prr_out 会落后于 SndCnt 允许的发送总和
  • 因停顿错过的发送机会会像累积的自愿窗口降低一样处理
  • 具体而言, 它们会使 prr_delivered - prr_out 显著为正

追赶机制

如果应用在发送方仍处于恢复期间追赶上来:

  • 发送方会发送一个部分窗口突发以增加 inflight
  • 这会使 inflight 接近应用从未停顿时本应达到的准确位置
  • 虽然这种突发可能不利于给定流或共享该路径的其他流, 但在非恢复状态下发生部分 RTT 应用停顿时也正是如此

统一行为: PRR 使部分 RTT 停顿行为在所有状态下保持一致. 更改该行为超出本文档范围.

7. 对 Inflight 估计器错误的鲁棒性

带降低边界的 PRR 对 inflight 估计器中的错误不那么敏感.

在恢复期间, inflight 本质上是一个使用不完整信息的估计器, 用来估计未 SACKed 的段究竟是真的丢失了, 还是仅仅在网络中乱序. 在某些条件下, inflight 可能存在显著错误. 例如, 当一批重排序数据被过早假定为丢失并标记为重传时, inflight 会被低估.

容错机制

如果发送直接由 inflight 调节 (如 [RFC6675] 中那样):

  • inflight 估计器中的阶跃不连续会造成数据突发
  • 几个 ACK 后 inflight 估计器被纠正时, 该突发已无法收回

使用 PRR 动态时:

  • inflight 只决定使用哪个算法 (PRR 或降低边界) 从 DeliveredData 计算 SndCnt
  • 当 inflight 被低估时, 这些算法之间最多每个 ACK 相差 1 个段
  • 一旦 inflight 更新, 它们会在恢复结束时收敛到相同的最终窗口

8. 强包守恒边界 (PRR-CRB)

在恢复期间的所有条件和事件序列下, PRR-CRB 都严格限制传输的数据量, 使其等于或小于已交付到接收方的数据量. 这种强包守恒边界是在某些环境中不会导致额外强制丢失的最激进算法.

队列长度属性

它具有如下属性: 如果瓶颈处存在常驻队列且没有交叉流量, 则恢复期间该队列会保持完全恒定的长度, 仅因包到达和离开时间差异而出现 +1/-1 的波动.

关于该属性的详细讨论见附录 A.

9. PRR-SSRB 折中

虽然强包守恒边界基于多种原因很有吸引力, 但早期测量 (在 [RFC6675] 第 6 节中讨论) 表明它不够激进, 性能也不如 [RFC6675] 中描述的算法. 后者在存在突发丢失时允许数据突发.

PRR-SSRB 是一种折中方案. 当 ACK 表明恢复进展良好且没有进一步丢失时, 它允许连接相对于包守恒边界每个 ACK 多发送 1 个段.

性能平衡

从严格包守恒边界的角度看:

  • PRR-SSRB 确实会在恢复期间打开窗口
  • 但在存在突发丢失时, 它远没有 [RFC6675] 激进
  • 由于恢复期间额外丢失的概率更低, 它的表现优于后者

实际效果: PRR-SSRB 在保持良好性能的同时, 提供比 [RFC6675] 更好的稳定性.