Product SiteDocumentation Site

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

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

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

10.4.2. Настройка и реализация

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

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

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

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

iface eth0 inet dhcp
    up /sbin/wondershaper eth0 500 100
    down /sbin/wondershaper remove eth0

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

За исключением определённой конфигурации QoS, ядро Linux использует pfifo_fast планировщик очередей, который сам по себе предоставляет несколько интересных функций. Приоритет каждого обработанного IP-пакета основан на поле DSCP в пакете (Differentiated Services Code Point); изменения этого 6-битного поля достаточно, чтобы воспользоваться преимуществами функций планирования. Обратитесь к https://en.wikipedia.org/wiki/Differentiated_services#Class_Selector для получения дополнительной информации.
Поле DSCP может быть установлено приложениями, генерирующими IP-пакеты, или изменено на лету с помощью netfilter. Следующие правила достаточны для повышения скорости реагирования службы SSH сервера. Обратите внимание, что поле DSCP должно быть установлено в шестнадцатеричном формате:
nft add table ip mangle
nft add rule ip mangle PREROUTING tcp sport 22 counter ip dscp set 0x04
nft add rule ip mangle PREROUTING tcp dport 22 counter ip dscp set 0x04