Congestion Control

Learn why networks become congested and how senders share a bottleneck without a central controller. Follow TCP's congestion window through slow start, congestion avoidance, fast retransmit and fast recovery, estimate the throughput it produces, and see why additive increase and multiplicative decrease lead competing flows toward fair shares. Then compare CUBIC and BBR, see how active queue management and explicit congestion notification warn senders before buffers overflow, and find out how QUIC carries these ideas into a new transport built on UDP.

IntermediateLesson 4 of 8 in Computer Networks Course

What you will learn

  1. Describe how traffic that exceeds a link's capacity builds queues, delay and loss, why that wastes the network's capacity, and the two broad ways a network can be kept out of congestion.
    • Trace how a bottleneck queue turns load into delay and loss
      Define congestion and the bottleneck link, and follow how a router's queue grows when traffic arrives faster than the link can send it.
    • Explain the costs of congestion and congestion collapse
      Show how retransmissions, unneeded duplicates and packets dropped late on long paths waste capacity, and how uncontrolled senders can drive useful throughput toward zero.
    • Compare end-to-end and network-assisted congestion control
      Classify congestion control schemes by where the congestion signal comes from, which signals they use, and whether they control a window or a rate.
  2. Follow how a TCP sender uses its congestion window to probe for bandwidth with slow start and congestion avoidance, backs off with fast retransmit, fast recovery and timeouts, and what throughput that behavior produces.
    • Relate the congestion window to the sending rate
      Use the congestion window, the receive window and the round-trip time to work out how fast a TCP sender transmits and how much data a path needs in flight.
    • Trace slow start and congestion avoidance
      Calculate how cwnd grows in slow start and in congestion avoidance, and explain when the sender switches from one to the other.
    • Explain how TCP reacts to loss: timeouts, fast retransmit and fast recovery
      Apply the rules TCP follows after a timeout or three duplicate acknowledgments, and trace how TCP Tahoe, Reno and NewReno differ.
    • Estimate TCP throughput from its sawtooth
      Use the sawtooth model and the loss-rate formula to estimate the throughput of a long-lived TCP connection, and see why classic TCP struggles on fast, long paths.
  3. Explain why additive increase and multiplicative decrease drive competing flows toward equal shares, measure fairness, and recognize the real-world conditions under which shares become unequal.
    • Show why AIMD converges to a fair and efficient share
      Use the two-flow picture of Chiu and Jain to show how additive increase and multiplicative decrease bring two senders to equal shares of a link.
    • Evaluate fairness among real flows
      Measure fairness with Jain's index and max-min fairness, and explain how RTT differences, parallel connections, unresponsive traffic and different algorithms change who gets what.
  4. Describe why full buffers create long delays, how active queue management drops or marks packets early, and how explicit congestion notification carries a congestion signal to the sender without losing packets.
    • Explain bufferbloat and active queue management
      Explain why large drop-tail buffers and loss-based senders produce standing queues, and how RED and CoDel keep queues short by acting early.
    • Describe explicit congestion notification in IP and TCP
      Follow the ECN codepoints and TCP flags from router to receiver to sender, and explain how data-center TCP and L4S use frequent marks for very low delay.
  5. Explain how CUBIC grows its window as a function of time since the last loss, how delay-based and model-based algorithms such as Vegas and BBR avoid filling buffers, and the trade-offs between them.
    • Explain how CUBIC grows its window
      Calculate CUBIC's window from its cubic growth function, and explain its gentler decrease, its Reno-friendly mode and why its growth depends on time rather than RTT.
    • Explain delay-based control and how BBR models the path
      Explain how Vegas reads queueing from delay, how BBR estimates the bottleneck bandwidth and minimum RTT to pace at the right rate, and how CUBIC and BBR compare.
  6. Explain why TCP is hard to change, how QUIC rebuilds a reliable, secure transport over UDP, and how QUIC detects loss and controls congestion.
    • Explain why transports ossify and how QUIC's design responds
      Explain how middleboxes and kernel implementations slow TCP's evolution, and how QUIC's streams, combined handshake, encryption and connection IDs address TCP's limits.
    • Describe loss detection and congestion control in QUIC
      Explain how QUIC's packet numbers and acknowledgments improve loss detection, and apply its default congestion controller's rules for the initial window, recovery, persistent congestion, ECN and pacing.

Congestion Control study guide

6 chapters

1

Why congestion slows useful delivery

A fast sender can still face a slow path. Several inputs may feed one output link, and their combined traffic has to share its capacity. Follow what happens to packets when that capacity runs out, then separate useful delivery from the traffic spent on repeats and eventual losses. The sender's challenge is to recognize overload soon enough to reduce it, using either its own observations or feedback from routers.

Congestion begins when traffic reaches part of a network faster than that part can carry it for a sustained period. Packets wait in a router's output buffer, called a queue. The bottleneck is the link with the least capacity available to this traffic along its path.

Follow the surplus

Suppose a router receives 12 Mbps for an output link that can send 10 Mbps. It cannot speed up the output to match the input. Each second leaves 2 megabits waiting, or 250,000 bytes after division by 8. Starting empty, a 1,000,000-byte buffer fills in:

1,000,000/250,000=4 s.

A packet joining behind that much queued data waits for the link to transmit the data ahead of it:

1,000,000×8/10,000,000=0.8 s.

Once the buffer stays full, the output still carries only 10 Mbps. About 2 Mbps of the 12 Mbps arriving is dropped, one sixth of the offered traffic. These calculations treat arrivals and departures as steady rates; packet-by-packet timing adds small variations.

Decide whether the queue will drain

A short burst is different from sustained overload. A queue can absorb a burst and drain when arrivals fall below the output rate. If steady arrivals exactly match the output rate, an existing queue persists: each departure is replaced by one arrival. Sustained arrivals above the output rate make the queue grow until the buffer fills.

Real traffic is uneven. Even below full average utilization, bursts make packets wait. Near capacity, there is little spare time to drain those bursts, so average delay rises sharply. Congestion mainly increases the queueing part of packet delay; processing, transmission, and propagation are separate components.

Name the rate you mean
RateWhat it counts
Offered loadTraffic sent into the network, including retransmissions
ThroughputPackets or bytes delivered per second
GoodputNew useful application data delivered per second, counted once

A speed mismatch can expose the bottleneck: a 1 Gbps local network may feed a 50 Mbps access link. Aggregation has the same effect when several router inputs share one output. A single input can look modest while their sum overloads that output.

Choose the right limit

Flow control protects the receiver's buffer using its advertised receive window. Congestion control protects the path between the endpoints. A receiver can have ample free memory while a router on the path drops packets.

A larger router buffer can hold a longer burst, but sustained overload fills any finite buffer and adds waiting time. A faster bottleneck link removes that capacity shortage. Another link then limits the path; it becomes congested only when traffic exceeds the capacity available there.

Key Takeaways

  • Congestion grows queues when sustained arrivals exceed the available output rate.
  • A queue drains below capacity and persists under steady arrivals exactly at capacity.
  • Convert queued bytes to bits before dividing by the link rate to find waiting time.
  • Goodput counts useful data once; offered load includes retransmissions.
  • Flow control protects the receiver; congestion control protects the network path.

1.2 Why a busy network can deliver very little

A full link is useful only when its traffic helps deliver new data. Congestion consumes capacity in ways that can make useful delivery fall even while the network stays busy.

Count the costs

Queueing delay comes first. A video call can become hard to follow before any packets are dropped, because speech arrives too late. Reliability alone cannot repair that delay.

Lost packets create a second cost: a reliable sender retransmits them. If a 10 Mbps link carries equally sized packets and 20% repeat data already carried on that link, at most 8 Mbps carries new data:

10×(1−0.2)=8 Mbps.

Application goodput is lower after accounting for headers and any losses elsewhere. The link's activity therefore overstates the progress made by the application.

Some retransmissions are unnecessary. A packet can be waiting in a long queue when the sender's timer expires. Its replacement then enters the same busy network. Both copies may arrive, but the receiver keeps the data only once. Queueing has converted a delay problem into extra offered load.

Look upstream of a drop

A drop near the destination can waste work at several earlier links. Imagine a packet crossing links A and B before being dropped in the queue for C. The transmissions on A and B used capacity without delivering that packet. Repeating this pattern leaves less upstream capacity for traffic that could have reached its destination.

As offered load rises, throughput initially rises too. With enough downstream drops, however, increasing load sends more traffic into work that will be wasted. End-to-end throughput can peak and then fall. Congestion collapse is the extreme: offered load remains high while useful goodput falls toward zero.

In October 1986, throughput between Lawrence Berkeley Laboratory and UC Berkeley fell from 32 kbps to 40 bps, an 800-fold fall. Jacobson and Karels' 1988 work introduced a coordinated response: slow start, congestion avoidance, better round-trip-time estimation, and exponential timer backoff. Window control and sensible timers address different parts of the feedback loop.

Find the useful operating range

Raj Jain's knee and cliff describe two boundaries. Beyond the knee, added load brings little extra throughput but much more delay. Beyond the cliff, throughput falls as losses and wasted work dominate. Congestion control seeks efficient delivery near the knee while staying clear of collapse.

The Internet has no central controller assigning every sender a rate. Each sender must react to the feedback it sees. If one keeps transmitting at a fixed high rate while others back off, it can take their capacity and deepen the overload.

Retransmission makes a byte stream reliable, but it does not make loss free. Recovery consumes capacity and delays delivery of the missing data; waiting for a retransmission timer can stall the connection much longer than fast recovery does.

Key Takeaways

  • Queueing delay can harm interactive traffic before packets are lost.
  • Retransmissions and unnecessary duplicates consume capacity without adding new application data.
  • A downstream drop wastes the upstream transmissions that carried the packet.
  • Congestion collapse combines heavy network activity with very low useful delivery.
  • The knee marks rising delay with little throughput gain; the cliff marks falling throughput.
  • Every sender contributes to keeping offered load within what the path can support.

1.3 How senders learn when to slow down

A sender does not directly see every router queue on its path. Congestion control is a feedback process: observe delivery, decide what the observations mean, and adjust the amount or rate of traffic entering the network.

Locate the feedback source

In end-to-end control, endpoints infer congestion from loss or delay without an explicit router message. Reno uses loss. Vegas uses changes in round-trip time. BBR builds a path model from delivery-rate and RTT measurements.

In network-assisted control, a router supplies explicit feedback. ECN marks a forward-traveling packet, and the receiver reports the mark in its acknowledgment. Older ATM schemes could report an explicit allowed rate. A router can also send a message directly back to the sender, called a choke packet. The Internet's ICMP Source Quench used that approach and was deprecated in 2012.

Read signals carefully
SignalWhat it offersWhat can mislead the sender
LossEvidence that packets did not arriveWireless corruption can cause loss without congestion
Rising RTTAn early warning of extra waitingA route change can also raise RTT
Explicit marksA router's congestion warning without losing marked dataThe path and endpoints must support the mechanism

With drop-tail queues, loss normally arrives after the buffer fills. Active queue management can drop or mark packets earlier. This changes when a signal arrives without changing the sender's need to respond.

Minimum observed RTT is useful because it approximates a path with little queueing. An RTT above that minimum suggests waiting, but an endpoint must interpret measurements over time. Neither one noisy sample nor every lost wireless packet identifies the cause with certainty.

Control a window or a rate

A window-based sender caps unacknowledged data in flight. As acknowledgments return, space opens for new data. A rate-based sender sets a target rate and usually uses pacing, spacing packets over time. The controls are linked:

rate≈window/RTT.

For example, 100,000 bytes per 50 ms corresponds to 2,000,000 bytes/s, or 16 Mbps, when the window is the active limit. A rate-based controller can also use a window as an upper bound on outstanding data.

Balance several goals

Efficiency means keeping available bottleneck capacity busy. Fairness concerns how competing flows divide it. Low delay requires short queues; stability avoids large, repeated swings; responsiveness means adapting when capacity or competition changes. A rule that quickly fills a path can still be poor at keeping delay low or sharing with other algorithms.

TCP's controller usually runs in the operating system. QUIC's controller usually runs in an application library. UDP supplies no controller, so applications using it must provide congestion control themselves. The carrier protocol does not remove the obligation to respond to congestion.

Key Takeaways

  • End-to-end controllers infer congestion; network-assisted controllers receive explicit router feedback.
  • Loss, delay, and explicit marks have different timing and interpretation limits.
  • Window control limits data in flight; pacing spaces packets at a chosen rate.
  • Efficiency, fairness, delay, stability, and responsiveness must be judged together.
2

How TCP grows and repairs its window

TCP controls how much unacknowledged data it leaves in the network. ACKs allow that amount to grow; loss makes it shrink. Track the window in segments to see the growth rules clearly, then convert to bytes and seconds to estimate a rate. Distinguishing a timeout from duplicate-ACK recovery explains the different drops in a window trace and reveals why classic TCP has trouble recovering on fast paths with long round trips.

2.1 The window, the round trip, and the path

