Product SiteDocumentation Site

10.3. Качество обслуживания (регулирование скорости и других характеристик трафика для программ)

10.3.1. Принципы и механизм

Качество обслуживания - Quality of Service (или коротко QoS) представляет собой набор определённых технических приёмов, который гарантирует или улучшает качество обслуживания для приложений. Большинство, существующих на сегодня, популярных технологий, работающих в этой области, классифицируют сетевой трафик по категориям, и, в зависимости от принадлежности к той или иной категории, обрабатывают трафик тем или иным образом. Основная программа, занимающаяся такой сортировкой трафика является traffic shaping. Она ограничивает скорость передачи данных при подключении некоторых служб и/или хостов таким образом, чтобы они не занимали всю пропускную полосу трафика, а оставшаяся часть незанятого канала предоставляется другим важным службам. Такая классификация трафика особенно хорошо подходит для TCP трафика, поскольку данный протокол автоматически подстраивается под доступную полосу пропускания.
Есть возможность отрегулировать первоочерёдность трафика таким образом, чтобы в первую очередь пропускались пакеты, связанные с интерактивными службами (такие как ssh и telnet) или службы, работающие с маленькими блоками информации.
В ядре Debian имеются возможности, необходимые для работы QoS. Они сгруппированы в соответствующие модули. Таких модулей очень много, и каждый из них поддерживает ту или иную службу, при этом большинство из них работают по принципу планирования очерёдности прохождения IP пакетов. Широкий диапазон доступных настроек поведения планировщика охватывает весь спектр возможных требований.

10.3.2. Настройка и выполнение

Параметры QoS настраиваются через команду tc (включена в пакет iproute). Поскольку интерфейс данной команды является достаточно сложным к восприятию рекомендуется использовать для работы с ней высокоуровневые инструменты.

10.3.2.1. Уменьшение Задержек: wondershaper

Основная задача команды wondershaper (в пакете с похожим именем) - уменьшение задержек перемещения пакетов по сети. Это достигается ограничением всего трафика до величины чуть ниже линии полного насыщения канала.
Сразу после конфигурирования сетевого интерфейса, настроить ограничение трафика можно запустив команду wondershaper interface download_rate upload_rate. Для примера, интерфейс может быть eth0 или ppp0, и обоим указывают скорость в килобитах в секунду. Команда wondershaper remove interface отключит контроль трафика для указанного "interface".
В случае подключения к сети Ethernet, правильнее будет вызвать этот сценарий сразу после настройки интерфейса. Это делается путём указания слов up и down в файле /etc/network/interfaces, что позволит определить команды к запуску. Это делается после того, как интерфейс будет сконфигурирован и перед тем, как будут сброшены настройки сконфигурированного интерфейса. Для примера:

Пример 10.9. Изменения в файле /etc/network/interfaces

iface eth0 inet dhcp
    up /sbin/wondershaper eth0 500 100
    down /sbin/wondershaper remove eth0
В случае с PPP, подключение сценария, вызывающего wondershaper, в файл /etc/ppp/ip-up.d/ запустит контроль трафика сразу же при запуске реального соединения.

10.3.2.2. Стандартная настройка

Кроме QoS ядро Linux может регулировать трафик и с помощью ToS (Биты типа обслуживания), что реализовано в виде очереди планировщика pfifo_fast. В этом случае имеется несколько интересных возможностей, которые примечательны сами по себе. Очерёдность обработки каждого IP пакета определяется установленными значениями в их полях заголовка ToS (Type of Service). Модифицируя поля заголовка тем или иным образом можно использовать все преимущества данного метода. Имеется пять возможных значений:
  • Normal-Service (0);
  • Minimize-Cost (2);
  • Maximize-Reliability (4);
  • Maximize-Throughput (8);
  • Minimize-Delay (16).
Указать то или иное значение для поля заголовка ToS может само приложение, генерирующее IP пакеты, или его можно изменить "на лету" программой netfilter. Следующих правил достаточно, чтобы увеличить быстродействие службы - сервера SSH:
iptables -t mangle -A PREROUTING -p tcp --sport ssh -j TOS --set-tos Minimize-Delay
iptables -t mangle -A PREROUTING -p tcp --dport ssh -j TOS --set-tos Minimize-Delay