команда tctc - утилита для просмотра и конфигурирования параметров управления трафиком (tc — аббревиатура от traffic control) написаная Алексеем Кузнецовым и добавлена в Linux 2.2. Tc Позволяет управлять классификацией трафика, дисциплинами управления очередями для различных классов трафика либо целиком для сетевого интерфейса (корневые дисциплины), что, в свою очередь, позволяет реализовать QoS в нужном для системы объёме:

  • разделение разных типов трафика по классам (не только по битам ToS в IP‐пакете, но и по другим данным из заголовка IP‐пакета)
  • назначение разных дисциплин обработки очередей трафика с разным приоритетом, механизмами прохождения очереди, ограничениями по скорости и т. п.

Синтаксис:

tc qdisc [ add | change | replace | link ] dev УСТРОЙСТВО [ parent qdisc-id | root ] [ handle qdisc-id ] qdisc [ параметры qdisc ]

tc class [ add | change | replace ] dev УСТРОЙСТВО parent qdisc-id [ classid class-id ] qdisc [ параметры qdisc ]

tc filter [ add | change | replace ] dev УСТРОЙСТВО [ parent qdisc-id | root ] protocol protocol prio priority filtertype [ параметры filtertype ] flowid flow-id

tc [-s | -d ] qdisc show [ dev УСТРОЙСТВО ] tc [-s | -d ] class show dev УСТРОЙСТВО tc filter show dev УСТРОЙСТВО

tc используется для настройки системы контроля трафика (Traffic Control) ядра Linux. Система контроля трафика состоит из:

  • ОГРАНИЧЕНИЕ ИСХОДЯЩЕГО ТРАФИКА (SHAPING) - Когда трафик сформирован, его полоса пропускания начинает контролироваться. Ограничение может дать больше, чем уменьшение полосы пропускания - оно также используется для сглаживания пиков для более прогнозируемого поведения сети.
  • ПЛАНИРОВАНИЕ (SCHEDULING) - Планирование передачи пакетов позволяет увеличить интерактивность исходящего трафика при гарантировании полосы пропускания для передачи данных большого объема. Такое упорядочение также называется приоритезацией и применяется для исходящего трафика.
  • ОГРАНИЧЕНИЕ ВХОДЯЩЕГО ТРАФИКА (POLICING) - механизм, с помощью которого можно ограничить количество пакетов или байт в потоке входящего трафика, соответствующих определенной классификации.
  • ОТБРАСЫВАНИЕ (DROPPING) - Трафик, превышающий установленную полосу пропускания, может быть отброшен как для входящего, так и исходящего трафика.

Обработка трафика контролируется тремя типами объектов: очередями (qdiscs), классами и фильтрами.

Очеречди (QDISCS)

qdisc - сокращение от 'queueing discipline' (дисциплина очередности) и является базовым для понимания контроля трафика. Всякий раз, когда ядру требуется отправить пакет на интерфейс, этот пакет ставится в очередь к qdisc, настроенный для этого интерфейса. Сразу же после этого ядро пытается получить сколько можно пакетов из qdisc для передачи их драйверу сетевого адаптера.

Простейший QDISC является очередью 'pfifo' без обработки, лишь реализующей принцип 'First In, First Out' (первый вошел - первый вышел). Однако он сохраняет трафик в очереди, если сетевой интерфейс не может обработать данные сразу же.

Классы (CLASSES)

Некоторые очереди (qdiscs) могут содержать классы, содержащие дополнительные очереди: трафик может быть поставлен в очередь внутренних очередей в рамках классов. Когда ядро пытается взять пакет из такой очереди с классами, он может прийти из любого класса. Очередь, например, может установить приоритет трафика, считывая пакеты из одних очередей раньше, чем из других.

Фильтры (FILTERS)

A Фильтр используется в очереди с классами для определения, в какой класс поставить пакет. Всякий раз, когда трафик приходит в класс с подклассами, он нуждается в классификации. Для этого используются различные методы, один из которых - фильтрация. Вызываются все фильтры, связанные с этим классом, пока один из них не вернёт решение. Если решение не принято, могут быть использованы другие критерии. Это зависит от очереди.