The congestion window, cwnd, is a sender-side limit on unacknowledged data in flight. It is measured in bytes, though traces often count maximum-size segments. It is not a TCP header field. The receiver advertises a different limit, the receive window, rwnd.

Apply both limits

New transmissions must fit within both flow control and congestion control. The usable limit is:

min⁡(cwnd,rwnd).

If cwnd is 30,000 bytes and rwnd is 18,000 bytes, the receiver's limit governs. With 12,000 bytes still outstanding, the sender can send another 6,000 bytes. After a congestion-window reduction, existing data may exceed the new limit; the sender waits for acknowledgments before adding more.

The maximum segment size, MSS, counts application data, excluding headers. A 1,500-byte Ethernet MTU minus 20-byte IPv4 and 20-byte TCP headers leaves 1,460 bytes, with no options. Standards use SMSS for the sender's MSS.

Turn a window into a rate

A window-limited sender delivers roughly one window per RTT. For cwnd of 65,536 bytes and RTT of 50 ms:

65,536/0.05=1,310,720 bytes/s.

Multiply by 8 to obtain about 10.5 Mbps. This estimate also needs enough application data, a receive window at least as large, and a path able to carry the resulting rate.

Fill the path without filling its queue

The bandwidth-delay product, BDP, is bottleneck bandwidth times the queue-free, minimum RTT. For 100 Mbps and 40 ms:

100,000,000×0.04=4,000,000 bits.

Dividing by 8 gives 500,000 bytes, about 342 segments of 1,460 bytes. One BDP in flight keeps this idealized bottleneck busy with no standing queue. Less data leaves idle capacity; excess data waits and raises measured RTT. Computing BDP from an already inflated RTT mistakes queued data for data the path needs.

ACK clocking helps maintain the pace. As packets leave the bottleneck, ACKs return and release space for replacements. In steady state, departures therefore help time new arrivals. This is the conservation-of-packets idea behind TCP's self-clocking behavior.

Set the starting point and threshold

RFC 5681's initial window ranges from two to four segments according to SMSS: four up to 1,095 bytes, three through 2,190 bytes, and two above that. RFC 6928 allows an initial window up to ten segments. A trace starting at one segment is a useful teaching trace, not a claim that all new connections start there.

ssthresh, the slow-start threshold, selects the growth mode. Below it, TCP uses slow start; above it, congestion avoidance. At equality RFC 5681 permits either. A high initial threshold lets a new sender discover capacity through slow start.

Key Takeaways

  • cwnd is private sender state; rwnd is advertised by the receiver.
  • New data must respect both windows after accounting for bytes already in flight.
  • MSS counts application data, excluding IP and TCP headers.
  • A window-limited rate is approximately the usable window divided by RTT.
  • BDP uses the queue-free RTT; excess in-flight data builds a queue.
  • ACK clocking ties new transmissions to delivery through the bottleneck.
  • The initial window and ssthresh determine how a trace begins and grows.

2.2 Exponential growth, then one segment per round trip

TCP first has to discover how much traffic the path can carry. Slow start expands the window rapidly from a small starting point. Congestion avoidance then probes more cautiously once the slow-start threshold is reached.

Count acknowledgments in slow start

RFC 5681 increases cwnd by up to one SMSS for each acknowledgment of new data:

Δcwnd=min⁡(N,SMSS),

where N is the newly acknowledged byte count. With one ACK per full segment and enough data to fill each window, every segment sent makes room for two in the next round: one replacement and one from the increased window.

Starting at 1 MSS, the round-by-round values are 1, 2, 4, 8, 16, 32, and 64 MSS. Six RTTs reach 64 MSS. At 100 ms per RTT, that is 0.6 s. The name reflects a safer start than immediately sending a whole receive window; the growth itself is exponential.

Delayed ACKs change the count. If the receiver sends one ACK for every two full segments, the simple per-ACK rule gives roughly 1.5-fold growth per RTT. Appropriate Byte Counting, described in RFC 3465, uses newly acknowledged bytes to address the dependence on ACK frequency.

Switch growth modes

For a trace with initial cwnd of 1 MSS and ssthresh of 8 MSS, choose congestion avoidance at equality. The trace becomes:

1, 2, 4, 8, 9, 10, 11, 12 MSS.

The first three changes double the window. Later changes add one MSS per RTT. Loss can interrupt either phase. Implementations using HyStart++ (RFC 9406) can also leave slow start early when delay rises.

Explain additive increase

A common per-ACK rule during congestion avoidance is:

Δcwnd=SMSS2/cwnd.

At 10 MSS, one ACK adds about 0.1 MSS. About ten ACKs arrive over the round, so the total increase is about one MSS. The per-ACK increment becomes smaller as cwnd grows, keeping the round-by-round increase roughly constant.

This difference matters on a large path. From 16 to 32 MSS takes one RTT in ideal slow start but sixteen RTTs in congestion avoidance. The slower growth reduces sudden overshoot once the sender has a useful estimate of capacity.

Recognize a restart

Slow start is not limited to the beginning of a connection. A retransmission timeout resets cwnd to one segment. An idle period longer than the retransmission timeout also requires a restart from no more than the initial window, because the earlier ACK clock and capacity estimate may no longer fit the path.

Congestion avoidance does not hold cwnd at a fixed safe value. It keeps adding capacity until congestion feedback arrives. On a drop-tail path, this continued probing tends to build a standing queue before loss signals the sender to back off.

Key Takeaways

  • With one ACK per segment, ideal slow start doubles cwnd each RTT.
  • Delayed ACKs slow the simple per-ACK growth rule.
  • Congestion avoidance adds about one MSS per RTT, not per ACK.
  • ssthresh separates growth modes; a trace must choose a convention at equality.
  • Timeouts and long idle periods can require a new slow start.

2.3 Different losses produce different recovery traces

TCP can infer a missing segment from a timer or from duplicate acknowledgments. The distinction matters: a timeout gives less evidence that the network is still delivering traffic than three duplicate ACKs do.

Set the new threshold

Reno uses the amount actually outstanding, FlightSize, to set:

ssthresh=max⁡(FlightSize/2, 2×SMSS).

FlightSize is often close to cwnd during a fully active transfer, but they need not be equal when the application sends little data. The lower bound prevents the threshold from falling below two segments.

After a timeout, the sender retransmits, sets cwnd to one SMSS, and restarts slow start. Repeated timeouts for the same data double the retransmission timer. This exponential backoff prevents persistent failure from producing an equally persistent stream of retries.

Recover before the timer expires

Three duplicate ACKs show that three later segments arrived beyond a gap. They do not mean three segments were lost. One or two duplicates can arise from reordering, so TCP waits for the third before fast retransmit sends the missing segment.

Reno then enters fast recovery. Suppose FlightSize is 12 MSS. The new threshold is 6 MSS, and Reno temporarily sets:

cwnd=6+3=9 MSS.

The three extra segments account for packets evidenced as having left the network. Each further duplicate ACK inflates cwnd by one MSS, allowing continued sending when the window permits. When an ACK advances the cumulative acknowledgment, Reno deflates cwnd to 6 MSS and resumes congestion avoidance.

Event with 12 MSS outstandingTahoeReno
Timeoutcwnd becomes 1 MSScwnd becomes 1 MSS
Third duplicate ACKRetransmit and restart at 1 MSSRetransmit and enter recovery at 9 MSS
Successful recoveryGrow through slow startDeflate to 6 MSS, then grow additively

With an initial window of 1 MSS and ssthresh of 8 MSS, cwnd grows 1, 2, 4, 8, 9, 10, 11, 12 MSS before the loss. Reno eventually continues at 6, 7, 8, 9. Tahoe restarts at 1, 2, 4, reaches the new threshold of 6, then continues 7, 8.

Repair several holes in one window

Classic Reno exits recovery at the first ACK of new data. If that ACK covers only part of the original flight, another gap remains. Reno can reduce again or time out.

NewReno (RFC 6582) stays in recovery on such a partial ACK and retransmits the next missing segment. It leaves when all data outstanding at recovery entry is acknowledged. SACK reports received blocks explicitly; SACK-based recovery can identify and repair several holes within a round trip.

One congestion episode should normally cause one reduction, even if several packets are lost. NewReno and SACK-based recovery handle this more reliably than classic Reno. CUBIC uses a different reduction factor for ordinary congestion signals, keeping 70%, but also restarts at one segment after a timeout.

Key Takeaways

  • Reno sets ssthresh from FlightSize, with a minimum of two SMSS.
  • A timeout resets cwnd to one SMSS and repeated timeouts back off the timer.
  • Three duplicate ACKs trigger fast retransmit; they indicate later arrivals beyond a gap.
  • Reno inflates cwnd during fast recovery and deflates it to ssthresh on exit.
  • NewReno stays in recovery through partial ACKs to repair multiple losses.
  • SACK reports received blocks so the sender can locate more than one hole.
  • Tahoe restarts slow start after duplicate-ACK loss; Reno normally continues additively after recovery.
  • Congestion-window reductions belong to congestion episodes, not to every individual lost packet.

2.4 Estimate the rate of a long-lived transfer

Classic Reno repeatedly increases its window and cuts it after congestion. The resulting sawtooth gives a useful steady-state estimate when RTT is roughly constant, fast retransmit detects losses, and timeouts and slow start are absent.

Average the window

Let the peak window be W segments. A halving produces a range from W/2 to W, whose average is 0.75 W. Multiply by MSS to obtain bytes per round trip, then divide by RTT:

average rate≈0.75 W MSS/RTT.

For W of 24 segments, MSS of 1,460 bytes, and RTT of 80 ms, the peak rate is 3.504 Mbps. The average is about 2.63 Mbps. Remember that a window in segments needs a segment-size factor; a window already in bytes does not.

Connect throughput to loss

The Mathis approximation expresses the same Reno-like behavior using the loss fraction L:

T≈1.22 MSSRTTL.

If MSS is in bytes and RTT in seconds, T is bytes/s. With MSS of 1,460 bytes, RTT of 0.1 s, and loss fraction 0.0001, the denominator is 0.001 s. The result is 1,781,200 bytes/s, about 14.25 Mbps after multiplying by 8.

At a fixed loss fraction, doubling RTT halves throughput. At fixed RTT, doubling throughput requires loss to fall to one quarter, because the denominator contains the square root of loss. A loss fraction of 0.0001 means 0.01%, not 0.0001%.

See the high-speed problem

A 10 Gbps path with a 100 ms queue-free RTT needs 1 billion bits, or 125,000,000 bytes, in flight to fill it. Using 1,500-byte segments gives about 83,333 segments. Halving that window leaves about 41,667 segments to regain. Reno adds one per RTT, so regaining them takes about 4,167 s, nearly 70 minutes.

That 83,333-segment value is the window needed to send at 10 Gbps at one instant. A Reno sawtooth averaging 10 Gbps would need a higher peak because its average window is only three quarters of its peak. The loss-rate formula estimates that sustaining a 10 Gbps average with this MSS and RTT requires loss around one segment in 4.7 billion.

Check other limits

A controller cannot deliver faster than the bottleneck, and a small receive window can bind before cwnd does. Use the smallest applicable limit. Timeouts reduce the rate below the simple model, and a short object may finish entirely in slow start. Its completion time depends strongly on startup rounds and the initial window, so the long-lived formula is a poor description of that transfer.

A faster access link therefore helps only when it removes an active limit. Long RTT, loss, or a small window can leave a single connection far below the upgraded link's capacity.

Key Takeaways

  • A Reno sawtooth from W/2 to W has an average window of about 0.75 W.
  • The Mathis model gives throughput proportional to 1/RTT and 1/√L.
  • Keep segments, bytes, bits, and seconds consistent when calculating rates.
  • Large BDP paths make Reno recovery slow because growth is only one segment per RTT.
  • Bottleneck capacity and the receive window remain independent upper limits.
  • Short transfers and timeout-heavy connections need more than a steady-state model.
3

How flows divide a shared link

Keeping a link busy and sharing it fairly are separate goals. Two flows can use every bit of capacity while one takes almost all of it. Follow how equal additive increases and proportional decreases change their rates, then test what happens when their conditions differ. Fairness measures help describe the outcome, but interpreting a measure also requires knowing who the flows represent and how much traffic each one needs.

3.1 Why AIMD moves flows toward equal shares

If K active flows all want more capacity than a bottleneck can give them, an equal per-flow share is R/K, where R is the available rate. Efficiency asks whether their rates add to R. Fairness asks how evenly they divide it.

Put two rates on a diagram

In a Chiu–Jain diagram, the horizontal and vertical coordinates are the two flow rates. The efficiency line is:

x1+x2=R.

The fairness line is the diagonal where the rates are equal. Their intersection is the fair, fully used allocation. On a 10 Mbps link it is 5 Mbps per flow. Points below the efficiency line leave capacity unused; points above it offer more traffic than the link can carry.

Separate the two updates

Additive increase adds the same amount to each rate. Starting from 8 and 1 Mbps, adding 0.5 Mbps to each gives 8.5 and 1.5 Mbps. The difference remains 7 Mbps, but the smaller flow gains more relative to its starting rate. On the diagram the point moves parallel to the equality diagonal.

