QUIC separates stream positions from connection paths
Distinguish stream offsets, packet numbers, connection IDs, path validation, and anti-amplification limits when reasoning about reliable delivery across address changes.
On this page
The question for today
What you’ll understand
- Separate QUIC packet acknowledgment from ordered stream delivery.
- Explain why connection IDs permit migration without making a new path automatically trusted.
- Calculate a simple pre-validation anti-amplification budget and identify shared constraints.
A mobile client can change its network address while it still wants the same conversation with a server. Tying all connection identity to the current IP address and port makes that transition difficult. QUIC provides connection identifiers and independently ordered streams, but these are carefully bounded mechanisms rather than promises that movement is free or that streams can never affect one another. Track identity, delivery state, and path evidence as separate records.
Packets carry frames; streams carry ordered bytes
QUIC runs over UDP while implementing its own reliable transport, congestion control, and cryptographic protection. A connection can contain many streams, each with its own byte offsets and ordered delivery. Packet numbers identify transmissions within their packet-number space; stream offsets identify application bytes. When information from a lost packet needs retransmission, it can be sent in a new packet with a new packet number. Reusing stream offsets avoids delivering duplicate stream positions, while distinct packet numbers make it possible to distinguish acknowledgment of different transmissions more clearly than TCP's reused sequence positions alone.
A receiver can acknowledge a valid packet after processing its frames without the application having consumed all resulting stream data. Each stream's contiguous bytes determine what that stream can deliver in order. Stream-level receive credit and connection-level receive credit protect buffering at different scopes. Multiple streams still share congestion-control resources on a path, and a packet can contain frames for several streams. Losing such a packet can delay every included stream. Independent stream numbering removes a particular cross-stream ordering dependency; it does not isolate CPU time, memory, packet loss, or every application dependency.
A connection ID is not proof of a usable return path
Connection IDs allow an endpoint to associate packets with connection state even when addressing changes, subject to negotiated and protocol rules. They are not a general permission for arbitrary server migration or an automatic bypass of endpoint policy. Active migration is constrained by the handshake state and transport parameters; NAT rebinding can also change the observed address without an intentional client move. A load balancer and server deployment must preserve the routing and state needed for the chosen connection-ID scheme. Otherwise a protocol feature supported by both endpoints can still fail at an operational boundary.
A new peer address needs path validation because sending large responses toward an unverified address could amplify spoofed traffic. PATH_CHALLENGE and a matching PATH_RESPONSE provide return-path evidence. Merely observing an ACK for a packet carrying a challenge is insufficient. Before validating a peer address, an endpoint responding to that address is generally constrained to three times the data received from it. Successful validation does not prove unlimited capacity or preserve the old path's RTT and congestion state. A newly usable path can have different bottlenecks, loss, and packet-size limits, so migration includes measurement and controller considerations.
Separate continuity of identity from continuity of performance
A connection surviving an address change preserves protocol state that would otherwise need rebuilding, but outstanding work can still stall while a new path is tested or while feedback is absent. Server work and application retry policy continue to matter. QUIC's encrypted transport also changes what a passive network capture can reveal; endpoint logs may be necessary for stream and recovery details. Preserve connection identifiers, path transitions, validation events, packet-number spaces, and application request identifiers in the diagnostic story without treating any single one as a complete correlation key for every deployment.
Use the queue lab for shared capacity in separate constant-rate experiments. Reset, explicitly set both λ=4 and μ=3, predict growth from backlog four at t=0, then Play or Step. Reset again and re-set BOTH λ=2 and μ=3; predict zero at t=4 seconds before playback. Rate edits retain elapsed t and recompute from the original four rather than continuing prior work. These aggregate runs have no stream identities, cryptography, migration, or validation. They challenge independent-capacity claims, not QUIC correctness. Identify which stream and path measurements could distinguish a stream gap from congestion after a move.
Work it through
A server's pre-validation budget
In an illustrative QUIC exchange, an unvalidated client address has sent 1,200 counted bytes. The server has already sent 2,400 counted bytes to it. No token or other event has validated the address.
Apply the three-times limit: 3×1,200=3,600 bytes is the total permitted response budget under the stated accounting.
Subtract 2,400 already sent. The server has 1,200 counted bytes of remaining response budget, even if its congestion window would permit more.
If another 800 counted bytes arrive from that address before validation, total received becomes 2,000 and the total limit becomes 6,000. With still only 2,400 sent, remaining budget becomes 3,600 bytes.
The anti-amplification budget changes with received evidence and is distinct from congestion and stream flow control. Successful address validation changes this particular restriction.
The living notebook
Explore the model
Interactive lab · queue
Independent streams still share service
For EACH comparison select Reset, explicitly re-set BOTH λ and μ, predict, then Play or Step. Compare (4,3) growth with a separate (2,3) run draining backlog four from t=0 to zero at t=4 seconds. Rate edits retain t and recompute from four; they do not continue a switched-rate history. There are no streams, migrations, validation, or anti-amplification rules in this shared-capacity illustration.
- Fluid backlog
- 4
- Net rate · λ − μ
- −1 /s
- M/M/1 mean residence
- 1 s
Fluid backlog starts at 4 and follows max(0, 4 + (λ − μ)t). The separate M/M/1 residence-time formula assumes Poisson arrivals, exponential service and λ < μ. Parameter changes pause playback and recompute the model at the current elapsed time. Reset restores both parameters and returns time to zero. Playback starts paused. Adjust either parameter, then choose Play or Step.
Look forIndependent stream ordering does not provide independent path capacity or eliminate aggregate overload.
Pause & reason
Check your understanding
Your turn
Try it yourself
Stream A has received [0,500) and [1,000,1,500), while independent stream B has received [0,800). Assume no application dependency between them. What can each stream deliver in order, and what does this fail to prove about throughput?
Take a moment to make a prediction or work it out on paper. Open a hint when you need one.
Give me a hint
Find each stream's earliest missing offset independently, then consider shared path resources separately.
Compare with the solution
A can deliver its first 500 bytes before its gap; B can deliver 800 contiguous bytes without waiting for A's missing range. This does not guarantee B's next packet arrives promptly: both streams may share congestion control, bandwidth, connection credit, host scheduling, or a packet that carries data for both.
Keep the idea
Take it with you
- QUIC stream offsets and packet transmission numbers describe different state.
- Connection continuity across address changes still requires path evidence and policy.
- Independent ordering retains shared congestion, resource, and application constraints.
Read further
Original sources and deeper explanations to follow at your own pace.
Optional progress, saved in this browser when available. Revisit any lesson at any time.
Lesson not marked complete.