使用 tc qdiscs 进行带宽限制

Ian*_*Ian 5 bash iperf traffic-shaping tc htb

我试图限制一个简单的 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
Run Code Online (Sandbox Code Playgroud)

当这个 bash 脚本在带有$interface = eth1, $bandwidth = 500kbps,的网桥上实现时$burst = 15k,我看到 iperf 带宽有所减少,但还没有接近规定值(通常约为 5Mbps)。

我的脚本中有错误吗?我是否滥用了突发变量?请帮忙。

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

Ian*_*Ian 2

tc中的 HTB 带宽控制仅对传出流量进行整形,因此为了限制服务器和客户端 TCP 连接之间的带宽,整形必须应用于两个桥接接口。(感谢 0x534B41)