QoS на практике: очереди, DSCP, FQ_CoDel и борьба с bufferbloat

Почему 100 Мбит/с не равно 100 Мбит/с — и как сеть выбирает, чей пакет уедет первым

5 мая 2026 6 мин чтения TooTimes Team

Самое распространённое заблуждение о скорости интернета: тариф «100 Мбит/с» означает, что вы всегда получаете 100 мегабит. На практике 100 Мбит/с — это потолок, под которым в любой момент времени десятки потоков делят ресурсы. И когда канал упирается в потолок, сеть должна решить, чей пакет уедет первым. Эту задачу решает QoS — Quality of Service.

Без QoS канал работает как FIFO-очередь: пришёл первым — уехал первым. Это означает, что большой бэкап может «забить» канал так, что звонок в Zoom начнёт заикаться. С правильным QoS чувствительные к задержке пакеты пропускаются раньше тяжёлых, и пользователь не замечает разницы между загруженным и пустым каналом.

Поток пакетов на маршрутизаторе с QoS

[входящий]
    │
    ▼
[ Классификатор: DSCP/порт/DPI ]
    │
    ├── EF (Expedited)  → realtime ──┐
    ├── AF41 (Voice)               │
    ├── AF31 (Streaming)           ▼
    ├── AF21 (Web/API)        ┌─Планировщик─┐
    └── BE (Best Effort)      │ DRR / WFQ  │ ──► [исходящий]
                              │ FQ_CoDel   │
                              └────────────┘

EF идёт почти без ожидания.
BE может постоять — но не более X миллисекунд.
QoS не создаёт пропускную способность — он решает, кому ждать дольше.

Скорость и задержка — разные ресурсы

Между двумя метриками часто путают понятия. Простой пример:

  • 1 Гбит/с с RTT 200 мс — отлично для скачивания файлов, но в голосовом звонке вы будете слышать собеседника с задержкой полсекунды.
  • 5 Мбит/с с RTT 20 мс — мало для 4К-стриминга, но идеально для звонков и онлайн-игр.

QoS как раз про то, чтобы не путать эти ресурсы и распределять их по нуждам приложений: видео любит пропускную способность, голос — низкую задержку, игры — низкий jitter. Один и тот же канал может одновременно обслуживать всё, если правильно настроены приоритеты.

Классификация: как отличить пакет голоса от пакета бэкапа

Прежде чем дать пакету приоритет, нужно понять, какого он класса. Способов несколько:

  • DSCP (Differentiated Services Code Point) — 6 бит в IP-заголовке. Стандартизированные значения: EF (Expedited Forwarding) для голоса, AF11–AF43 для разных классов, CS6/CS7 для управляющего трафика, BE (Best Effort) — по умолчанию.
  • Порт + протокол. SIP/RTP-трафик идёт на типовых портах, можно классифицировать по 5-tuple.
  • DPI-классификация. Анализ содержимого/поведения потока. На зашифрованном трафике — по сигнатурам и таймингам.
  • Marking от приложения. Современные приложения (Zoom, Teams, Discord) сами расставляют DSCP — но провайдер может это переписывать.

На практике уважающий себя оператор не доверяет marking от пользователей и всегда переразмечает на access-уровне. Иначе любой бэкап мог бы маркироваться как EF и захватить приоритет.

Дисциплины очередей: от FIFO до FQ_CoDel

Сама очередь — алгоритм, по которому планировщик выбирает следующий пакет. Эволюция:

  • FIFO. Простая, единственная очередь. Если в начало встал большой поток, всё остальное ждёт.
  • Priority Queueing (PQ). Несколько очередей по приоритетам. Высокий приоритет всегда обслуживается первым. Минус — если высокого много, низкий не получает ничего вообще.
  • WFQ / WRR. Weighted Fair Queueing — каждой очереди выделяется доля канала пропорционально весу. Голос получает 20%, веб — 60%, бэкапы — 20%.
  • HTB (Hierarchical Token Bucket). Иерархия классов с гарантиями — у одного класса минимум 5 Мбит, у другого — потолок 50 Мбит, можно «занимать» у соседей. Стандарт корпоративных и домашних QoS на Linux.
  • FQ_CoDel. Современная дисциплина: разносит каждый поток в свою очередь, активно борется с раздуванием буферов. По умолчанию в OpenWRT, ядре Linux 5+, в виде CAKE с дополнительной shaping-функцией.

