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

Для того, чтобы механизм QoS в составе ПО Факел функционировал корректно, необходимо выполнить следующие шаги:

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

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

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

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

При настройке политики обработки трафика необходимо задавать скорость передачи данных. При этом следует выбирать корректные единицы измерения для соответствия фактического результата работы ожидаемому. ПО Факел оперирует различными префиксами и суффиксами единиц измерения, описание которых представлено в разделах ниже.

Префиксы#

Префиксы могут указываться как в десятичном в формате, так и в двоичном формате.

kbit  (10^3)      kilobit per second
mbit  (10^6)      megabit per second
gbit  (10^9)      gigabit per second
tbit  (10^12)     terabit per second

kbps  (8*10^3)    kilobyte per second
mbps  (8*10^6)    megabyte per second
gbps  (8*10^9)    gigabyte per second
tbps  (8*10^12)   terabyte per second
     kibit (2^10 = 1024)     kibibit per second
     mibit (2^20 = 1024^2)   mebibit per second
     gibit (2^30 = 1024^3)   gibibit per second
tbit  (2^40 = 1024^4)   tebibit per second

     kibps (1024*8)          kibibyte (KiB) per second
     mibps (1024^2*8)        mebibyte (MiB) per second
gibps (1024^3*8)        gibibyte (GiB) per second
tibps (1024^4*8)        tebibyte (TiB) per second

Суффиксы#

Суффиксы могут указываться как в единицах бит (для краткого обозначения используется bit), так и в единицах байт (для обозначения используется b).

kbit (kilobits per second)
mbit (megabits per second)
gbit (gigabits per second)
     tbit (terabits per second)
kbps (kilobytes per second)
mbps (megabytes per second)
gbps (gigabytes per second)

Классы#

Политики QOS позволяют классифицировать трафик в соответствии с заданными параметрами. Таким образом, класс - это определенный тип трафика, который можно указывать в политике.

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

Классификация трафика#

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

Каждый класс обладает числовым идентификатором, который задается при его настройке.

Примечание

Необходимо понимать, что назначение одного и того же идентификатора класса может быть разным для разных типов политики обработки трафика. Обычно при задании политики требуется указать числовой идентификатор класса, значение которого само по себе не несет никакого смысла, однако это не является обязательным условием для всех политик. Числовой идентификатор класса в очереди определенного приоритета не только идентифицирует сам класс, но также определяет приоритет.

set traffic-policy <policy> <policy-name> class <class-ID> match <class-matching-rule-name>

В приведенной выше команде мы задаем тип политики, с которой будем работать, и выбранное для нее имя; класс (чтобы можно было различать некоторый трафик) и идентифицируемый номер для этого класса; затем мы настраиваем правило соответствия (или фильтр) и имя для него.

В представленной выше команде задается тип политики обработки трафика, имя, класс (для дифференциации определенного трафика) и идентификатор данного класса. Затем для правила задается классификатор и имя правила.

Класс может иметь несколько классификаторов.

set traffic-policy shaper MY-SHAPER class 30 match HTTP
set traffic-policy shaper MY-SHAPER class 30 match HTTPs

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

Пример:

set traffic-policy shaper MY-SHAPER class 30 match HTTP ip protocol tcp
set traffic-policy shaper MY-SHAPER class 30 match HTTP ip source port 80

В данном примере показано задание классификатора для трафика по протоколу TCP с номером порта отправителя 80.

При задании классификатора доступны следующие параметры, определяющие подходящий трафик:

  • интерфейс (имя интерфейса);

  • протокол Ethernet (номер протокола, MAC адрес отправителя, MAC адрес получателя);

  • протокол IPv4 (метка DSCP, максимальная длина пакета, номер протокола, IP адрес отправителя, IP адрес получателя, номер порта отправителя, номер порта получателя, флаги TCP);

  • протокол IPv6 (метка DSCP, максимальная длина тела пакета, номер протокола, IP адрес отправителя, IP адрес получателя, номер порта отправителя, номер порта получателя, флаги TCP);

  • метка межсетевого экрана;

  • идентификатор VLAN (VLAN ID).

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

