Открыть сервис

Трафик-шейпинг

Трафик-шейпинг (от англ. traffic shaping — формирование трафика) — это механизм управления сетевым трафиком, заключающийся в регулировании объёма и скорости передачи данных через сетевой интерфейс или канал связи. Основная цель трафик-шейпинга — оптимизация использования пропускной способности сети, снижение задержек и джиттера, а также обеспечение заданного уровня качества обслуживания (Quality of Service, QoS) для определённых типов трафика или пользователей. В отличие от простого ограничения полосы пропускания (rate limiting), шейпинг предполагает буферизацию и выравнивание (сглаживание) пакетов, что позволяет избежать резких всплесков нагрузки и сгладить пиковые значения.

Принцип работы

Трафик-шейпинг реализуется на сетевых устройствах — маршрутизаторах, коммутаторах, межсетевых экранах, а также на программных уровнях (например, в драйверах сетевых карт или в операционных системах). Алгоритм работы включает несколько этапов:

  1. Классификация трафика. Пакеты идентифицируются по различным признакам: IP-адресам источников и получателей, портам TCP/UDP, протоколам, меткам DSCP (Differentiated Services Code Point) или VLAN. Это позволяет различать, например, голосовой трафик (VoIP), видеоконференции, веб-сёрфинг, файловые передачи или потоковое видео.
  2. Измерение скорости. Устройство непрерывно измеряет текущую скорость передачи данных для каждого класса трафика. Для этого используются алгоритмы, такие как токен-бакет (token bucket) или ликовое ведро (leaky bucket). В модели токен-бакета в буфер с определённой скоростью добавляются «токены», каждый из которых даёт право на передачу определённого объёма данных. Если токенов недостаточно, пакет помещается в очередь.
  3. Буферизация. Пакеты, превышающие установленный лимит скорости для данного класса, не отбрасываются, а помещаются в очередь (буфер) на устройстве. Размер буфера может быть ограничен (например, до нескольких десятков или сотен килобайт), чтобы избежать чрезмерных задержек.
  4. Выравнивание передачи. Из очереди пакеты извлекаются с заданной скоростью (или с учётом приоритетов), что обеспечивает сглаживание трафика — вместо резких всплесков и пауз данные передаются более равномерно. Если буфер переполняется, новые пакеты могут отбрасываться (согласно политике Tail Drop или RED — Random Early Detection).

Цели и задачи

Основные задачи, решаемые с помощью трафик-шейпинга:

  • Обеспечение QoS. Приоритизация критически важного трафика (например, голосовых вызовов, онлайн-игр, видеоконференций) над менее чувствительным к задержкам (загрузка файлов, обновления ПО). Это позволяет поддерживать низкую задержку и джиттер для интерактивных приложений.
  • Предотвращение перегрузок. Сглаживание пиковых нагрузок снижает вероятность потери пакетов и коллапса сети (congestion collapse). Это особенно актуально для каналов с ограниченной пропускной способностью (например, DSL, спутниковые каналы, мобильные сети).
  • Справедливое распределение ресурсов. Ограничение скорости для отдельных пользователей или приложений, чтобы один поток не занимал всю полосу пропускания. Например, в корпоративных сетях можно ограничить скорость P2P-трафика, не ущемляя работу критических сервисов.
  • Соблюдение SLA (Service Level Agreement). Провайдеры услуг связи могут использовать шейпинг для гарантирования минимальной скорости для каждого клиента или класса обслуживания.
  • Экономия ресурсов. В тарифных планах с ограничением трафика (например, мобильный интернет) шейпинг может применяться для снижения скорости после исчерпания лимита, а не для полного отключения.

Методы и алгоритмы

Токен-бакет (Token Bucket)

Наиболее распространённый алгоритм. В «корзину» (bucket) с фиксированной скоростью (CIRCommitted Information Rate) добавляются токены. Каждый токен позволяет передать один байт (или пакет). Если в корзине есть токены, пакет передаётся немедленно, и токены списываются. Если токенов нет, пакет ставится в очередь. Максимальный размер очереди (Burst Size) ограничивает всплеск трафика — если корзина заполнена, избыточные токены теряются. Алгоритм позволяет кратковременно превышать среднюю скорость (до величины Burst Size), но долгосрочно средняя скорость не превышает CIR.

Ликовое ведро (Leaky Bucket)

Более строгий алгоритм. Пакеты поступают в буфер (ведро) с отверстием в дне, через которое данные вытекают с постоянной скоростью. Если буфер переполняется, новые пакеты отбрасываются. В отличие от токен-бакета, ликовое ведро не допускает всплесков — трафик всегда сглаживается до заданной скорости, что может приводить к большим задержкам при неравномерном поступлении данных.

Hierarchical Token Bucket (HTB)

Реализация, поддерживающая иерархию классов. Позволяет распределять полосу пропускания между несколькими уровнями (например, сначала между пользователями, затем между приложениями каждого пользователя). HTB широко применяется в Linux (утилита tc — traffic control).

Random Early Detection (RED)

Алгоритм управления очередью, который предотвращает перегрузку за счёт выборочного отбрасывания пакетов до того, как буфер переполнится. RED может использоваться совместно с шейпингом для снижения вероятности синхронизации TCP-сессий (когда несколько потоков одновременно теряют пакеты и одновременно снижают скорость).