Multiplicative decrease multiplies both rates by the same factor. Halving 9 and 2 Mbps produces 4.5 and 1 Mbps. Their ratio is unchanged, while the absolute difference falls from 7 to 3.5 Mbps. The point moves toward the origin and quickly removes overload.

These are different meanings of improvement: equal addition improves the relative balance; proportional reduction shrinks the absolute gap. Repeating the two prevents the gap from growing back while capacity is probed again.

Trace several cycles

Start at 8 and 1 Mbps on the 10 Mbps link. Add 0.5 Mbps per flow per step and reduce only after the total exceeds capacity. After two increases the rates are 9 and 2, totaling 11. Halving gives 4.5 and 1.

Five more increases reach 7 and 3.5, totaling 10.5. Halving gives 3.5 and 1.75. The gaps have been 7, 3.5, and 1.75 Mbps. Another synchronized halving makes the next gap 0.875 Mbps. The flows approach equal shares while their total continues to oscillate around available capacity.

Compare other update rules
RuleWhat happens to unequal rates
Additive increase, additive decreaseEqual additions and subtractions preserve the absolute gap
Multiplicative increase, multiplicative decreaseEqual proportional changes preserve the rate ratio
Multiplicative increase, additive decreaseGrowth favors the larger flow and balance can worsen
Additive increase, multiplicative decreaseRepeated cycles approach equal shares and efficient use

This convergence assumes equal RTTs, synchronized congestion feedback, matching responses, and flows that stay active long enough. Reno's additive step is about one MSS per RTT and its decrease factor is one half. Other positive additive steps and decrease factors between zero and one give the same basic convergence argument. Real flows need not meet all its assumptions, so an instantaneous unequal pair does not by itself show failure of AIMD.

Key Takeaways

  • Efficiency concerns the sum of rates; fairness concerns their division.
  • Equal additive increases preserve the absolute gap while improving relative balance.
  • Equal multiplicative decreases preserve the ratio while shrinking the absolute gap.
  • Repeated AIMD cycles converge under matched RTTs, feedback, and responses.
  • Fairness describes long-run sharing while the rates continue to oscillate.

3.2 Measure sharing and explain unequal outcomes

Equal shares are a useful reference, but real flows can differ in demand, RTT, number of connections, and congestion controller. A fairness claim needs a clear answer to “fair between which flows?”

Calculate Jain's index

For nonnegative flow rates with a nonzero total, Jain's index is:

J=(∑xi)2n∑xi2.

Rates of 8 and 2 Mbps give a sum of 10 and a sum of squares of 68, so the index is about 0.735. Equal rates give 1. If one of n flows receives everything, the index is 1/n.

The index measures equality, not utilization. Two flows at 1 Mbps each and two at 5 Mbps each both have an index of 1, even though they use different amounts of a 10 Mbps link. Check the total rate separately.

Account for limited demand

Max-min fairness gives low-demand flows what they need, then shares the remaining capacity among flows still seeking more. On a 12 Mbps link, three flows want 2, 8, and 10 Mbps. The initial equal share is 4 Mbps. The first needs only 2, leaving 10 Mbps for the other two. The allocation is therefore 2, 5, and 5 Mbps.

Increasing one of the larger rates would require reducing a flow already at an equal or smaller rate. That property defines max-min fairness. Its unequal allocation can be appropriate even though Jain's equality measure falls below 1.

Identify advantages between flows

Reno grows once per RTT. At the same loss fraction, its approximate throughput is inversely proportional to RTT: a 20 ms flow can achieve about four times the rate of an 80 ms flow. Equal bottleneck access does not erase that timing advantage.

Sharing is also per connection. With nine existing connections, an application adding one might receive about one tenth of the link. If it instead adds eleven comparable connections, its share becomes eleven twentieths, or 55%. HTTP/2 and HTTP/3 multiplex many requests over a connection, while HTTP/1.1 clients often open several connections.

A fixed-rate UDP application may keep sending while TCP flows back off. UDP itself supplies no controller; RFC 8085 calls for applications to add suitable congestion control. A TCP-friendly flow uses no more bandwidth than comparable TCP traffic under the same conditions. TFRC uses the TCP throughput equation to support a smoother rate.

Consider the queue and the algorithm

A FIFO queue does not enforce equal flow shares. Its outcome depends on sender behavior. Fair queuing, including the per-flow scheduling in FQ-CoDel, gives flows separate queues and service opportunities.

CUBIC's growth and Reno's growth differ on large-BDP paths. BBR's sharing with CUBIC also depends on version and buffer depth; early BBR could be aggressive with shallow buffers. No single equality calculation establishes that different controllers will coexist evenly on every path.

Key Takeaways

  • Jain's index measures equality; check utilization independently.
  • Max-min fairness satisfies small demands before dividing the remaining capacity.
  • Shorter RTTs and more parallel connections can increase a sender’s share.
  • UDP applications need their own congestion control; TCP-friendly traffic limits comparable bandwidth use.
  • FIFO queues leave sharing to senders, while fair queuing provides per-flow service.
  • Algorithm versions and buffer depth can change coexistence between flows.
4

How routers give earlier congestion warnings

A large buffer can hide packet loss while making an interactive connection painfully slow. Routers can shorten that wait by responding to a persistent queue before it overflows. Follow the difference between queue-length and delay-based detection, then trace an ECN mark from a router to the sender. The same marking idea supports different sender responses in classic TCP, controlled data centers, and low-latency Internet designs.

4.1 Keep useful buffering without a standing queue

A drop-tail queue accepts packets until its buffer is full, then drops new arrivals. Loss-based senders keep probing upward until they receive a congestion signal. With a large drop-tail buffer, that signal can arrive only after a long queue has formed.

Calculate the delay hidden in a buffer

A 2,000,000-byte buffer ahead of a 20 Mbps uplink holds 16 million bits. If it is full, a packet behind that data waits:

16,000,000/20,000,000=0.8 s.

An upload can therefore keep throughput high while adding almost a second to a call sharing the uplink. Bufferbloat means persistent excess delay caused by large buffers and the traffic behavior that keeps them occupied.

Buffering still has a purpose: short bursts need somewhere to wait. In the simple single-Reno-flow model, about one BDP of buffering can keep the link busy immediately after a window halving. Making the buffer far larger adds waiting without increasing the link's transmission rate.

Signal congestion before overflow

Active queue management, AQM, drops or marks packets early to signal that senders should reduce their load. A physical overflow is no longer the only way to announce congestion. RFC 7567 recommends widespread AQM deployment.

Random Early Detection, RED, watches a moving average of queue length. Below a minimum threshold it does not signal. Between two thresholds, it drops or marks with an increasing probability. Above the maximum threshold, it signals on every arrival. Averaging prevents a single short burst from looking like persistent overload, but choosing thresholds that work across different speeds and loads is difficult.

Measure waiting time directly

CoDel, Controlled Delay, measures a packet's sojourn time: its time inside the queue. Its standard target is 5 ms and its interval is 100 ms. If even the minimum observed sojourn time stays above target for an interval, a standing queue exists. CoDel then drops or ECN-marks packets, increasing the signaling frequency while the excess delay persists.

The minimum over an interval matters. A burst may produce high delay briefly yet drain soon afterward; a queue whose delay never gets small needs intervention. CoDel's delay measurement lets its defaults work across a wide range of link rates.

MechanismWhat it watchesWhen it signals
Drop-tailWhether the buffer is fullAt overflow
REDAverage queue lengthProbabilistically as thresholds are crossed
CoDelPersistent packet waiting timeWhen delay stays above target

FQ-CoDel combines separate flow queues with CoDel. The flow separation helps a large transfer avoid placing every small interactive packet behind its backlog.

Early signals can also reduce global synchronization, where many flows lose packets together, halve together, and leave the link temporarily underused. Randomized early signals spread reactions across time. With ECN-capable traffic, an AQM can send its warning through a mark while still delivering the packet.

Key Takeaways

  • Bufferbloat is persistent queueing delay, even when throughput stays high.
  • Queueing time is queued bits divided by the output rate.
  • AQM signals congestion before physical buffer overflow.
  • RED tracks average queue length; CoDel tracks persistent waiting time.
  • FQ-CoDel combines per-flow queues with CoDel delay control.
  • Early, distributed signals reduce synchronized losses and window reductions.

4.2 Follow an ECN warning back to the sender

Explicit congestion notification, ECN, lets a router deliver a packet and warn that congestion is developing. The mark changes the sender's behavior without creating missing data that must be retransmitted.

Read the IP codepoint

The ECN field is two bits in the IPv4 Type of Service byte or IPv6 Traffic Class.

BitsMeaning
00Not-ECT: the transport has not declared ECN capability
10ECT(0): ECN-capable transport
01ECT(1): ECN-capable transport; also the L4S identifier
11CE: congestion experienced

In the classic RFC 3168 TCP handshake, the client's SYN sets ECE and CWR. An accepting server's SYN-ACK sets ECE. After negotiation, classic TCP marks data packets ECT(0).

Trace the feedback loop

An AQM that would drop an ECN-capable packet as a congestion warning can change its codepoint to CE and forward it. A Not-ECT packet cannot carry that warning and is dropped when the AQM needs to signal. A completely full buffer still drops packets, including ECN-capable ones.

The receiver echoes CE by setting ECE, ECN-Echo, in its ACKs. It continues until it receives CWR, Congestion Window Reduced, from the sender. These flags report and acknowledge the feedback; their presence does not mean data was lost.

For classic Reno-style ECN, start with cwnd of 20 MSS. After ECE arrives, the sender reduces cwnd to 10 MSS and puts CWR on its next new data segment. The receiver stops echoing once CWR arrives. Repeated echoes from the same window do not require repeated halvings. The warning returns on the acknowledgment path, so the response is subject to feedback delay.

ECN specifies the signal; the congestion algorithm supplies the reduction rule. Reno halves, while CUBIC normally retains 70% on an ECN event. Both endpoints and a marking bottleneck must support ECN for this loop to work.

Use the fraction of marks

DCTCP, Data Center TCP, uses frequent marks in a controlled environment. It estimates the marked-byte fraction with a smoothed value alpha:

α←(1−g)α+gM,

where M is the recently marked fraction. Some implementations use g of 1/16. It reduces the window using:

cwnd←cwnd(1−α/2).

With alpha of 0.2, a window of 100 becomes 90; with alpha of 1 it halves. DCTCP needs compatible marking and feedback. Mixing it with classic TCP in one ordinary queue can produce unfair shares.

L4S, the experimental architecture in RFCs 9330–9332, carries a related scalable response onto Internet paths. ECT(1) identifies scalable traffic, and a dual-queue coupled AQM separates it from classic traffic while coordinating their treatment. Frequent shallow marks aim for queueing delay around a millisecond. ECT(1) alone is not a guarantee of that delay: the controller and bottleneck behavior complete the design.

Key Takeaways

  • CE marks a delivered packet; ECN-capable traffic can still be dropped at overflow.
  • Classic TCP negotiates ECN, echoes CE through ECE, and acknowledges its response with CWR.
  • The controller chooses how much to reduce; ECN supplies the congestion signal.
  • DCTCP uses the marked fraction to scale its reduction in controlled environments.
  • L4S combines ECT(1), scalable congestion control, and coupled queue management.
5

How CUBIC and BBR adapt to modern paths

A path with a large bandwidth-delay product needs a large amount of data in flight. Reno can take too long to recover that window after a reduction. CUBIC changes how the window grows over time, while BBR estimates the path's delivery rate and queue-free RTT. Compare what each algorithm measures, how it probes for capacity, and what its behavior means for delay and sharing with other traffic.

5.1 Use time to grow the CUBIC window

CUBIC addresses Reno's slow growth on fast, long-distance paths. Its window follows elapsed time since a congestion reduction, giving it a different response from a fixed one-segment increase every RTT. RFC 9438 specifies CUBIC; it is the default in major Linux, Windows, and Apple TCP stacks.

Remember the last congestion point

At an ordinary loss or ECN congestion event, CUBIC records its window as Wmax. With a fully used window, its decrease factor of 0.7 retains 70% of the flight size. Reno would retain half. A retransmission timeout is different: CUBIC follows Reno back to a one-segment window and slow start, while setting its threshold with CUBIC's decrease factor.

For the basic cubic epoch after a reduction, the target window in segments is:

W(t)=C(t−K)3+Wmax⁡,C=0.4.

Time t is in seconds. When the reduced window is 0.7 Wmax, the return time to the old peak is:

K=Wmax⁡(1−0.7)/0.43.
Work through the curve

With Wmax of 100 segments, the reduced window is 70. The value inside the cube root is 75, so K is about 4.22 s. At one second, the curve is about 86.7 segments; at two seconds it is 95.6; at three seconds it is 99.3. It reaches 100 at K.

Below the old peak, growth is initially fast and then slows. This concave region cautiously approaches a point where congestion previously occurred. Near the peak is a relatively flat plateau. Above it, the convex region accelerates to probe for capacity that may now be available. At seven seconds the example curve reaches about 108.6 segments.

Explain the RTT advantage and its limit

Reno needs 50 RTTs to climb from 50 back to 100 segments: 5 s with a 100 ms RTT and 10 s with a 200 ms RTT. The cubic curve's return time depends on the recorded peak and elapsed time, so its 4.22 s return does not depend directly on the ACK count.

CUBIC also computes a Reno-friendly estimate. It uses an equivalent AIMD increase of about 0.53 segments per RTT with a decrease factor of 0.7, taking this estimate when it exceeds the cubic target. Short-RTT paths can therefore recover sooner than the pure cubic return time. Time-based growth reduces a major source of RTT bias; it does not make every real allocation RTT-independent.

Adjust the remembered peak

If congestion recurs below the previous peak, CUBIC's fast convergence lowers the remembered Wmax. A new event at 90 segments after a previous peak of 100 gives:

Wmax⁡=90(1+0.7)/2=76.5.

The immediate reduced window is 63 segments. The remembered peak and the new current window have different jobs: one shapes future growth, while the other limits current sending.

CUBIC remains loss-based, with ECN as an alternative signal. It can build a standing queue on a drop-tail path. Faster recovery and a gentler ordinary reduction improve use of large-BDP paths, but neither by itself guarantees low queueing delay.

Key Takeaways

  • CUBIC normally retains 70% after a loss or ECN event, but restarts at one segment after a timeout.
  • The cubic target depends on elapsed seconds and the remembered congestion window.
  • Growth slows near the old peak, then accelerates above it.
  • The Reno-friendly estimate can exceed the cubic curve, especially at short RTTs.
  • Fast convergence lowers the remembered peak when congestion recurs below it.
  • CUBIC is still a loss-based controller and can build standing queues.

5.2 Estimate the path with delay and delivery measurements

Loss is not the only sign of a crowded path. Delay can reveal queued data, while delivery measurements can estimate how much bandwidth the path supplies. Vegas and BBR use these observations in different ways.

Estimate Vegas's queued data

Vegas compares an expected rate based on the minimum, base RTT with the actual rate based on the measured RTT. Their difference, multiplied by base RTT, estimates the flow's queued data.

With cwnd of 50 segments, base RTT of 40 ms, and measured RTT of 50 ms, expected delivery is 1,250 segments/s and actual delivery is 1,000 segments/s. The queue estimate is:

(1,250−1,000)×0.04=10 segments.

Vegas grows below a lower threshold and shrinks above an upper threshold. If loss-based traffic keeps filling their shared queue, Vegas repeatedly sees delay and backs off, which can leave it a small share.

Build BBR's two-part model

BBR, Bottleneck Bandwidth and Round-trip propagation time, estimates bottleneck bandwidth from recent maximum delivery rates and minimum RTT over a 10 s filter. Their product estimates BDP. Its ideal target is a full link with roughly one BDP in flight and little queued data.

A 50 Mbps bandwidth estimate and 30 ms minimum RTT give 1.5 million bits, or 187,500 bytes, per BDP. A typical congestion-window gain of 2 caps outstanding data around 375,000 bytes. The pacing rate is a separate control: pacing gain times estimated bandwidth. A cap permits data in flight; it does not require the sender to send at twice the bandwidth.

Follow BBR version 3's states
StateMain jobDraft version 3 behavior
StartupDiscover capacityPace at about 2.77 times the estimate; exit when growth stalls or loss is high
DrainRemove startup queuePace at about 0.5 times the estimate
ProbeBWTest and use bandwidthUp 1.25, Down 0.9, Cruise 1.0, Refill 1.0 pacing gains
ProbeRTTRefresh minimum RTTReduce in-flight data toward half a BDP for at least 200 ms and one round trip

Startup's growth test is less than 25% delivery-rate growth for three rounds. ProbeRTT is scheduled no more often than about every 5 s. On the example path, ProbeBW Up targets 62.5 Mbps and Down 45 Mbps. These version 3 details are specified in the BBR Internet-Draft, not in a published BBR RFC.

Compare feedback and trade-offs

Reno and CUBIC increase until loss or ECN signals congestion. BBR paces from a bandwidth-and-RTT model. It deliberately queues briefly in Startup and ProbeBW Up, so “model-based” does not mean “never builds a queue.”

BBR version 1 largely ignored loss. Version 3 uses heavy loss, around 2% in a round, to constrain overshoot and improve coexistence. It can sustain more throughput on randomly lossy long paths, but cannot perfectly identify why a packet was lost. Its specific ECN response remains open in the draft; any connection declaring ECN support must respond to CE as congestion. Buffer depth, RTT, version, and competing algorithms still matter to fairness.

Key Takeaways

  • Vegas infers queued data from expected and actual rates using base RTT.
  • BBR models bandwidth and minimum RTT, then controls pacing and in-flight limits separately.
  • BBR Startup and ProbeBW intentionally probe above the estimated delivery rate.
  • Drain and ProbeRTT reduce queued data for different measurement purposes.
  • BBR version 3 constrains heavy loss; it does not ignore congestion.
  • BBR is model-based, while Vegas responds directly to delay growth.
  • Algorithm version and path conditions affect coexistence and queueing.
6

Why QUIC can evolve while sharing the network

Transport design has to work through equipment that is already deployed. TCP extensions can be delayed by middleboxes and operating system update cycles. QUIC carries an encrypted transport over UDP so applications can deploy new behavior more readily. Follow how streams, packet numbers, and richer acknowledgments improve delivery and recovery, while the sender still follows congestion control principles familiar from TCP.

6.1 Move transport features into an encrypted UDP-based design

A protocol ossifies when deployed devices depend on its existing form so strongly that changes become hard to deploy. Middleboxes inspect TCP headers and may reject unfamiliar options or flags. Kernel-based implementations also spread new behavior through operating system updates, often slowly.

Identify the costs QUIC addresses

TCP has evolved through SACK, ECN, window scaling, and new congestion controllers. Yet its structure still matters for web traffic. A conventional new TCP-plus-TLS connection needs the TCP handshake before its TLS handshake. Its single ordered byte stream also means one missing segment blocks delivery of later bytes, including data for unrelated requests. This is transport head-of-line blocking.

A connection's addresses and ports can create another obstacle when a device moves between networks. QUIC, standardized in RFC 9000, changes these parts of transport design while carrying its packets over UDP. HTTP/3 runs over QUIC.

Combine the handshakes

QUIC integrates TLS 1.3 with its transport handshake. In a simple exchange with 80 ms RTT, negligible processing, and no loss, a new TCP-plus-TLS 1.3 connection sends the request after two RTTs and receives the first response bytes after three: 240 ms. A new QUIC connection can receive them after two RTTs: 160 ms.

A resumed QUIC connection may send early application data in its first flight, called 0-RTT. The first response can then arrive after one RTT, 80 ms in this example. Early data can be replayed, so applications restrict it to actions safe to repeat. The term 0-RTT describes when sending can begin, not an instantaneous response.

Separate streams, not all shared limits

QUIC carries independent ordered byte streams. If a packet contains data for image 1, losing it does not block delivery of already received data for images 2 and 3 in separate streams. A packet carrying several streams can affect each one it carried. All streams still share the connection's congestion controller, so loss can reduce their total available rate.

QUIC provides reliable stream delivery on top of UDP. It also provides flow control both per stream and per connection. UDP is the carrier, not a substitute for these transport functions.

Protect changeable details

QUIC encrypts packet payloads, including all transport frames. Header protection covers packet numbers and some first-byte bits. Fields needed for routing and negotiation, such as connection IDs and the version, remain visible. Hiding changeable transport details gives middleboxes less behavior to depend on.

Connection IDs identify a connection independently of the current IP addresses and ports. With path validation, a connection can migrate as a phone moves from Wi-Fi to cellular access, without starting a completely new connection.

QUIC is usually a user-space library. An application update can therefore ship a transport improvement without waiting for every operating system kernel to change. That flexibility also gives the application responsibility for correct loss detection, security, flow control, and congestion control.

Key Takeaways

  • Ossification occurs when deployed equipment makes protocol changes difficult.
  • QUIC combines transport and TLS setup and can support replay-sensitive 0-RTT early data.
  • Independent streams avoid transport-wide ordered-delivery stalls across unrelated streams.
  • Payload encryption and header protection hide most changeable transport details.
  • Connection IDs support migration beyond a fixed address-and-port tuple.
  • QUIC adds reliability, flow control, and congestion control above UDP.

6.2 Use clearer loss signals with familiar congestion control

QUIC improves what a sender can learn from acknowledgments, but still has to avoid overloading the path. RFC 9002 defines loss detection and a default NewReno-like controller. Implementations can use other suitable algorithms, including CUBIC or BBR.

Identify each transmission

Packet numbers increase and never repeat within a packet number space. Resent data travels in frames inside a new packet with a new number. An ACK can therefore identify the transmission that arrived, avoiding TCP's ambiguity between an original segment and its retransmission.

ACK frames report received ranges and the receiver's ACK delay. After the handshake, the sender uses validated, bounded ACK delay when adjusting RTT estimates; it does not blindly subtract arbitrary receiver delay from every sample.

QUIC declares a packet lost when a packet at least three packet numbers later has been acknowledged, or through its time threshold once a later packet is acknowledged. The recommended time threshold is 9/8 of the larger of the latest and smoothed RTT. A probe timeout, PTO, sends acknowledgment-eliciting probes. PTO expiration alone does not collapse cwnd.

Set byte-based window limits

For maximum datagram size d, RFC 9002's initial window is:

min⁡(10d, max⁡(14,720,2d)).

With d of 1,200 bytes, the result is 12,000 bytes. With d of 1,500 bytes, it is 14,720 bytes. The minimum congestion window is two maximum-size datagrams, so those paths have minima of 2,400 and 3,000 bytes respectively.

In the default controller, a loss or new CE congestion signal halves cwnd, bounded below by the minimum, and sets ssthresh to the reduced window. A recovery period prevents another reduction for further losses of packets sent before recovery began. An acknowledgment of a packet sent during recovery ends the period. The sender then resumes normal growth.

Recognize sustained failure

Persistent congestion is stronger evidence than one timer expiration. It requires a sufficiently long run of lost acknowledgment-eliciting packets, with no intervening packet acknowledged and a prior RTT sample. Its duration threshold is:

3 [smoothed RTT+max⁡(4 RTT variation,timer granularity)+maximum ACK delay].

With 100 ms smoothed RTT, 10 ms variation, 25 ms maximum ACK delay, and negligible timer granularity, the threshold is 495 ms. The qualifying loss interval must exceed that value. The controller then drops cwnd to two datagrams, its minimum window.

Keep feedback and timing useful

QUIC ACKs can report cumulative ECT(0), ECT(1), and CE counts. After validating ECN operation on the path, the sender treats a new CE increase as a congestion event without needing packet loss.

Pacing spreads transmissions. A rate around 1.25 times cwnd divided by smoothed RTT is one suggested approach; burst limits can serve the same purpose. Sending a whole window at once creates a burst even when the average rate is acceptable. User-space deployment makes new controllers easier to ship, but each stack must still share bandwidth responsibly.

Key Takeaways

  • Unique packet numbers identify transmissions; received ranges locate gaps.
  • ACK delay adjustment follows validation and handshake rules.
  • Packet and time thresholds detect loss; PTO probes for feedback.
  • The default controller halves once per recovery episode and respects a two-datagram minimum.
  • Persistent congestion requires a qualifying loss interval longer than its duration threshold.
  • Validated ECN counts can signal congestion without a drop.
  • Pacing or burst limits avoid sending the full window in one burst.

Congestion Control examples

6 Walkthroughs

1

Follow traffic through a bottleneck

