Приоритизация трафика

QoS позволяет приоритизировать поток данных, передаваемый по каналам связи IP, обеспечивая трафик необходимым сервисом обслуживания в соответствии с заданными техническими рамками.

Общие принципы работы

Для работы QoS в ARMA Стена необходимо соблюдать следующую последовательность действий:

  • создать политику обработки трафика;

  • применить политику обработки трафика к входящему или исходящему интерфейсу.

После настройки QoS система автоматически начинает регистрировать события в трёх направлениях:

  • журналирование команд tc;

  • регистрация изменений конфигурации QoS;

  • мониторинг текущего состояния QoS.

Для просмотра в консоле событий, связанных с изменениями конфигурации QoS и командами tc в глобальном журнале, возможно использовать утилиту grep, указав следующий шаблон: «show logging | grep -E "\sngfwos\s+qos(\[|:)"». Команда выполняется в терминале суперпользователя:

admin@ngfwos:~$ sudo -i
root@ngfwos:~# show loggin | grep -E "\sngfwos\s+qos(\[|:)"

Записи об изменениях конфигурации QoS в глобальном журнале возможно просмотреть в консоли, выполнив в эксплуатационном режиме команду «show logging users».

Единицы измерения

При настройке политики обработки трафика необходимо задавать скорость передачи данных. ARMA Стена оперирует следующими префиксами и суффиксами единиц измерения скорости передачи данных:

  • Префиксы – возможно указать в десятичном или двоичном формате:

    • десятичный формат:

    kbit  (10^3)    килобит в секунду
    mbit  (10^6)    мегабит в секунду
    gbit  (10^9)    гигабит в секунду
    tbit  (10^12)   терабит в секунду
    
    kbps  (8*10^3)  килобит в секунду
    mbps  (8*10^6)  мегабит в секунду
    gbps  (8*10^9)  гигабит в секунду
    tbps  (8*10^12) терабит в секунду
    
    • двоичный формат:

    kibit (2^10 = 1024)    кибибит в секунду
    mibit (2^20 = 1024^2)  мебибит в секунду
    gibit (2^30 = 1024^3)  гибибит в секунду
    tbit  (2^40 = 1024^4)  тебибит в секунду
    
    kibps (1024*8)         кибибит в секунду
    mibps (1024^2*8)       мебибит в секунду
    gibps (1024^3*8)       гибибит в секунду
    tibps (1024^4*8)       тебибит в секунду
    
  • Суффиксы – указываются в битах или байтах:

    • «bit» – краткое обозначение битов:

    kbit   килобит в секунду
    mbit   мегабит в секунду
    gbit   гигабит в секунду
    tbit   терабит в секунду
    
    • «b» – краткое обозначение байтов:

    kbps   килобайт в секунду
    mbps   мегабайт в секунду
    gbps   гигабайт в секунду
    

Классы

QoS позволяет классифицировать трафик в соответствии с заданными параметрами.

Для определения, к какому классу относится трафик, необходимо установить критерии соответствия. Пакет ассоциируется с определённым классом в том случае, если обнаруживается правило с подходящим классификатором.

Каждый класс обладает числовым идентификатором, который задаётся в процессе его настройки. Классу возможно назначить несколько классификаторов. Классификатор содержит множественные критерии соответствия. Трафик считается подошедшим, если все установленные критерии выполняются одновременно.

Для классификации трафика возможно использовать следующие параметры:

  • «ether» – протокол. Возможно указать следующие параметры для классификации:

    • MAC-адрес отправителя;

    • MAC-адрес получателя;

  • «interface» – имя интерфейса;

  • «ip» – протокол IPv4. Возможно указать следующие параметры для классификации:

    • метка DSCP;

    • максимальная длина тела пакета;

    • протокол, IPv4-адрес отправителя;

    • IPv4-адрес получателя;

    • номер порта отправителя;

    • номер порта получателя;

    • флаги TCP;

  • «ipv6» – протокол IPv6. Возможно указать следующие параметры для классификации:

    • метка DSCP;

    • максимальная длина тела пакета;

    • протокол;

    • IPv6-адрес отправителя;

  • «mark» – метка межсетевого экрана;

  • «vif» – идентификатор VLAN-интерфейса.

При задании классификатора возможно использовать клавишу «Tab» на клавиатуре для вывода информации о доступных к использованию параметров команды. Пример:

