使用tc qdiscs进行带宽限制

我试图限制一个简单的iperf服务器和客户端之间的带宽,使用第三个被动机器作为桥梁。 在没有干扰的情况下,iperf返回〜90 Mbits / sec的带宽。 我的目标是创build一个根qdisc发送所有未分类的stream量(一切)到一个儿童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)。

脚本中是否有错误? 我是否滥用突发variables? 请帮忙。

更新:经过进一步的调查,我发现这个stream量控制适用于与SERVER接口的以太网卡时工作正常,但是当相同的命令应用到CLIENT端时,会出现问题。 当整个设置被颠倒时,这是成立的。

tc中的 HTB带宽控制只能形成输出stream量,所以为了限制服务器和客户端TCP连接之间的带宽,必须对两个桥接口进行整形。 (感谢0x534B41)