我试图限制一个简单的 iperf 服务器和客户端之间的带宽,使用第三台被动机器作为桥接器。在没有干扰的情况下,iperf 返回约 90 Mbits/sec 的带宽。我的目标是创建一个根 qdisc,它将所有未分类的流量(所有内容)发送到一个子 HTB 类,在那里设置我的带宽,然后路由到一个叶子 qdisc,一旦我得到这个工作,将在其中设置额外的 tc 参数。我的实现很简短:
sudo tc qdisc add dev $interface root handle 1: htb default 10
sudo tc class add dev $interface parent 1:0 classid 1:10 htb rate $bandwidth burst $burst
sudo tc qdisc add dev $interface parent 1:10 handle 10:0 netem #other stuff goes here
当这个 bash 脚本在带有$interface = eth1
, $bandwidth = 500kbps
,的网桥上实现时$burst = 15k
,我看到 iperf 带宽减少了,但没有接近规定的值(通常为 ~5Mbps)。
我的脚本有错误吗?我是否滥用了突发变量?请帮忙。
更新:经过进一步调查,我发现这种流量控制在应用于与服务器接口的以太网卡时工作正常,但是当相同的命令应用于客户端时会出现问题。当整个设置颠倒时,这也是正确的。
tc中的 HTB 带宽控制仅对传出流量进行整形,因此为了限制服务器和客户端 TCP 连接之间的带宽,必须对两个桥接接口应用整形。(感谢 0x534B41)