[edit]
admin@ngfwos# set qos policy shaper test class 2 match test
Possible completions:
   description          Description
 > ether                Ethernet header match
   interface            Interface to use
 > ip                   Match IP protocol header
 > ipv6                 Match IPv6 protocol header
   mark                 Match on mark applied by firewall
   vif                  Virtual Local Area Network (VLAN) ID for this match

Примечание

Классификатор с установленным параметром «IPv4» - «TCP» соответствует IPv4-пакетам с длиной заголовка 20 байт.

Классификатор с установленным параметром «IPv6» - «TCP» соответствует IPv6-пакетам, не имеющим расширенных заголовков.

Трафик, который не соответствует ни одному назначенному классу, обрабатывается классом по умолчанию.

Создание политики обработки трафика

ARMA Стена поддерживает следующие политики обработки трафика:

  • «Drop Tail»;

  • «Fair Queue»;

  • «FQ-CoDel»;

  • «Limiter»;

  • «Network Emulator»;

  • «Priority Queue»;

  • «Random Detect»;

  • «Rate Control»;

  • «Round Robin»;

  • «Shaper»;

  • «Cake».

Возможно настроить любое количество политик, но для каждого интерфейса, входящего или исходящего с учётом направления трафика, применима только одна политика.

Некоторые политики обработки трафика могут быть объединены с помощью встраивания, после чего встроенная политика будет применена к классу трафика, соответствующему основной политике.

Примечание

Если необходимо выбрать политику для исходящего трафика, но при этом нет понимания, какая именно политика необходима в конкретном случае, рекомендуется использовать политику «Shaper», оставив по умолчанию встроенную в её очереди политику «FQ-CoDel».

Drop Tail

Порядок организации трафика: PFIFO.

Применение к направлению трафика: исходящий трафик.

Drop Tail – наиболее простой механизм управления очередью – отбрасываются все вновь пришедшие пакеты, не помещающиеся в буфер. Политика требует наименьших ресурсов, но используется крайне редко вследствие неэффективной обработки трафика.

Для настройки фильтрации трафика по алгоритму Drop Tail необходимо ввести команду:

set qos policy drop-tail <policy-name> queue-limit <number-of-packets>

где:

  • <policy-name> – уникальное имя политики;

  • <number-of-packets> – размер очереди, измеряемый в пакетах. Возможно указать значение в диапазоне от «1» до «4294967295».

Fair Queue

Порядок организации трафика: SFQ.

Применение к направлению трафика: исходящий трафик.

Fair Queue – планировщик пакетов, который распределяет пакеты по очередям на основе потоков. Он балансирует трафик в равной степени между дочерними очередями, чтобы пакеты из каждого потока отправлялись строго по очереди, не позволяя таким образом одному потоку преобладать над другими.

Для создания фильтрации трафика по алгоритму Fair Queue необходимо ввести команду:

set qos policy fair-queue <policy-name>

где <policy-name> - уникальное имя политики.

Для распределения трафика по очередям Fair Queue использует классификатор, основанный на адресе отправителя, адресе получателя и номере порта отправителя. Алгоритм распределения использует специальные хеш-блоки. Каждый пакет должен принадлежать уникальному потоку. Поскольку несколько потоков могут попасть в один хеш-блок, алгоритм хеширования задействуется через настраиваемые интервалы времени. Рекомендуемое значение временного интервала составляет «10» секунд.

Для установки времени, через которое будет задействован алгоритм хеширования необходимо ввести команду:

set qos policy fair-queue <policy-name> hash-interval <seconds>

где <seconds> – время в секундах. Возможно указать значение в диапазоне от «1» до «4294967295».

При завершении очереди каждый хеш-блок с данными используется в кольцевом порядке следования. Возможно сконфигурировать длину очереди, используя параметр «queue-limit» в следующей команде:

set qos policy fair-queue <policy-name> queue-limit <limit>

где <limit> – максимальное количество пакетов, ожидающих обработки в очереди. Возможно указать значение в диапазоне от «1» до «127».

Fair Queue – политика без шейпинга, используется только в случае, если исходящий интерфейс действительно перегружен трафиком. Если в канале есть доступная для использования полоса пропускания, то существует возможность встроить Fair Queue в политику с шейпингом на основе классов.

FQ-CoDel

Порядок организации трафика: Fair/Flow Queue CoDel.

Применение к направлению трафика: исходящий трафик.

