附录 A. 强包守恒边界 (Strong Packet Conservation Bound)
强包守恒边界 (Strong Packet Conservation Bound) 是可以为 PRR-CRB 建立的一个形式化属性。它声明,在恢复期间的所有条件和事件序列下,PRR-CRB 严格限制传输的数据等于或小于已交付给接收方的数据量。
A.1. 形式化定义 (Formal Definition)
设:
- D(t) = 时刻 t 交付给接收方的累积数据
- S(t) = 时刻 t 恢复期间发送方发送的累积数据
- R = 恢复开始时 inflight 的初始值 (RecoverFS)
那么 PRR-CRB 保证:
S(t) - S(0) ≤ D(t) - D(0)
对于恢复阶段的所有 t 成立,其中 S(0) 和 D(0) 是恢复开始时的值。
A.2. 直观理解 (Intuition)
强包守恒边界确保在恢复期间:
-
不超过已交付数据的突发传输: 发送方发送到网络的新数据绝不会超过已确认交付给接收方的数据量。
-
恒定队列长度属性: 如果在没有交叉流量的瓶颈处存在驻留队列,则在恢复期间队列将保持完全恒定的长度,除了由于数据包到达和离开时间差异导致的 ±1 段波动。
-
自时钟保持: 该边界以最强形式保持了 Van Jacobson 的包守恒原理 - 每个交付的数据包最多触发发送一个数据包。
A.3. 数学证明概要 (Mathematical Proof Sketch)
PRR-CRB 维护不变式:
prr_out ≤ prr_delivered
当 inflight ≤ ssthresh 时,PRR-CRB 计算:
SndCnt = MAX(prr_delivered - prr_out, DeliveredData)
这确保了:
- 基本情况
prr_delivered - prr_out维持守恒边界 DeliveredData项确保前向进展- 最终的
MIN(ssthresh - inflight, SndCnt)限制防止超过目标窗口
A.4. 对网络行为的影响 (Implications for Network Behavior)
队列稳定性 (Queue Stability)
在强包守恒边界下:
- 稳定的瓶颈队列: 如果流在瓶颈处有驻留队列,PRR-CRB 不会在恢复期间导致该队列增长
- 无拥塞放大: 恢复不会使现有拥塞恶化
- 可预测行为: 网络运营商可以推理最坏情况下的队列占用
权衡 (Trade-offs)
虽然强包守恒边界提供了强保证:
优势:
- 消除重传引起的拥塞崩溃
- 提供可预测的保守行为
- 在维持队列稳定的同时保证前向进展
劣势:
- 在某些场景下可能过于保守 (见第 7 节和第 8 节示例)
- 当实际损失超过目标窗口缩减时可能导致更长的恢复时间
- 恢复期间可能无法充分利用可用带宽
A.5. 与 PRR-SSRB 的关系 (Relationship to PRR-SSRB)
PRR-SSRB 通过允许每个 ACK 增加一个额外段 (当 SafeACK 为真时) 来略微放松强包守恒边界:
SndCnt = MAX(prr_delivered - prr_out, DeliveredData) + SMSS
这意味着 PRR-SSRB 最多可以暂时违反严格边界:
(ACK 数量) × SMSS
但是,这种违反是有界和受控的:
- 仅在
inflight < ssthresh时发生 - 仅当 SafeACK 指示良好的恢复进展时
- 通常导致更快的恢复,风险最小
A.6. 历史背景 (Historical Context)
强包守恒边界形式化并加强了 Van Jacobson 的原始包守恒原理 [Jacobson88]。虽然原始原理允许将"推定丢失"的数据包视为已离开网络,但强边界仅计算实际交付给接收方的数据包。
这种更严格的解释确保:
- pipe 计算中的估计误差不会导致突发
- 即使在重排序下算法仍保持保守
- 恢复行为基于实际接收方反馈自我修正
A.7. 实践考虑 (Practical Considerations)
实现注意事项 (Implementation Notes)
实现者应注意:
- 边界适用于概念算法; 实现优化必须保持该属性
- 字节计数 (而非段计数) 提供更好的粒度并防御 ACK 分割攻击
- 无论其他估计器 (pipe, cwnd 等) 的准确性如何,边界都成立
性能影响 (Performance Implications)
在实践中:
- PRR-CRB 的严格边界对于重损失场景可能过于保守
- 自适应 SafeACK 启发式 (切换到 PRR-SSRB) 提供更好的实际性能
- 边界的价值在于提供安全保证,而非在所有情况下的最佳性能
A.8. 形式化不变式 (Formal Invariants)
PRR-CRB 在整个恢复过程中维护以下不变式:
不变式 1 (守恒):
prr_out ≤ prr_delivered
不变式 2 (目标收敛):
lim (prr_out) = ssthresh
t→end
(假设最小损失且无应用程序停顿)
不变式 3 (单调性):
prr_delivered(t₁) ≤ prr_delivered(t₂) 对所有 t₁ < t₂
prr_out(t₁) ≤ prr_out(t₂) 对所有 t₁ < t₂
这些不变式确保:
- 前向进展 (单调性)
- 守恒 (不变式 1)
- 正确的最终状态 (不变式 2)
A.9. 结论 (Conclusion)
强包守恒边界为 PRR-CRB 提供了严格的基础,确保 TCP 恢复永远不会放大现有拥塞。虽然 PRR-SSRB 和 SafeACK 启发式放松了此边界以获得更好的性能,但强边界仍然是一个重要的理论基线,即使在最坏情况下也能保证安全运行。