Общие принципы работы#
Для того, чтобы механизм 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 до тех пор, пока она не будет переопределена.