Назад | Перейти на главную страницу

Использование tc для уменьшения пропускной способности до определенного адреса назначения

Я пытаюсь найти кратчайший путь между двумя хостами H1 и H2, используя код Дейкстры. Установка условия в одном из переключателей на этом пути. условие: если пакет отправляется в H2, то путь автоматически меняется.

Пользуюсь Mininet, думал использовать tc для уменьшения исходящей полосы пропускания путем фильтрации пакетов, которые поступают на коммутатор и отправляются в H2, код Дейкстры изменит путь.

Я хочу спросить, могу ли я использовать (tc qdisc) контролировать использование исходящей полосы пропускания по данному каналу? Делает tc влияние на физическую ссылку или смоделированные ссылки?

Да, tc предназначен для этого. ТК работает с любыми типами интерфейсов (физическими и программными). Самый простой планировщик очереди - это htb (Иерархическая корзина токенов).

Типичная простая конфигурация:

  • дисциплина корневой очереди htb
  • корневой класс (100% пропускная способность)
  • конечный класс по умолчанию (80% гарантия пропускной способности, до 100% пропускной способности)
  • конечный класс с ограниченной пропускной способностью 1 (гарантия 10% пропускной способности)
  • конечный класс с ограниченной пропускной способностью 2 (гарантия 10% пропускной способности, до 100% пропускной способности)
  • дисциплина очереди sfq для каждого конечного класса для справедливого разделения лимита между потоками

Суммарная пропускная способность дочерних классов не должна превышать пропускную способность родительского класса. В противном случае планировщик не будет точным.

Предположительно пропускная способность интерфейса составляет 100 Мбит / с. Итак, команды для вашей конфигурации будут выглядеть так:

tc qdisc add dev enp4s0f0 root handle 1: htb default 10

tc class add dev enp4s0f0 parent 1:  classid 1:1  htb rate 100Mbit ceil 100Mbit quantum 15000
tc class add dev enp4s0f0 parent 1:1 classid 1:10 htb rate 80Mbit  ceil 100Mbit quantum 15000
tc class add dev enp4s0f0 parent 1:1 classid 1:11 htb rate 10Mbit  ceil 10Mbit  quantum 15000
tc class add dev enp4s0f0 parent 1:1 classid 1:12 htb rate 10Mbit  ceil 100Mbit quantum 15000

tc qdisc add dev enp4s0f0 parent 1:10 handle 10: sfq
tc qdisc add dev enp4s0f0 parent 1:11 handle 11: sfq
tc qdisc add dev enp4s0f0 parent 1:12 handle 12: sfq

После того, как иерархия классов настроена, следует настроить классификацию. Есть много типов классификаторов с различными функциями и разным уровнем дружбы с пользователями. Классификатор проверяет пакеты по заданным критериям. Если пакет совпадает, пакет назначается классом.

tc filter add dev <iface> parent 1: prio 1 protocol ip 800::1 u32 match dst ip 192.168.10.2/32 classid 1:11
tc filter add dev <iface> parent 1: prio 1 protocol ip 800::2 u32 match dst ip 192.168.10.0/24 classid 1:12

В этом небольшом примере пакеты для размещения 192.168.10.2 будет передан в класс 1:11 и, как следствие, ограничен 10 Мбит / с. Пакеты на другие адреса из 192.168.10.0/24 подсеть будет передана в класс 1:12. Все остальные пакеты будут переданы классу по умолчанию (1:10).

Это быстрый старт использования tc инструмент.

Если есть вопросы, задавайте.