跳到主要内容

3. 使用 Careful Resume 的 CC 阶段

Careful Resume 使用一系列阶段, 使发送方能从保存的路径知识获益, 同时避免压垮共享瓶颈.

PhaseRoleKey exits or actions
ObservingSave CC parameters for a Remote EndpointMUST NOT retain more than one set; SHOULD update or replace later observations
ReconnaissanceConfirm the saved path while using normal CCstop on congestion, path change, expired Lifetime, reused saved_cwnd, or minimum RTT <= saved_rtt / 2
UnvalidatedTentatively jump CWND using paced transmissionjump_cwnd <= Min(max_jump, saved_cwnd/2); all packets MUST use pacing based on current RTT
ValidatingCheck whether unvalidated packets arrived without congestionenter Safe Retreat on packet loss or ECN-CE; exit after last unvalidated packet is acknowledged
Safe RetreatRecover safely after congestion from unvalidated packetsdelete 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.