13 steps
Trace a growing queue, calculate wasted capacity, and identify how congestion feedback reaches a sender.
  1. 1
    IntroductionA link can stay busy while an application waits

    Several fast inputs feed one slower output, a bottleneck. The router has to hold the surplus, so the same flow can experience high throughput and a long wait.

    Follow the queue first, then account for work that fails to deliver new data (goodput and congestion collapse). Finally, decide what kind of feedback could tell the sender to change its behavior. These three views explain why activity alone is a poor measure of network health.

  2. 2
    ExplanationCompare arrivals with departures

    The bottleneck is the link with the least capacity available to the traffic on its path. When sustained arrivals exceed its output rate, the surplus accumulates in the output queue.

    Below the output rate, spare capacity drains the queue. Exactly matching it leaves an existing queue unchanged under steady rates: each departure is replaced by one arrival. Brief overload can be absorbed if a quieter period follows.

  3. 3
    ExampleFind how quickly the queue grows

    An empty router buffer receives 15 Mbps while its output sends 11 Mbps. First find the surplus:

    15−11=4 Mbps.

    Convert the surplus to bytes per second:

    4,000,000/8=500,000 bytes/s.

    This is the rate at which waiting data accumulates. Using the full arrival rate would count data the output link has already transmitted.

  4. 4
    ExampleTurn queued data into waiting time

    Keep the same 11 Mbps output. A 1,000,000-byte buffer fills after 2 s of the 500,000-byte/s surplus.

    When full, it holds 8,000,000 bits ahead of a newly joining packet. Its approximate wait is:

    8,000,000/11,000,000≈0.727 s.

    The output rate determines how long already queued data takes to leave. The input surplus determines how quickly that backlog formed.

  5. 5
    ChallengePredict a queue after the load falls

    A queue holds 300,000 bytes. Its output is 12 Mbps, and steady arrivals fall to 8 Mbps. How long will the existing queue take to drain?

    ---reveal---

    The net drain rate is 4 Mbps, or 500,000 bytes/s. Therefore:

    300,000/500,000=0.6 s.

    Dividing by the full output rate would ignore new packets that continue arriving while the old backlog drains.

  6. 6
    ExplanationTrack what a retransmission replaces

    Goodput counts new useful application data once. Throughput counts delivered traffic, while offered load includes everything injected into the network.

    A reliable sender replaces lost data, but those repeats consume link time. If a timer expires while an original is merely delayed, two copies may travel through the path and arrive successfully. The application still receives that piece of data only once.

  7. 7
    ExampleAccount for work lost farther downstream

    A packet travels over links A and B, then is dropped in the queue before C. Both upstream transmissions have already consumed capacity, yet the packet never reaches its destination.

    As more traffic is lost late, upstream links can spend an increasing share of their time on doomed packets. End-to-end delivery can fall while those links remain busy. This is one route toward congestion collapse, not simply a full queue at one router.

  8. 8
    ChallengeSeparate busy capacity from useful progress

    A 16 Mbps link is full. Of its equally sized packets, 25% repeat data it has carried before. Ignoring headers and downstream losses, what is the largest possible rate of new data?

    ---reveal---

    Only three quarters is new:

    16×0.75=12 Mbps.

    The other 4 Mbps may be useful for repairing reliability, but it does not add new data to the rate being counted here.

  9. 9
    Key InsightKnow what changes at the knee and cliff

    Beyond the knee, a larger offered load gives little extra throughput while delay rises sharply. Beyond the cliff, throughput falls as losses and wasted work dominate.

    These describe different problems: inefficient waiting can appear before useful delivery collapses. A controller should keep the bottleneck productively busy while avoiding the high-delay operating point that a large buffer can conceal.

  10. 10
    ExplanationLocate the origin of the warning

    With end-to-end control, the sender infers congestion from loss, RTT, or delivery measurements. A router supplies no explicit congestion report.

    With network-assisted control, the router sends a warning. In ECN, it marks a forward-traveling packet and the receiver reports that mark back. The report still counts as network-assisted even though it returns inside an endpoint acknowledgment.

  11. 11
    ConnectionSeparate the signal from the sending control

    A loss can come from queue overflow or wireless corruption. A rise in RTT can come from a queue or a route change. A mark explicitly reports congestion but needs compatible path support.

    After interpreting the signal, the sender can limit a window or choose a paced rate. These are control choices, separate from where the signal originated. Roughly one window per RTT links the amount in flight to the achieved rate.

  12. 12
    ChallengeChoose a helpful feedback path

    A download keeps a large router buffer occupied. The receiver has ample free memory. The router starts marking congestion and the receiver echoes the marks. What kind of control is this, and why can it address the download delay?

    ---reveal---

    It is network-assisted congestion control. The sender can reduce traffic entering the congested path, allowing the router queue to shrink. More receiver space would not drain that queue because the limiting capacity is in the network.

  13. 13
    RecapRead load, useful delivery, and feedback together

    Predict queue growth from arrivals minus departures; find waiting time from queued bits divided by output rate. Then check how much link work delivers new application data.

    Loss, delay, and explicit feedback tell a sender different things. A useful congestion controller interprets those signals and adjusts traffic so that the path delivers data efficiently without maintaining excessive queues.

2

Trace a TCP window from startup through recovery

20 steps
Use byte and segment windows, follow classic growth and loss rules, then estimate a long-lived transfer’s rate.

Save this lesson to follow every Walkthrough step by step.

  1. 1
    IntroductionRead the window before reading the rate
  2. 2
    ExplanationRespect both sender and receiver limits
  3. 3
    ExampleEstimate a window-limited rate
  4. 4
    ExampleCompute the data needed to fill a path
  5. 5
    ChallengeFind the limit that actually binds
  6. 6
    ExplanationWhy slow start grows quickly
  7. 7
    ExampleChange the rule at the threshold
  8. 8
    TipLabel the phase on every trace
  9. 9
    ChallengeTrace the switch without skipping a round
  10. 10
    ExplanationDistinguish a gap from a silent path
  11. 11
    ExampleEnter fast recovery with temporary inflation
  12. 12
    ExampleFinish recovery at the threshold
  13. 13
    ChallengeUse the flight size and deflate correctly
  14. 14
    ExplanationAverage the sawtooth window
  15. 15
    ExampleConvert the average to bits per second
  16. 16
    ConnectionSee why loss and RTT matter
  17. 17
    ChallengeChange two model inputs together
  18. 18
    Key InsightA high BDP magnifies slow recovery
  19. 19
    ChallengeCombine the rate estimate with flow control
  20. 20
    RecapRead growth, recovery, and limits as separate decisions
3

Follow fair sharing from an ideal pair to real users

12 steps
Trace AIMD convergence, calculate equality and utilization, and account for demand and connection count.

Save this lesson to follow every Walkthrough step by step.

  1. 1
    IntroductionAsk who receives the capacity
  2. 2
    ExplanationDraw the two target lines
  3. 3
    ExampleWatch the gap and ratio separately
  4. 4
    ChallengeChoose an update that changes relative sharing
  5. 5
    ConnectionKnow when the ideal convergence applies
  6. 6
    ExplanationUse Jain’s index for equality
  7. 7
    ExampleCalculate a score and utilization
  8. 8
    ExampleShare the remainder after a small demand
  9. 9
    ChallengeFind the right population for a fairness score
  10. 10
    Key InsightSenders and queues both shape the outcome
  11. 11
    ChallengeDistinguish equality from efficient AIMD behavior
  12. 12
    RecapSeparate an allocation from its explanation
4

Trace an early congestion warning

13 steps
Compare drop-tail, RED, and CoDel, then follow a CE mark through TCP and a proportional DCTCP response.

Save this lesson to follow every Walkthrough step by step.

  1. 1
    IntroductionA low loss count can hide a long wait
  2. 2
    ExampleMeasure the wait inside a large buffer
  3. 3
    ExplanationRED gives a probabilistic early warning
  4. 4
    ExplanationCoDel asks whether delay ever gets small
  5. 5
    ChallengeInterpret a delay history
  6. 6
    ConnectionSeparate flow service from queue delay control
  7. 7
    ExplanationMark a delivered packet
  8. 8
    ExampleClose the classic TCP feedback loop
  9. 9
    ChallengeHandle repeated echoes from one event
  10. 10
    ExampleScale a DCTCP response to marked traffic
  11. 11
    ConnectionL4S combines endpoint and queue behavior
  12. 12
    ChallengeExplain delivery without a timeout
  13. 13
    RecapFollow detection, marking, and response
5

Compare CUBIC growth with BBR’s path model

14 steps
Calculate CUBIC’s return curve, contrast Vegas with BBR, and separate pacing rate from in-flight limits.

Save this lesson to follow every Walkthrough step by step.

  1. 1
    IntroductionChoose what the controller should learn
  2. 2
    ExplanationStart with a gentler ordinary reduction
  3. 3
    ExampleFind the cubic return time
  4. 4
    ExampleEvaluate a point below the old peak
  5. 5
    Key InsightThe pure curve is only one candidate
  6. 6
    ChallengeUse the two different CUBIC memories
  7. 7
    ExampleLet Vegas infer queued segments
  8. 8
    ExplanationBuild BBR’s bandwidth-delay model
  9. 9
    ExampleCalculate the model before applying gains
  10. 10
    ConnectionProbe, then make room to measure
  11. 11
    ChallengeTranslate a model into control settings
  12. 12
    TipKeep version and feedback rules attached
  13. 13
    ChallengeDistinguish an RTT warning from a path model
  14. 14
    RecapCompare measurements, growth, and queueing
6

Follow QUIC from setup to congestion recovery

15 steps
Connect QUIC’s deployment choices with its streams, loss signals, recovery rules, and paced sending.

Save this lesson to follow every Walkthrough step by step.

  1. 1
    IntroductionChange the transport without abandoning its job
  2. 2
    ExplanationUnderstand why TCP changes can stall
  3. 3
    ConnectionProtect details that need to change
  4. 4
    ExampleCompare the first response time
  5. 5
    ExampleSeparate stream ordering from connection sharing
  6. 6
    ChallengeCorrect a claim about UDP-based transport
  7. 7
    ExplanationGive every transmission its own identity
  8. 8
    ExampleDetect a hole before probing for feedback
  9. 9
    ExampleCalculate the initial and minimum windows
  10. 10
    ChallengeReduce once for an old-flight episode
  11. 11
    ExampleFind a persistent-congestion duration
  12. 12
    ConnectionCarry ECN counts in ACKs
  13. 13
    TipCheck when bytes leave, not just how many
  14. 14
    ChallengeConnect independent delivery with a shared response
  15. 15
    RecapKeep deployment benefits and congestion duties together

Congestion Control practice questions

50 Practice Questions in 5 sets

Set 1: Connect rates, fairness, and transport feedback10 Practice Questions

Question 1 of 10

BBR estimates bandwidth at 32 Mbps and minimum RTT at 25 ms. With a congestion-window gain of 2, what is its model-based window cap?
  1. 100,000 bytes
  2. 200,000 bytes
  3. 800,000 bytes
  4. 1,600,000 bytes
Show answerHide answer
Answer: B
One BDP is 32 million bits/s times 0.025 s, or 800,000 bits, which is 100,000 bytes. A gain of 2 gives a 200,000-byte cap. The one-BDP amount is the queue-free path estimate; the cap is larger and does not mean BBR must pace at twice the bottleneck rate.

Question 2 of 10

What identifies a QUIC connection across a supported change of network address?
  1. A fixed port pair.
  2. A stream credit.
  3. A connection ID.
  4. A packet number.
Show answerHide answer
Answer: C
A connection ID lets QUIC identify a connection independently of its current addresses and ports, supporting migration with path validation. A fixed address-and-port tuple would tie identity to the old path. Stream credit controls receiving capacity and does not identify the whole connection.

Question 3 of 10

An empty 600,000-byte output buffer receives a steady 16 Mbps and sends 10 Mbps. How long until it fills?
  1. 0.30 s
  2. 0.48 s
  3. 0.80 s
  4. 1.25 s
Show answerHide answer
Answer: C
The surplus is 6 Mbps, or 750,000 bytes/s after division by 8. Filling 600,000 bytes therefore takes 0.80 s. Dividing the buffer by the full output rate instead gives 0.48 s, which is its full-buffer drain time with no new arrivals, not its fill time under this overload.

Question 4 of 10

A path has 60 Mbps bottleneck capacity and a 40 ms queue-free RTT. What amount in flight fills this idealized path without a standing queue?
  1. 300,000 bytes
  2. 2,400,000 bytes
  3. 30,000 bytes
  4. 7,500,000 bytes
Show answerHide answer
Answer: A
Multiplying 60 million bits/s by 0.04 s gives 2.4 million bits. Dividing by 8 gives a BDP of 300,000 bytes. The value 2,400,000 has the right numeric product but is in bits; calling it bytes would overestimate the queue-free in-flight amount eightfold.

Question 5 of 10

In an ideal one-ACK-per-segment slow start, cwnd starts at 2 MSS and stays below ssthresh. What is cwnd after three complete RTTs?
  1. 5 MSS
  2. 16 MSS
  3. 12 MSS
  4. 8 MSS
Show answerHide answer
Answer: B
The window doubles once per RTT, giving 2, 4, 8, then 16 MSS. The starting value is before the three rounds, so it is not counted as a completed doubling. A result of 5 MSS would add one per round, using congestion avoidance instead of slow start.

Question 6 of 10

A Reno sawtooth peaks at 40 segments with MSS=1,000 bytes and RTT=0.1 s. What average throughput does the simple model predict?
  1. 3.20 Mbps
  2. 0.30 Mbps
  3. 1.60 Mbps
  4. 2.40 Mbps
Show answerHide answer
Answer: D
The average window is 0.75 times 40, or 30 segments. That is 30,000 bytes each 0.1 s, giving 300,000 bytes/s or 2.40 Mbps. Using the full 40-segment peak gives 3.20 Mbps and overlooks the time spent at smaller windows after each reduction.

Question 7 of 10

A 15 Mbps link serves three flows with demands of 3, 5, and 20 Mbps. What is the max-min fair allocation in that order?
  1. 3, 5, and 7 Mbps.
  2. 3, 6, and 6 Mbps.
  3. 5, 5, and 5 Mbps.
  4. 3, 3, and 9 Mbps.
