inux下TC+HTB流量控制.docx
- 文档编号:5901879
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:9
- 大小:24.41KB
inux下TC+HTB流量控制.docx
《inux下TC+HTB流量控制.docx》由会员分享,可在线阅读,更多相关《inux下TC+HTB流量控制.docx(9页珍藏版)》请在冰豆网上搜索。
inux下TC+HTB流量控制
linux下TC+HTB流量控制
Intel嵌入式设计开发者秘笈(精品)
[上海央邦]学一送一,超值!
必读版《十一攻破RHCE6.0、OCP》安博亚威】CCIE考试通过率第一!
Cisco网络技术系列讲座
试听一个月,高端IT技术,五大项目3年经验
中国IT实验室收集整理
佚名
2010-4-108:
46:
54
保存本文
推荐给好友
收藏本页
欢迎进入Linux社区论坛,与200万技术人员互动交流>>进入
C规则涉及到队列(QUEUE)分类器(CLASS)过滤器(FILTER),filter划分的标志位可用U32或iptables的set-mark来实现)一般是"控发"不控收linux下有两块网卡,一个eth1是外网,另一块eth0是内网.在eth0上做HTB。
(注意:
filter划分标志位可用u32打标功能或iptables的set-mark功能,如果用iptables来打标记的话,下行速LV在eth0处控制,但打标应在进入eth0之前进行,所以,“-ieth1";例子:
主要命令就下面三句:
创建一个HTB的根
1.tcqdiscadddeveth0roothandle1:
htbdefault20创建一个HTB的类,流量的限制就是在这里限制的,并设置突发.
2.tcclassadddeveth0parent1:
classid1:
1htbrate200kbit(速率)ceil200kbitburst20k(突发流量)
创建一个过滤规则把要限制流量的数据过滤出来,并发给上面的类来限制速度3.tcfilteradddeveth0parent1:
prio1(优先级)protocolipu32matchipsport800xfffflowid1:
1
说明:
让交互数据包保持较低的延迟时间,并最先取得空闲带宽,比如:
sshtelnetdnsquake3ircftp控制smtp命令和带有SYN标记的数据包,都应属于这一类。
为了保证上行数据流不会伤害下行流,还要把ACK数据包排在队列前面,因为下行数据的ACK必须同上行流进行竟争。
TC+IPTABLES+HTB+SFQ
1tcp/ip协议规定,每个封包,都需要有ACKNOWLEDGE讯息的回传,也就是说,传输的资料需要有一个收到资料的讯息回复,才能决定后面的传输速度,并决定是否重新传输遗失的资料,上行的带宽一部分就是用来传输这些ACK资料的.上行带宽点用大的时候,就会影响ACK资料的传送速度,并进而影响到下载速度,
2试验证明,当上传满载时,下载速度变为原来速度的40%,甚至更低,,因为上载文件(包括ftp上传,发邮件SMTP),如果较大,一个的通讯量令带宽超向包和,那么所有的数据包按照先进先出的原则进行排队和等待,这就可以解释为什么网内其中有人用ftp上载文件或发送大邮件的时候,整个网速变得很慢的原因.
解决速度之道:
1为了解决这些速度问题,对经过线路的数据进行了有规则的分流.把本来在宽带上的瓶颈转移到我们的LINUX路由器上,可以把带宽控制的比我们购买的带宽小一点.这样,我们就可以方便的用tc技术对经过的数据进行分流与控制.
我们的想像就像马路上的车道一样,有高速道,还有小车道,大车道,需要高速的synackicmpssh等走高速道,需要大量传输的ftp-data,smtp等走大车道,不能让它堵塞整条马路,各行其道.
linux下的TC(trafficcontrol)就有这样的作用,只要控制得当,一定会有明显的效果.tc和iptables结合是最好的简单运用的结合方法.
我们设置过滤器以便用iptables对数据包进行分类,因为iptables更灵活,而且还可以为每个规则设置计数器,iptables用mangle链来mark数据包,告诉了内核,数据包会有一个特定的FWMARK标记值(handlexfw)表明它应该送给那个类(classidx:
x),而prio是优先值,表明那些重要数据应该优先通过那个通道,首先选择队列(选择htb),
一般系统默认的是fifo的先进先出队列,就是说包是按照先来先处理的原则,如果有一个大的数据包在前面,那么后面的包只能等前面的发完后才能接着发了,这样就算后面既使是一个小小的ack包,也要等待了,这样上传就影响了下载,就算你有很大的下载带宽也无能为力.
HTB(Hierarchicaltokenbucket,分层的令牌桶),就像CBQ一样工作,但是并不靠计算闲置时间来整形,它是一个分类的令牌桶过滤器.,它只有很少的参数.
结构简图:
1:
~~~~~~~~~~~~~~~~`~~~~~
~~~~~~~_________1:
1~~~~~~~~~1:
2________
|~~~|~~~~|~~~~|~~~~~|~~~~~~~~|~~~~~~~~|~~~~~~~|
1:
11~~~1:
12~~~~~~~~~~~~1:
21~~~1:
22~~~1:
23~~1:
24
优先顺序:
1:
111:
121:
211:
221:
231:
24
根据上面的例子,开始脚本:
关于参数的说明:
rate:
是一个类保证得到的带宽值,如果有不只一个类,请保证所有子类总和是小于或等于父类,
ceil:
ceil是一个类最大能得到带宽值.
prio:
是优先权的设置,数值越大,优先权越小,如果是分配剩余带宽,就是数值小的会最优先取得剩余的空闲的带宽权.
一般大数据的话,控制在50%-80%左右吧,而ceil最大建议不超过85%,以免某一个会话占用过多的带宽.
rate可按各类所需要分配:
1:
11是很小而且最重要的数据包通道,当然要多分点,甚至必要时先全部占用,不过一般不会的,所以给全速.
1:
12是很重要的数据道,给多点,最少给一半,但需要时可以再多一点
rate规划1:
2=1:
21+1:
22+1:
23+1:
24一般总在50%-80%左右.
1:
21http,pop是最常用的啦,为了太多人用,而导致堵塞,我们不能给得太多,也不能太少.
1:
22我打算给smtp用,优先低于1:
21,以防发大的附件大量占用带宽.
1:
23我打算给ftp-data,和1:
22一样,很可能大量上传文件,所以,rate不能给的太多,而当其他有剩时可以给大些,ceil设置大些.
1:
24是无所谓通道,就是一般不是我们平时工作上需要的通道,给小点防止这些人妨碍有正常工作需要的人.
上行uplink320K,设置销低于理论值.
DEV="PPP0"
UPLINK=300
下行downlink3200K大概一半左右,以便能够得到更多的关发连接.
DOWNLINK=1500
1曾加一个根队列,没有进行分类的数据包都走这个1:
24是缺省类:
tcqdiscadddev$DEVparent1:
htbdefault24
1.1增加一个根队下面主干类1:
速率为$UPLINKk
tccladdadddev$DEVparent1:
classid1:
1htbrate${UPLINK}kbitceil${UPLINK}kbitprio0
1.1.1在主干类1下建立第一叶子类,这是一个最高优先权的类,需要高优先和高速的包走这条通道,比如SYNACKICMP等.
tcclassadddev$DEVparent1:
1classid1:
11htbrate${$uplink}kbitceil${uplink}kbitprio1
1.1.2在主类1下建立第二叶子类,这是一个次高优先权的类,比如我们重要的CRM数据。
tcclassadddev$DEVparent1:
1classid1:
12htbrate${$uplink-150}kbitceil${uplink-50}kbitprio2
1.2在根类下建立次干类classid1:
2,此次干类的下面全部优先权低于主干类,以防重要数据堵塞。
tcclassadddev$DEVparent1:
classid1:
2htbrate${$UPLINK-150]kbitprio3
1.2.1在次干类下建立第一叶子类,可以跑例如http,pop等。
tcclassadddev$DEVparent1:
2classid1:
21htbrate100kbitceil${$uplink-150}kbitprio4
1.2.2在次干类下建立第二叶子类,不要太高的速度,以防发大的附件大量占用带宽,便如smtp等。
tcclassadddev$DEVparent1:
2classid1:
22htbrate30kbitceil${uplink-160}kbitprio5
1.2.3在次干类下建立第三叶子类,不要太高的带宽,以防大量的数据堵塞网络,例如:
ftp-data.
tcclassadddev$DEVparent1:
2classid1:
23htbrate15kbitceil${UPLINK-170}kbitprio6
1.2.4在次干类下建立第四叶子类。
无所谓的数据通道,无需要太多的带宽,以防无所谓的人在阻碍正务。
tcclassadddev$DEVparent1:
2classid1:
24htbrate5kbitceil${UPLINK-250}kbitprio7
在每个类下面再附加上另一个队列规定,随机公平队列(SFQ),不被某个连接不停占用带宽,以保证带宽的平均公平使用。
#SFQ(stochasticfairnessqueueing随机公平队列),SFQ的关键词是“会话”(或称作流),主要针对一个TCP会话或者UDP流,流量被分成相当多数量的FIFO队列中,每个队列对应一个会话。
数据按照简单轮转的方式发送,每个会话都按顺序得到发送机会。
这种方式非常公平,保证了每个会话都不会被其它会话所淹没,SFQ之所以被称为“随机”,是因为它并不是真的为每个会话创建一个队列,而是使用一个散列算法,把所有的会话映射到有限的几个队列中去。
#参数perturb是多少秒后重新配置一次散列算法,默认为10秒.
tcqdiscadddev$DEVparent1:
11handle111:
sfqperturb5
tcqidscadddev$DEVparent1:
12handle112:
sfqperturb5
tcqdiscadddev$DEVparent1:
21handle121:
sfqperturb10
tcqidscadddev$DEVparent1:
22handle122:
sfqperturb10
tcqidscadddev$DEVparent1:
23handle123:
sfqperturb10
tcqidscadddev$DEVparent1:
24handle124:
sfqperturb10
设置过滤器,handle是iptables作mark的值,让被iptables在mangle链做了mark的不同的值选择不同的通道classid,而prio是过滤器的优先级别
tcfilteradddev$DEVparent1:
0protocolipprio1handle1fwclassid1:
11
tcfilteradddev$DEVparent1:
0protocolipprio2handle2fwclassid1:
12
tcfilteradddev$DEVparent1:
0protocolipprio3handle3fwclassid1:
21
tcfilteradddev$DEVparent1:
0protocolipprio4handle4fwclassid1:
22
tcfilteradddev$DEVparent1:
0protocolipprio5handle5fwclassid1:
23
tcfilteradddev$DEVparent1:
0protocolipprio6handle6fwclassid1:
24
##################################################
##################################
下行的限制:
#设置入队的规则,是因为把一些经常会造成下载大文件的端口进行控制,不让他们来得太快,导致堵塞,来得太快,就直接drop,就不会浪费和占用机器时间和力量去处理了.
1把下行速率控制在大概1000-1500K(大约为带宽的50%),因为这个速度已经够用了,以便能够得到更多的并发下载连接.
tcqdiscadddev$DEVhandleffff:
ingress
tcfilteradddev$DEVparentffff:
protocolipprio50handle8fwpolicerate${downlink}kbitburst10kdropflowid:
8
如果内部网数据流不是很疯狂的话,就不用做下载的限制了,用#符号屏蔽上面两行既可.
如果要对任何进来的数据进行限速的话,可以用下面这句.
tcfilteradddev$DEVparentffff:
protocolipprio10u32matchipsrc0.0.0.0/0policerate${downlink}kbitburst10kdropflowid:
1
################################
开始给数据包打标记
把出去的不同类数据包(为dport)给mark上标记1---6,让它走不同的通道.
把进来的数据包(为sport)给mark上标记8,让它受到下行的限制,以免速度太快而影响全局.
每条规则下跟着return的意思是可以通过RETURN方法避免遍历所有的规则,加快了处理速度.
设置TOS的处理:
iptables-tmangle-APREROUTING-mtos--tosMinimize-Delay-jMARK--set-mark1
iptables-tmangle-APREROUTING-mtos--tosMinimize-Delay-jRETURN
iptables-tmangle-APREROUTING-mtos--tosMinimize-Cost-jMARK--set-mark4
iptables-tmangle-APREROUTING--mtos--tosMinimize-Cost-jRETURN
iptables-tmangle-APREROUTING-mtos--tosMaximize-Throughput-jMARK--set-mark5
iptables-tmangle-APREROUTING-mtos--tosMaximize-Througput-jRETURN
##提高TCP初始连接(也就是带有SYN的数据包)的优先权是非常明智的.
iptables-tmangle-APREROUTING-ptcp-mtcp--tcp-flagsSYN,RST,ACKSYN-jMARK--set-mark1
iptables-tmangle-APREROUTING-ptcp-mtcp--tcp-flagsSYN,RST,ACKSYN-jRETURN
#想ICMP想ping有良好的反应,放在第一类。
iptables-tmangle-APREROUTING-picmp-jMARK--set-mark1
iptables-tmangle-APREROUTING-Picmp-jRETURN
#smallpackets(probablyjustACKS)长度小于64的小包通常是需要快些的,一般是用来确认tcp的连接的,让它跟快些的通道吧。
iptables-tmangle-APREROUTING-ptcp-mlength--length:
64-jMARK--set-mark2
iptables-tmangle-APREROUTING-ptcp-mlength--length:
64-jRETURN
#ftp放第二类,因为一般是小包,ftp-data放在第5类,因为一般是大时数据的传送。
iptables-tmangle-APREROUTING-ptcp-mtcp--dportftp-jMARK--set-mark2
iptables-tmangle-APREROUTING-ptcp-mtcp--dportftp-jRETURN
iptables-tmangle-APRETOUTING-ptcp-mtcp--dportftp-data-jMARK--set-mark5
iptables-tmangle-APREROUTING-ptcp-mtcp--dport-jRETURN
iptables-tmangle-APREROUTING-ptcp-mtcp--sportftp-jMARK--set-mark8
iptables-tmangle-APREROUTING-ptcp-mtcp--sportftp-jRETURN
iptables-tmangle-APREROUTING-ptcp-mtcp--sportftp-data-jMARK--set-mark8
iptables-tmangle-APREROUTING-ptcp-mtcp--sportftp-data-jRETURN
###提高SSH数据包的优先权:
放在第1类,要知道SSH是交互式的和重要的,不容待慢:
iptables-tmangle-APREROUTING-ptcp-mtcp--dport22-jMARK--set-mark1
iptables-tmangle-APREROUTING-ptcp-mtcp--dport-jRETURN
##SMTP邮件,放在第4类,因为有时有人发送很大的邮件,为避免它堵塞,让它跑第4道吧
iptables-tmangle-APREROUTING-ptcp-mtcp--dport25-jMARK--st-mark4
iptables-tmangle-APREROUTING-ptcp-mtcp--dport25-jRETURN
iptables-tmangle-APREROUTING-ptcp-mtcp--sport25-jMARK--set-mark8
iptables-tmangle-APREROUTING-ptcp-mtcp--sport25-jRETURN
##name-domainserver:
放在第1类,这样连接带有域名的连接才能快速找到对应有的地址,提高速度
iptables-tmangle-APREROUTING-pudp-mudp--dport53-jMARK--set-mark1
iptables-tmangle-APREROUTING-Pudp-mudp--dport53-jRETURN
###HTTP:
放在第3类,是最常用的,最多人用的
iptables-tmangle-APREROUTING-ptcp-mtcp--dport80-jMARK--set-mark3
iptables-tmangle-APREROUTING-ptcp-mtcp--dport80-jRETURN
iptables-tmangle-APREROUTING-ptcp-mtcp--sport80-jMARK--set-mark8
iptables-tmangle-APREROUTING-ptcp-mtcp--sport80-jRETURN
###pop邮件放在第3类:
iptables-tmangle-APREROUTING-ptcp-mtcp--dport110-jMARK--set-mark3
iptables-tmangle-APREROUTING-ptcp-mtcp--dprot110-jRETURN
iptables-tmangle-APREROUTING-ptcp-mtcp--sport110-jMARK--set-mark8
iptables-tmangle-APREROUTING-ptcp-mtcp--sport110-jRETURN
###MICSOSOFT-SQL-SERVE:
放在第2类,我这里认为较重要,一定保证速度和优先的
iptables-tmangle-APREROUTING-ptcp-mtcp--dport1433-jMARK--set-mark3
iptables-tmangle-APREROUTING-ptcp-mtcp--dport1433-jRETURN
iptables-tmangle-APREROUTING-ptcp-mtcp--sport1433-jMARK--set-mark8
iptables-tmangle-APREROUTING-ptcp-mtcp--sport1433-jRETURN
##https:
放在第
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- inux TC HTB 流量 控制