linux tc 限速实例

先说需求:对于SDN的路由器,需要有一个总的带宽限制,同时,某些客户可能会需要,限制某一个FLOATING IP的带宽

发现使用tbf在软件ROUTER中是一种非常不准的模式,htb是比较简单的模式,cbq是一种很复杂的模式,参数非常地多,这一点很多文章都介绍过了。

另外一点,tc以及cgroup等kernel中实现QOS的东西,很重要的一个概念是quality of service,即:服务质量保障,也就是说,保障和限制是相辅相乘的。


几种实现方式:

#####HTB实现的两种类别分别限制最高速度

totalbandwidth=1000mbit
bandwidth=100mbit
ipbandwidth=30mbit
oipaddr=192.168.210.159
iipaddr=10.0.0.36
interface=qg-0ae2fc37-96
./wrap /sbin/tc qdisc del dev $interface root 
./wrap /sbin/tc qdisc add dev $interface root handle 1: htb default 10
./wrap /sbin/tc class add dev $interface parent 1: classid 1:1 htb rate $bandwidth ceil $bandwidth
./wrap /sbin/tc class add dev $interface parent 1:1 classid 1:10 htb rate $bandwidth ceil $bandwidth 
./wrap /sbin/tc class add dev $interface parent 1:1 classid 1:20 htb rate $ipbandwidth ceil $ipbandwidth
./wrap /sbin/tc qdisc add dev $interface parent 1:10 sfq perturb 10
./wrap /sbin/tc qdisc add dev $interface parent 1:20 sfq perturb 10
./wrap /sbin/tc filter add dev $interface protocol ip parent 1: prio 50 u32 match ip dst $oipaddr classid 1:20
./wrap /sbin/tc filter add dev $interface protocol ip parent 1: prio 50 u32 match ip src $oipaddr classid 1:20


interface=qr-8994d48e-8c
./wrap /sbin/tc qdisc del dev $interface root 
./wrap /sbin/tc qdisc add dev $interface root handle 1: htb default 10
./wrap /sbin/tc class add dev $interface parent 1: classid 1:1 htb rate $bandwidth ceil $bandwidth
./wrap /sbin/tc class add dev $interface parent 1:1 classid 1:10 htb rate $bandwidth ceil $bandwidth 
./wrap /sbin/tc class add dev $interface parent 1:1 classid 1:20 htb rate $ipbandwidth ceil $ipbandwidth
./wrap /sbin/tc qdisc add dev $interface parent 1:10 sfq perturb 10
./wrap /sbin/tc qdisc add dev $interface parent 1:20 sfq perturb 10
./wrap /sbin/tc filter add dev $interface protocol ip parent 1: prio 50 u32 match ip dst $iipaddr classid 1:20
./wrap /sbin/tc filter add dev $interface protocol ip parent 1: prio 50 u32 match ip src $iipaddr classid 1:20


./wrap /sbin/tc -s qdisc ls dev $interface
./wrap /sbin/tc -s class ls dev $interface
./wrap /sbin/tc -s filter ls dev $interface


#####cbq实现的两种规则分别限制最高速度
totalbandwidth=1000Mbit
bandwidth=100Mbit
ipbandwidth=30Mbit
oipaddr=192.168.210.159
iipaddr=10.0.0.36
interface=qg-0ae2fc37-96
./wrap /sbin/tc qdisc del dev $interface root 
./wrap /sbin/tc qdisc add dev $interface root handle 1: cbq bandwidth $totalbandwidth allot 1514 cell 8 avpkt 1000
./wrap /sbin/tc class add dev $interface parent 1:0 classid 1:1 cbq bandwidth $totalbandwidth rate $bandwidth weight 1Mbit prio 8 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded
./wrap /sbin/tc class add dev $interface parent 1:1 classid 1:3 cbq bandwidth $totalbandwidth rate $bandwidth weight 1Mbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000 borrow
./wrap /sbin/tc class add dev $interface parent 1:1 classid 1:4 cbq bandwidth $totalbandwidth rate $ipbandwidth weight 1Mbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded
./wrap /sbin/tc qdisc add dev $interface parent 1:3 handle 30: sfq
./wrap /sbin/tc qdisc add dev $interface parent 1:4 handle 40: sfq
./wrap /sbin/tc filter add dev $interface parent 1:0 protocol ip prio 1 u32 match ip dst 192.168.210.159 flowid  1:4
./wrap /sbin/tc filter add dev $interface parent 1:0 protocol ip prio 1 u32 match ip src 192.168.210.159 flowid  1:4
./wrap /sbin/tc filter add dev $interface parent 1:0 protocol ip prio 1 u32 match ip dst 0.0.0.0/0 flowid  1:3
./wrap /sbin/tc filter add dev $interface parent 1:0 protocol ip prio 1 u32 match ip src 0.0.0.0/0 flowid  1:3