Политика FQ-CoDel направлена на борьбу с переполнением буфера и на снижение задержек.

Политика использует стохастическую модель распределения для классификации входящих пакетов на различные потоки и применяется для обеспечения равных долей пропускной способности всем потокам. Каждый поток обрабатывается в соответствии с дисциплиной CoDel. Переупорядочение пакетов в составе потока исключено, поскольку дисциплина CoDel использует внутреннюю очередь FIFO.

Политика FQ-CoDel позволяет эффективное использование с параметрами по умолчанию на скорости 10 Гбит/сек.

При скорости 1 Гбит/сек и ниже рекомендуется уменьшить значение параметра «queue-limit» до «1000» пакетов или меньше.

При скорости 10 Мбит/сек рекомендуется установить значение параметра «queue-limit» в «600» пакетов.

При скорости 100 Мбит/сек и выше, если политика FQ-CoDel встроена в политику Shaper, рекомендуется установить значение параметра «quantum» в «8000» байт для снижения нагрузки на процессор.

При скорости менее 40 Мбит/сек рекомендуется уменьшить значение параметра «quantum» до «300» байт.

При скорости менее 3 Мбит/сек рекомендуется: уменьшить значение параметра «quantum» до «300» байт; увеличить значение параметра «target» до «15» миллисекунд и увеличить значение параметра «interval» до «150» миллисекунд.

Список команд настройки FQ-CoDel:

  1. Команда присвоения уникального имени для политики фильтрации трафика FQ-CoDel:

set qos policy fq-codel <policy name>
  1. Команда установки максимального количества байт, извлекаемых из очереди за один раз:

set qos policy fq-codel <policy name> codel-quantum <bytes>

где <bytes> – количество байт. Возможно указать значение в диапазоне от «0» до «1048576». По умолчанию используется значение «1514».

  1. Команда установки количества дочерних очередей, в которые будут помещаться классифицированные пакеты:

set qos policy fq-codel <policy name> flows <number-of-flows>

где <number-of-flows> – значение количества дочерних очередей. Возможно указать значение в диапазоне от «1» до «65536». По умолчанию используется значение «1024».

  1. Команда установки периода времени, используемого управляющим циклом CoDel:

set qos policy fq-codel <policy name> interval <miliseconds>

где <miliseconds> – значение периода времени в миллисекундах. Возможно указать значение в диапазоне от «0» до «4294967295». По умолчанию используется значение «100».

Период времени необходим для обнаружения устоявшихся очередей и исключения значительного увеличения минимально определённой задержки.

  1. Команда установки предельного размера очереди:

set qos policy fq-codel <policy-name> queue-limit <number-of-packets>

где <number-of-packets> – значение предельного размера очереди в пакетах. Возможно указать значение в диапазоне от «2» до «10999». По умолчанию используется значение «1024».

При достижении предельного размера все новые пакеты отбрасываются.

  1. Команда установки минимально допустимой задержки в ожидающей/устоявшейся очереди:

set qos policy fq-codel <policy-name> target <miliseconds>

где <miliseconds> – значение минимально допустимой задержки в миллисекундах. Возможно указать значение в диапазоне от «0» до «4294967295». По умолчанию используется значение «5».

Limiter

Порядок организации трафика: Ingress Policer.

Применение к направлению трафика: входящий трафик.

Политика Limiter подразумевает простое ограничение входящих потоков трафика. Возможно определить несколько классов трафика и применить к каждому классу свои ограничения. Механизм не имеет возможность удерживать пакеты, как это делает механизм шейпинга. Трафик, превышающий установленные ограничения полосы пропускания, отбрасывается.

Допускается настроить до 4090 классов с различными настройками и политикой по умолчанию, которая будет применяться к любому трафику, не соответствующему ни одному из настроенных классов.

Список команд настройки Limiter:

  1. Команда присвоения уникального имени для политики фильтрации трафика Limiter:

set qos policy limiter <policy-name>
  1. Команда установки числового идентификатора класса:

set qos policy limiter <policy-name> class <class id>

где <class id> – значение идентификатора класса. Возможно указать значение в диапазоне от «1» до «4090».

  1. Команда, устанавливающая имя и описание правилу в указанном классе:

set qos policy limiter <policy-name> class <class ID> match <match-name> description <description>

где:

  • <match-name> – имя правила;

  • <description> – описание правила.

  1. Команда установки максимально допустимой полосы пропускания для класса:

