Я хочу смоделировать следующий сценарий: учитывая, что у меня есть 4 сервера Ubuntu A, B, C и D. Я хочу уменьшить пропускную способность сети на 20% между машиной A и машиной C и 10% между A и B. Как сделать это с помощью инструментов моделирования / регулирования сети?
ubuntu
networking
tcp
linux-networking
bandwidth
Yehia Elshater
источник
источник
tc
делает при использовании с маркировкой iptables.Ответы:
Для этого вы можете использовать
tc
один сu32
фильтрами или в сочетании с маркировкой iptables (возможно, более простым, если вы не хотите изучать синтаксис сложных фильтров). В следующем посте я подробно расскажу о первом решении.Имитация вашей настройки
В качестве примера рассмотрим A, B, C и D с виртуальными интерфейсами со скоростью 10 Мбит / с .
Вы в основном хотите:
Чтобы смоделировать это, я создам 4 сетевых пространства имен и виртуальные интерфейсы Ethernet, подключенные к мосту.
Конечно, в вашем случае вы будете работать с реальными сетевыми картами, и мост будет вашим шлюзом или коммутатором в зависимости от вашей инфраструктуры.
Таким образом, в моей симуляции у нас будет следующая настройка в сети 10.0.0.0/24:
Во-первых, этап установки, чтобы вы могли понять, из чего он сделан, пропустить его, если вы не знакомы с ним, ничего страшного. Однако вы должны знать, что команда
ip netns exec <namespace> <command>
позволяет выполнить команду в сетевом пространстве имен (т.е. в одном из полей предыдущего рисования). Это также будет использовано в следующем разделе.Итак, на данный момент у нас есть настройки, описанные ранее.
Формирование трафика
Пришло время войти в управление движением, чтобы получить то, что вы хотите.
tc
Инструмент позволяет добавлять организации очередей:Он поставляется с 3 понятиями: qdisc , классы и фильтры . Эти понятия можно использовать для настройки управления сложным потоком пакетов и определения приоритетов трафика на основе любого критерия / критериев, которые вы хотите.
В двух словах :
Все это обычно работает как дерево, где листья - это qdiscs, а классы - это узлы. Корень дерева или поддерева будет объявлен как,
<id>:
а дочерние узлы будут объявлены как<parent_id>:<children_id>
. Помните об этом синтаксисе.Для вашего случая давайте возьмем A и отобразим дерево, которое вы хотели бы установить
tc
:Пояснение:
1:
является корневым qdisc, присоединенным к устройству vethA, он будет принят явно, какhtb
для Hierarchy Token Bucket (по умолчанию qdisc устройства являетсяpfifo
илиpfifo_fast
зависит от ОС). Это особенно подходит для управления полосой пропускания. Пакеты, не соответствующие фильтрам, определенным на этом уровне, перейдут в1:30
класс.1:1
будетhtb
класс, ограничивающий весь трафик устройства до 10 Мбит / с.1:10
будетhtb
класс, ограничивающий выходной трафик до 9 Мбит / с (90% от 10 Мбит / с).1:20
будетhtb
класс, ограничивающий выходной трафик до 8 Мбит / с (80% от 10 Мбит / с).1:30
будетhtb
класс, ограничивающий трафик до 10 Мбит / с (запасной вариант).:10, :20, :30
являетсяsfq
дисциплиной стохастической Fairness очереди. Другими словами, эти qdiscs обеспечат справедливость в планировании передачи, основанном на потоках.Все это настраивается с помощью следующих команд:
Последнее, что нам нужно, это добавить фильтры, чтобы IP-пакеты с IP-адресом назначения, равным B, переходили в
1:10
класс, а IP-пакеты с IP-адресом назначения, равным C, переходили в1:20
класс:Теперь, когда вы поняли идею, вам нужно будет добавить похожие
tc
правила к B и C, чтобы также формировались передачи в направлении A от этих буровых установок.тестирование
Теперь давайте проверим это. Для этого я лично привык играть
iperf
, он просто состоит из одного двоичного файла, который может быть запущен как клиент или как сервер, и автоматически отправляет как можно больше трафика между обоими хостами.Между А и В:
Мы получаем наш предел пропускной способности 9 Мбит / с .
Между А и С:
Мы получаем наш предел пропускной способности 8 Мбит / с .
Между А и D:
Здесь у нас виртуальный интерфейс достиг полной скорости 10 Мбит / с .
Обратите внимание, что пакет первого такта каждого прогона можно лучше обрабатывать в
htb
классах, регулируя соответствующий параметр.Убираться
Удалять :
1:
:tc filter del dev vethA parent 1: prio 1 u32
.1:
:tc filter del dev vethA parent 1:
.1:20
и его детиtc class del dev vethA parent 1:1 classid 1:20
.tc qdisc del dev vethA
.Чтобы очистить набор симуляции:
источник
Ubuntu имеет IPFW, портированный из FreeBSD, а IPFW имеет DUMMYNET, который позволяет управлять различными параметрами сети - пропускной способностью, задержкой, скоростью потери пакетов и т. Д.
источник
Лучше всего использовать инструменты tc с теперь интегрированным (по крайней мере, в Ubuntu сервере) модулем netem. Вы можете найти больше информации в этой статье от Stackoverflow .
источник
Трикл работает хорошо.
Это обсуждение показывает некоторые ограничения: /unix/109973/how-to-change-speed-limit-of-running-trickle-instance
источник