8. Качество обслуживания (QoS)¶
Механизмы QoS ПАК “Фортикс” позволяют назначать различные дисциплины обслуживания входящего и исходящего трафика. В зависимости от применённых политик дисциплин для выбранных классов трафика механизмы QoS позволяют:
управлять гарантированной полосой пропускания;
задавать предельную полосу пропускания;
приоритизировать трафик;
управлять контролируемой перегрузкой.
8.1. Величины скорости полос пропускания¶
При настройке полос пропускания используются величины скорости, которые задаются в виде числа и необязательного постфикса для выбора единицы измерения согласно таблице 8.1.
Постфикс |
Единица измерения |
|---|---|
нет |
бит в секунду |
kbps |
килобайт в секунду |
mbps |
мегабайт в секунду |
kbit |
килобит в секунду |
mbit |
мегабит в секунду |
bps |
байт в секунду |
Если постфикс не указан, скорость полосы пропускания измеряется в битах в секунду.
8.2. Классификация¶
Классификация трафика в ПАК “Фортикс” осуществляется непосредственно перед его отправкой на интерфейс (для дисциплин обслуживания исходящего трафика) или сразу после его получении (для дисциплин обслуживания входящего трафика).
Для создания и настройки классов применяется команда:
# set qos class <class-name>
где <class-name> – слово.
Пример применения команды для создания и настройки классов:
# set qos class voip
По умолчанию создан пустой класс all, который относится к любому IPv4/IPv6-трафику. Если в классе не указаны никакие правила отбора, он считается применимым для любого трафика. Если в классе задано хотя бы одно правило, оно “ограничивает” действие класса согласно заданному правилу.
Настройка классов осуществляется на следующем уровне конфигурации:
[edit qos class <class-name>]
где <class-name> – слово.
На данном уровне конфигурации доступны следующие настройки:
description <description>– описание класса, где<description>– строка;ether– применить класс к Ethernet-трафику и перейти на уровень конфигурации Ethernet-трафика:from address <address>– указать адрес источника, где<address>– MAC-адрес в форматеxx:xx:xx:xx:xx:xx;to address <address>– указать адрес назначения, где<address>– MAC-адрес в форматеxx:xx:xx:xx:xx:xx;
ipv4|ipv6– применить класс к IPv4/IPv6-трафику и перейти на уровень конфигурации IPv4/IPv6-трафика:fragment df|first|mf|no(только для ipv4) – указать флаг фрагментации, гдеdf– установлен флаг DF,first– первый фрагмент,mf– установлен флаг MF,no– не фрагментированный пакет;from address <address>– указать адрес источника, где<address>– IPv4-адрес в форматеA.B.C.D[/mask]или IPv6-адрес в форматеA:B:..:H[/mask]в зависимости от уровня конфигурации;to address <address>– указать адрес назначения, где<address>– IPv4-адрес в форматеA.B.C.D[/mask]или IPv6-адрес в форматеA:B:..:H[/mask]в зависимости от уровня конфигурации;from port high|low <port-number>– указать верхнюю/нижнюю границу значения номера порта источника, гдеhigh– верхняя граница,low– нижняя граница,<port-number>– число от 1 до 65535;to port high|low <port-number>– указать верхнюю/нижнюю границу значения номера порта назначения, гдеhigh– верхняя граница,low– нижняя граница,<port-number>– число от 1 до 65535;tos <hex-value>– задать ToS, где<hex-value>– тип ToS.
Пример применения правила в классе:
# set qos class voip ipv4 from address 192.168.1.133
8.3. Дисциплины исходящего трафика¶
Настройка дисциплин для исходящего трафика осуществляется на следующем уровне конфигурации:
[edit qos qdisc]
ПАК “Фортикс” поддерживает дисциплины обслуживания следующих типов:
htb– иерархическая дисциплина, позволяющая создавать древовидные структуры очередей;codel– политика борьбы с перегрузками, в которой ограничивается не размер очереди, а максимальное время нахождения пакета в очереди;fq-codel– политика борьбы с перегрузками (в отличие отcodelпакеты разделяются на некоторое количество очередей на основе соединения);pfifo-fast– простая очередь;red– Random Early Detection (произвольное раннее обнаружение);sfq– Stochastic Fairness Queueing);noqueue– нет очереди.
Дисциплина типа htb позволяет классифицировать трафик и направлять его в различные очереди, дисциплины других типов могут быть использованы в качестве дочерних. Дисциплина данного типа выступает в роли основного “связующего” средства механизма QoS.
Настройка механизма QoS в общем случае осуществляется следующим образом:
При использовании дисциплины типа
htbсоздаются классы трафика с помощью команды:
set qos class <class-name>
где <class-name> – слово.
Создаются и настраиваются политики дисциплин требуемого типа с помощью команды:
set qos qdisc <discipline-type> <discipline-name>
где
<discipline-type>– тип дисциплины (см. выше);<discipline-name>– слово.
Присоединяются дисциплины к выходам интерфейсов с помощью команды:
set interface <interface-type> <interface-name> egress qdisc <qos-discipline-name>
где
<interface-type>– тип существующего интерфейса;<interface-name>– имя существующего интерфейса;<qos-discipline-name>– имя существующей дисциплины QoS.
8.4. Дисциплина HTB¶
Дисциплина HTB позволяет контролировать полосу пропускания для иерархии классов. Для настройки иерархии необходимо задать несколько полос (band) и, при необходимости, объединить их в дерево.
Для определения полос пропускания применяется команда:
[edit qos qdisc htb main]
# set band <band-name> rate <rate-value>
где
<band-name>– слово;<rate-value>– строка в формате<number>(kbit, mbit, bps..),<number>– число, после которого указывается единица измерения.
Пример применения команды для определения полос пропускания:
# edit qos qdisc htb main
# set band voip rate 100mbit
# set band route rate 900mbit
Для указания ограничения всей полосы пропускания применяется команда:
[edit qos qdisc htb main]
# set ceil <ceil-value>
где <ceil-value> – строка в формате <number>(kbit, mbit, bps..), <number> – число, после которого указывается единица измерения.
Пример применения команды для указания ограничения всей полосы пропускания:
[edit qos qdisc htb main]
# set ceil 10000mbit
В данных примерах не создаётся иерархия полос, полоса в 1000mbit делится между полосами voip и route линейно. При этом полосе voip гарантируется предоставление 1000mbit, а полосе route – 900mbit.
Примечание
Сумма voip rate и route rate не может превышать ограничение ceil политики в 1000mbit.
Для направления трафика в полосы пропускания применяется команда:
# set policy <class-name> band <band-name>
где
<class-name>– имя существующего класса;<band-name>– имя существующей полосы.
Пример применения команды для направления трафика в полосы пропускания:
[edit qos qdisc htb main]
# set policy voip band voip
# set policy
# set default route
В данном примере трафик класса voip направляется в полосу voip, а весь остальной трафик в полосу route.
Для маркировки поля tos у пакетов заданного класса применяется команда:
# set policy <class-name> set ipv4|ipv6 tos <tos-mark>
где
<class-name>– имя существующего класса;ipv4|ipv6– тип трафика;<band-name>– имя существующей полосы.
Пример применения команды для маркировки поля tos:
[edit qos qdisc htb main]
# set policy voip set ipv4 tos 0x46
Для создания иерархии распределения общей полосы выполняется следующий алгоритм:
создать несколько полос, на которые делится общая полоса;
преобразовать полосы в дочерние для общей полосы.
Пример применения команд для разделения полосы route на две полосы a и b:
Создание полос
aиb:
[edit qos qdisc htb main]
# set band a rate 200mbit
# set band b rate 700mbit
Преобразование полос
aиbв дочерние для полосыroute:
[edit qos qdisc htb main]
# set band a parent route
# set band b parent route
При выполнении вышеуказанных настроек полосы a и b суммарно не смогут использовать полосу больше 900mbit родительской полосы.
Классы трафика могут быть направлены только на те полосы, которые не имеют дочерних. Для этого создаются соответствующие классы для распределения трафика по конечным полосам (не имеющим дочерних полос).
В продолжении примера выше создание классов для распределения трафика по полосам a и b:
[edit qos qdisc htb main]
# top
# set qos class route-a ipv4 to address 192.168.0y.0/24
# set qos class route-b ipv4 to address 192.168.1.0/24
# edit qos qdisc htb main
# set policy route-a band a
# set policy route-b band b
# del default
В данном примере полосы a, b и voip являются конечными. С конечными полосами возможно связать любую ранее настроенную дисциплину, обеспечив тем самым требуемое качество обслуживания.
Пример настройки qos:
[edit qos qdisc htb main]
# top
# set qos qdisc sfq sfq
# set qos qdisc htb main set band a qdisc sfq
# set qos qdisc htb main set band b qdisc sfq
# set qos qdisc htb main set band voip qdisc sfq
8.5. Дисциплина для входящего трафика¶
Дисциплина для входящего трафика ingress позволяет использовать следующие политики:
mirror– для перенаправления/зеркалирования трафика в другой интерфейс;rate– для ограничения полосы пропускания на вход;set– для задания поля dscp/tos.
Политика работает с выбранным классом трафика, в связи с чем первоначально необходимо создать требуемые классы или использовать класс all, например:
# set interface ether en0 ingress policy all rate ceil 1000mbit
# set interface ether en0 ingress policy voip set ipv4 tos 0x46
8.6. Интерфейс типа ifb¶
Дисциплины исходящего трафика позволяют управлять трафиком перед непосредственной отправкой. Для управления трафиком на приёме (например, при шифровании трафика для выделения гарантированной полосы для класса, который отправляется в туннель на зашифрование) используется виртуальный интерфейс типа ifb.
Настройка QoS для управления трафиком на приёме в общем случае осуществляется следующим образом:
создаётся интерфейс ifb;
к интерфейсу привязывается необходимая дисциплина;
для всех интерфейсов, попадающих в
ingressи разделяющих общую дисциплину на интерфейсе ifb, настраивается перенаправление трафика на интерфейс типаifb.
Пример настройки QoS для управления трафиком на приёме:
# set interface ifb ifb0 enable
# set interface ifb ifb0 egress qdisc main
# set interface ether en0 ingress mirror all interface ifb0 redirect
# set interface ether en1 ingress mirror all interface ifb0 redirect
При применении данных настроек весь трафик, приходящий на интерфейсы en0 и en1, обслуживается дисциплиной main.
Предупреждение
При зеркалировании на интерфейс трафик отправляется сразу на исходящую дисциплину, не попадая в дисциплину ingress интерфейса, на который осуществляется перенаправление. Таким образом, дисциплина ingress политики на интерфейсе ifb не действует для зеркалируемого трафика.
8.7. Диагностика¶
Для просмотра информации о применённых входящих и выходящих дисциплинах для указанного интерфейса применяется команда:
> show interface <interface-type> <interface-name> qdisc
где
<interface-type>– тип существующего интерфейса;<interface-name>– имя существующего интерфейса.
Пример применения команды для просмотра информации о входящих и исходящих дисциплинах для указанного интерфейса:
> show interface ether en0 qdisc