我正在尝试测试 Linux氢能结核,做最简单的例子只是为了看看它是否真的有效。
我正在创建一个根并给它200kbps然后我创建了 3 个类,每个类分配一部分200kbps。
- Root -
/ | \
/ | \
/ | \
/ | \
/ | \
/ | \
100kbps 60kbps 40kbps
我希望最后看到的是,当它们运行 60 秒时,第一类使用了一半的带宽,第二类使用了 30% 的带宽,最后一类使用了 20% 的带宽。
现在开始设置测试。
我创建了上面的树,并应用了过滤器。
tc qdisc add dev eno2 root handle 1: htb default 30
tc class add dev eno2 parent 1: classid 1:1 htb rate 200kbps ceil 200kbps
tc class add dev eno2 parent 1:1 classid 1:10 htb rate 100kbps ceil 200kbps
tc class add dev eno2 parent 1:1 classid 1:20 htb rate 60kbps ceil 200kbps
tc class add dev eno2 parent 1:1 classid 1:30 htb rate 40kbps ceil 200kbps
tc filter add dev eno2 protocol ip parent 1:0 prio 1 u32 match ip dport 80 0xffff flowid 1:10
tc filter add dev eno2 protocol ip parent 1:0 prio 1 u32 match ip dport 25 0xffff flowid 1:20
tc filter add dev eno2 protocol ip parent 1:0 prio 1 u32 match ip dport 36 0xffff flowid 1:30
对于测试我使用了防火墙。
我为服务器打开了3个终端:
sudo iperf -s -p 25 -i 1
sudo iperf -s -p 36 -i 1
sudo iperf -s -p 80 -i 1
然后连接3个客户端,并指定运行时间(60秒)的参数。
iperf -c 132.74.120.45 -p 25 -t 60
iperf -c 132.74.120.45 -p 36 -t 60
iperf -c 132.74.120.45 -p 80 -t 60
结果有点奇怪...似乎无论最初的分配如何,每个都使用了相同数量的带宽?
此外,我确实使用命令检查了队列规则是 HTB bmon
,如下图所示。
我究竟做错了什么 ?
答案1
HTB 流量整形仅适用于传出设备。因此,如果您想测试该功能,您必须针对可以通过整形接口到达的目的地进行测试。参见图纸:
PC---\
PC----switch----(eno1)router with HTB shaping(eno2)----Internet
PC---/ ^^^^
Shaping is done on the ougtoing device
因此内部网络上的流量不受限制。只有流出网络的流量(在本例中是通过 eno2)受到 HTB 排队规则的限制。