如何使用 TC(流量整形)减慢和共享传入的网络流量

如何使用 TC(流量整形)减慢和共享传入的网络流量

我正在尝试减慢某个特定程序的传入数据包速度,同时让另一个程序完全访问未使用的带宽。换句话说,我想控制网络带宽共享,以便让一个应用程序优先于另一个应用程序。

这是我当前的配置,灵感来自https://github.com/rfrail3/misc/blob/master/tc/traffic-control.sh

# Set up a virtual interface
modprobe ifb
ip link set dev ifb0 up

# Set up eth0 in order to redirect incoming packets
tc qdisc add dev eth0 handle ffff: ingress
# Filter to make the packet going on ifb0
tc filter add dev eth0 protocol ip parent ffff: u32 match u32 0 0 action mirred egress redirect dev ifb0

# ifb0 configuration
tc qdisc add dev ifb0 root handle 2: htb

tc class add dev ifb0 parent 2: classid 2:1 htb rate 1000mbit

tc class add dev ifb0 parent 2:1 classid 2:10 htb rate 999mbit ceil 1000mbit
tc class add dev ifb0 parent 2:1 classid 2:11 htb rate 1mbit ceil 1000mbit

然后,我在 ifb0 上应用过滤器将我的数据包重定向到 2:10(高优先级类)或 2:11(低优先级类)。

数据包按预期分配给了类别,但是,网络在两个应用程序之间公平共享(50/50,而不是像我从 HTB 配置所期望的那样 1/99)。

实际上,我不明白为什么我的网络是公平共享的,而我的费率/上限却没有得到尊重。我在这里做错了什么?

答案1

您正在设置默认流量以处理 20,但该流量不存在,因此永远不会匹配任何速率/上限。

tc qdisc add dev ifb0 root handle 2: htb default 20

_________________________________________^^^^^^^^^^

尝试添加一条规则classid 2:20

我建议快速阅读此页面以获得更多解释:http://lartc.org/lartc.html#AEN1071

相关内容