Linux Advanced Routing & Traffic Control HOWTO (Hubert, Graf) - страница 50

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

Если у вас установлено достаточно свежее или пропатченное ядро, вам определенно стоит посмотреть в сторону HTB!

9.5.5.1. Пример конфигурации.

Конфигурация практически идентична вышеприведенному примеру:

># tc qdisc add dev eth0 root handle 1: htb default 30


># tc class add dev eth0 parent 1: classid 1:1 htb rate 6mbit burst 15k


># tc class add dev eth0 parent 1:1 classid 1:10 htb rate 5mbit burst 15k

># tc class add dev eth0 parent 1:1 classid 1:20 htb rate 3mbit ceil 6mbit burst 15k

># tc class add dev eth0 parent 1:1 classid 1:30 htb rate 1kbit ceil 6mbit burst 15k

Автор рекомендует устанавливать дисциплину SFQ для этих классов:

># tc qdisc add dev eth0 parent 1:10 handle 10: sfq perturb 10

># tc qdisc add dev eth0 parent 1:20 handle 20: sfq perturb 10

># tc qdisc add dev eth0 parent 1:30 handle 30: sfq perturb 10

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

># U32="tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32"

># $U32 match ip dport 80 0xffff flowid 1:10

># $U32 match ip sport 25 0xffff flowid 1:20

В результате получаем ясную и понятную конфигурацию — никаких малопонятных чисел, никаких недокументированных параметров.

В HTB все выглядит достаточно прозрачно — классы 10: и 20: имеют гарантированную пропускную способность, при наличии свободной части пропускной способности они заимствуют ее в отношении 5:3.

Неклассифицированый трафик будет отнесен к классу 30:, который имет достаточно небольшую ширину, но может заимствовать незанятую часть канала.

9.6. Классификация пакетов с помощью фильтров.

Для классификации того или иного пакета, всякий раз вызывается так называемая "цепочка классификации". Эта цепочка состоит из всех фильтров, присоединенных к полноклассовой дисциплине.

Вернемся к дереву:

>                   root 1:

>                      |

>                    _1:1_

>                   /  |  \

>                  /   |   \

>                 /    |    \

>               10:   11:   12:

>              /   \       /   \

>           10:1  10:2   12:1  12:2

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

Фильтр, который сразу отправляет пакет в 12:2, мог бы быть сразу присоединен к 1:1, но в этом случае пакет минует дополнительные проверки, которые могли бы быть сделаны в 12:.

Вы не можете выполнять фильтрацию в обратном порядке, только вниз! Кроме того, все фильтры в HTB должны присоединяться к корню!