Дисциплина HTB позволяет выделить разную пропускную способность канала под разные виды трафика. Осуществляется это путём направления трафика в разные классы, которым назначена необходимая пропускная способность. Классифицировать трафик по классам можно на основе IP-адреса или портов отправителя/получателя пакета. Такая обработка трафика (ограничение его по скорости) называется шейпингом.
В первую очередь следует отметить, что управлять можно только скоростью исходящего трафика (что, в общем, вполне разумно), поэтому при добавлении правил шейпинга необходимо правильно определить интерфейс, на котором этот трафик будет исходящим.
Реализация QoS на основе классовой дисциплины HTB состоит из двух этапов — создания классов и распределения трафика по классам в соответствии с определенными критериями с помощью фильтров. Классы, определяющие скорость трафика, могут добавляться как в корень, так и в другие подклассы, образуя иерархию классов. Фильтры добавляются в корень иерархии.
Особенность подклассов в том, что скорость одного подкласса может быть увеличена (в пределах скорости родительского класса) за счёт неиспользуемой скорости другого подкласса.
Для дисциплины может быть назначен класс, в который будет направляться весь трафик, не подходящий ни под один фильтр.
Ниже приведена таблица, содержащая информацию о классах. Опционально для каждого класса может быть добавлена своя бесклассовая дисциплина обслуживания, которые описаны выше.
Окно добавления класса показано ниже.
Enabled — активен ли класс.
Name — имя добавляемого класса. Используется при классификации трафика в фильтре.
Parent class — родительский класс. root — корневой класс. При добавлении класса в некорневой класс — добавляемый класс будет подклассом.
Rate — пропускная способность, выделяемая классу. Не должна превышать скорость родительского класса!
Ceil — максимальная пропускная способность подкласса (в случае, если другой подкласс этого же класса использует не всю предоставленную ему пропускную способность). Не должна превышать скорость родительского класса!
Qdisc — опциональная бесклассовая дисциплина обслуживания для класса. Здесь можно указать название дисциплины обслуживания и её параметры, например: esfq#limit#128#depth#128#divisor#10#hash#classic#perturb#15 или sfq#perturb#10, и т.д. Пробелы необходимо заменить символом #. Подробнее о бесклассовых дисциплинах и их параметрах написано выше.
Чтобы избежать путаницы, заранее рассмотрим принятые в QoS сокращения, описывающие скорость:
mbps = 1024 kbps = 1024 * 1024 bps => byte/s => 1024 килобайт в секунду.
mbit = 1024 kbit => kilo bit/s => 1024 килобит в секунду.
Таблица фильтров, по тем или иным критериям направляющих трафик в классы.
Окно создания фильтра показано ниже.
Enabled — активен ли фильтр.
Name — имя фильтра.
Prio — приоритет фильтра. Чем меньше значение приоритета — тем он выше.
Protocol — классификация трафика по используемому протоколу.
Source IP — классификация трафика по адресу отправителя пакета.
Destination IP — классификация трафика по адресу получателя пакета.
Source port — классификация трафика по номеру порта отправителя пакета.
Destination port — классификация трафика по номеру порта получателя пакета.
Class — в какой класс направить пакет.
Приведённая на изображениях конфигурация имеет один класс main и два подкласса: voip и data. Подкласс voip используется для передачи высокоприоритетного трафика, для него установлена скорость от 1500 до 1900 кбит/с. Подкласс data используется как класс по-умолчанию для всего остального трафика. Его скорость от 400 до 1900 кбит/с.
В подкласс voip направляется весь трафик, идущий с узла 192.168.2.10.