set qos policy limiter <policy-name> class <class-ID> bandwidth <number>

где <number> – значение максимально допустимой полосы пропускания.

Возможные варианты указания значения максимально допустимой полосы пропускания:

<number>     бит в секунду
<number>bit  бит в секунду;
<number>kbit килобит в секунду;
<number>mbit мегабит в секунду;
<number>gbit гигабит в секунду;
<number>tbit терабит в секунду;
<number>%    процент от скорости соединения интерфейса.
  1. Команда установки размера всплеска трафика для класса:

set qos policy limiter <policy-name> class <class-ID> burst <burst-size>

где <burst-size> – значение размера всплеска трафика в байтах. По умолчанию используется значение «15».

Возможные варианты указания значения размера всплеска трафика:

<burst-size>   байт;
<burst-size>kb килобайт;
<burst-size>mb мегабайт;
<burst-size>gb гигабайт.
  1. Команда установки приоритета правила:

set qos policy limiter <policy-name> class <class ID> priority <value>

где <value> – значение приоритета. Возможно указать значение в диапазоне от «0» до «20». По умолчанию используется значение «20».

Для обработки входящего трафика на интерфейсе возможно применить только одну политику – политика Limiter. Отсутствует возможность применения политики с шейпингом к входящему трафику на любом интерфейсе, поскольку шейпинг работает исключительно для исходящего трафика.

Существует сценарий, позволяющий применить политику с шейпингом к входящему трафику, перенаправив его на промежуточный виртуальный интерфейс «Intermediate Functional Block». К этому виртуальному интерфейсу возможно применить любую политику, которая работает для исходящего трафика.

Пример настройки политики с шейпингом к входящему трафику на интерфейсе «eth0»:

set qos policy shaper <my-ingress-shaping> bandwidth 1000kbit
set qos policy shaper <my-ingress-shaping> default bandwidth 1000kbit
set qos policy shaper <my-ingress-shaping> default queue-type fair-queue

set qos interface ifb0 egress <my-ingress-shaping>
set interfaces ethernet eth0 redirect ifb0

Примечание

Механизм «Intermediate Functional Block» необходимо настроить после установки параметров конфигурации политики обработки трафика. В противном случае возникнет ошибка «RTNETLINK answer: File exists». Для исправления этой ошибки необходимо ввести команду «sudo ip link delete ifb0».

Network Emulator

Порядок организации трафика: Network Emulator + Token Bucket Filter.

Применение к направлению трафика: исходящий трафик.

Политика Network Emulator имитирует условия эксплуатации реальной сети. Политика позволяет сконфигурировать следующие параметры:

  • пропускную способность;

  • всплеск трафика;

  • задержку при передаче данных;

  • процент потери пакетов;

  • неправильные пакеты или пакеты с нарушением порядка следования.

Данная политика используется для определения поведения приложения в конкретных условиях эксплуатации сети.

Список команд настройки Network Emulator:

  1. Команда присвоения уникального имени для политики фильтрации трафика Limiter:

set qos policy network-emulator <policy-name>
  1. Команда установки пропускной способности для политики фильтрации трафика:

set qos policy network-emulator <policy-name> bandwidth <number>
  1. Команда установки задержки пакетов, отправляемых из интерфейса:

set qos policy network-emulator <policy-name> delay <delay>

где <delay> – значение времени задержки пакета в миллисекундах. По умолчанию используется значение «50».

  1. Команда установки в процентном соотношении количества неправильных пакетов:

set qos policy network-emulator <policy-name> corruption <percent>

где <percent> – значение неправильных пакетов в процентах.

В случайном порядке для выбранного процента пакетов вводится случайная ошибка.

  1. Команда установки допустимых потерь пакетов:

set qos policy network-emulator <policy-name> loss <percent>

где <percent> – значение допустимой потери пакетов в процентах.

  1. Команда установки количества пакетов с нарушенным порядком следования:

set qos policy network-emulator <policy-name> reordering <percent>

где <percent> – количество пакетов с нарушенным порядком следования в процентах.

  1. Команда для установки максимального числа пакетов, которые одновременно находятся в очереди:

set qos policy network-emulator <policy-name> queue-limit <limit>

где <limit> – количество пакетов в очереди. Возможно использовать значение в диапазоне от «1» до «4294967295».

Priority Queue

Порядок организации трафика: PRIO.

Применение к направлению трафика: исходящий трафик.

