Сети с нуля 16. QoS: задержка, джиттер, потери, DSCP, очереди, shaping и policing
Note
Материал сверен с официальной документацией (RFC, реестры IANA, Microsoft Learn и др.; ссылки — в конце статьи). Примеры вывода — иллюстрации: на вашей системе значения и формат могут отличаться. Перед работой на боевом оборудовании проверьте шаги на тестовом стенде.
Вечером у PC1 рвётся голос в IP-телефонии: слова пропадают, пока SRV1 отправляет резервную копию во внешнее хранилище 198.51.100.20. Канал у офиса один, и копия занимает его почти целиком. Пакеты звонка стоят в той же очереди на RTR1, что и пакеты копии. QoS (Quality of Service, «качество обслуживания») — набор средств, которые решают, чьи пакеты при перегрузке уходят первыми, чьи ждут, а чьи отбрасываются.
В статье мы разберём, чем измеряют качество канала, как пакеты помечают, как работают очереди, чем shaping отличается от policing и как поставить метку в Windows. Настройку роутеров здесь не повторяем: для неё есть статьи Cisco с нуля 19. QoS: основы MQC и MikroTik с нуля 09. Ограничение скорости: Simple Queue, PCQ и CAKE.
Что нужно знать заранее
- Сети с нуля 05. Как пакет находит путь: шлюз, маршруты и ARP — роутер пересылает пакеты с одного интерфейса на другой.
- Сети с нуля 09. TCP, UDP и порты — голос обычно идёт по UDP, копия по TCP.
- Сети с нуля 10. Диагностика сети в Windows —
pingиpathpingдля измерений.
Четыре показателя качества
Пропускная способность — сколько данных в секунду способен передать канал; чем она отличается от реальной скорости, разбирает статья 20. Остальные три показателя и есть «качество»:
- Задержка (delay) — время, за которое пакет доходит до получателя;
pingпоказывает время туда и обратно. Минимальная задержка складывается только из распространения сигнала и передачи, а всё, что выше минимума, — признак перегрузки на пути (RFC 7679). - Джиттер (jitter) — колебание задержки от пакета к пакету. RFC 3393 замечает, что слово «jitter» понимают по-разному, и предпочитает точный термин «вариация задержки»: это разность задержек двух выбранных пакетов потока. Она нужна, например, чтобы рассчитать буфер воспроизведения голоса и видео.
- Потери (packet loss) — пакет не дошёл, например потому, что его отбросила переполненная очередь.
Приложения терпят их по-разному. Одни плохо работают при большой задержке, другим мешают нерегулярные колебания, а чем больше задержка, тем труднее TCP держать высокую скорость. Потерянные TCP-сегменты повторяются, а голосовые UDP-пакеты обычно нет: запоздавший пакет бесполезен (статья 09). Оценки по классам трафика даёт RFC 4594:
| Класс | Пример | Терпимость к потерям | к задержке | к джиттеру |
|---|---|---|---|---|
| Telephony | голос (IP-телефония) | очень низкая | очень низкая | очень низкая |
| Multimedia Conferencing | видеоконференции | низкая–средняя | очень низкая | низкая |
| Low-Latency Data | клиент-серверные транзакции, веб-заказы | низкая | низкая–средняя | терпит |
| High-Throughput Data | копирование, «сохранить и переслать» | низкая | средняя–высокая | терпит |
| Low-Priority Data | всё, чему не нужны гарантии | высокая | высокая | терпит |
«Очень низкая» значит, что приложение почти не выносит отклонений. Вывод для администратора: голос и видео страдают первыми, а копия переживёт задержку, но займёт всю полосу, если ей позволить.
Когда QoS нужен, а когда нет
QoS работает там, где возникает очередь, — на исходящем интерфейсе роутера или коммутатора. Очередь — это структура данных, где пакеты ждут отправки из-за нехватки полосы или низкого приоритета.
SRV1 (копия) ----\
PC1 (голос) -----+--> [п][п][п][п][п][п] ----> канал к провайдеру
PC2 (веб) ----/ приходит быстрее, чем уходит
Пока канал не заполнен, очередь пуста, пакеты уходят сразу, и QoS ничего не меняет. При заполнении сначала растёт задержка, потом очередь переполняется, и пакеты теряются. Отсюда два вывода:
- QoS не добавляет полосу. Он решает, кто подождёт и кого отбросят. Если канал постоянно занят целиком, нужен канал шире или ограничение «лишнего» трафика (практика автора).
- Длинная очередь — тоже проблема. RFC 8289 называет «постоянно заполненные буферы» bufferbloat и отмечает, что острее всего он проявляется на границе потребительских сетей, где большие видеопередачи смешиваются с голосом и играми. Задержка растёт, хотя потерь нет. Против этого применяют активное управление очередью (AQM, active queue management), например CoDel; пример для RouterOS — в MikroTik с нуля 09.
Метки: поле DS и DSCP
Чтобы устройства отличали голос от копии, пакеты помечают. Метка лежит в байте IP-заголовка, который раньше назывался ToS (IPv4) или Traffic Class (IPv6). Он переопределён как поле DS (RFC 2474): шесть бит составляют DSCP (Differentiated Services Code Point), ещё два были «пока не используются», а позже их заняло ECN (Explicit Congestion Notification, «явное уведомление о перегрузке»).
Бит: 0 1 2 3 4 5 6 7
+---+---+---+---+---+---+---+---+
| DSCP (0-63) | ECN |
+---+---+---+---+---+---+---+---+
EF = 101110 = 46; весь байт = 10111000 = 0xB8
По значению DSCP каждое устройство выбирает PHB (per-hop behavior, поведение на одном участке пути), например «отправить без очереди». Соответствие значений и поведения настраивается: оператор вправе назначить своё. В реестре IANA для двух бит ECN перечислены значения Not-ECT, ECT(0), ECT(1) и CE (Congestion Experienced, «встретилась перегрузка»); в этой статье их не меняем.
Основные значения (реестр IANA; классы и примеры из RFC 4594):
| Имя | DSCP | Класс |
|---|---|---|
| DF (Default Forwarding, он же CS0) | 0 | Standard: обычный трафик |
| LE | 1 | Lower Effort: фон, «хуже обычного» |
| CS1 | 8 | Low-Priority Data (заменено на LE, см. ниже) |
| AF11–AF13 | 10, 12, 14 | High-Throughput Data |
| CS2 | 16 | OAM (Operations, Administration, and Management: управление и мониторинг) |
| AF21–AF23 | 18, 20, 22 | Low-Latency Data |
| CS3 | 24 | Broadcast Video |
| AF31–AF33 | 26, 28, 30 | Multimedia Streaming |
| CS4 | 32 | Real-Time Interactive |
| AF41–AF43 | 34, 36, 38 | Multimedia Conferencing |
| CS5 | 40 | Signaling (сигнализация телефонии) |
| EF | 46 | Telephony (голос) |
| CS6 | 48 | Network Control (протоколы маршрутизации) |
Как читать имена. CSn (Class Selector) — значения вида xxx000, совместимые со старым полем IP Precedence. AFxy (Assured Forwarding, RFC 2597) — четыре класса (первая цифра) по три значения в каждом: вторая цифра задаёт «степень отбрасываемости», и при перегрузке внутри класса раньше отбрасываются пакеты с большей цифрой. EF (Expedited Forwarding) — значение для голоса: для этого класса предлагается приоритетная очередь.
Что важно знать о таблице:
- RFC 4594 — информационный документ, а не закон. Названия и порядок классов в нём не задают приоритет, начинать советуют с трёх-четырёх классов, а соответствие класса и значения рекомендуют сохранять от конца до конца. У производителей схемы различаются: сигнализация телефонии у RFC — CS5, а в нашей статье Cisco с нуля 19 используется CS3. Главное — одна схема на всех устройствах.
- Фоновый трафик. Для него предлагали CS1, но RFC 8622 (2019) называет это проблемным: домены, которые трактуют CS1 как более высокий приоритет, чем у обычного трафика, дадут обратный эффект, то есть фон обгонит остальных. Для фона предложено отдельное значение LE (
000001, десятичное 1). - Метки действуют внутри домена. DS-домен — участок сети с единой, согласованно управляемой политикой. Что сделает с вашей меткой провайдер, определяет договор (SLA, Service Level Agreement); на границе домена метку могут переписать (re-mark) или обнулить. Без договорённости на неё рассчитывать нельзя (практика автора).
- Метки пользователей не принимают на веру. На входе в сеть метки, поставленные пользовательскими устройствами, проверяют, а их поток ограничивают: иначе любой компьютер поставит себе EF и займёт приоритетную очередь. На практике на входном порту метки сбрасывают или ставят заново («граница доверия», см. Cisco с нуля 19).
Очереди: кто уходит первым
Очередь работает в паре с планировщиком (scheduler): он решает, из какой очереди взять следующий пакет. Без QoS очередь одна, пакеты уходят в порядке прихода (FIFO). С QoS очередей несколько.
| Тип | Как работает | Для чего |
|---|---|---|
| Приоритетная (priority) | планировщик сначала опустошает очередь высшего приоритета | голос: задержка предсказуема и мала |
| С гарантированной долей (rate) | каждая очередь получает заданную скорость, можно задать минимум и максимум; примеры алгоритмов — WFQ (Weighted Fair Queuing) и WRR (Weighted Round Robin) | видео, данные, управление |
| Общая очередь по умолчанию | всё остальное | обычный трафик |
Приоритетной очереди нужен потолок. RFC 4594 предупреждает: система должна избегать «голодания» (starvation) очередей с низким приоритетом, для чего применяют контроль допуска (admission control), ограничение скорости или расчёт ёмкости сети. Поэтому трафик приоритетной очереди ограничивают по скорости, а обычному трафику оставляют минимум ресурсов, чтобы он не «голодал». Если «срочным» объявить всё, срочного не останется.
Рядом с очередями работает AQM: он заранее отбрасывает или помечает часть пакетов, чтобы отправители сбавили темп до переполнения очереди. В классе AF эта идея применена по значениям: пакеты, превысившие оговорённую скорость, отбрасываются раньше остальных.
С чего начать
Дальше практика автора: для малого офиса хватает трёх классов — голос (EF, приоритетная очередь с потолком по скорости), всё остальное (DF, обычная очередь) и фон, то есть резервные копии и крупные обновления (LE, остаток полосы). Сигнализацию телефонии и служебный трафик добавляют, когда в них возникает нужда. Сначала измерьте результат (раздел «Как проверить результат»), и только потом усложняйте схему. Если телефонией занимается внешний оператор, согласуйте с ним, какие метки он принимает.
Shaping и policing
Обе операции приводят поток к заданному профилю. RFC 2475 определяет профиль (traffic profile) как скорость и допустимый всплеск (burst size), а затем различает:
- Shaping — задержка пакетов, чтобы поток уложился в профиль;
- Policing — отбрасывание пакетов по состоянию измерителя (meter), который следит за соблюдением профиля. Во многих реализациях policer умеет и перемаркировать нарушителя, но в RFC перемаркировка — отдельная операция.
| Shaping | Policing | |
|---|---|---|
| Что делает с превышением | задерживает в очереди | отбрасывает (часто ещё и перемаркирует) |
| Задержка | растёт | не растёт |
| Нужна очередь для задержки | да | нет |
| Где обычно | исходящий интерфейс к провайдеру | вход в сеть, граница доверия |
Практика автора: на выходе к провайдеру shaping ставят чуть ниже оговорённой скорости, чтобы очередь образовывалась на вашем роутере, где вы управляете приоритетами, а не в оборудовании провайдера, где такой возможности нет. Policing подходит для входа, а голосовой класс на границе сети рекомендуют ограничивать по скорости. В Windows похожую роль на источнике играет throttle rate: политика ограничивает исходящий трафик приложения заданной скоростью. По документации Microsoft, такие функции лучше выполнять ближе к источнику.
QoS в Windows
Политики QoS (Policy-based QoS) раздают через групповые политики: Computer Configuration | Policies | Windows Settings | Policy-based QoS и такой же раздел в User Configuration. По умолчанию политик нет. Политика задаёт условие (приложение, адреса, протокол TCP или UDP, порты) и действие: значение DSCP от 0 до 63 или throttle rate. Применяется она к исходящему трафику и работает ниже уровня приложения, поэтому программы менять не нужно. Если трафик шифруется IPsec, роутеры уже не видят порты, но политика на конечном устройстве ставит метку до шифрования.
Для проверки подойдёт PowerShell от имени администратора (практика автора). Параметр -PolicyStore ActiveStore означает, что политика не переживёт перезагрузку. Пример: голос с PC1 к оператору 192.0.2.100 получает EF (первая команда выполняется на PC1), копия с SRV1 к хранилищу — LE (вторая команда выполняется на SRV1):
New-NetQosPolicy -Name "Voice-EF" -PolicyStore ActiveStore `
-IPDstPrefixMatchCondition "192.0.2.100/32" `
-IPProtocolMatchCondition UDP -DSCPAction 46
New-NetQosPolicy -Name "Backup-LE" -PolicyStore ActiveStore `
-IPDstPrefixMatchCondition "198.51.100.20/32" -DSCPAction 1
Первая политика метит EF весь UDP-трафик к оператору, включая сигнализацию. Если для голоса выделен диапазон портов RTP (протокол передачи голоса и видео), ограничьте политику им (параметры -IPDstPortStartMatchCondition и -IPDstPortEndMatchCondition), чтобы сигнализация не попадала в приоритетную очередь.
Откат одной командой для каждой политики; имя указывайте всегда: без -Name командлет удаляет все политики в хранилище.
Remove-NetQosPolicy -Name "Voice-EF" -PolicyStore ActiveStore
Remove-NetQosPolicy -Name "Backup-LE" -PolicyStore ActiveStore
Для постоянной работы политику создают в объекте групповой политики, сначала для пилотной группы компьютеров, как и любые массовые изменения (Windows Server с нуля 06). Помните, что метка — лишь заявка: ускорит она трафик, только если коммутаторы и роутеры по пути настроены её учитывать.
Wi-Fi, VLAN и VPN: где метки теряются
Wi-Fi. Радиоканал — разделяемая среда с полудуплексом, поэтому очереди и приоритеты нужны и в нём. В 802.11 четыре категории доступа (Voice, Video, Best Effort, Background), у каждой своя очередь; категорию определяет трёхбитный приоритет UP (User Priority, 0–7). Распространённый способ получить UP из DSCP — взять три старших бита, но так голос (EF) попадает в категорию видео, а вещательное видео (CS3) и потоковое (AF3x) — в обычную (Best Effort). Поэтому соответствие меток категориям задают явно; рекомендацию даёт RFC 8325. Остальное о Wi-Fi — в статье 12.
Телефоны и VLAN. Голосовые телефоны часто выносят в отдельный VLAN (практика автора). Сами VLAN и трёхбитное поле приоритета PCP в теге разобраны в статье 13; в её учебном плане отдельной строки для телефонов нет, добавьте её по тому же принципу. На Cisco телефону назначают голосовой VLAN: Cisco с нуля 04. VLAN, access- и trunk-порты.
VPN (статья 15). В туннельном режиме IPsec поле DS внешнего заголовка по умолчанию копируется из внутреннего, но RFC 4301 допускает настроить фиксированное значение. WireGuard не переносит DSCP внутреннего пакета во внешний: данные идут с DSCP 0, а пакеты рукопожатия получают AF41 (копируется только ECN). Поэтому провайдер не увидит метки внутри такого туннеля. На практике приоритеты расставляют на самом шлюзе до шифрования (практика автора).
Как проверить результат
Практика автора, в порядке действий:
- Измерьте базовую линию без нагрузки. Запустите
ping -n 20 198.51.100.10и запишите строкиLostиMinimum/Maximum/Average. - Загрузите канал тем же способом, что вечером (копия, большая загрузка) и повторите измерение.
- Включите QoS и повторите измерение, а звонок или видеовстречу проверьте на слух и на глаз.
Пример вывода (вымышленный, формат приблизительный). Без нагрузки:
Ping statistics for 198.51.100.10:
Packets: Sent = 20, Received = 20, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 11ms, Maximum = 14ms, Average = 12ms
Пока идёт копия:
Ping statistics for 198.51.100.10:
Packets: Sent = 20, Received = 19, Lost = 1 (5% loss),
Approximate round trip times in milli-seconds:
Minimum = 12ms, Maximum = 410ms, Average = 233ms
Минимум почти не изменился, а максимум и среднее выросли: на пути образовалась очередь. Разброс между Minimum и Maximum — грубая оценка вариации задержки. Потери по узлам покажет pathping (статья 10). Чтобы убедиться, что метка действительно ушла с PC1, захватите трафик в Wireshark (статья 11; только в своей сети и с разрешения её владельца) и раскройте IP-заголовок: значение DSCP стоит в поле DS. Где на пути метка пропала, показывает такой же захват в другой точке. Счётчики классов смотрят на самом оборудовании: Cisco с нуля 19. Подробнее об измерениях — статья 20.
Состояние на ноябрь 2026 года (проверьте актуальность). Рекомендация 2006 года использовать для фоновых данных значение CS1 обновлена в 2019 году: вместо него предложено LE. В реестре IANA DSCP (обновлён 13.05.2026) значения пула
xxxx01теперь отданы под стандартные назначения (LE и NQB (Non-Queue-Building), значение 45), и считать их свободными для собственных классов уже нельзя. Как конкретные роутеры и точки доступа трактуют значение 1, проверяйте по их документации. Страницы Microsoft о политиках QoS последний раз обновлялись в июле 2021 года и в списке поддерживаемых систем называют Windows Server 2016 и Windows 10; для вашей версии Windows проверьте поведение на тестовом компьютере.
Типичные ошибки и недоразумения
- «Включу QoS, и интернет станет быстрее». Полоса не изменится: QoS перераспределяет её при перегрузке.
- «Всё важное пометим EF». Если приоритетным объявлено всё, приоритета нет, а приоритетная очередь без ограничения «голодит» остальные.
- Доверие меткам пользователей. Компьютер поставит себе метку голоса и займёт приоритетную очередь: на границе доверия метки перепроверяют.
- Метки есть, а эффекта нет. Их не учитывает оборудование на пути, провайдер или точка доступа; внутри WireGuard-туннеля данные идут с DSCP 0.
- Схема только на одном устройстве. Классы и значения должны совпадать на всех устройствах пути.
- Путают CS1 и LE. Фон с CS1 на оборудовании, трактующем его «как раньше», может получить приоритет выше обычного.
- Policing вместо shaping на выходе к провайдеру. Лишнее не ждёт в очереди, а отбрасывается; потери для TCP означают снижение скорости.
- Измеряют только скорость. Задержку и потери под нагрузкой смотрят отдельно: канал может давать «полные» мегабиты и при этом рвать голос.
Проверьте себя
- Чем джиттер отличается от задержки? Задержка — время доставки пакета, джиттер (вариация задержки) — разность задержек разных пакетов потока; из-за него рвётся голос, даже если средняя задержка невелика.
- Где находится DSCP и сколько у него значений? В шести битах поля DS (бывший ToS / Traffic Class) IP-заголовка; значения от 0 до 63.
- Чем shaping отличается от policing? Shaping задерживает пакеты, чтобы уложить поток в профиль; policing отбрасывает пакеты, не соответствующие профилю.
- Почему QoS ничего не меняет на свободном канале и не добавляет полосу? Он действует на очередь, а очередь возникает только при перегрузке; QoS лишь выбирает, чьи пакеты ждут или отбрасываются.
- Что произойдёт с меткой DSCP внутри туннеля WireGuard? DSCP внутреннего пакета не копируется во внешний: данные идут с DSCP 0, и провайдер приоритета не увидит.
Что дальше
- Cisco с нуля 19. QoS: основы MQC — метки, police и shape, приоритетная очередь для голоса.
- MikroTik с нуля 09. Ограничение скорости: Simple Queue, PCQ и CAKE — очереди и борьба с bufferbloat на RouterOS.
- Сети с нуля 20. Скорость и производительность: полоса, задержка, MTU, фрагментация — измерения и поиск узкого места.
- Сети с нуля 12. Wi-Fi: частоты, каналы, безопасность — разделяемая радиосреда и её особенности.
Источники
- RFC 2474: Definition of the Differentiated Services Field (DS Field) — поле DS, DSCP, Class Selector, Default PHB, DS-домен
- RFC 2475: An Architecture for Differentiated Services — профиль трафика, shaping, policing, перемаркировка, SLA
- RFC 2597: Assured Forwarding PHB Group — классы AF и степень отбрасываемости
- RFC 3393: IP Packet Delay Variation Metric — вариация задержки и термин jitter
- RFC 4301: Security Architecture for the Internet Protocol — поле DS во внешнем заголовке туннельного режима IPsec
- RFC 4594: Configuration Guidelines for DiffServ Service Classes — классы трафика, значения DSCP, очереди, AQM, граница доверия
- RFC 7679: A One-Way Delay Metric for IPPM — задержка и её связь с перегрузкой
- RFC 8289: Controlled Delay Active Queue Management — bufferbloat и CoDel (экспериментальный)
- RFC 8325: Mapping Diffserv to IEEE 802.11 — категории доступа Wi-Fi и соответствие DSCP
- RFC 8622: A Lower-Effort Per-Hop Behavior (LE PHB) — значение LE и замена CS1
- IANA: Differentiated Services Field Codepoints (DSCP) — имена и значения DSCP, поле ECN
- WireGuard: Protocol & Cryptography — раздел DiffServ Considerations
- Microsoft Learn: Quality of Service (QoS) Policy — Policy-based QoS, DSCP и throttle rate, групповые политики
- Microsoft Learn: New-NetQosPolicy — параметры политики, ActiveStore
- Microsoft Learn: Remove-NetQosPolicy — удаление политик