ljwhf 发表于 2011-3-3 11:05:24

学校应用中的简单限速策略

本帖最后由 ljwhf 于 2011-3-3 11:05 编辑

限速是个非常大的话题——水很深,非三言两语道得完!但我们不必做得“非常完善”,只要是“够用”就行了。

我们学校所有的数据都过ros,分四个区:服务器区、机房管理区、教师区、学生区。最上游是“服务器区”,下来就是“机房管理区”和教师区,最下游就是学生区。ros是“服务器区”、“机房管理区”、“教师区”的边界主机,教师区以“拨号+radius”方式上网,机房管理区为直接连接,学生区则是通过管理区的一台代理上网。

很明显,ros是第一道重要的关卡。限速也就在这上面做。但在实施之前应先定下目标:
1.学生机数量多,限速是必须的;
2.教师机应该能用到“大”的网速;
3.教师机不能独占所有带宽。

以下是网络的实际情况:
1.服务器区IP为:10.0.0.0/16
2.机房管理区IP为:192.168.0.0/24
3.教师区上网的IP为:192.168.6.0/32
4.学生区的IP段有3个:192.168.1.0/24、192.168.2.0/24、192.168.3.0/24
5.ros的三个网卡:p6-server-net10(10.0.0.253)、p1-lan-net0(192.168.0.252)、p2-pppoe-net6(无IP)
6.学生代理服务器的IP为:192.168.0.3

先来标记包,分出3类包:学生包(mark-stu)、pppoe下载(mark-pppoe-down)以及上传包(mark-pppoe-up)。
/ip firewall mangle
add action=mark-packet chain=prerouting comment="\B1\EA\BC\C7\D1\A7\C9\FA\B0\FC" disabled=no dst-address=192.168.0.3new-packet-mark=mark-stu passthrough=yes

add action=mark-packet chain=prerouting comment="\B1\EA\BC\C7pppoe\CF\C2\D4\D4\B0\FC" disabled=no dst-address=192.168.6.0/24 in-interface=p6-server-net10 new-packet-mark=mark-pppoe-down packet-size=512-65535 passthrough=yes src-address-type=""

add action=mark-packet chain=forward comment="\B1\EA\BC\C7pppoe\C9\CF\D0\D0\B0\FC" disabled=no new-packet-mark=mark-pppoe-up out-interface=p6-server-net10 passthrough=yes src-address=192.168.6.0/24 src-address-list=pppoe-6-src src-address-type=""
注:pppoe-6-src 是拨号IP集,下载包只标记大于255字节的包

一、处理学生包
总带宽为10M,学生的带宽应是多少得根据经验判断,判断的依据是“学生数据+教师数据'差不多'占满带宽“,在我校设置为5M是合理的:
/queue tree
add burst-limit=7M burst-threshold=5M burst-time=10s disabled=no limit-at=5M max-limit=6M name=PCQ-stu-down-5M packet-mark=mark-stu parent=global-outpriority=8 queue=default


二、处理pppoe包
怎样保证教师能用到“最大”的带宽?最简单的办法就是不限速。而在实际应用中只有少数教师是经常拉东西,对这些“叼”民不特别“处理”是不行的。另一方面,如果只做网页浏览通常不会产生大包和大流量,只有下载是才会出现大包和大流量。于是策略成型了:
1.教师机的上传不能大于1M;
2.总流量大于9M时对pppoe限下载;
3.pppoe总数据量小于1M时取消对pppoe限下载。

上传不能大于1M
/queue tree
add burst-limit=2M burst-threshold=2M burst-time=10s disabled=no limit-at=1M max-limit=2M name=TOP-tea-up-1M packet-mark=mark-pppoe-up parent=p6-server-net10 priority=8 queue=PCQ_Tea_up_512k


PCQ_Tea_up_512k的值也是经验值,太大则单线占用也大,反之亦然。
/queue type
add kind=pcq name=PCQ_Tea_up_512k pcq-classifier="" pcq-limit=50 pcq-rate=512000 pcq-total-limit=2000


“总流量大于9M时对pppoe限下载”和“pppoe总数据量小于1M时取消对pppoe限下载”
这里涉及到动态问题,要判断流量则用到traffic-monitor,当监控到p6-server-net10(总)流量大于9M时运行PCQ-tea-en去添加一个规则对pppoe限速。当监控到p2-pppoe-net6(拨号)流量小于1M时运行PCQ-tea-dis去删除限速规则。

/tool traffic-monitor
add comment="" disabled=no interface=p6-server-net10 name=PCQ-tea-down-on on-event=PCQ-tea-en threshold=9000000 traffic=received trigger=above

add comment="" disabled=no interface=p2-pppoe-net6 name=PCQ-tea-down-off on-event=PCQ-tea-dis threshold=1000000 traffic=transmitted trigger=below

这是PCQ-tea-en和PCQ-tea-dis脚本