Применение

У провайдеров и операторов связи

  • Мобильные сети (3G/4G/5G). Шейпинг применяется для управления перегрузками в сотах, приоритизации голосового трафика (VoLTE) и ограничения скорости для абонентов с исчерпанным лимитом.
  • Домашние сети (DSL, FTTB). Провайдеры могут шейпить P2P-трафик, чтобы снизить нагрузку на магистральные каналы, или ограничивать скорость ночью для экономии ресурсов.
  • Корпоративные сети. В офисах и дата-центрах шейпинг используется для гарантирования пропускной способности для критических приложений (ERP, CRM, видеоконференции) и ограничения фонового трафика (обновления, резервное копирование).

В операционных системах

  • Linux. Утилита tc (traffic control) из пакета iproute2 позволяет настраивать сложные правила шейпинга на уровне сетевых интерфейсов. Поддерживаются HTB, TBF (Token Bucket Filter), CBQ (Class-Based Queueing) и другие дисциплины очередей.
  • Windows. Встроенные средства QoS (Group Policy) позволяют задавать приоритеты для приложений, но не предоставляют гибких возможностей шейпинга. Сторонние утилиты, такие как NetLimiter, реализуют шейпинг на уровне пользовательского режима.
  • Маршрутизаторы и межсетевые экраны. В Cisco IOS, MikroTik RouterOS, pfSense, OpenWrt и других системах шейпинг настраивается через конфигурационные файлы или веб-интерфейс.

В облачных и контейнерных средах

  • Docker/Kubernetes. Для управления пропускной способностью контейнеров используются механизмы cgroups (net_cls) и tc. Шейпинг позволяет ограничивать сетевой трафик для отдельных подов или сервисов.
  • Облачные провайдеры (AWS, Azure, GCP). Предоставляют услуги QoS и шейпинга на уровне виртуальных сетей (например, AWS Traffic Mirroring, Azure ExpressRoute).

Различия с другими методами управления трафиком

  • Traffic Policing (полисинг). В отличие от шейпинга, полисинг не буферизирует пакеты, а отбрасывает их сразу при превышении лимита. Это приводит к потерям, но не увеличивает задержку. Полисинг часто используется на границе сети (например, на маршрутизаторе провайдера), где буферизация нежелательна.
  • Rate Limiting (ограничение скорости). Более простой механизм, который может быть реализован как шейпингом, так и полисингом. В узком смысле rate limiting — это установка жёсткого предела, без сглаживания.
  • Congestion Avoidance (предотвращение перегрузок). Методы, такие как RED или WRED, работают на уровне управления очередью и могут дополнять шейпинг, но не заменяют его.

Критика и ограничения

  • Увеличение задержки. Буферизация пакетов при шейпинге неизбежно приводит к росту задержки (latency) и джиттера, что может негативно сказываться на интерактивных приложениях (например, онлайн-игры, VoIP). При неправильной настройке (слишком большой буфер) задержка может стать неприемлемой.
  • Сложность настройки. Для эффективного шейпинга требуется глубокое понимание структуры трафика, приоритетов и характеристик сети. Неправильная классификация или выбор параметров (CIR, Burst Size) могут ухудшить производительность.
  • Проблемы с TCP. Шейпинг может нарушать работу TCP-протокола, особенно если буферы велики. TCP использует механизм управления перегрузкой (congestion control), и искусственное сглаживание трафика может приводить к неоптимальной работе (например, к снижению скорости из-за ложных тайм-аутов).
  • Этичные и юридические аспекты. Провайдеры иногда используют шейпинг для дискриминации определённых типов трафика (например, замедление P2P, стриминговых сервисов) без уведомления пользователей. Это может нарушать принципы сетевой нейтральности (net neutrality). В ряде стран (например, в США до отмены правил в 2017 году, в ЕС — действуют ограничения) такие практики регулируются законодательством.

Примеры реализации

  • MikroTik RouterOS. Встроенный инструмент «Simple Queues» позволяет настроить шейпинг для отдельных IP-адресов или подсетей с указанием CIR, Burst и приоритетов. Более сложные сценарии реализуются через «Queue Tree» с использованием HTB.
  • Linux tc. Пример команды для ограничения скорости на интерфейсе eth0 до 1 Мбит/с с возможностью кратковременного всплеска до 2 Мбит/с:

``bash tc qdisc add dev eth0 root tbf rate 1mbit burst 2mbit latency 50ms ``

  • Cisco IOS. Настройка шейпинга на интерфейсе с использованием MQC (Modular QoS CLI):

`` policy-map SHAPE class class-default shape average 1000000 interface GigabitEthernet0/0 service-policy output SHAPE ``

Источники

  • Стивенс У. Р. «TCP/IP. Протоколы, архитектура, реализация» (главы по управлению трафиком).
  • Таненбаум Э., Уэзеролл Д. «Компьютерные сети» (5-е издание, раздел 5.2.4 — Traffic Shaping).
  • RFC 2475 (An Architecture for Differentiated Services).
  • RFC 2212 (Specification of Guaranteed Quality of Service).
  • Документация Linux по traffic control (man tc, man tc-tbf, man tc-htb).
  • Документация Cisco по QoS (Cisco IOS Quality of Service Solutions Configuration Guide).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →