Мы разрабатываем клиент/серверные приложения. В нашем серверном приложении есть три типа сетевых данных: данные в реальном времени, такие как видео/аудио, критические данные, такие как данные базы данных, и данные 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