Сетевой блокнот

TCP и алгоритм BBR

Linux 5.x · чтение 4 минуты

TCP должен отправлять данные как можно быстрее, но не перегружать сеть. Скорость отправки регулирует алгоритм управления перегрузкой, и в Linux его можно выбрать.

CUBIC и BBR

Классический подход, используемый по умолчанию (CUBIC), ориентируется на потери пакетов: увеличивает скорость, пока пакеты не начнут теряться, затем снижает её. На каналах с высокой задержкой и небольшими случайными потерями он часто недоиспользует полосу.

BBR, разработанный в Google, строит модель канала: оценивает пропускную способность и минимальное время прохождения пакета и поддерживает скорость близко к ним. Потери для него не единственный сигнал, поэтому на длинных маршрутах он нередко даёт заметно большую скорость.

Как включить в Ubuntu

Модуль входит в ядро. Проверьте, что он доступен:

sysctl net.ipv4.tcp_available_congestion_control
sysctl net.ipv4.tcp_congestion_control

Если в списке есть bbr, включите его постоянно:

sudo tee /etc/sysctl.d/90-bbr.conf >/dev/null <<'EOF'
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
EOF
sudo sysctl --system

Очередь fq нужна BBR для равномерной отправки пакетов.

Проверка

sysctl net.ipv4.tcp_congestion_control
ss -ti dst 203.0.113.10

В выводе ss -ti для активных соединений будет указано bbr. Измерьте скорость до и после, например утилитой iperf3: выигрыш зависит от маршрута и может быть небольшим.

Когда BBR не поможет

  • Узкое место — не канал, а процессор или диск сервера.
  • Канал загружен другими потоками: BBR может занимать более щедрую долю полосы, чем соседний CUBIC.
  • Проблема в самом приложении или в DNS, а не в передаче данных.