Может ли TC ограничить пропускную способность по полю Qos заголовка IP?

Может ли TC ограничить пропускную способность по полю Qos заголовка IP?

Мы разрабатываем клиент/серверные приложения. В нашем серверном приложении есть три типа сетевых данных: данные в реальном времени, такие как видео/аудио, критические данные, такие как данные базы данных, и данные BestEfforts, такие как данные обычной передачи файлов.

Мы планируем установить поле QOS каждого IP-пакета, чтобы указать, к какому типу данных из трех вышеперечисленных принадлежит IP-пакет, а затем использовать TC для установки различных максимальных скоростей для этих трех типов данных.

Насколько мне известно, настройка поля qos возможна, но мне интересно, можно ли ограничить скорость передачи IP-пакетов, указав значение qos (значение поля QOS в заголовке IP).

решение1

Я полагаю, вы имеете в виду 8-битное TOSполе в заголовке пакета IPv4. Вы уже читалиLARTC РУКОВОДСТВО ПО ЭКСПЛУАТАЦИИ? Это руководство, которое вам обязательно нужно прочитать. Короче говоря, вам нужно

1) Определить QDISCsиCLASSesв котором трафик классифицируется, приоритизируется и формируется (исходящий трафик может быть сформирован только !!!). Как правило, любой пакет, который необходимо отправить, ставится в очередь на QDISCсетевой интерфейс.

CEIL=10
tc qdisc add dev eth0 root handle 1: htb default 15
tc class add dev eth0 parent 1: classid 1:1 htb rate ${CEIL}mbit ceil ${CEIL}mbit
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 4mbit ceil ${CEIL}mbit prio 0
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 1mbit ceil ${CEIL}mbit prio 1
tc class add dev eth0 parent 1:1 classid 1:12 htb rate 6mbit ceil ${CEIL}mbit prio 2
tc qdisc add dev eth0 parent 1:11 handle 110: sfq perturb 10
tc qdisc add dev eth0 parent 1:12 handle 120: sfq perturb 10

Классы с меньшим prioполем пробуются первыми. Поэтому класс 1:10 может быть выделен для пакетов, требующих, например, минимальной задержки. Классы 1:11 и 1:12 имеют прикрепленную SFQдисциплину очередей для обеспечения более справедливого распределения полосы пропускания.

2) Определите ФИЛЬТРЫдля постановки пакета в очередь справа CLASS.

tc filter add dev eth0 parent 1:0 protocol ip prio 1 handle 10 fw classid 1:10
tc filter add dev eth0 parent 1:0 protocol ip prio 2 handle 11 fw classid 1:11
tc filter add dev eth0 parent 1:0 protocol ip prio 3 handle 12 fw classid 1:12

Это просто означает, что пакет с отметкой 10 относится к классу 10 и так далее.

3) Определить правила iptablesпометить пакет, чтобы поставить его в очередь справаCLASS

iptables -t mangle -A PREROUTING -m tos --tos Minimize-Delay -j MARK --set-mark 0x10
iptables -t mangle -A PREROUTING -m tos --tos Minimize-Cost -j MARK --set-mark 0x11
iptables -t mangle -A PREROUTING -m tos --tos Maximize-Throughput -j MARK --set-mark 0x12

Я использую модуль iptables tosспециально, чтобы показать вам, как можно сопоставить определенные значения TOSполя и пометить его соответствующим образом. Для получения дополнительной информации об этом модуле запустите

iptables -m tos --help

Связанный контент