我正在尝试减慢某个特定程序的传入数据包速度,同时让另一个程序完全访问未使用的带宽。换句话说,我想控制网络带宽共享,以便让一个应用程序优先于另一个应用程序。
这是我当前的配置,灵感来自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