Сетевой планировщик , также называемый планировщиком пакетов , дисциплиной очередей ( qdisc ) или алгоритмом очередей , является арбитром на узле в сети связи с коммутацией пакетов . Он управляет последовательностью сетевых пакетов в очередях передачи и приема стека протоколов и контроллера сетевого интерфейса . Существует несколько сетевых планировщиков, доступных для различных операционных систем , которые реализуют многие из существующих алгоритмов сетевого планирования .
Логика сетевого планировщика решает, какой сетевой пакет пересылать следующим. Сетевой планировщик связан с системой очередей, временно сохраняя сетевые пакеты до тех пор, пока они не будут переданы. Системы могут иметь одну или несколько очередей, в этом случае каждая может содержать пакеты одного потока , классификации или приоритета.
В некоторых случаях может быть невозможно запланировать все передачи в рамках ограничений системы. В этих случаях сетевой планировщик отвечает за принятие решения о том, какой трафик пересылать, а какой отбрасывать .
Планировщик сети может нести ответственность за реализацию конкретных инициатив по управлению сетевым трафиком . Управление сетевым трафиком — это обобщающий термин для всех мер, направленных на снижение перегрузки сети , задержек и потерь пакетов. В частности, активное управление очередями (AQM) — это выборочное отбрасывание поставленных в очередь сетевых пакетов для достижения более масштабной цели предотвращения чрезмерной перегрузки сети. Планировщик должен выбирать, какие пакеты отбрасывать. Формирование трафика сглаживает требования к пропускной способности потоков трафика, задерживая пакеты передачи, когда они ставятся в очередь в пакетах. Планировщик определяет время для передаваемых пакетов. Качество обслуживания (QoS) — это приоритезация трафика на основе класса обслуживания ( дифференцированные услуги ) или зарезервированного соединения ( интегрированные услуги ).
Со временем было разработано много дисциплин очередей в сети. Каждая из них обеспечивает определенное переупорядочивание или отбрасывание сетевых пакетов внутри различных буферов передачи или приема . [1] Дисциплины очередей обычно используются как попытки компенсировать различные сетевые условия, такие как уменьшение задержки для определенных классов сетевых пакетов, и обычно используются как часть мер QoS. [2] [3] [4]
Классовые дисциплины очередей позволяют создавать классы, которые работают как ветви на дереве. Затем можно задать правила для фильтрации пакетов в каждый класс. Каждый класс может сам назначить другую классовую или бесклассовую дисциплину очередей. Бесклассовые дисциплины очередей не позволяют добавлять к ним больше дисциплин очередей. [5]
Примеры алгоритмов, подходящих для управления сетевым трафиком, включают:
Некоторые из вышеперечисленных модулей были реализованы как модули ядра Linux [13] [14] и находятся в свободном доступе .
Bufferbloat — это явление в сетях с коммутацией пакетов, в котором избыточная буферизация пакетов приводит к высокой задержке и изменению задержки пакетов . Bufferbloat можно устранить с помощью сетевого планировщика, который стратегически отбрасывает пакеты, чтобы избежать ненужно большого отставания в буферизации. Примерами служат CoDel , FQ-CoDel и случайное раннее обнаружение .
Планировщик пакетов ядра Linux является неотъемлемой частью сетевого стека ядра Linux и управляет кольцевыми буферами передачи и приема всех сетевых карт, работая на уровне 2 модели OSI и обрабатывая , например, кадры Ethernet .
Планировщик пакетов настраивается с помощью утилиты, называемой tc
(сокращение от traffic control ). В качестве дисциплины очередей по умолчанию планировщик пакетов использует реализацию FIFO, называемую pfifo_fast , [15] хотя systemd с версии 217 изменяет дисциплину очередей по умолчанию на fq_codel
. [16]
Утилиты ifconfig
и ip
позволяют системным администраторам настраивать размеры буферов txqueuelen
и rxqueuelen
для каждого устройства отдельно в терминах количества кадров Ethernet независимо от их размера. Сетевой стек ядра Linux содержит несколько других буферов, которые не управляются сетевым планировщиком. [a]
Фильтры Berkeley Packet Filter могут быть присоединены к классификаторам планировщика пакетов. Функциональность eBPF, представленная в версии 4.1 ядра Linux в 2015 году, расширяет классические программируемые классификаторы BPF до eBPF. [17] Их можно скомпилировать с помощью бэкэнда LLVM eBPF и загрузить в работающее ядро с помощью tc
утилиты. [18]
ALTQ — это реализация сетевого планировщика для BSD . Начиная с версии OpenBSD 5.5 ALTQ был заменен планировщиком HFSC.