🪴 Quartz 3

Search IconIcon to open search

TCP BBR

Last updated February 1, 2022

Source

Intuition

Why does congestion occur

Identifying Bottleneck

Algorithm

  1. When an ack is received Each ack provides new RTT and average delivery rate measurements that update the RTprop and BtlBw estimates.
  2. When data is sent To match the packet-arrival rate to the bottleneck link’s departure rate, BBR paces every data packet. - pacing_rate is BBR’s primary control parameter. - cwnd_gain, bounds inflight to a small multiple of the BDP to handle common network and receiver pathologies
  3. Steady-state behavior
    1. BBR minimizes delay by spending most of its time with one BDP in flight, paced at the BtlBw estimate. This moves the bottleneck to the sender so it can’t observe BtlBw increases.
    2. BBR periodically spends an RTprop interval at a pacing_gain > 1, which increases the sending rate and inflight. If BtlBw hasn’t changed, then a queue is created at the bottleneck, increasing RTT, which keeps deliveryRate constant. (This queue is removed by sending at a compensating pacing_gain < 1 for the next RTprop.)
    3. If BtlBw has increased, deliveryRate increases and the new max immediately increases the BtlBw filter output, increasing the base pacing rate. Thus, BBR converges to the new bottleneck rate exponentially fast.

Single BBR Flow Startup Behaviour

1
2
3
graph TD;
Startup-->Drain;
Drain-->ProbeBW;

References

ACM Benchmarking blog Spotify Engineering Blog Dropbox Engineering Blog Discussion Google Group

#networking #congestioncontrol #Bufferbloat


Interactive Graph