Качество обслуживания (QoS — quality of service) позволяет изменить очередность прохождения трафика на интерфейсе. Разные дисциплины обслуживания предоставляют разные возможности по управлению трафиком и его классификации.
Настройка QoS осуществляется на странице конфигурации интерфейса, вкладки QoS.
TX queue length — исходящая очередь интерфейса, измеряется в пакетах. Если ничего не указано, для интерфейса устанавливается значение по умолчанию.
Scheduler — дисциплина обслуживания трафика.
Стандартная дисциплина обслуживания трафика, реализующая простой механизм First In First Out. Состоит из трех полос — 0, 1 и 2. Полоса 0 обслуживается до тех пор, пока в ней есть пакеты, ожидающие передачи. Затем аналогичным образом обслуживаются полосы 1 и 2.
Распределять трафик по полосам можно с помощью установки битов ToS — Type of Service, которая производится ПО, генерирующем трафик, или средствами межсетевого экрана. Существует четыре бита ToS:
Minimum Delay — минимальная задержка;
Maximum Throughput — максимальная пропускная способность;
Maximum Reliability — максимальная надежность;
Minimum Cost — минимальная стоимость канала.
В текущей версии веб-интерфейса маршрутизатора отсутствует возможность установки битов ToS средствами межсетевого экрана. Для этого можно воспользоваться консольным интерфейсом маршрутизатора.
Самые простые дисциплины обслуживания. Не содержат внутренних полос, весь трафик равнозначен. Позволяют получать некоторую статистику по их работе.
limit — длина очереди, для bfifo — в байтах, для pfifo — в пакетах.
SFQ — Stochastic Fairness Queueing — дисциплина честного планирования. Она оперирует таким понятием, как "поток" — сессия TCP или поток данных UDP. Для каждого потока создаётся своя псевдоочередь в рамках этой дисциплины. Дисциплина поочередно (round robin) переключается между псевдоочередями, не позволяя какому-либо потоку использовать весь канал монопольно.
Для распределения сессий по псевдоочередям используются хэши, которые для повышения эффективности работы дисциплины требуется реконфигурировать. Дисциплина конфигурируется несколькими параметрами:
perturb — интервал времени в секундах, через который выполняется реконфигурация хэша. Рекомендуемое значение — 10;
quantum — число байт, которое изымается из очереди за один "ход" (перед тем, как переключиться на другую очередь). По умолчанию равно максимальному размеру пакета (MTU), и не должно его превышать;
limit — число пакетов, которое может быть помещено в очередь. При превышении этого значения пакеты будут сбрасываться.
При установке дисциплины SFQ в веб-интерфейсе приведённые выше параметры устанавливаются автоматически в рекомендуемые значения.
ESFQ — Enhanced Stochastic Fairness Queueing — улучшенная дисциплина SFQ. Она предоставляет больше возможностей по своей настройке, что позволяет достичь более равномерного распределения полосы пропускания. К примеру, если пользователь использует программы, работающие в несколько потоков, то обычная SFQ становится неэффективной, так как она не может разделить канал между пользователями. Дисциплина ESFQ позволяет выбрать другой алгоритм хэширования, например, по IP-адресу отправителя или получателя пакета, что позволяет разнести разных пользователей по разным псевдоочередям независимо от числа сессий каждого пользователя.
Limit — число пакетов, которое может быть помещено в очередь. При превышении этого значения пакеты будут сбрасываться.
Depth — максимально возможное количество псевдоочередей (в SFQ жёстко задано значение 1024).
Hash — тип хэша:
Classic — аналогичный используемому в SFQ;
Source address — по адресу источника;
Destination address — по адресу получателя.
perturb — интервал времени в секундах, через который выполняется реконфигурация хэша. Рекомендуемое значение — 10 (при установке дисциплины через веб-интерфейс автоматически используется рекомендуемое значение).
Token Bucket Filter (TBF) — простая бесклассовая дисциплина, пропускающая поступающие пакеты со скоростью, не превышающей заданной. Эта дисциплина относится весьма бережливо к ресурсам системы, поэтому в случае, если надо просто ограничить скорость исходящего трафика — это лучший выбор.
Смысл работы данной дисциплины заключается в следующем. Поступающие для передачи пакеты записываются в буфер дисциплины, откуда они с заданной скоростью поступают на исходящий интерфейс. Возможны три ситуации:
Пакеты поступают со скоростью, равной скорости передачи их на исходящий интерфейс. В этом случае пакеты проходят через интерфейс без задержек;
Пакеты поступают со скоростью, меньшей скорости передачи их на исходящий интерфейс. В этом случае при кратковременном возрастании скорости входящего трафика он будет накоплен во входящей очереди и передан с заданной скоростью;
Пакеты поступают со скоростью, превышающей скорость передачи их на исходящий интерфейс. В этом случае через некоторое время пакеты начнут сбрасываться.
Дисциплина имеет несколько параметров, позволяющих управлять её работой:
Rate — скорость, с которой поступающий трафик передается на исходящий интерфейс.
Дисциплина 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 необходимо использовать следующие сокращения:
1 mbps = 1024 kbps — 1024 килобайта в секунду.
1 mbit = 1024 kbit — 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.