Классические алгоритмы контроля перегрузок TCP, такие как Reno и CUBIC, проектировались в эпоху проводных сетей, где любая потеря пакета (packet drop) автоматически интерпретировалась как перегрузка сетевого оборудования. В современных мобильных сетях (LTE, 5G) и трансграничных маршрутах дропы пакетов часто вызваны радиопомехами, роумингом между вышками или кратковременным джиттером, а не реальным насыщением пропускной способности канала.

Проблема алгоритма CUBIC при высоких задержках

При потере даже 1–2% пакетов стек CUBIC экспоненциально уменьшает окно перегрузки (congestion window, cwnd), что приводит к резкому обвалу скорости передачи в 2–4 раза. Соединению требуются секунды, чтобы восстановить пропускную способность, но при регулярных радиопотерях скорость остаётся на дне.

Ключевая идея BBR: Алгоритм BBR (Bottleneck Bandwidth and RTT), разработанный в Google, не опирается на факт потери пакетов. Вместо этого он динамически строит модель канала, независимо оценивая максимальную пропускную способность узла (BtlBw) и минимальное время круговой задержки (RTprop).

Практическая конфигурация 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%):

Выводы

Включение BBR в сочетании с fq и оптимизированными буферами сокетов позволяет сохранить до 90% полезной ёмкости канала даже на каналах с потерями пакетов до 5%. Это критически важно для потоковых WebSocket-туннелей и медиасервисов.