7. 属性 (Properties)
以下属性对PRR-CRB和PRR-SSRB都是通用的,除非另有说明:
1. 维持ACK时钟
PRR尝试在恢复事件(包括突发丢包)中维持发送方的ACK时钟。相比之下,[RFC6675]在突发丢包后可能发送大的、非时钟化的突发。
好处: 避免在网络中引入额外的突发流量,有助于稳定拥塞控制。
2. 平滑窗口减少
通常,PRR将自愿窗口减少均匀分布在整个RTT中。这有可能通常减少互联网流量的突发性,可以被认为是一种软分组(soft 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估计器中的阶跃不连续性导致数据突发
- 一旦inflight估计器在几个ACK后得到纠正,突发无法撤回
对于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发送一个额外的段。
性能平衡
从严格的包守恒边界的角度来看:
- PRR-SSRB确实在恢复期间打开了窗口
- 但它远不如[RFC6675]在突发丢包存在时激进
- 由于在恢复期间额外丢包的概率较低,它的性能优于后者
实践效果: PRR-SSRB在保持良好性能的同时提供了比[RFC6675]更好的稳定性。