This project compares the performance of TCP BBRv1 and TCP BBRv3 congestion control algorithms using Google's official BBR implementation and the NEST framework.
bbr-projects/
├── bbr1_experiments/ # BBRv1-based test plots
├── bbrv3_experiements/ # BBRv3-based test plots
├── bbr_testcases/ # NEST-compatible topologies and flows (scripts)
├── bbr-comparisons/ # Analysis and output plots
└── README.md # Setup and usage documentationFollow the official BBRv3 Google guide or steps below to enable BBRv3 in your Linux kernel.
git clone https://github.com/google/bbr.git -b v3
cd bbrmake defconfig
make menuconfig
# Enable BBR and advanced congestion controls:
# → Networking support
# → Networking options
# → TCP: advanced congestion control
# → Select BBR and mark it as built-in (*) or module (M)
make -j$(nproc)
sudo make modules_install
sudo make install
sudo update-grubsudo reboot
uname -rThen activate BBRv3:
sudo sysctl -w net.ipv4.tcp_congestion_control=bbr
sudo sysctl -w net.core.default_qdisc=fqNEST (Network Emulation & Simulation Tool) is used to test congestion control algorithms in emulated networks.
git clone https://gitlab.com/nitk-nest/nest.git
cd nestYou can install NEST using either of the following:
🔹 Method A: Using install.sh
sudo ./install.sh🔹 Method B: Using setup.py (Alternative)
sudo python3 setup.py installsudo su
cd nest
source nest_env.shOnce NEST is installed and activated, you can run experiments using example scripts or your own custom topologies.
Navigate to the NEST examples:
cd ~/nest/examples/tcpYou'll find example files like:
tcp-bbr-point-to-point-3.py – Simple point-to-point test using BBR congestion control.You can copy and modify this script to test different:
- Topologies (star, dumbbell, etc.)
- Parameters (bandwidth, delay, queue size)
- Congestion control algorithms (BBRv1, BBRv3, CUBIC, etc.)
- Flow patterns (single/multiple flows, UDP/TCP mix)
Use the following command format to run any experiment:
sudo PYTHONPATH=./venv/bin/python3 examples/tcp/tcp-bbr-point-to-point-3.py1. The script will run the experiment using netperf and ss.
2. It generates output .json files with detailed statistics and plots.
3. You’ll see a progress bar and then output like:
[INFO]: Parsing statistics...
[INFO]: Plotting results...- BBR v1 tends to be too optimistic in the presence of random or bursty packet losses (e.g., Wi-Fi, cellular).
- BBR v3 has improved loss tolerance and is less aggressive when losses are detected, reducing retransmissions and improving stability.
- BBR v1 can cause queue buildup, leading to high latency spikes.
- BBR v3 includes RTT fairness and pacing improvements, preventing queue buildup and reducing delay.
- BBR v1 adapts slowly to sudden bandwidth drops (common in 4G/5G or Wi-Fi handoffs).
- BBR v3 improves bandwidth responsiveness, especially when bandwidth contracts quickly.
| Scenario | BBRv1 Behavior | BBRv3 Improvement |
|---|---|---|
| High packet loss | Overestimates bandwidth | Adapts better, fewer losses |
| High RTT / bufferbloat | Queues up, causes latency | Maintains low latency |
| Competing flows (RTT fairness) | Favors low RTT flows | Fairer bandwidth sharing |
| Mobile / dynamic networks | Slow to adapt | Reacts faster to bandwidth changes |
| Long-lived transfers | Oscillatory throughput | Smooth, consistent delivery |
| Encrypted/short flows | Aggressive probing | Controlled startup, lower jitter |
BBRv3 demonstrates clear improvements over BBRv1 across several real-world networking scenarios. It offers better bandwidth estimation under high loss, maintains lower latency in high RTT/bufferbloat conditions, and shows enhanced fairness in multi-flow environments. BBRv3 is also more adaptive in dynamic network conditions, making it suitable for mobile and modern Internet applications. These improvements contribute to smoother and more efficient TCP performance overall.
- BBR Congestion Control - Google Open Source
- Neal Cardwell, Yuchung Cheng, et al. BBR: Congestion-Based Congestion Control, ACM Queue, 2017.
- BBRv2/Bbr3 Discussion on Linux Kernel Mailing List
- BBRv3 GitHub and Kernel Patch Discussions
- iperf3: https://github.com/esnet/iperf