Show answerHide answer
Answer: A
The first equal share is 5 Mbps, but the first flow needs only 3. Of the remaining 12 Mbps, the second needs only 5, leaving 7 for the third. Giving 3, 6, and 6 exceeds the second flow’s demand, so it cannot be the feasible max-min allocation.

Question 8 of 10

A router changes an ECN-capable packet to CE and forwards it successfully. What should the receiver report in classic ECN-enabled TCP?
  1. Not-ECT in its acknowledgments.
  2. CWR in its acknowledgments.
  3. ECE in its acknowledgments.
  4. A duplicate ACK claiming data loss.
Show answerHide answer
Answer: C
The receiver echoes the congestion mark through the ECE flag. CWR belongs to the sender’s response and tells the receiver that the congestion window has been reduced. Since the packet was delivered, the mark itself creates no gap that requires a loss-reporting duplicate ACK.

Question 9 of 10

Two CUBIC flows have the same remembered peak and ordinary reduction, but different RTTs. What explains why their actual return times to the old peak can differ?
  1. The cubic function uses ACK count, so the shorter RTT advances its clock faster.
  2. The decrease factor grows with RTT, so the longer RTT starts from a smaller window.
  3. The remembered peak is divided by RTT before the cubic curve is evaluated.
  4. A Reno-friendly estimate can exceed the shared time-based cubic target.
Show answerHide answer
Answer: D
The pure cubic curve gives the same return time for the same peak and reduction. CUBIC also considers an RTT-dependent Reno-friendly estimate, which can dominate on a shorter-RTT path. Treating the cubic variable as an ACK count misses the separate role of that estimate.

Question 10 of 10

A QUIC connection uses 1,300-byte maximum datagrams and has cwnd=10,400 bytes. A congestion event occurs, then several more old-flight packets are declared lost before any recovery-sent packet is acknowledged. What cwnd should its default controller retain?
  1. 5,200 bytes
  2. 2,600 bytes
  3. 1,300 bytes
  4. 10,400 bytes
Show answerHide answer
Answer: A
The event halves cwnd to 5,200 bytes, above the two-datagram minimum of 2,600. Losses from the same pre-recovery flight do not cause additional reductions during recovery. Repeated halving down to the minimum would count one congestion episode as several separate events.
Set 2: Read congestion signals and window changes10 Practice Questions

Save this lesson to see every answer and practice every set.

Question 1 of 10

Two synchronized AIMD flows send at 9 and 3 Mbps. Each adds 1 Mbps, then both halve. What is their final rate difference?
  1. 6 Mbps
  2. 3 Mbps
  3. 4 Mbps
  4. 2 Mbps
Show answerHide answer

Save this lesson to see this answer.

Question 2 of 10

A router already has a queue. Its steady arrival rate then becomes exactly equal to its output rate. What happens to the existing queue?
  1. It drains until it is empty.
  2. It remains the same size.
  3. It keeps growing steadily.
  4. It drains at half speed.
Show answerHide answer

Save this lesson to see this answer.

Question 3 of 10

A packet crosses two links and is then dropped at the next router. What capacity has been wasted by this failed delivery?
  1. Only the output capacity of the dropping router.
  2. Only the input capacity of the first router.
  3. Only the capacity used to send a replacement.
  4. The capacity of both links it already crossed.
Show answerHide answer

Save this lesson to see this answer.

Question 4 of 10

A sender changes its rate using measured delivery rates and minimum RTT, without receiving router marks. How is this feedback classified?
  1. End-to-end and model-based.
  2. Router-assisted and loss-based.
  3. End-to-end and explicit-rate.
  4. Router-assisted and delay-based.
Show answerHide answer

Save this lesson to see this answer.

Question 5 of 10

A sender has cwnd=42,000 bytes, rwnd=27,000 bytes, and 19,000 unacknowledged bytes. How many additional bytes may it send now?
  1. 23,000 bytes
  2. 27,000 bytes
  3. 8,000 bytes
  4. 42,000 bytes
Show answerHide answer

Save this lesson to see this answer.

Question 6 of 10

A Reno sender is in congestion avoidance with enough data and one ACK per segment. About how much does cwnd grow over one RTT?
  1. One MSS in total.
  2. One MSS for each ACK.
  3. Half its current size.
  4. Its current size again.
Show answerHide answer

Save this lesson to see this answer.

Question 7 of 10

A Reno sender has 18 MSS outstanding when its third duplicate ACK arrives. Two more duplicate ACKs follow, then an ACK covering all outstanding data. What cwnd values occur at recovery entry, after the extra duplicates, and on exit?
  1. 9, 11, then 9 MSS.
  2. 12, 14, then 14 MSS.
  3. 12, 14, then 7 MSS.
  4. 12, 14, then 9 MSS.
Show answerHide answer

Save this lesson to see this answer.

Question 8 of 10

What does CoDel measure to decide whether a queue is persistently too long?
  1. The sender’s advertised receive window.
  2. The moving average of queue length.
  3. The time packets spend in the queue.
  4. The total number of bytes sent upstream.
Show answerHide answer

Save this lesson to see this answer.

Question 9 of 10

CUBIC has a fully used window of 80 MSS when an ECN congestion event occurs, with no timeout. What window does its ordinary reduction produce?
  1. 24 MSS
  2. 40 MSS
  3. 1 MSS
  4. 56 MSS
Show answerHide answer

Save this lesson to see this answer.

Question 10 of 10

Two QUIC streams share one connection. A lost packet carried data only for stream A; later packets containing stream B data arrive. How can the loss affect stream B?
  1. Its ordered delivery can continue, but shared congestion control may reduce its rate.
  2. Its ordered delivery must wait for A, but its sending rate remains independent.
  3. Its delivery and sending rate both remain independent of the connection’s loss.
  4. Its ordered delivery can continue only after a separate congestion window is created.
Show answerHide answer

Save this lesson to see this answer.

Set 3: Diagnose queues and recovery episodes10 Practice Questions

Save this lesson to see every answer and practice every set.

Question 1 of 10

A link carries 24 Mbps of equally sized packets. One quarter repeat data already carried by this link. What is the upper bound on its rate of new data before headers and other losses?
  1. 6 Mbps
  2. 18 Mbps
  3. 20 Mbps
  4. 24 Mbps
Show answerHide answer

Save this lesson to see this answer.

Question 2 of 10

A wireless path loses packets while measured RTT stays near its queue-free value. Why can a loss-based sender reduce its rate even without a growing queue?
  1. The receive window must shrink whenever a radio frame is corrupted.
  2. The bottleneck rate is inferred solely from the number of duplicate ACKs.
  3. Loss-based control interprets missing packets as congestion feedback.
  4. The router sends an explicit rate command after every damaged frame.
Show answerHide answer

Save this lesson to see this answer.

Question 3 of 10

A NewReno sender has 28 MSS in flight at recovery entry. Its first advancing ACK leaves some of that original data unacknowledged. A second ACK covers all of it. What threshold and recovery behavior fit NewReno?
  1. Threshold 14 MSS; stay after the first ACK and exit after the second.
  2. Threshold 14 MSS; exit after the first ACK and halve again for each hole.
  3. Threshold 17 MSS; stay after the first ACK and exit after the second.
  4. Threshold 7 MSS; restart slow start when the first ACK advances.
Show answerHide answer

Save this lesson to see this answer.

Question 4 of 10

A long-lived Reno-like transfer has MSS=1,200 bytes, RTT=80 ms, loss fraction of 0.0004, rwnd=40,000 bytes, and an 18 Mbps bottleneck. About what upper rate follows from the loss model and these limits?
  1. 7.32 Mbps
  2. 18.00 Mbps
  3. 0.50 Mbps
  4. 4.00 Mbps
Show answerHide answer

Save this lesson to see this answer.

Question 5 of 10

Two flows both multiply their rates by 0.5. What property of their rates stays unchanged?
  1. Their absolute difference.
  2. Their ratio to each other.
  3. Their combined throughput.
  4. Their distance from full capacity.
Show answerHide answer

Save this lesson to see this answer.

Question 6 of 10

Two flows on a 20 Mbps link each deliver 2 Mbps. What are their Jain index and combined utilization?
  1. J=0.5; utilization = 20%.
  2. J=1; utilization = 100%.
  3. J=1; utilization = 20%.
  4. J=0.2; utilization = 100%.
Show answerHide answer

Save this lesson to see this answer.

Question 7 of 10

A 1,500,000-byte drop-tail buffer precedes a 30 Mbps uplink. A large upload keeps it nearly full while a call stutters. The receiver advertises ample space. What best explains the delay and a suitable signaling change?
  1. About 50 ms of delay; increase the receive window to drain the router.
  2. About 400 ms of delay; add AQM to signal a standing queue earlier.
  3. About 50 ms of delay; increase the output buffer to absorb the upload.
  4. About 400 ms of delay; disable congestion reductions to empty the queue.
Show answerHide answer

Save this lesson to see this answer.

Question 8 of 10

A DCTCP sender has a smoothed marked fraction α=0.4 and cwnd=60 MSS. What window follows its proportional reduction?
  1. 24 MSS
  2. 30 MSS
  3. 36 MSS
  4. 48 MSS
Show answerHide answer

Save this lesson to see this answer.

Question 9 of 10

Which BBR state primarily drains the queue created while initially discovering bandwidth?
  1. Drain.
  2. Startup.
  3. ProbeRTT.
  4. ProbeBW Up.
Show answerHide answer

Save this lesson to see this answer.

Question 10 of 10

After the QUIC handshake, packet 62 is acknowledged while packet 59 remains unacknowledged in the same packet number space. Under the recommended packet threshold, how is packet 59 treated?
  1. It remains pending until three duplicate ACK frames arrive.
  2. It is lost only if the ACK delay field equals zero.
  3. It is declared lost because the number gap reaches three.
  4. It remains pending until a probe timeout expires.
Show answerHide answer

Save this lesson to see this answer.

Set 4: Apply the rules when conditions change10 Practice Questions

Save this lesson to see every answer and practice every set.

Question 1 of 10

An initially empty 450,000-byte buffer receives 22 Mbps and sends 16 Mbps for 0.4 s. Arrivals then fall to 10 Mbps. How long after that change until the queue empties, assuming steady rates?
  1. 0.15 s
  2. 0.30 s
  3. 0.40 s
  4. 0.60 s
Show answerHide answer

Save this lesson to see this answer.

Question 2 of 10

A router marks congestion in a packet, and the receiver echoes it in an ACK. Which broad approach supplies the congestion feedback?
  1. End-to-end loss inference.
  2. End-to-end delay inference.
  3. Receiver-only flow control.
  4. Network-assisted control.
Show answerHide answer

Save this lesson to see this answer.

Question 3 of 10

A single continuously sending flow crosses a 40 Mbps bottleneck with 50 ms queue-free RTT. It has 400,000 bytes in flight; rwnd is larger and a standing FIFO queue accounts for all excess. What queueing delay and measured RTT fit this model?
  1. 30 ms queueing; 80 ms RTT.
  2. 80 ms queueing; 130 ms RTT.
  3. 50 ms queueing; 100 ms RTT.
  4. 30 ms queueing; 50 ms RTT.
Show answerHide answer

Save this lesson to see this answer.

Question 4 of 10

A teaching trace starts at cwnd=2 MSS and ssthresh = 16 MSS. It uses one ACK per segment and switches to congestion avoidance at equality. What is cwnd after five complete RTTs?
  1. 64 MSS
  2. 18 MSS
  3. 32 MSS
  4. 20 MSS
Show answerHide answer

Save this lesson to see this answer.

Question 5 of 10

A Reno sender has cwnd=30 MSS but only 16 MSS outstanding. Three duplicate ACKs arrive, followed by two more, then an ACK covering all outstanding data. What cwnd values occur at recovery entry, after the extra duplicates, and on exit?
  1. 18, 20, then 15 MSS.
  2. 11, 13, then 13 MSS.
  3. 11, 13, then 8 MSS.
  4. 8, 10, then 8 MSS.
Show answerHide answer

Save this lesson to see this answer.

Question 6 of 10

A 24 Mbps link is fully shared by similar, saturated connections. One user has three connections and another has one. What per-user rates and Jain index over the two users follow from equal per-connection sharing?
  1. 12 and 12 Mbps; J=1.00.
  2. 18 and 6 Mbps; J=0.80.
  3. 18 and 6 Mbps; J=1.00.
  4. 6 and 18 Mbps; J=0.50.
Show answerHide answer

Save this lesson to see this answer.

Question 7 of 10

One queue briefly exceeds 5 ms of waiting but drains within 40 ms. Another never falls below 8 ms during 100 ms. How should CoDel distinguish them using its standard target and interval?
  1. Signal both because each exceeds 5 ms at least once.
  2. Signal only the first because it changes delay faster.
  3. Signal neither until each physical buffer overflows.
  4. Treat the second as persistent excess delay, unlike the first.
Show answerHide answer

Save this lesson to see this answer.

Question 8 of 10

CUBIC’s previous peak is 160 segments. A new ordinary loss occurs at a fully used window of 120 before that peak is regained. With fast convergence, what are the new remembered peak and reduced current window?
  1. 102 segments and 84 segments.
  2. 120 segments and 84 segments.
  3. 102 segments and 60 segments.
  4. 84 segments and 102 segments.