interface=qr-8994d48e-8c
./wrap /sbin/tc qdisc del dev $interface root 
./wrap /sbin/tc qdisc add dev $interface root handle 1: cbq bandwidth $totalbandwidth allot 1514 cell 8 avpkt 1000
./wrap /sbin/tc class add dev $interface parent 1:0 classid 1:1 cbq bandwidth $totalbandwidth rate $bandwidth weight 1Mbit prio 8 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded
./wrap /sbin/tc class add dev $interface parent 1:1 classid 1:3 cbq bandwidth $totalbandwidth rate $bandwidth weight 1Mbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000 borrow
./wrap /sbin/tc class add dev $interface parent 1:1 classid 1:4 cbq bandwidth $totalbandwidth rate $ipbandwidth weight 1Mbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded
./wrap /sbin/tc qdisc add dev $interface parent 1:3 handle 30: sfq
./wrap /sbin/tc qdisc add dev $interface parent 1:4 handle 40: sfq
./wrap /sbin/tc filter add dev $interface parent 1:0 protocol ip prio 1 u32 match ip dst 10.0.0.36 flowid  1:4
./wrap /sbin/tc filter add dev $interface parent 1:0 protocol ip prio 1 u32 match ip src 10.0.0.36 flowid  1:4
./wrap /sbin/tc filter add dev $interface parent 1:0 protocol ip prio 1 u32 match ip dst 0.0.0.0/0 flowid  1:3
./wrap /sbin/tc filter add dev $interface parent 1:0 protocol ip prio 1 u32 match ip src 0.0.0.0/0 flowid  1:3


./wrap /sbin/tc -s qdisc ls dev $interface
./wrap /sbin/tc -s class ls dev $interface
./wrap /sbin/tc -s filter ls dev $interface



#####htb实现的在总带宽下面,限制(保证)指定IP的带宽,然后剩余的共享剩余的带宽
totalbandwidth=1000mbit
bandwidth=100mbit
ipbandwidth=30mbit
oipaddr=192.168.210.159
iipaddr=10.0.0.36
interface=qg-0ae2fc37-96
./wrap /sbin/tc qdisc del dev $interface root 
./wrap /sbin/tc qdisc add dev $interface root handle 1: htb default 10
./wrap /sbin/tc class add dev $interface parent 1: classid 1:1 htb rate $bandwidth burst 15k
./wrap /sbin/tc class add dev $interface parent 1:1 classid 1:10 htb rate 1kbit ceil $bandwidth burst 15k
./wrap /sbin/tc qdisc add dev $interface parent 1:10 sfq perturb 10


./wrap /sbin/tc class add dev $interface parent 1:1 classid 1:20 htb rate $ipbandwidth burst 15k
./wrap /sbin/tc qdisc add dev $interface parent 1:20 sfq perturb 10
./wrap /sbin/tc filter add dev $interface protocol ip parent 1: prio 50 u32 match ip dst $oipaddr classid 1:20
./wrap /sbin/tc filter add dev $interface protocol ip parent 1: prio 50 u32 match ip src $oipaddr classid 1:20


interface=qr-8994d48e-8c
./wrap /sbin/tc qdisc del dev $interface root 
./wrap /sbin/tc qdisc add dev $interface root handle 1: htb default 10
./wrap /sbin/tc class add dev $interface parent 1: classid 1:1 htb rate $bandwidth burst 15k
./wrap /sbin/tc class add dev $interface parent 1:1 classid 1:10 htb rate 1kbit ceil $bandwidth burst 15k
./wrap /sbin/tc qdisc add dev $interface parent 1:10 sfq perturb 10