/system script
add name=PCQ-tea-en policy=ftp,reboot,read,write,policy,test,winbox,password,sniff source="/queue tree add name=PCQ-tea-down packet-mark=mark-pppoe-down parent=global-in priority=4 queue=PCQ_Tea_down_5M limit-at=6M max-limit=7M burst-limit=7M burst-threshold=7M burst-time=10"

add name=PCQ-tea-dis policy=ftp,reboot,read,write,policy,test,winbox,password,sniff source= "/queue tree remove PCQ-tea-down"

上面的脚本要用到PCQ_Tea_down_5M类,这是定义下载单线占用量的类,也是根据经验所取的值。

/queue type
add kind=pcq name=PCQ_Tea_down_5M pcq-classifier=dst-address pcq-limit=50 pcq-rate=5000000 pcq-total-limit=2000


需要注意的是取消限速的阀值选取(我这里的1M值)不能大于单线下载占用值(我这里的5M值),否则会引起“震荡”。

这是满载情况:



这是轻载情况:


ros中的好多东西我也不懂,还要认真学习,上面的东西我只是实现了我的想法,哪位兄弟要是问我“这是什么”、“那是什么”我可能也是答不出的。希望本帖对您有用。

kyer2012 发表于 2011-3-3 11:40:22

受教了,如果不加上panabit

你这类限速不怎么好,应该做下等级的HTB效果更好

ljwhf 发表于 2011-3-3 11:40:34

顺便帖上今天的流量图:





ljwhf 发表于 2011-3-3 11:44:01

kyer2012 发表于 2011-3-3 11:40 static/image/common/back.gif
受教了,如果不加上panabit

你这类限速不怎么好,应该做下等级的HTB效果更好

也是一路走一路学,而另一方面“拿dang的钱少,精力也就少”,这样做别人也该满足了。

广东林 发表于 2011-3-3 11:53:32

多谢,学习了
学校正要用

yinfengbj 发表于 2011-3-3 13:20:12

肯定是做HTB要好很多,规模比较大的网络最好的方案就是panabit加ros的HTB+PCQ限速,用panabit的dscp功能来标记不同的应用,再在ros中根据dscp标记进行连接及数据包的标记,最后通过HTB+PCQ来进行限速,这样可以不用对每台机器进行单独的简单限速,因为上网机器较多时,simple queue的效率很低

ypw 发表于 2011-3-3 13:30:45

不用这么复杂吧,我学校的就没有这么复杂.

ljwhf 发表于 2011-3-3 14:59:46

本帖最后由 ljwhf 于 2011-3-3 15:00 编辑

这里面有个控制粒度的问题,想控制得足够精确则工作量肯定就大。因而我在开头就说“不必做得‘非常完善’,只要是‘够用’就行”,因而也只敢称为“简单限速”。

还是“20%与80%”理论:用20%的时间完成80%的工作,再用80%的时间完成剩下的20%工作。

GoodLuck.

xiaxue_203 发表于 2011-3-7 00:37:06

学习了,我们也是学校用,环境差不多,一直在酝酿整改(现在用的是ros2.8),想换成3.3
另外想问下你的radius用的是什么?

ljwhf 发表于 2011-3-7 08:54:58

回复 xiaxue_203 的帖子

freeradius at FreeBSD + mysql at debian

wanken 发表于 2011-3-7 13:42:34

感谢楼主的无私分享,我收起来了,zooyo 我可不可以也给他+20分啊.....!如何给?

xiaxue_203 发表于 2011-3-7 21:15:44

ljwhf 发表于 2011-3-7 08:54 static/image/common/back.gif
回复 xiaxue_203 的帖子

freeradius at FreeBSD + mysql at debian

谢谢,能找个WIN2003下的就好了,可以和2003服务器合用意台电脑。
另外再请教下,你那流量软件用的是什么?

ljwhf 发表于 2011-3-16 12:19:31

xiaxue_203 发表于 2011-3-7 21:15 static/image/common/back.gif
谢谢,能找个WIN2003下的就好了,可以和2003服务器合用意台电脑。
另外再请教下,你那流量软件用的是什么 ...

我对M$系统感冒,所以就用开源,建议你也用开源。流量监控用cacti,pppoe用户数统计是自己做。

feifei03755 发表于 2011-3-19 01:16:46

/ip firewall mangle
add action=mark-packet chain=prerouting comment="\B1\EA\BC\C7\D1\A7\C9\FA\B0\FC" disabled=no dst-address=192.168.0.3new-packet-mark=mark-stu passthrough=yes

是不是这样标记只能标记链接的第一个包,前面是不是要加上mark-connection
这一点不是太明白。希望高人指点

lai99999 发表于 2011-4-21 09:20:08

能做到这样已经是不是错的了、!!
我可是一点都不行哟!
页: [1] 2
查看完整版本: 学校应用中的简单限速策略