Классические алгоритмы контроля перегрузок TCP, такие как Reno и CUBIC, проектировались в эпоху проводных сетей, где любая потеря пакета (packet drop) автоматически интерпретировалась как перегрузка сетевого оборудования. В современных мобильных сетях (LTE, 5G) и трансграничных маршрутах дропы пакетов часто вызваны радиопомехами, роумингом между вышками или кратковременным джиттером, а не реальным насыщением пропускной способности канала.
Проблема алгоритма CUBIC при высоких задержках
При потере даже 1–2% пакетов стек CUBIC экспоненциально уменьшает окно перегрузки (congestion window, cwnd), что приводит к резкому обвалу скорости передачи в 2–4 раза. Соединению требуются секунды, чтобы восстановить пропускную способность, но при регулярных радиопотерях скорость остаётся на дне.
Практическая конфигурация Linux ядра
Для включения алгоритма BBR и дисциплины очередей FQ (Fair Queueing) на серверах под управлением Ubuntu 22.04 / 24.04 достаточно внести следующие параметры в системный конфигуратор /etc/sysctl.conf:
# Включение контроля очередей Fair Queueing
net.core.default_qdisc = fq
# Активация алгоритма TCP BBR
net.ipv4.tcp_congestion_control = bbr
# Оптимизация буферов приёма и отправки (до 16MB)
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
# Защита от переполнения очереди соединений
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 16384
# Включение быстрого открытия соединений TCP Fast Open
net.ipv4.tcp_fastopen = 3
Применение настроек в работающей системе без перезагрузки:
sysctl -p /etc/sysctl.conf
Результаты бенчмарков
В ходе практических тестов на трансграничном линке (Франкфурт — мобильный клиент в Москве, RTT ~52ms, искусственная потеря пакетов 2.5%):
- CUBIC: средняя эффективная скорость потока упала до 14.2 Mbps из-за постоянного схлопывания окна cwnd.
- BBR: средняя скорость удержалась на уровне 88.6 Mbps, полностью насытив выделенный канал без буферблоата.
Выводы
Включение BBR в сочетании с fq и оптимизированными буферами сокетов позволяет сохранить до 90% полезной ёмкости канала даже на каналах с потерями пакетов до 5%. Это критически важно для потоковых WebSocket-туннелей и медиасервисов.