Приоритизация трафика для каналов IPLN

Общая информация

Стандартное средство QoS не всегда работает для драйверов IPLN. Это связано с тем, что:
a) существует межканальный трафик, который идет в обход ядра системы
b) для разных каналов передача данных идет параллельно, поэтому драйвер быстро выбирает внешнюю очередь и распределяет ее между канальными очередями. Внешней очереди поэтому не образуется, а стандартные средства работают именно с ней.

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

Поддерживаемые операции

Поддерживаются две операции: Существует девять приоритетов, четыре повышающих (8-5), один нормальный (4), четыре понижающих (3-0). Каждому приоритету соответствует соотношение задающее сколько пакетов заданного приоритета нужно передать относительно одного пакета с нормальным приоритетом:
Приоритет Соотношение
0 1:16
1 1:8
2 1:4
3 1:2
4 1:1
5 2:1
6 4:1
7 8:1
8 16:1

 Соблюдаются и соотношения приоритетов относительно друг друга. Максимальное отношение это отношение приоритета 8 относительно приоритета 0 - 256:1.

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

Условия отбора пакетов

Пакеты можно отбирать задавая условия на протокол, длину пакета, порты и ip-адреса. Если заданы несколько условий разного типа, то они объединяются операцией И - т.е. для отбора пакета должны быть выполнены все условия разного типа.

Выбор приема или передачи

Для операции DROP можно указать когда применяется это правило - при приеме(in) и(или) передаче(out). Если не указано то берется in. Можно задать одновременно in и out - тогда правило будет действовать и на прием и на передачу.

Отбор по протоколу

Драйвер понимает следующие протоколы: tcp, udp, icmp, arp, other (другие протоколы tcp/ip) и notip (пакеты протоколов отличных от tcp/ip). Если один протокол инкапсулирован в другом, то будет понят только внешний протокол. Протокол pppoe с точки зрения драйвера будет notip. Если ни один из протоколов не задан, берется tcp и udp.

Отбор по длине пакета

Можно выбирать пакеты по ограничению на длину: maxlen=n. Эта опция в сочетании с опцией "разрешить объединение кадров" позволяет группировать вместе в очереди кадры маленькой длины и передавать их объединяя вместе.

Отбор по портам

Можно выбирать пакеты задавая условия на порт источника (sports=<список>) и на порт назначения (dports=<список>). Отбор по портам действует  только для протоколов udp и tcp. В одном списке можно задать до 10-ти портов или диапазонов портов. Диапазон задается двумя значениями через ':' port1:port2. Если при задании диапазона port1 > port2, то port1 и port2 будут поменяны местами. Поэтому port1:port2 и port2:port2 - задают один и тот же диапазон.

Условия на sports и dports по умолчанию объединяются операцией ИЛИ. Если нужно объединить операцией  И нужно использовать команду and. Пример:

sports=22 dports=22 - отбор пакетов для сервиса ssh вне зависимости от направления 
sports=22 and dports=32000 - отбор пакетов с портом источника 22 и портом назначения 32000
sports=555,777:790,888- отбор пакетов с портами источника 555,от 777 до 790 и 888.

Отбор по ip-адресам

Можно задать правило tcp/ip на адрес источника (sipl=<правило tcp/ip>) и на адрес назначения (dipl=<правило tcp/ip>). Условия  sipl и dipl всегда объединяются операцией И. Условие не действует на протокол notip. Пример:

sipl=192.168.200.1-192.168.200.4 
sipl=192.168.200.1 dipl=192.168.200.2

Правила отбора

Правило состоит из команды и условия отбора пакетов. Их можно задавать в секции канала и в общей секции устройства. Сначала будут выполнена проверка по правилам заданным в секции канала. Если ни одно правило не подошло - то будет выполнена проверка по правилам из общей секции. Если правило было найдено - проверка дальнейших правил прекращается. Если ни одно из правил не подошло - пакету назначается нормальный приоритет (PRTY=4). Примеры:

PRTY=4 all - это правило можно использовать в качестве последнего в секции канала, если вы хотите отменить выполнение общих правил для этого канала. Под него подходят все пакеты.
PRTY=8 maxlen=100 - назначить коротким пакетам приоритет 8
PRTY=8 dport=27000 - назначить пакетам для порта 27000 приоритет 8
PRTY=1 sports=21 dports=21 - понизить приоритет для пакетов ftp
DROP in sports=550:551 - отбросить при приеме пакеты с портами источника 550-551

ЗАМЕЧАНИЕ:

Будьте осторожны с командой DROP. Выдав неправильную команду вы можете заблокировать прием и передачу со всех каналов.

Как включить эту функцию

Чтобы функция работала нужно задать в поле gflag бит 0x1000. Версия драйверов c 3.11.

Управление командами в iplncfg под Unix

Программа iplncfg поддерживает следующие команды:

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

qosa cmd="правило" pos=n [com[mon]]- добавить правило

qosd pos=n [com[mon]]- удалить правило

Параметр pos задает позицию в списке - куда нужно команду включить или какую команду нужно удалить. Параметр common задает что команда применяется к общей секции. Если не задан - то к секции канала. Сохранение команд происходит автоматически.

Управление командами в iplncfg под Windows

1) ipln.exe ->"Опции" ->"Режимы работы драйвера" 

Жмем на кнопку "Поддержка QoS включена"

2) Запускаем: iplncfg /a1  

Идем в "Настройка" -> "Утилиты" -> "Задать правила QoS". 

Правила QoSs

Отражаются текущие правила в виде: <индекс>:<число попаданий>:<правило>

Добавить правило:  выбираем позицию на которую хотим добавить правило в нужном списке  и нажимаем "Добавить" .

Правила QoSs

Удалить правило: выбираем нужное правило и нажимаем "Удалить" у нужного списка.

---------------------------------------------
Перейти в оглавление документации