fakel@fakel# set traffic-policy shaper MY-SHAPER class 30 match MY-FIRST-FILTER
Possible completions:
   description  Description for this match
>  ether        Ethernet header match
   interface    Interface name for this match
>  ip           Match IP protocol header
>  ipv6         Match IPV6 header
   mark         Match on mark applied by firewall
   vif          Virtual Local Area Network (VLAN) ID for this match

Для классификатора также можно указать текстовое описание.

set traffic-policy shaper MY-SHAPER class 30 match MY-FIRST-FILTER description "My filter description"

Примечание

Классификатору с указанными параметрами протокола IPv4 (например, по протоколу TCP) будут соответствовать IPv4 пакеты с заголовком длиной 20 байт, которые, как правило, составляют большую часть трафика IPv4.

Примечание

Классификатору с указанными параметрами протокола IPv6 будут соответствовать IPv6 пакеты без расширения заголовка.

Класс по умолчанию#

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

Действие над трафиком#

После того как для класса настроен фильтр, необходимо также определить, что делать с трафиком этого класса, какой специфический режим обработки трафика ему назначить.

fakel@fakel# set traffic-policy shaper MY-SHAPER class 30
Possible completions:
   bandwidth      Bandwidth used for this class
   burst          Burst size for this class (default: 15kb)
   ceiling        Bandwidth limit for this class
   codel-quantum  fq-codel - Number of bytes used as 'deficit' (default 1514)
   description    Description for this traffic class
   flows          fq-codel - Number of flows (default 1024)
   interval       fq-codel - Interval (milliseconds) used to measure the delay (default 100)
+> match          Class matching rule name
   priority       Priority for usage of excess bandwidth
   queue-limit    Maximum queue size (packets)
   queue-type     Queue type for this class
   set-dscp       Change the Differentiated Services (DiffServ) field in the IP header
   target         fq-codel - Acceptable minimum queue delay (milliseconds)

Например, с помощью команды set traffic-policy shaper MY-SHAPER class 30 set-dscp EF можно изменить значение метки DSCP для пакетов данного класса на Expedite Forwarding.

Допустимые значения для метки DSCP описаны в спецификациях RFC 2474 и RFC 4595.

Двоичное значение

Десятичное значение

Коэффициент отбрасывания

Описание

000000

0

Best Effort

001010

10

Низкий

Assured Forwarding (AF) 11

001100

12

Средний

Assured Forwarding (AF) 12

001110

14

Высокий

Assured Forwarding (AF) 13

010010

18

Низкий

Assured Forwarding (AF) 21

010100

20

Средний

Assured Forwarding (AF) 22

010110

22

Высокий

Assured Forwarding (AF) 23

011010

26

Низкий

Assured Forwarding (AF) 31

011100

28

Средний

Assured Forwarding (AF) 32

011110

30

Высокий

Assured Forwarding (AF) 33

100010

34

Низкий

Assured Forwarding (AF) 41

100100

36

Средний

Assured Forwarding (AF) 42

100110

38

Высокий

Assured Forwarding (AF) 43

101110

46

Expedited forwarding (EF)

Встраивание политики#

Часто возникает необходимость встроить одну политику в другую. То же самое можно сделать и в отношение политик обработки трафика, привязывая новую политику к определенному классу. Например, можно применить разные политики к разным классам сконфигурированной ранее политики Round Robin.

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

Привязать политику обработки трафика к классу можно с помощью параметра queue-type.

set traffic-policy shaper FQ-SHAPER bandwidth 4gbit
set traffic-policy shaper FQ-SHAPER default bandwidth 100%
set traffic-policy shaper FQ-SHAPER default queue-type fq-codel

Из примера выше видно, что параметр queue-type допускает различные комбинации. Также его можно использовать в нескольких политиках.

Примечание

Некоторые политики уже содержат внутри себя другие встроенные политики. Такой политикой является политика «Shaper», каждый из классов которой использует политику FQ-CoDel до тех пор, пока она не будет переопределена.