Я начинающий сетевой инженер.
Я пытаюсь понять команду Linux tc
.
Я сделал простую сеть, состоящую из двух хостов H1, H2 и коммутатора S1, соединяющего их с помощью Mininet.
Затем я заставил H1 отправлять UDP-пакеты в H2 через коммутатор S1, используя iPerf2
.
#H1
iperf -s -p 1212 -f m -i 1
#H2
iperf -c 10.0.0.1 -p 1212 -t 10000 -f m -b 70M -u
Чтобы ограничить пропускную способность канала, я сделал простой сценарий bash ниже.
#!/bin/bash
#s1-eth1 is outgoing port from H1 to H2
#its orginal bandwidth 100Mbit/s
sudo tc qdisc del dev s1-eth1 root
sudo tc qdisc add dev s1-eth1 root handle 1:0 htb default 12
sudo tc qdisc add dev s1-eth1 parent 1:0 classid 1:1 htb rate 50Mbit
sudo tc filter add deb s1-eth1 protocol ip parent 1:0 prio 1 u32 match ip dport 1212 0xffff flowid 1:1
Я ожидал, что скорость приема S1 станет 50 Мбит / с, но этого не произошло.
Показал около 40Мбит / с.
Когда я изменил настройки этого эксперимента, он показал меньшее значение, чем я установил с помощью tc
команда.
Почему это произошло? Я просмотрел код ядра Linux tc
но я не могу этого понять.
Не могли бы вы мне немного намекнуть?
Подсказки и устранение неисправностей.
tc -p filter show dev <iface>
)tc -s -s -d f ls dev <iface>
) - 1-й шаг устранения неполадок.tc -s -s -d qdisc list dev <iface>
и tc -s -s -d c ls dev <iface>
) - 2-й шаг устранения неполадок.modinfo sch_htb
).1:12
, но не определяйте это.