tc流量控制(二)

之前我写过两篇日志,一篇是linux TC流量控制,一篇是tc流量控制(一)。而今天的这篇是前两篇的续篇,本来这篇日志应该是老早之前就应该写的,由于最近一直忙于公司整个网络环境架构的调整。直到今天公司技术办公环境要调整才会想到这个续篇还没写。这次的操作主要是针对目前在用的真实环境做的一个策略。

#!/bin/bash
tc qd del dev eth0 root 2>/dev/null
tc qd del dev eth1 root 2>/dev/null
tc qdisc add dev eth1 root handle 2:0 htb default 50
tc class add dev eth1 parent 2:0 classid 2:1 htb rate 100Mbit burst 15k
#tc class add dev eth1 parent 2:0 classid 2:1 htb rate 8Mbit burst 15k
tc class add dev eth1 parent 2:1 classid 2:10 htb rate 512Kbit ceil 1200kbit burst 15k
tc class add dev eth1 parent 2:1 classid 2:20 htb rate 1Mbit ceil 2Mbit burst 15k
tc class add dev eth1 parent 2:1 classid 2:30 htb rate 4Mbit ceil 5Mbit burst 15k
tc class add dev eth1 parent 2:1 classid 2:40 htb rate 2Mbit ceil 3Mbit burst 15k
tc class add dev eth1 parent 2:1 classid 2:50 htb rate 1Mbit ceil 1Mbit burst 15k
tc class add dev eth1 parent 2:1 classid 2:60 htb rate 50Mbit  burst 15k
tc qdisc add dev eth1 parent 2:10 handle 10: sfq perturb 5
tc qdisc add dev eth1 parent 2:20 handle 20: sfq perturb 5
tc qdisc add dev eth1 parent 2:30 handle 30: sfq perturb 5
tc qdisc add dev eth1 parent 2:40 handle 40: sfq perturb 5
tc qdisc add dev eth1 parent 2:50 handle 50: sfq perturb 5
#for lan set
#tc filter add dev eth1 parent 2:0 protocol ip prio 1 route
#tc filter add dev eth1 parent 2:0 protocol ip prio 1 route to 2 flowid 2:1
#tc filter add dev eth1 parent 2:0 protocol ip prio 1 route to 3 flowid 2:1
#tc filter add dev eth1 parent 2:0 protocol ip prio 1 route to 4 flowid:2:1
#ip route add 192.168.10.0/24 dev eth1 via 192.168.10.254 realm 2
#ip route add 192.168.20.0/24 dev eth1 via 192.168.20.254 realm 3
tc filter add dev eth1 protocol ip parent 2:0 prio 1 u32 match ip src 192.168.0.0/24 flowid 2:60
tc filter add dev eth1 protocol ip parent 2:0 prio 1 u32 match ip src 192.168.10.0/24 flowid 2:60
tc filter add dev eth1 protocol ip parent 2:0 prio 1 u32 match ip src 192.168.20.0/24 flowid 2:60
tc filter add dev eth1 protocol ip parent 2:0 prio 1 u32 match ip src 192.168.30.0/24 flowid 2:60
tc filter add dev eth1 protocol ip parent 2:0 prio 1 u32 match ip src 192.168.1.0/24 flowid 2:60
#for wan set
tc filter add dev eth1 protocol ip parent 2:0 prio 2 u32 match ip dst 192.168.30.0/24 flowid 2:10
tc filter add dev eth1 protocol ip parent 2:0 prio 3 u32 match ip dst 192.168.20.0/24 flowid 2:20
tc filter add dev eth1 protocol ip parent 2:0 prio 4 u32 match ip dst 192.168.1.0/24 flowid 2:30
tc filter add dev eth1 protocol ip parent 2:0 prio 5 u32 match ip dst 192.168.10.0/24 flowid 2:40
tc filter add dev eth1 protocol ip parent 2:0 prio 6 u32 match ip dst 192.168.0.0/24 flowid 2:50

上面的网络配置我是几经测试后来才敲定的。我上例所设置的办公网络的总的连结带宽是8M,我上面的设置之所以是100Mbit,这个完全是为了不同内网网段之前的数据交互设置的。我上面一共设置了五个组——管理组、研发组、优化组、售后组、临时组。其中管理组人员只有一个,之前是设了单人1M——2M的带宽。后来研发组人员老说带宽不够用,BOSS让把他自己的调小了。我这里设的512——1200kbit之间。其他几个组就不一一细说,大致是一样的,根据具体人数和对带宽的需求不同进行调整就是了。

说说上面几个比较重要的地方:

prio设值优先级,这个参数比较重要,值越小优先级越高。

u32为匹配过滤器,我这里是通过匹配目标地址和源地址设置的。

src、dst为地址匹配。src的设置的优化级较高,且配给的过滤规则带宽值也较大,这个是为内网互访进行设置的。src匹配是我后来加上去的,原来的规则的设置的效果是如果同网段内互访,速度非常快,不受规则的限制。比如192.168.20.20和192.168.20.30之间共享或传文件可以达到10M/s,而192.168.20.20和192.168.10.30之间传文件,速度只有100Kb左右。通过上的src指向以后,这个瓶颈就得到了解决。dst的规则是设置访问互联网时对应的限制策略。

sfq是各网段之间内部进行的一种公平算法,后面跟的perturb是平均多长时间进行一次计算。单位是秒。

注:本来上面的内网传输瓶颈问题,我是想通过ip route进行标记再配合tc进行处理的。发现配置比较麻烦,而且和u32过滤之间似乎有冲突。

最后共享两个和tc相关的文档供参考。

Linux 的高级路由和流量控制 HOWTO中文版        linux IP命令深层讲解    

目前tc所支持的算法,除了常用的cbq和htb之外,又新增了HFSC算法,据说比htb更优。有兴趣的也可以试下。HFSC算法的提供的官方文档为:http://linux-ip.net/articles/hfsc.en 。





本站的发展离不开您的资助,金额随意,欢迎来赏!

You can donate through PayPal.
My paypal id: itybku@139.com
Paypal page: https://www.paypal.me/361way

分类: Linux/unix/mac 标签: , ,
  1. 本文目前尚无任何评论.