Политика Priority Queue является классовой политикой планирования. При использовании данной политики пакеты не задерживаются, а удаляются из очередей в соответствии с заданным приоритетом. Priority Queue не является политикой с шейпингом.

Возможно настроить до 7 очередей, которые определяются как классы с различными приоритетами. Пакеты помещаются в очереди в соответствии с заданным классификатором. Пакеты передаются из очередей в порядке приоритета. Если классы с высоким приоритетом заполняются пакетами, пакеты из классов с пониженным приоритетом будут передаваться только после уменьшения объёма трафика из классов с более высоким приоритетом.

Примечание

Политика Priority Queue предусматривает задание числового идентификатора класса для обозначения приоритета от «1» до «7». Чем ниже значение, тем выше приоритет.

Priority Queue позволяет определить различные типы соответствующих классам правил:

  • «ether» – соответствие протоколам Ethernet;

  • «interface» – идентификатор интерфейса;

  • «ip» – соответствие протоколу IPv4;

  • «ipv6» – соответствие протоколу IPv6;

  • «mark» – соответствие по метке, установленной брандмауэром;

  • «vif» – идентификатор виртуальной локальной сети.

В Priority Queue возможно встраивать другие политики в классы, включая класс по умолчанию, с помощью параметра «queue-type»:

admin@ngfwos# set qos policy priority-queue <policy-name> class <class-id> queue-type
Possible completions:
   drop-tail            First-In-First-Out - используется по умолчанию;
   fair-queue           Stochastic Fair Queue;
   fq-codel             Fair Queue Codel;
   priority             Priority queuing;
   random-detect        Random Early Detection.

Список команд настройки Priority Queue:

  1. Команда присвоения уникального имени для политики фильтрации трафика Priority Queue:

set qos policy priority-queue <policy-name>
  1. Команда установки числового идентификатора класса:

set qos policy priority-queue <policy-name> class <class-id>

где <class id> – значение идентификатора класса. Возможно указать значение в диапазоне от «1» до «7».

  1. Команда установки максимально допустимого размера очереди:

set qos policy priority-queue <policy-name> class <class-id> queue-limit <limit>

где <limit> – размер очереди. Возможно указать значение в диапазоне от «1» до «4294967295».

При достижении ограничения новые пакеты отбрасываются.

Random-Detect

Порядок организации трафика: Generalized Random Early Drop.

Применение к направлению трафика: исходящий трафик.

При использовании политики Random Detect пакеты случайным образом отбрасываются из очереди перед тем, как она будет заполнена. Политика Random Detect не является политикой с шейпингом. В отличие от стандартной дисциплины RED, политика Random Detect использует обобщённую политику случайного раннего обнаружения, которая предоставляет различные виртуальные очереди в зависимости от значения приоритета IP. Благодаря этому некоторые виртуальные очереди могут пропускать больше пакетов, чем другие. Это достигается за счёт использования первых трёх бит поля «ToS» для классификации потоков данных и принятия решения в соответствии с заданными параметрами приоритета IP.

Уровни приоритета, определённые в «RFC 791» (см. Таблица «Уровни приоритета»):

Таблица «Уровни приоритета»

Уровень

Имя

7

Network Control

6

Internetwork Control

5

CRITIC/ECP

4

Flash Override

3

Flash

2

Immediate

1

Priority

0

Routine

Список команд настройки Random-Detect:

  1. Команда присвоения уникального имени для политики фильтрации трафика Random-Detect:

set qos policy random-detect <policy-name>
  1. Команда установки пропускной способности для политики фильтрации трафика Random-Detect:

set qos policy random-detect <policy-name> bandwidth <number>

Значение должно соответствовать полосе пропускания сетевого интерфейса.

  1. Команда установки значения приоритета IP:

set qos policy random-detect <policy-name> precedence <IP-precedence-value>

где <IP-precedence-value> – значение приоритета IP. Возможно указать значение в диапазоне от «0» до «7».

Примечание

Чем больше значение приоритета, тем выше приоритет.

  1. Команда установки среднего размера пакета:

set qos policy random-detect <policy-name> precedence <IP-precedence-value> average-packet <bytes>

где <bytes> – значение размера пакета в байтах. Возможно указать значение в диапазоне от «16» до «10240». По умолчанию используется значение «1024».

  1. Команда установки вероятности отбрасывания пакетов:

set qos policy random-detect <policy-name> precedence <IP-precedence-value> mark-probability <value>