Очень важно понимать, что фильтры в очередях не возвращают решений.

Безклассовые очереди (CLASSLESS QDISCS)

Бесклассовые очереди:

  • [p|b]fifo - Простейшие очереди без обработки, лишь реализующие принцип 'First In, First Out' (первый вошел - первый вышел). Ограничены в пакетах или байтах.
  • pfifo_fast - Стандартная очередь ядра с 'расширенным роутером'. Состоит из очереди с тремя потоками, учитывающей флаги типа услуги (Type of Service) и приоритет пакета.
  • red - Random Early Detection (случайное раннее обнаружение) симулирует физический затор, отбрасывая пакеты случайным образом при близком достижении заданной полосы пропускания. Хорошо подходит для приложений, требующих очень широкую полосу пропускания.
  • sfq - Stochastic Fairness Queueing (очередь равномерного случайного распределения пакетов) реорганизует трафик в очереди таким образом, что каждый 'сеанс' ('session', виртуальная подочередь) получает право отправить пакет, а маркер переходит на следующий сеанс.
  • tbf - Token Bucket Filter (фильтр буфера токенов) удерживает скорость передачи пакетов на примерно постоянном уровне (меньшем, чем реальная скорость интерфейса). Хорошо масштабируется для широких каналов.

Настройка безклассовых очередей (CLASSLESS QDISCS)

Безклассовые очереди могут назначаться только на входе (root) устройства. Полный синтаксис: tc qdisc add dev УСТРОЙСТВО root QDISC ПАРАМЕТРЫ_QDISC

Для удаления очереди выполните tc qdisc del dev УСТРОЙСТВО root Очередь pfifo_fast назначается автоматически при отсутствии настроенной очереди.

 

Очереди с классами (CLASSFUL QDISCS)

Очереди с классами:

  • CBQ - Очередь, базирующая на классах (Class Based Queueing) реализует мощную иерархию классов. Поддерживает ограничения и приоритеты. Разделение осуществляется по времени простоя канала, вычисляемого на основании среднего размера пакета и полосы пропускания.
  • HTB - Очередь HTB (Hierarchy Token Bucket - иерархический буфер токенов) реализует мощную иерархию классов с упором на согласование с существующей практикой. HTB обеспечивает гарантированную полосу пропускания для классов, также позволяет устанавливать верхние пределы межклассового разделения очереди. Содержит объекты ограничения, базирующиеся на TBF, и может устанавливать приоритеты для классов.
  • PRIO - Очередь PRIO может разделять трафик между тремя полосами, которые являются очередями любого типа. При извлечении пакета из очереди вначале исследуется подочередь с большим приоритетом, если в последней нет пакетов для обработки, то выбирается очередь с более низким приоритетом и.т.д.. Для установки приоритета используются биты типа услуги (Type Of Service).

Теория

Классы формируют дерево, где каждый класс имеет своего родителя и может содержать несколько дочерних классов. Некоторые типы очередей позволяют добавлять классы во время выполнения (CBQ, HTB), в то время как другие (PRIO) создаются с фиксированным набором дочерних классов).

Очереди с динамическим добавлением классов могут иметь от нуля до нескольких подклассов. Кроме того, каждый класс содержит очередь класса (leaf qdisc) (по умолчанию это очередь pfifo ) хотя может быть назначена очередь другого типа. Эта очередь может содержать классы, но у каждого класса может быть только одна очередь.

Когда пакет попадает в очередь с классами, он классифицируется для помещения в один из классов. Доступны три критерия классификации, но не все очереди используют все три критерия::

  • фильтр управления трафиком (tc filter) - Если классу назначены фильтры управления трафиком, они рассматриваются первыми. Фильтры могут назначаться на любое поле в заголовке пакета также как и в цепочках брандмауэра ipchains или iptables.
  • тип услуги (Type of Service) - Некоторые очереди имеют встроенные правила классификации пакетов на основе поля TOS.
  • skb->priority - Программы в пользовательском пространстве могут указывать class-id в поле 'skb->priority' при использовании флага SO_PRIORITY. Каждый объект дерева может иметь свои фильтры, фильтры верхнего уровня могут классифицировать для классов нижнего уровня.

