3. 使用 Careful Resume 的 CC 阶段
Careful Resume 使用一系列阶段, 使发送方能从保存的路径知识获益, 同时避免压垮共享瓶颈.
| Phase | Role | Key exits or actions |
|---|---|---|
| Observing | Save CC parameters for a Remote Endpoint | MUST NOT retain more than one set; SHOULD update or replace later observations |
| Reconnaissance | Confirm the saved path while using normal CC | stop on congestion, path change, expired Lifetime, reused saved_cwnd, or minimum RTT <= saved_rtt / 2 |
| Unvalidated | Tentatively jump CWND using paced transmission | jump_cwnd <= Min(max_jump, saved_cwnd/2); all packets MUST use pacing based on current RTT |
| Validating | Check whether unvalidated packets arrived without congestion | enter Safe Retreat on packet loss or ECN-CE; exit after last unvalidated packet is acknowledged |
| Safe Retreat | Recover safely after congestion from unvalidated packets | delete saved parameters; CWND <= PipeSize/2; CWND MUST NOT increase; ssthresh <= PipeSize * Beta |
如果发送方在 Reconnaissance 中检测到拥塞, 它 MUST 继续 normal CC. 如果另一个连接已经开始使用 saved_cwnd, 发送方 MUST 退出 Careful Resume. 如果 Remote Endpoint 不匹配、本地栈报告路径变化、Lifetime 超时, 或测得最小 RTT 小于或等于 saved_rtt / 2, 发送方 MUST 停止使用 Careful Resume.
发送方只有在 ACK 确认所有初始数据, 通常是 IW, 且未报告拥塞后, MAY 进入 Unvalidated Phase. 如果未验证传输完成或收到未验证包的 ACK, 发送方评估是进行验证还是返回 normal CC. 如果 flight_size 小于 IW 或不大于 PipeSize, CWND 重置为 PipeSize, 发送方返回 normal CC. 否则, CWND MUST 设为 flight_size, 发送方进入 Validating. 离开 Safe Retreat 时, ssthresh MUST 设置为不大于 PipeSize * Beta, 默认 Beta 为 0.5, CUBIC 将 Beta__cubic 定义为 0.7.