./wrap /sbin/tc class add dev $interface parent 1:1 classid 1:20 htb rate $ipbandwidth burst 15k
./wrap /sbin/tc qdisc add dev $interface parent 1:20 sfq perturb 10
./wrap /sbin/tc filter add dev $interface protocol ip parent 1: prio 50 u32 match ip dst $iipaddr classid 1:20
./wrap /sbin/tc filter add dev $interface protocol ip parent 1: prio 50 u32 match ip src $iipaddr classid 1:20


./wrap /sbin/tc -s qdisc ls dev $interface
./wrap /sbin/tc -s class ls dev $interface
./wrap /sbin/tc -s filter ls dev $interface


#####htb实现的在总带宽下面,限制(保证)指定IP的带宽,其余的共享剩余的带宽
#####本来想实现设置其余的优先级更高,所以即使指定IP的带宽达到了总带宽也不影响其余的IP,但是filter匹配和分配的优先级是共用的,所以注释掉的两行代码会让指定IP被匹配进去,就实现不了指定IP带宽限制了,失败!
totalbandwidth=1000mbit
bandwidth=100mbit
ipbandwidth=100mbit
oipaddr=192.168.210.159
iipaddr=10.0.0.36
interface=qg-0ae2fc37-96
./wrap /sbin/tc qdisc del dev $interface root 
./wrap /sbin/tc qdisc add dev $interface root handle 1: htb default 10
./wrap /sbin/tc class add dev $interface parent 1: classid 1:1 htb rate $bandwidth burst 15k


./wrap /sbin/tc class add dev $interface parent 1:1 classid 1:10 htb rate 1kbit ceil $bandwidth burst 15k
./wrap /sbin/tc class add dev $interface parent 1:1 classid 1:20 htb rate $ipbandwidth burst 15k


./wrap /sbin/tc qdisc add dev $interface parent 1:10 sfq perturb 10
#./wrap /sbin/tc filter add dev $interface protocol ip parent 1: prio 1 u32 match ip dst 0.0.0.0/0 classid  1:10
#./wrap /sbin/tc filter add dev $interface protocol ip parent 1: prio 1 u32 match ip src 0.0.0.0/0 classid  1:10


./wrap /sbin/tc qdisc add dev $interface parent 1:20 sfq perturb 10
./wrap /sbin/tc filter add dev $interface protocol ip parent 1: prio 50 u32 match ip dst $oipaddr classid 1:20
./wrap /sbin/tc filter add dev $interface protocol ip parent 1: prio 50 u32 match ip src $oipaddr classid 1:20


interface=qr-8994d48e-8c
./wrap /sbin/tc qdisc del dev $interface root 
./wrap /sbin/tc qdisc add dev $interface root handle 1: htb default 10
./wrap /sbin/tc class add dev $interface parent 1: classid 1:1 htb rate $bandwidth burst 15k


./wrap /sbin/tc class add dev $interface parent 1:1 classid 1:10 htb rate 1kbit ceil $bandwidth burst 15k
./wrap /sbin/tc class add dev $interface parent 1:1 classid 1:20 htb rate $ipbandwidth burst 15k


./wrap /sbin/tc qdisc add dev $interface parent 1:20 sfq perturb 10
./wrap /sbin/tc filter add dev $interface protocol ip parent 1: prio 50 u32 match ip dst $iipaddr classid 1:20
./wrap /sbin/tc filter add dev $interface protocol ip parent 1: prio 50 u32 match ip src $iipaddr classid 1:20


./wrap /sbin/tc qdisc add dev $interface parent 1:10 sfq perturb 10
#./wrap /sbin/tc filter add dev $interface protocol ip parent 1: prio 1 u32 match ip dst 0.0.0.0/0 classid  1:10
#./wrap /sbin/tc filter add dev $interface protocol ip parent 1: prio 1 u32 match ip src 0.0.0.0/0 classid  1:10


./wrap /sbin/tc -s qdisc ls dev $interface
./wrap /sbin/tc -s class ls dev $interface
./wrap /sbin/tc -s filter ls dev $interface


参考:http://dog250.blog.51cto.com/2466061/1568267


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值