где <value> – значение «N» в дробном выражении «1/N». Возможно указать значение в диапазоне от «0» до «4294967295». По умолчанию используется значение «10».

  1. Команда установки максимального количества пакетов для случайного отбрасывания:

set qos policy random-detect <policy-name> precedence <IP-precedence-value> maximum-threshold <packets>

где <packets> – количество пакетов. Возможно указать значение в диапазоне от «0» до «4096». По умолчанию используется значение «18».

При заданном пороговом количестве вероятность отбрасывания будет максимальной.

  1. Команда установки минимального количества пакетов для случайного отбрасывания:

set qos policy random-detect <policy-name> precedence <IP-precedence-value> minimum-threshold <packets>

где <packets> – количество пакетов. Возможно указать значение в диапазоне от «0» до «4096».

Если заданное пороговое значение превышается, пакеты будут отбрасываться.

Значение минимального порога по умолчанию зависит от приоритета IP (см. Таблица «Значение минимального порога»):

Таблица «Значение минимального порога»

Приоритет

Значение по умолчанию

7

16

6

15

5

14

4

13

3

12

2

11

1

10

0

9

  1. Команда установки максимального размера очереди:

set qos policy random-detect <policy-name> precedence <IP-precedence-value> queue-limit <packets>

где <packets> – значение размера очереди, измеряемое в пакетах. Возможно указать значение в диапазоне от «1» до «4294967295».

При достижении заданного значения все новые пакеты отбрасываются.

Если средний размер очереди ниже значения параметра «minimum-threshold», поступающий пакет будет помещён в очередь.

Если средний размер очереди находится в диапазоне значений параметров «minimum-threshold» и «maximum-threshold», поступающий пакет будет помещён в очередь или отброшен. Это зависит от значения параметра «mark-probability».

Если значение параметра «maximum-threshold» установлено, а значение параметра «minimum-threshold» не определено, то последний определяется как 50% от значения параметра «maximum-threshold».

Для данных параметров рекомендовано соблюдать следующее равенство: «minimum-threshold» < «maximum-threshold» < «queue-limit».

Rate Control

Порядок организации трафика: Tocken Bucket Filter.

Применение к направлению трафика: исходящий трафик.

Политика Rate Control является бесклассовой политикой, ограничивающей поток пакетов установленной скоростью. Обработка трафика осуществляется путём контроля расхода токенов. Токены в некоторой степени соответствуют байтам.

Допустимо превышение лимита короткими пакетами. Политика Rate Control накапливает токены, количество которых соответствует объёму трафика при однократном проходе. Токены поступают с постоянной скоростью, пока буфер не заполнится.

Список команд настройки Rate Control:

  1. Команда присвоения уникального имени для политики фильтрации трафика Rate Control:

set qos policy rate-control <policy-name>
  1. Команда установки пропускной способности для политики фильтрации трафика Rate Control:

set qos policy rate-control <policy-name> bandwidth <number>
  1. Команда установки размера буфера для пакетной передачи:

set qos policy rate-control <policy-name> burst <burst-size>

где <burst-size> – значение размера буфера в байтах.

Возможные варианты указания значения размера буфера:

<burst-size>   байт;
<burst-size>kb килобайт;
<burst-size>mb мегабайт;
<burst-size>gb гигабайт.

Примечание

Для сетевых адаптеров с технической пропускной способностью в 10 Мбит/сек необходимо установить буфер ёмкостью в 10 килобайт для достижения заданной скорости. Буфер меньшей емкости быстро приведёт к отбрасыванию пакетов.

  1. Команда установки максимально допустимой задержки пакетов в очереди:

set qos policy rate-control <policy-name> latency <number>

где <number> – значение задержки в миллисекундах. Возможно указать значение в диапазоне от «0» до «4096». По умолчанию используется значение «50».

Round Robin

Порядок организации трафика: Deficit Round Robin.

Применение к направлению трафика: исходящий трафик.

Политика Round Robin является политикой, распределяющей трафик по различным классам. Возможно встроить политику Round Robin в каждый из доступных классов, включая класс по умолчанию.

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

Список команд настройки Round Robin:

  1. Команда присвоения уникального имени для политики фильтрации трафика типа Round Robin:

set qos policy round-robin <policy name>
  1. Команда установки числового идентификатора класса:

set qos policy round-robin <policy name> class <class-id>