Show answerHide answer

Save this lesson to see this answer.

Question 9 of 10

Vegas has cwnd=72 segments, base RTT=30 ms, and measured RTT=40 ms. How many of its segments does its rate-difference method estimate are queued?
  1. 6 segments
  2. 12 segments
  3. 18 segments
  4. 24 segments
Show answerHide answer

Save this lesson to see this answer.

Question 10 of 10

A resumed QUIC client sends an eligible request in its first flight over a 55 ms RTT path. With negligible processing and no loss, when can its first response bytes arrive?
  1. After about 0 ms.
  2. After about 110 ms.
  3. After about 165 ms.
  4. After about 55 ms.
Show answerHide answer

Save this lesson to see this answer.

Set 5: Reason across models and transport behavior10 Practice Questions

Save this lesson to see every answer and practice every set.

Question 1 of 10

A 10 Mbps upstream link previously used 30% of capacity on packets later dropped downstream and 20% on unneeded duplicates, with the categories disjoint. A control change lowers these to 10% and 5%; the link stays full. Ignoring headers, what is the increase in capacity carrying useful first copies that arrive?
  1. 1.5 Mbps
  2. 2.0 Mbps
  3. 5.0 Mbps
  4. 3.5 Mbps
Show answerHide answer

Save this lesson to see this answer.

Question 2 of 10

A connection is limited by its 96,000-byte receive window over a 120 ms RTT path. cwnd and bottleneck capacity are larger. What receive window would support twice the present rate at the same RTT?
  1. 48,000 bytes
  2. 192,000 bytes
  3. 96,000 bytes
  4. 768,000 bytes
Show answerHide answer

Save this lesson to see this answer.

Question 3 of 10

A slow-start sender begins a round with 12 MSS. A receiver ACKs every two full segments, and each ACK increases cwnd by one MSS. There is no loss and ssthresh is much higher. What window results after two idealized complete rounds using that same ACK rule?
  1. 24 MSS
  2. 48 MSS
  3. 27 MSS
  4. 30 MSS
Show answerHide answer

Save this lesson to see this answer.

Question 4 of 10

A Reno sender’s retransmission timer expires for outstanding data. What congestion window starts the resulting slow start?
  1. One SMSS.
  2. Two SMSS.
  3. Half FlightSize.
  4. ssthresh plus three SMSS.
Show answerHide answer

Save this lesson to see this answer.

Question 5 of 10

For two long-lived Reno-like transfers with the same MSS, connection B has twice A’s RTT. What must happen to B’s loss fraction for the loss-rate model to predict twice A’s throughput?
  1. It must be one quarter of A’s.
  2. It must be one eighth of A’s.
  3. It must be one half of A’s.
  4. It must be one sixteenth of A’s.
Show answerHide answer

Save this lesson to see this answer.

Question 6 of 10

Two synchronized flows start at 10 and 2 Mbps on a 16 Mbps link. Both add 1 Mbps per step, and both halve whenever their sum first exceeds 16. What rates follow the second halving?
  1. 5.25 and 3.25 Mbps.
  2. 4.5 and 3.5 Mbps.
  3. 5.5 and 3.5 Mbps.
  4. 6.5 and 2.5 Mbps.
Show answerHide answer

Save this lesson to see this answer.

Question 7 of 10

A DCTCP flow has α=0.2, a newly measured marked-byte fraction of 0.6, g=1/4, and cwnd=80 MSS. What alpha and window result after updating alpha and then applying its reduction?
  1. Alpha 0.6; window 56 MSS.
  2. Alpha 0.3; window 68 MSS.
  3. Alpha 0.3; window 56 MSS.
  4. Alpha 0.2; window 72 MSS.
Show answerHide answer

Save this lesson to see this answer.

Question 8 of 10

BBR estimates an 80 Mbps bottleneck and 40 ms minimum RTT. It enters ProbeBW Up with pacing gain 1.25 and a window gain of 2. What pacing rate and window cap follow, and can this phase create queueing?
  1. 160 Mbps and 800,000 bytes; it cannot create a queue.
  2. 100 Mbps and 400,000 bytes; it cannot create a queue.
  3. 100 Mbps and 800,000 bytes; it can create a queue.
  4. 160 Mbps and 400,000 bytes; it can create a queue.
Show answerHide answer

Save this lesson to see this answer.

Question 9 of 10

QUIC has smoothed RTT=80 ms, RTT variation = 15 ms, maximum ACK delay = 20 ms, and timer granularity = 1 ms. After a prior RTT sample, a continuous 510 ms interval meets all other persistent-congestion loss conditions. With 1,250-byte maximum datagrams, what should the default controller do?
  1. Keep the window because the threshold is 540 ms.
  2. Set the window to 1,250 bytes after the interval.
  3. Halve repeatedly for every lost datagram in the interval.
  4. Reduce the window to its 2,500-byte minimum.
Show answerHide answer

Save this lesson to see this answer.

Question 10 of 10

A small object finishes while TCP is still in slow start. Why is a long-lived sawtooth throughput estimate a poor predictor of its completion time?
  1. The object has not entered repeated steady-state growth and loss cycles.
  2. The object is exempt from the receiver’s advertised window during startup.
  3. The RTT affects only loss recovery once congestion avoidance has begun.
  4. The initial window is replaced by the bottleneck’s full BDP on connection setup.
Show answerHide answer

Save this lesson to see this answer.

Stuck on your own question? Homework Help

Key Terms

95 Key Terms, each with its definition

A

ACK clocking
ACK clocking is the timing of new sending by returning acknowledgments, linking replacement traffic to the bottleneck’s delivery pace.
As one segment leaves the path and its ACK returns, the sender gains space for a replacement.
ACK delay
ACK delay reports how long a QUIC receiver waited before acknowledging, supporting validated and bounded post-handshake RTT adjustments.
Subtracting eligible receiver waiting helps separate delayed acknowledgment from time spent on the path.
ACK range
An ACK range reports a contiguous group of received QUIC packet numbers, allowing the sender to identify received transmissions and gaps.
Several received ranges can reveal multiple missing packets without relying on one cumulative boundary.
Active queue management (AQM)
Active queue management, AQM, drops or marks packets before overflow to signal congestion and limit persistent queueing.
A router can ask a sender to back off while space remains in the physical packet buffer.
Additive increase
Additive increase adds a fixed amount per control step; in Reno congestion avoidance, the window gains about one SMSS per RTT.
Two matching Reno flows add similar segment amounts per round even if one currently has a larger window.
AIMD
AIMD combines additive increase with multiplicative decrease, repeatedly probing capacity and proportionally backing off on congestion.
With matching feedback, two flows preserve their gap during growth and shrink it at each reduction.
Appropriate Byte Counting
Appropriate Byte Counting uses newly acknowledged byte counts in window growth, reducing its dependence on how many ACKs the receiver sends.
An ACK covering multiple segments carries more delivery information than a one-segment ACK.

B

Bandwidth-delay product (BDP)
The bandwidth-delay product, BDP, is bottleneck bandwidth times queue-free RTT, estimating the data in flight needed to fill that path.
A 10 Mbps path with 80 ms minimum RTT needs about 100,000 bytes in flight before a standing queue forms.
Base RTT
The base RTT is the smallest RTT used as an estimate of a path with little or no queueing, providing a reference for delay-based control.
Vegas compares a 40 ms measured RTT with a 30 ms base RTT to estimate how much data is waiting.
BBR
BBR is a model-based controller estimating bottleneck bandwidth and minimum RTT, then using pacing and in-flight limits to control sending.
Its bandwidth estimate and minimum RTT define a BDP even when its current measured RTT includes queueing.
Bottleneck
A bottleneck is the link with the least capacity available to particular traffic along its path, limiting that traffic’s delivery rate.
A fast local network feeds a slower access link, where the combined outbound traffic begins to wait.
Bufferbloat
Bufferbloat is persistent excessive delay caused by oversized, occupied buffers, often sustained by loss-based traffic probing for capacity.
A video call becomes sluggish during an upload because its packets wait behind a deep router backlog.

C

Chiu–Jain diagram
A Chiu–Jain diagram plots two flow rates to show how control updates move an allocation toward or away from efficient, equal sharing.
A synchronized halving moves the rate point toward the origin along a ray preserving its rate ratio.
Cliff
The cliff is the region beyond which increasing offered load reduces end-to-end throughput as drops and wasted transmissions dominate.
The network carries more traffic after another sender starts, yet useful delivered throughput falls.
Congestion
Congestion occurs when sustained traffic exceeds the capacity available in part of a network, causing queues and eventually losses.
Several inputs together overload one router output even though each input alone is below its capacity.
Congestion avoidance
Congestion avoidance is Reno’s probing phase in which cwnd increases by about one SMSS per RTT until congestion feedback interrupts it.
A window of 25 MSS grows to about 26 MSS over a loss-free round instead of doubling to 50.
Congestion collapse
Congestion collapse is a state of severe overload where the network stays busy but delivers very little new useful data.
Upstream links carry many packets that are later dropped, leaving little capacity for successful delivery.
Congestion experienced (CE)
Congestion experienced, CE, is the IP ECN codepoint 11 indicating that a router marked the packet as a congestion warning.
A delivered CE packet makes the receiver echo congestion without claiming that its data is missing.
Congestion signal
A congestion signal is loss, delay, or explicit feedback that a controller interprets when deciding whether to change its sending behavior.
A rise above the path’s minimum RTT can warn of a queue before any packet is discarded.
Congestion window (cwnd)
The congestion window, cwnd, is sender-maintained state that limits the bytes of unacknowledged data allowed in flight for congestion control.
The sender can reduce cwnd even while the receiver continues advertising plenty of free buffer space.
Congestion Window Reduced (CWR)
Congestion Window Reduced, CWR, is the TCP flag telling the receiver that the sender has responded to a classic ECN warning.
The receiver stops setting ECE after a new data segment arrives carrying the sender’s CWR flag.
Connection migration
Connection migration lets a supported QUIC connection continue across an address or port change, using connection IDs and path validation.
A phone can preserve its connection while moving from Wi-Fi to cellular rather than starting a new one.
Controlled Delay (CoDel)
Controlled Delay, CoDel, signals congestion when packet waiting time remains persistently above a target over a measurement interval.
A minimum sojourn time above 5 ms for a 100 ms interval indicates a standing queue under standard settings.
CUBIC
CUBIC is a loss-based congestion controller whose basic window target is a cubic function of time around a remembered congestion point.
A large-BDP flow can regain its reduced window faster than Reno’s one-segment-per-RTT growth allows.
CUBIC return time K
The CUBIC return time K is the elapsed time at which the basic cubic curve reaches its remembered Wmax after an ordinary reduction.
With Wmax of 100 segments and the standard constants, the pure curve returns after about 4.22 s.

D

Data Center TCP (DCTCP)
Data Center TCP, DCTCP, scales window reductions using the smoothed fraction of marked bytes in a compatible controlled network.
When alpha is 0.2, it retains 90% of its window instead of halving on the presence of any mark.
Delayed acknowledgment
A delayed acknowledgment covers more than one received segment or waits briefly before being sent, reducing the number of ACK packets.
One ACK for each two full segments slows growth under the simple one-increase-per-ACK slow-start rule.
Drop-tail
Drop-tail is a FIFO queue policy that discards arriving packets when the buffer is full, making physical overflow its congestion signal.
Several flows can lose packets at nearly the same time when their shared drop-tail buffer fills.

E

ECN-capable transport (ECT)
An ECN-capable transport declares through an ECT codepoint that its packet can carry a router’s congestion-experienced mark.
An AQM can change ECT(0) to CE, while Not-ECT traffic needs a drop when congestion must be signaled.
ECN-Echo (ECE)
ECN-Echo, ECE, is the TCP flag a receiver uses in classic ECN feedback to report congestion marks until the sender acknowledges its response.
Several ECE ACKs can echo the same event while the sender’s CWR segment is still traveling.
Efficiency line
The efficiency line in the two-flow diagram contains rate pairs whose sum equals the shared bottleneck’s available capacity.
On a 14 Mbps link, both 7 and 7 Mbps and 12 and 2 Mbps lie on the efficiency line.
End-to-end congestion control
End-to-end congestion control adjusts traffic using endpoint observations, without explicit congestion feedback supplied by routers.
Reno interprets a missing segment as a reason to reduce its window even without an ECN mark.
Explicit congestion notification (ECN)
Explicit congestion notification, ECN, lets a router mark an ECN-capable packet to signal congestion while still forwarding its data.
The receiver can report a router’s warning even though the marked packet arrived successfully.

F

