Это настройка дисциплины HTB
.
Для управления трафиком согласно данной дисциплине.
Hierarchical Token Bucket — классовая дисциплина формирования трафика, представляющая собой расширение TBF. На интерфейсе формируется дерево классов, в которые помещается трафик, например, с помощью iptables:
ip : mangle : : POSTROUTING : : : 1 : : : : критерии фильтрации : : : : target = "CLASSIFY" : : : : set-class = "10:1"
или средствами управления приоритетом VLAN (IEEE 802.1p):
port : eth0 : : vlan : : : eth0.101 : : : : in-CoS2Class-map : : : : : 1 = "10:1" : : : : : 2 = "20:1" : : : : : 4 = "10:3"
Для каждого класса создаются два "ведра" — токены и c-токены — и устанавливается промежуточный "потолок" (ceiling) скорости передачи. Класс имеет гарантированную информационную скорость rate
; сверх этой скорости он может отправить не более чем burst
байт на скорости ceil
и cburst
байт на максимальной физической скорости линии.
Непосредственно формирование трафика происходит только в конечных классах ("листьях" дерева). Если классу требуется передать данные на скорости выше rate
, он "одалживает" (borrow) токены и/или с-токены у родительских классов. (Строго говоря, вместо "одалживает" более уместным было бы слово "использует", поскольку использованные дочерним классом токены, естественно, не могут вернуться в "ведро" родительского класса. Но это не большая ошибка — именно так обычно и складываются отношения между родителями и детьми.) Родительский класс, если не имеет в этот момент своих собственных токенов, пытается одолжить их у своего родителя, и так далее до Адама, т.е. до корневого класса.
Таким образом, свободные токены перераспределяются от корня к "листьям" дерева. Промежуточные и корневой классы никакого формирования трафика не производят, они нужны только для управления раздачей токенов. Все использованные токены и c-токены относятся на счёт как конечного класса, так и его родителя и прародителей вплоть до того класса, у которого они были "одолжены".
По умолчанию, ceil
= rate
, т.е. перераспределение полосы пропускания от родительского класса к данному дочернему не производится. Для корректной и эффективной работы алгоритма следует соблюдать следующие правила:
rate
конечных классов не должна превышать значения rate
для их общего родительского класса. В идеале, родительский класс должен иметь значение rate
равным сумме rate
всех своих дочерних классов, а разницу (ceil
- rate
) распределять между ними по требованию.burst
и cburst
для родительского класса должны быть не меньше, чем максимальные значения burst
и cburst
, соответственно, среди всех его дочерних классов.burst
и rate
(cburst
и ceil
, соответственно), присущая всем политикам на основе Token Bucket: burst ≥ 2 × rate/800.Внутри каждого класса может быть определена своя дисциплина. Она может быть любой, за исключением HTB. Целесообразно использовать здесь дисциплины приоритизации трафика, поскольку HTB выполняет только формирование.
Помимо указанных, алгоритм предусматривает ещё некоторые параметры для тонкой настройки, но на практике эти параметры настраиваются автоматически и не требуют вмешательства пользователя.
Особая ситуация возникает в случае, если поступивший пакет не помещён явным образом ни в один из классов данной дисциплины. На этот случай в дисциплине HTB имеется глобальный параметр default
— идентификатор класса, в который следует помещать такие пакеты. По умолчанию default = 0
, т.е. указывает на саму корневую политику. В этом случае пакет передаётся с максимальной физической скоростью линии, минуя какие бы то ни было ограничения для дочерних классов.
© Network Systems Group 2015–2024 | Отдел документации |