где <class id> – значение идентификатора класса. Возможно указать значение в диапазоне от «1» до «4095».

  1. Команда установки размера кванта для определённого идентификатора класса:

set qos policy round-robin <policy name> class <class-ID> quantum <packets>

где <packets> – значение размера кванта. Возможно указать значение в диапазоне от «0» до «4294967295».

Значение будет добавляться на каждом цикле работы счётчика дефицита данных.

  1. Команда установки размера очереди:

set qos policy round-robin <policy name> class <class ID> queue-limit <packets>

где <packets> – количество пакетов в очереди. Возможно указать значение в диапазоне от «1» до «4294967295».

Политику Round Robin возможно встроить в класс другой политики с помощью параметра «queue-type»:

admin@ngfwos# set qos policy round-robin <policy name> class <class-ID> queue-type
Possible completions:
   drop-tail            First-In-First-Out (FIFO) (default)
   fair-queue           Stochastic Fair Queue (SFQ)
   fq-codel             Fair Queue Codel
   priority             Priority queuing
   random-detect        Random Early Detection (RED)

Shaper

Порядок организации трафика: Hierarchical Token Bucket.

Применение к направлению трафика: исходящий трафик.

Политика Shaper не гарантирует низкую задержку, но гарантирует определённую полосу пропускания для различных классов трафика.

Каждый класс имеет гарантированную часть общей пропускной способности, определённой для всей политики. Совокупность всех этих ресурсов, не должна превышать предельную пропускную способность политики.

Если для класса обеспечен гарантированный трафик и доступна дополнительная пропускная способность, возможно использовать параметр «ceiling». Параметр «ceiling» применяется для определения объёма дополнительной полосы пропускания, который возможно предоставить.

Если несколько классов запрашивают дополнительную полосу пропускания, то порядок распределения дополнительного трафика определяется настройкой приоритета. Приоритет указывается в диапазоне от «0» до «7», где «0» - это самый высокий приоритет, а «7» - самый низкий.

Список команд настройки Shaper:

  1. Команда присвоения уникального имени для политики фильтрации трафика Shaper:

set qos policy shaper <policy-name>
  1. Команда установки гарантированной полосы пропускания для всего трафика без учёта классов:

set qos policy shaper <policy-name> bandwidth <number>

где <number> – значение максимально допустимой полосы пропускания.

Возможные варианты указания значения гарантированной полосы пропускания:

<number>     бит в секунду
<number>bit  бит в секунду;
<number>kbit килобит в секунду;
<number>mbit мегабит в секунду;
<number>gbit гигабит в секунду;
<number>tbit терабит в секунду;
<number>%    процент от скорости соединения интерфейса.
  1. Команда установки числового идентификатора класса:

set qos policy shaper <policy-name> class <class-id>

где <class id> – значение идентификатора класса.

  1. Команда установки гарантированной полосы пропускания для трафика определённого класса:

set qos policy shaper <policy-name> class <class-ID> bandwidth <number>
  1. Команда установки размера буфера:

set qos policy shaper <policy-name> class <class-ID> burst <bytes>

где <bytes> – значение размера буфера в байтах. По умолчанию используется значение «15» килобайт.

Возможные варианты указания значения размера буфера:

<burst-size>   байт;
<burst-size>kb килобайт;
<burst-size>mb мегабайт;
<burst-size>gb гигабайт.
  1. Команда установки максимально возможной скорости для определённого класса:

set qos policy shaper <policy-name> class <class-ID> ceiling <bandwidth>

где <bandwidth> – значение максимально возможной скорости.

Возможные варианты указания значения максимально возможной скорости:

<number>             килобит в секунду
<number>%            процент от общей скорости
<number>bit          bit(1), kbit(10^3), mbit(10^6), gbit, tbit
<number>ibit         kibit(1024), mibit(1024^2), gibit(1024^3), tbit(1024^4)
<number>ibps         kibps(1024*8), mibps(1024^2*8), gibps, tibps - Byte/sec
<number>bps          bps(8),kbps(8*10^3),mbps(8*10^6), gbps, tbps - Byte/sec
  1. Команда установки приоритета использования доступной полосы пропускания при условии, что обеспечена гарантированная полоса:

set qos policy shaper <policy-name> class <class-ID> priority <0-7>

где <0-7> – значение приоритета. Возможно указать значение в диапазоне от «0» до «7». По умолчанию используется значение «0».