Если классификация не произошла, пакет ставится в очередь этого класса. Обратитесь к руководствам MAN соответствующего класса.

Именование

Все очереди, классы и фильтры имеют присвоенные или автоматически назначенные идентификаторы.

Идентификатор состоит из основного (major) и дополнительного (minor) номеров, разделенных двоеточием.

  • ОЧЕРЕДИ - Очереди, которая потенциально может иметь дочерние объекты, назначается основной номер, называемый 'handle' ('обработчик') и использует дополнительный номер для нумерации классов, например: '10:'.
  • КЛАССЫ - Идентификатор класса наследует основной номер родительской очереди и имеет дополнительный номер, обозначающий класс ('classid'). Идентификатор не имеет отношения к родительским классам, только к родительской очереди.
  • ФИЛЬТРЫ - Фильтры имеют идентификатор, состоящий из трех частей, который необходим для поиска в иерархии фильтров.

Единицы измерения

Все параметры принимают число с плавающей точкой за которой может следовать единица измерения.

Полоса пропускания (скорость) может быть указана в:

  • kbps - килобит в секунду
  • mbps - мегабит в секунду
  • kbit - килобит в секунду
  • mbit - мегабит в секунду
  • bps или число без единицы измерения - байт в секунду

Объем может быть указан в:

  • kb или k - килобайт
  • mb или m - мегабайт
  • mbit - мегабит
  • kbit - килобит
  • b или число без единицы измерения - байтах.

Период времени задается в:

  • s, sec или secs - секунда
  • ms, msec или msecs - миллисекунда
  • us, usec, usecs или число без единицы измерения - микросекунда

Команды tc

Следующие команды доступны для очередей, классов и фильтров:

  • add (добавить) - Добавить очередь, класс или фильтр в объект. Обязательно должен быть указан параметр родителя parent , в виде идентификатора или 'root' для обозначения самого верхнего уровня устройства. При создании очереди или фильтра он может быть именован с помощью параметра handle . Класс именуется с помощью параметра classid .
  • remove (удалить) - Очередь удаляется по 'handle' (допустимо указание имени 'root'). Все подклассы и их очереди, а также фильтры автоматически удаляются.
  • change (изменить) - Некоторые объекты могут быть изменены по месту. Эта команда использует такой же синтаксис, как и 'add', за исключением не изменяемого параметра 'handle', чтобы не допустить перемещение объекта в дереве.
  • replace (заменить) - Удаляет и добавляет новый объект по идентификатору. Если объект не существует, он будет создан.
  • link (связать) - Доступно только для очередей. Заменяет существующий объект.

Форматирование

Дополнительные параметры форматирования:

  • -s  (-stats, -statistics) - Выводит более полную информацию о пакетах.
  • -d  (-details) - Выводит более полную информацию о еденицах измерения и размере ячейки.
  • -r  (-raw) - Выводит необработанные шестнадцатеричные значения.
  • -p  (-pretty) - Расшифровывает фильтр смещения и маску подобно фильтрам команд основанным на TCP/IP.
  • -iec - Печатает значения в  IEC еденицах (ie. 1K = 1024).
  • -b  (-b filename, -batch, -batch filename) - Читает команды из указанного файла или со стандартного ввода и исполняет их (пактный режим). При первой ошибке tc прекращает свою работу.
  • -force - Не прекращать работу tc в случае ошибки при работе в пакетном режиме. Если при выполнении будут обнаружены ошибки то код возврата будет отличным от нуля..
  • -OK - in batch mode, print OK and a new line on standard output after each successfully interpreted command.

Добавить комментарий


Защитный код
Обновить