Fair queuing
Fair queuing separates traffic into flow queues and gives them service opportunities, allowing a router to enforce per-flow sharing.
An interactive flow need not wait behind an entire bulk flow’s backlog when each has its own serviced queue.
Fairness line
The fairness line in the two-flow diagram contains rate pairs where both flows have the same rate, regardless of their total utilization.
Rates of 2 and 2 Mbps lie on the fairness line even when the shared link can carry far more.
Fast convergence
Fast convergence lowers CUBIC’s remembered peak when congestion occurs below its previous peak, helping adjust to reduced available capacity.
A new flow joining a bottleneck can cause the old flow to revise the peak shaping its future growth.
Fast recovery
Fast recovery is Reno’s duplicate-ACK recovery process that temporarily inflates cwnd and then deflates it to ssthresh on an advancing ACK.
A threshold of 10 MSS gives an entry window of 13 MSS, before later deflation to 10 MSS.
Fast retransmit
Fast retransmit resends a segment after the third duplicate ACK identifies a likely gap, avoiding a wait for the retransmission timer.
Later segments arrive beyond a missing one and generate enough duplicate ACKs to prompt immediate repair.
FlightSize
FlightSize is the amount of data sent but not yet acknowledged, which can be smaller than the congestion window when the application sends less.
With cwnd of 30 MSS but only 12 MSS outstanding, Reno’s loss threshold is based on the 12-MSS flight.
Flow control
Flow control limits sending to the receiver’s available buffering capacity, protecting that endpoint from data it cannot accept.
A receiver advertises a smaller window when its application is slow to consume incoming data.

G

Global synchronization
Global synchronization occurs when many flows experience losses and reduce their windows together, producing a shared utilization dip.
Random early signaling can spread congestion responses instead of making all senders halve at once.
Goodput
Goodput is the rate of useful data delivered to the receiving application, counting each piece once and excluding protocol overhead.
Receiving the same application bytes twice adds no extra goodput after the first useful delivery.

H

Head-of-line blocking
Head-of-line blocking delays later ordered data behind a missing earlier part; TCP’s single byte stream can impose this across unrelated requests.
A lost TCP segment can delay a later image response even when all of that response’s own bytes arrived.
High-speed recovery problem
The high-speed recovery problem is Reno’s slow restoration of a large reduced window because congestion avoidance adds only one segment per RTT.
Recovering thousands of missing window segments can take minutes on a path with a long round-trip time.

I

Initial window
The initial window is the congestion-window limit a sender uses when a connection begins, before learning the available path capacity.
A larger initial window can let a small transfer finish in fewer startup rounds when the path supports it.

J

Jain’s fairness index
Jain’s fairness index measures equality of nonnegative rates with a nonzero total, reaching 1 for equality and 1/n for one winner among n flows.
Two equally slow flows score 1 even if together they leave most of the bottleneck capacity unused.

K

Knee
The knee is the region of a load-performance curve beyond which extra offered load adds little throughput but sharply increases delay.
An additional upload produces almost no total throughput gain but makes every interactive flow wait longer.

L

L4S
L4S is an experimental architecture combining scalable congestion control, ECT(1), and coupled queue management for very low queueing delay.
Frequent shallow marks guide scalable traffic while a coupled queue design accommodates classic traffic.
Loss fraction
The loss fraction is the proportion of transmitted segments lost, represented as a fraction rather than a percentage in the throughput model.
A loss fraction of 0.001 means one segment in a thousand, or 0.1%, before considering timeout effects.

M

Mathis approximation
The Mathis approximation estimates long-lived Reno-like throughput from MSS, RTT, and loss fraction under simplified steady-state conditions.
At unchanged loss, doubling RTT halves the predicted rate even when the physical link is faster.
Max-min fairness
Max-min fairness allocates capacity so increasing one flow requires reducing a flow with an equal or smaller allocation.
A low-demand flow gets what it needs, then the remaining capacity is divided among the unsatisfied flows.
Maximum segment size (MSS)
The maximum segment size, MSS, is the largest TCP application-data payload in one segment, excluding TCP and IP headers.
A segment with 1,460 payload bytes needs additional bytes for its TCP and IP headers on the link.
Multiplicative decrease
Multiplicative decrease scales a congestion window or sending rate by a fixed factor, removing a larger absolute amount from a larger flow.
Halving rates of 12 and 4 Mbps gives 6 and 2 Mbps, shrinking the gap while preserving their ratio.

N

Network-assisted congestion control
Network-assisted congestion control uses explicit router feedback to tell a sender that it should adjust traffic entering the path.
An AQM marks a packet and the receiver echoes the warning to the sender in an acknowledgment.
NewReno
NewReno improves Reno recovery by repairing the next missing segment after a partial ACK and staying in recovery through the original flight.
Two losses in one flight can be repaired without an immediate new window reduction after the first repair.

O

Offered load
The offered load is the total traffic senders inject into a network, including new data, retransmissions, and unneeded repeats.
A retry raises offered load even when it carries application data already sent in an earlier packet.
Output queue
An output queue is a router buffer holding packets that are waiting for transmission on a particular outgoing link.
A packet behind 200,000 bytes waits while the output link transmits those bytes before it.

P

Pacing
Pacing spreads packet transmissions over time to follow a target rate and avoid sending an entire permitted window as one burst.
An application spaces outgoing packets through the round instead of releasing them all when an ACK arrives.
Pacing gain
A pacing gain multiplies BBR’s estimated bottleneck bandwidth to choose a sending rate for a particular probing or draining phase.
A gain of 1.25 on a 40 Mbps estimate targets 50 Mbps during a bandwidth-probing phase.
Packet number space
A packet number space is a QUIC numbering context within which transmitted packet numbers increase and are never reused.
Resent stream data gets a new packet number instead of reusing the number of the lost transmission.
Packet threshold
The packet threshold declares a QUIC packet lost once a sufficiently later packet is acknowledged, with a recommended number gap of three.
An ACK of packet 24 can establish threshold loss for still-unacknowledged packet 21 in the same space.
Parallel connections
Parallel connections are multiple simultaneous transport connections used by one application, each potentially competing for a separate flow share.
One user with four comparable connections can receive more total capacity than a user with only one.
Partial acknowledgment
A partial acknowledgment advances the cumulative ACK but leaves some data outstanding from the flight present when recovery began.
NewReno treats such an ACK as evidence of another hole and continues recovery instead of leaving early.
Persistent congestion
Persistent congestion is a qualifying long QUIC loss interval exceeding its RTT-based duration threshold, triggering reduction to the minimum window.
A sustained run of lost acknowledgment-eliciting packets can reduce cwnd to two maximum-size datagrams.
Probe timeout (PTO)
A probe timeout, PTO, prompts QUIC to send acknowledgment-eliciting traffic when feedback stalls, without itself collapsing the congestion window.
A probe can restore feedback before the sender has enough evidence to declare persistent congestion.
ProbeBW
ProbeBW is BBR’s bandwidth-probing state, using phases that test for more capacity and then drain or maintain in-flight traffic.
The Up phase can build a brief queue by pacing above the current estimate before a slower phase follows.
ProbeRTT
ProbeRTT reduces BBR’s in-flight data to refresh the minimum-RTT estimate, with duration and round-trip conditions in the version 3 draft.
A temporarily reduced backlog gives the sender a chance to observe the path with less queueing delay.
Protocol ossification
Protocol ossification makes changes hard to deploy because existing network devices or implementations depend on the protocol’s current form.
A middlebox that rejects unfamiliar TCP flags can prevent two capable endpoints from using an extension.

Q

QUIC
QUIC is a secure transport over UDP that provides reliable streams, flow control, and congestion control, usually through a user-space library.
An application update can ship a QUIC transport improvement without waiting for an operating system change.
QUIC stream
A QUIC stream is an independently ordered byte stream within a connection, allowing delivery without waiting for gaps on unrelated streams.
Loss confined to stream A need not stop received bytes on stream B from reaching its application.

R

Random Early Detection (RED)
Random Early Detection, RED, signals congestion with a probability that rises as average queue length crosses configured thresholds.
A short burst may pass because the queue-length average rises more slowly than the instantaneous peak.
Rate-based control
Rate-based control chooses a sending rate directly, often spacing packets over time and also bounding the amount allowed in flight.
A controller targets 15 Mbps even though its separate in-flight cap could permit a short burst.
Receive window (rwnd)
The receive window, rwnd, is the receiver-advertised limit used for TCP flow control to restrict outstanding data the receiver can accept.
A 20,000-byte rwnd can limit sending even when cwnd would permit 60,000 bytes in flight.
Recovery period
A recovery period groups QUIC congestion response so old-flight losses do not repeatedly reduce cwnd before a recovery-sent packet is acknowledged.
Two more packets from before recovery can be lost without causing two additional window halvings.
Reno-friendly region
The Reno-friendly region is CUBIC behavior where an RTT-dependent AIMD estimate exceeds the cubic target and determines growth.
A short-RTT CUBIC flow can recover before the pure time-based curve would return to its old peak.
Retransmission
A retransmission is another transmission of previously sent data, used by a reliable transport to recover data believed to be missing.
Repairing a lost segment uses link capacity that could otherwise have carried new application bytes.
Retransmission timeout (RTO)
A retransmission timeout occurs when acknowledgment for outstanding data fails to arrive before its timer, triggering repair and a cautious restart.
Reno returns to a one-segment window after its timer expires, even if the old congestion window was large.
Round-trip time (RTT)
The round-trip time, RTT, is the time for a transmission to reach the peer and its acknowledgment to return, including relevant waiting.
A growing router queue raises measured RTT even though the physical propagation path has not changed.
RTT unfairness
RTT unfairness is unequal sharing caused by different round-trip times, which can give shorter-RTT Reno-like flows more frequent growth.
At equal loss, a 25 ms flow can have a higher modeled throughput than a 100 ms competitor.

S

Sawtooth model
The sawtooth model approximates Reno’s repeated linear window growth and halving, giving an average window of three quarters of the peak.
A peak of 20 segments corresponds to about 15 segments on average when the model’s conditions hold.
Selective acknowledgment (SACK)
Selective acknowledgment, SACK, reports received byte blocks beyond the cumulative ACK so a TCP sender can identify multiple gaps.
Received blocks on either side of two holes help the sender choose which data still needs retransmission.
Slow start
Slow start increases cwnd by up to one SMSS per new-data ACK, giving roughly exponential growth when a fully used window is acknowledged.
With one ACK per segment, an initial window of 2 MSS grows to about 4 MSS after one full RTT.
Slow-start threshold (ssthresh)
The slow-start threshold, ssthresh, is sender state selecting slow start below it and congestion avoidance above it, with either at equality.
A trace reaching 8 MSS can switch to one-MSS-per-RTT growth when its threshold is also 8 MSS.
Sojourn time
A packet’s sojourn time is the time it spends in a queue between being enqueued and leaving that queue for transmission.
CoDel timestamps a packet at arrival and uses its waiting duration when deciding whether delay persists.
Standing queue
A standing queue is a persistent backlog that does not drain between bursts, adding delay even when the output remains fully utilized.
During a large transfer, the smallest observed queueing delay stays high instead of returning near zero.

T

TCP Vegas
TCP Vegas uses the difference between expected and measured delivery rates to estimate queued data and adjust its window through delay feedback.
Rising RTT can make Vegas back off while a loss-based competitor continues filling their shared queue.
TCP-friendly traffic
TCP-friendly traffic uses no more bandwidth than a comparable TCP flow under the same network conditions, supporting fair coexistence.
An application can use a TCP-based rate equation to avoid overwhelming responsive TCP transfers.
Throughput
Throughput is the rate at which packets or bytes are delivered, measured at a stated point and layer in the network.
A busy link’s throughput can remain high while the application receives much less new useful data.
Time threshold
The time threshold detects QUIC loss from elapsed sending time once later delivery is known, using a recommended RTT multiplier of 9/8.
The sender compares packet age with the larger of its latest and smoothed RTT, scaled by that factor.

U

Unneeded retransmission
An unneeded retransmission sends data again even though the original was only delayed or its acknowledgment had not yet returned.
A long queue can outlast the sender’s timer, causing a replacement while the original remains in transit.

W

Window gain
A window gain multiplies BBR’s estimated BDP to set an in-flight data cap, separate from the gain that sets its paced sending rate.
A two-BDP cap permits extra outstanding data without directly commanding a rate of twice the bandwidth.
Window inflation
Window inflation temporarily adds space to Reno’s recovery window for duplicate ACKs that indicate later packets have left the network.
An additional duplicate ACK during Reno fast recovery adds one SMSS before the window is later deflated.
Window-based control
Window-based control limits the amount of unacknowledged data in flight, allowing new transmissions as acknowledgments free space.
A sender with a full congestion window waits for returning ACKs before adding more ordinary data.
Wmax
Wmax is CUBIC’s remembered window near a congestion event, used to shape the curve around a previous operating point.
Fast convergence can lower Wmax when a new loss occurs before the earlier peak is regained.

#

0-RTT early data
0-RTT early data lets a resumed QUIC client send eligible application data before waiting for handshake completion, with replay risks to manage.
Sending a request immediately can save setup delay, but the response still needs a round trip to arrive.

About this lesson

By StudeliReport a mistake

Make your own Study Materials

Turn your notes, slides and documents into Study Guides, Practice Questions, Flashcards and 6 more tools.

Get Started