Политику Shaper возможно встроить в класс другой политики с помощью параметра «queue-type»:

admin@ngfwos# set qos policy shaper <policy-name> class <class-ID> queue-type
Possible completions:
   drop-tail            First-In-First-Out (FIFO)
   fair-queue           Stochastic Fair Queue (SFQ)
   fq-codel             Fair Queue Codel (default)
   priority             Priority queuing
   random-detect        Random Early Detection (RED)

Примечание

Если сконфигурирован класс для трафика VoIP, не рекомендуется устанавливать для него параметр «ceiling». Возможны обрывы соединения вызовов VoIP, когда другие классы начинают использовать выделенную им полосу пропускания.

CAKE

Порядок организации трафика: Deficit mode.

Применение к направлению трафика: исходящий трафик.

CAKE – Common Applications Keeped Enhanced – это комплексная система управления очередями, реализованная в виде дисциплины очередей qdisc для ядра Linux. Она предназначена для замены и улучшения сложной иерархии простых дисков, которая требуется для эффективного решения проблемы переполнения буфера на границе сети.

Список команд настройки CAKE:

  1. Команда присвоения уникального имени для политики CAKE:

set qos policy cake <policy name>
  1. Команда установки пропускной способности для политики CAKE:

set qos policy cake <policy name> bandwidth <number>

где <number> – значение пропускной способности.

Возможные варианты указания значения пропускной способности:

<number>     бит в секунду
<number>bit  бит в секунду;
<number>kbit килобит в секунду;
<number>mbit мегабит в секунду;
<number>gbit гигабит в секунду;
<number>tbit терабит в секунду;
<number>%    процент от скорости соединения интерфейса.
  1. Команда добавления описания:

set qos policy cake <policy name> description <text>
  1. Команда отключения разделения потока:

set qos policy cake <policy name> flow-isolation blind

Весь трафик проходит через одну очередь.

  1. Команда определения потока адресом назначения:

set qos policy cake <policy name> flow-isolation dst-host
  1. Команда определения потока 5-tuple – IP-адрес назначения:

set qos policy cake <policy name> flow-isolation dual-dst-host

Принимаются сначала к адресам назначения, затем к отдельным потокам.

  1. Команда определения потока 5-tuple – IP-адрес источника:

set qos policy cake <policy name> flow-isolation dual-src-host

Принимаются сначала к адресам источников, затем к отдельным потокам.

  1. Команда определения потока всеми атрибутами 5-tuple:

set qos policy cake <policy name> flow-isolation flow

Потоки определяются всеми атрибутами 5-tuple: IP-адрес источника, порт источника, IP-адрес назначения, порт назначения, транспортный протокол.

  1. Команда определения потока парой хостов источник – назначение:

set qos policy cake <policy name> flow-isolation host
  1. Команда поиска NAT перед применением правил изоляции потоков:

set qos policy cake <policy name> flow-isolation nat
  1. Команда определения потока по адресу источника:

set qos policy cake <policy name> flow-isolation src-host
  1. Команда определения потока 5-tuple:

set qos policy cake <policy name> flow-isolation triple-isolate

Применяется к адресам источника, назначения и к отдельным потокам. Параметр используется по умолчанию.

  1. Команда для определения времени прохождения пакетов в оба конца, используемая для активного управления очередью:

set qos policy cake <policy name> rtt <rtt>

где <rtt> – значение времени в миллисекундах. Возможно указать значение в диапазоне от «1» до «3600000». По умолчанию используется значение «100».

Применение политики

После конфигурирования политики обработки трафика её необходимо применить к соответствующему интерфейсу:

set qos interface <ethN> egress <policy name>

где:

  • <ethN> – идентификатор интерфейса;

  • <policy name> – имя политики.

Возможно применить только одну политику для каждого интерфейса и направления. Допускается использовать одну политику для разных интерфейсов и направлений:

set qos interface eth0 ingress WAN-IN
set qos interface eth0 egress WAN-OUT
set qos interface eth1 ingress LAN-IN
set qos interface eth1 egress LAN-OUT
set qos interface eth2 ingress LAN-IN
set qos interface eth2 egress LAN-OUT
set qos interface eth3 ingress TWO-WAY-POLICY
set qos interface eth3 egress TWO-WAY-POLICY
set qos interface eth4 ingress TWO-WAY-POLICY
set qos interface eth4 egress TWO-WAY-POLICY