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

Как замедлить и разделить входящий сетевой трафик с помощью TC (формирование трафика)

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

Вот моя текущая конфигурация, вдохновленная https://github.com/rfrail3/misc/blob/master/tc/traffic-control.sh :

# Set up a virtual interface
modprobe ifb
ip link set dev ifb0 up

# Set up eth0 in order to redirect incoming packets
tc qdisc add dev eth0 handle ffff: ingress
# Filter to make the packet going on ifb0
tc filter add dev eth0 protocol ip parent ffff: u32 match u32 0 0 action mirred egress redirect dev ifb0

# ifb0 configuration
tc qdisc add dev ifb0 root handle 2: htb

tc class add dev ifb0 parent 2: classid 2:1 htb rate 1000mbit

tc class add dev ifb0 parent 2:1 classid 2:10 htb rate 999mbit ceil 1000mbit
tc class add dev ifb0 parent 2:1 classid 2:11 htb rate 1mbit ceil 1000mbit

Затем я применяю фильтры к ifb0, чтобы перенаправить свой пакет на 2:10 (класс с высоким приоритетом) или 2:11 (класс с низким приоритетом).

Пакеты назначаются классам, как и ожидалось, но сеть справедливо распределяется между обоими приложениями (50/50 вместо 1/99, как я ожидал от конфигурации HTB).

На самом деле, я не понимаю, почему моя сеть совместно используется справедливо, а мои ставки / ограничения не соблюдаются. Что я здесь делаю не так?

Вы устанавливаете для трафика по умолчанию значение 20, но этого не существует, поэтому он никогда не будет соответствовать никаким параметрам rate / ceils.

tc qdisc add dev ifb0 root handle 2: htb default 20

_________________________________________^^^^^^^^^^

попробуйте добавить одно правило classid 2:20

Я рекомендую быстро прочитать эту страницу для получения дополнительных объяснений: http://lartc.org/lartc.html#AEN1071