Shaping vs Policing: складывать или дропать

Когда поток превышает разрешённую скорость, есть два подхода:

  • Shaping (token bucket). Лишние пакеты складываются в буфер и выпускаются с разрешённой скоростью. Поток выглядит ровным, но приходит с задержкой. Хорошо для TCP — он адаптируется к задержке.
  • Policing. Превышение просто дропается. Поток выглядит «рваным», но без буферизации. Это жёстче по ощущениям, но не создаёт лишней задержки.

Shaping обычно ставят на отдающей стороне (исходящий канал контролируется владельцем), policing — на входе чужого трафика. Математика token bucket подробно разобрана в статье про traffic shaping.

AQM и bufferbloat: невидимая беда домашних роутеров

В 2010-х Jim Gettys обнаружил, что во многих роутерах буферы такие огромные (мегабайты), что когда канал упирается в потолок, очередь раздувается на сотни миллисекунд — и весь трафик начинает страдать. Это назвали bufferbloat.

Симптом легко проверить: запустите большую загрузку и одновременно ping 1.1.1.1. Если RTT подскакивает с 10 мс до 100–500 мс — у вас bufferbloat. Лечение — Active Queue Management (AQM):

  • RED (Random Early Detection) — старый алгоритм, дропает случайные пакеты при заполнении буфера.
  • CoDel (Controlled Delay) — современный, отслеживает время, проведённое пакетом в очереди, и дропает старых жителей.
  • PIE — алгоритм от Cisco, похожий на CoDel.
  • FQ_CoDel — комбинация Fair Queueing + CoDel, по умолчанию в современных Linux-ядрах.

Включить FQ_CoDel на OpenWRT-роутере занимает 2 минуты и часто заметнее, чем смена тарифа.

Мобильные QCI/5QI: QoS в LTE и 5G

В мобильных сетях QoS встроен в архитектуру. Каждое соединение (bearer) имеет профиль:

  • QCI 1 (5QI 1) — гарантированная пропускная способность для VoLTE-голоса. Максимальная задержка 100 мс.
  • QCI 5 — IMS signaling. Низкая задержка для SIP.
  • QCI 9 — best effort, основной интернет-трафик. Тут живёт 99% пакетов вашего телефона.
  • 5QI 80–87 в 5G — для AR/VR и mission-critical.

Это значит, что в перегруженной соте VoLTE-голос продолжает работать, а HTTP-страницы могут грузиться медленно — оператор намеренно жертвует best effort, чтобы сохранить голос. Подробнее это в статье про мобильные сети.

Домашний QoS: что можно сделать руками

На домашнем роутере правильно настроенный QoS даёт больше эффекта, чем смена тарифа в полтора раза:

  • OpenWRT с CAKE — пакет sqm-scripts. Указываете upstream и downstream скорость, остальное делается автоматически. Отлично борется с bufferbloat.
  • Ubiquiti EdgeRouter / UDM — встроенный smart queues с FQ_CoDel.
  • MikroTik — queue tree с HTB-дисциплиной, гибче, но требует знаний.
  • Marking приложений. Discord и Zoom умеют автоматически ставить DSCP — главное, чтобы роутер этому доверял (или переразмечал и потом учитывал).

Эталонный тест после настройки: waveform.com/tools/bufferbloat. До настройки часто получают F или D, после — A или A+.

Итого

QoS — это не «ускоритель интернета», а диспетчер очереди. Он не создаёт пропускную способность, но позволяет тратить её так, чтобы голос и игры не страдали из-за бэкапов. На уровне провайдера это базовая инженерная гигиена, в мобильной сети — встроенная архитектура, дома — пятиминутная настройка с большим эффектом. Понимание QoS превращает «у меня медленный интернет» в «у меня bufferbloat 200 мс на upstream».

Нужен стабильный защищённый доступ к интернету?

TooTimes — зашифрованный туннель до серверов в 9 странах, без логов.

Посмотреть тарифы
✎ Панель блога