TCP и алгоритм BBR
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, а не в передаче данных.