Skip to main content

3. The Phases of CC Using Careful Resume

Careful Resume uses a sequence of phases so a sender can benefit from saved path knowledge without overwhelming a shared bottleneck.

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

If the sender detects congestion in Reconnaissance, it MUST continue normal CC. If another connection has already started using the saved_cwnd, the sender MUST exit Careful Resume. If the Remote Endpoint does not match, local stack signals a path change, Lifetime is exceeded, or the measured minimum RTT is less than or equal to saved_rtt / 2, the sender MUST stop using Careful Resume.

The sender MAY enter the Unvalidated Phase only after ACKs confirm all initial data, usually the IW, without reported congestion. If Unvalidated transmission completes or an ACK for an unvalidated packet arrives, the sender evaluates whether to validate or return to normal CC. If flight_size is below IW or no greater than PipeSize, CWND is reset to PipeSize and the sender returns to normal CC. Otherwise, CWND MUST be set to flight_size and the sender enters Validating. On leaving Safe Retreat, ssthresh MUST be set no larger than PipeSize * Beta, where the default Beta is 0.5 and CUBIC defines Beta__cubic as 0.7.