IT猫扑网:您身边最放心的安全下载站! 最新更新| 软件分类| 专题汇总| 手机版

您当前所在位置:IT猫扑网 > 操作系统 > LINUX > linux下TC+HTB流量控制

linux下TC+HTB流量控制

时间:2015-06-28 00:00 来源:IT猫扑网|http://www.itmop.com/ 作者:网管联盟 我要评论(0)

  C规则涉及到 队列(QUEUE) 分类器(CLASS) 过滤器(FILTER),filter划分的标志位可用U32或iptables的set-mark来实现 ) 一般是&控发&不控收 linux下有两块网卡,一个eth1是外网,另一块eth0是内网.在eth0上做HTB。(注 意:filter划分标志位可用u32打标功能或iptables的set-mark功能,如果用iptables来打标记的话,下行速LV在eth0处 控制,但打标应在进入eth0之前进行,所以,&-i eth1&;例子:

  主要命令就下面三句:创建一个HTB的根

  1.tc qdisc add dev eth0 root handle 1: htb default 20创建一个HTB的类,流量的限制就是在这里限制的,并设置突发.

  2.tc class add dev eth0 parent 1: classid 1:1 htb rate 200kbit(速率) ceil 200kbit burst 20k(突发流量)

  创建一个过滤规则把要限制流量的数据过滤出来,并发给上面的类来限制速度3.tc filter add dev eth0 parent 1: prio 1(优先级) protocol ip u32 match ip sport 80 0xfff flowid 1:1

  说明:让交互数据包保持较低的延迟时间,并最先取得空闲带宽,比如:

  ssh telnet dns quake3 irc ftp控制 smtp命令和带有SYN标记的数据包,都应属于这一类。为了保证上行数据流不会伤害下行流,还要把ACK数据包排在队列前面,因为下行数据的ACK必须同上行流进行竟争。

  TC+IPTABLES+HTB+SFQ

  1 tcp/ip 协议规定,每个封包,都需要有ACKNOWLEDGE讯息的回传,也就是说,传输的资料需要有一个收到资料的讯息回复,才能决定后面的传输速度,并决定是 否重新传输遗失的资料,上行的带宽一部分就是用来传输这些ACK资料的.上行带宽点用大的时候,就会影响ACK资料的传送速度,并进而影响到下载速度,

  2 试验证明,当上传满载时,下载速度变为原来速度的40%,甚至更低,,因为上载文件(包括ftp上传,发邮件SMTP),如果较大,一个的通讯量令带宽超 向包和,那么所有的数据包按照先进先出的原则进行排队和等待,这就可以解释为什么网内其中有人用ftp上载文件或发送大邮件的时候,整个网速变得很慢的原 因.

  解决速度之道:

  1 为了解决这些速度问题,对经过线路的数据进行了有规则的分流.把本来在宽带上的瓶颈转移到我们的LINUX路由器上,可以把带宽控制的比我们购买的带宽小一点. 这样,我们就可以方便的用tc技术对经过的数据进行分流与控制.

  我们的想像就像马路上的车道一样,有高速道,还有小车道,大车道,需要高速的syn ack icmp ssh等走高速道,需要大量传输的ftp-data,smtp等走大车道,不能让它堵塞整条马路,各行其道.

  linux下的TC(traffic control)就有这样的作用,只要控制得当,一定会有明显的效果.tc 和iptables结合是最好的简单运用的结合方法.

  我 们设置过滤器以便用iptables对数据包进行分类,因为iptables更灵活,而且还可以为每个规则设置计数器,iptables用mangle链 来mark数据包,告诉了内核,数据包会有一个特定的FWMARK标记值(handle x fw) 表明它应该送给那个类(classid x:x),而prio是优先值,表明那些重要数据应该优先通过那个通道,首先选择队列(选择htb),

  一般系统默认的是fifo的先进先出队列,就是说包是按照先来先处理的原则,如果有一个大的数据包在前面,那么后面的包只能等前面的发完后才能接着发了,这样就算后面既使是一个小小的ack包,也要等待了,这样上传就影响了下载,就算你有很大的下载带宽也无能为力.

  HTB(Hierarchical token bucket,分层的令牌桶),就像CBQ一样工作,但是并不靠计算闲置时间来整形,它是一个分类的令牌桶过滤器.,它只有很少的参数.

  结构简图: 1:

  ~~~~~~~~~~~~~~~~`~~~~~

  ~~~~~~~_________1:1~~~~~~~~~1:2________

  |~~~|~~~~|~~~~|~~~~~|~~~~~~~~|~~~~~~~~|~~~~~~~|

  1:11~~~1:12~~~~~~~~~~~~1:21~~~1:22~~~1:23~~1:24

  优先顺序: 1:11 1:12 1:21 1:22 1:23 1: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:21 http,pop是最常用的啦,为了太多人用,而导致堵塞,我们不能给得太多,也不能太少.

  1:22 我打算给smtp用,优先低于1:21,以防发大的附件大量占用带宽.

  1:23 我打算给ftp-data,和1:22一样,很可能大量上传文件,所以,rate不能给的太多,而当其他有剩时可以给大些,ceil设置大些.

  1:24 是无所谓通道,就是一般不是我们平时工作上需要的通道,给小点防止这些人妨碍有正常工作需要的人.

  上行uplink 320K,设置销低于理论值.

  DEV=&PPP0&

  UPLINK=300

  下行downlink 3200K大概一半左右,以便能够得到更多的关发连接.

  DOWNLINK=1500

  1 曾加一个根队列,没有进行分类的数据包都走这个1:24是缺省类:

  tc qdisc add dev $DEV parent 1: htb default 24

  1.1 增加一个根队下面主干类1: 速率为$UPLINK k

  tc cladd add dev $DEV parent 1: classid 1:1 htb rate ${UPLINK}kbit ceil ${UPLINK}kbit prio 0

  1.1.1 在主干类1下建立第一叶子类,这是一个最高优先权的类,需要高优先和高速的包走这条通道,比如SYN ACK ICMP等.

  tc class add dev $DEV parent 1:1 classid 1:11 htb rate ${$uplink}kbit ceil ${uplink}kbit prio 1

  1.1.2 在主类1下建立第二叶子类,这是一个次高优先权的类,比如我们重要的crm数据。

  tc class add dev $DEV parent 1:1 classid 1:12 htb rate ${$uplink-150}kbit ceil ${uplink-50}kbit prio 2

  1.2 在根类下建立次干类 classid 1:2 ,此次干类的下面全部优先权低于主干类,以防重要数据堵塞。

  tc class add dev $DEV parent 1: classid 1:2 htb rate ${$UPLINK -150]kbit prio 3

#p#副标题#e#

  1.2.1 在次干类下建立第一叶子类,可以跑例如http ,pop等。

  tc class add dev $DEV parent 1:2 classid 1:21 htb rate 100kbit ceil ${$uplink -150}kbit prio 4

  1.2.2 在次干类下建立第二叶子类,不要太高的速度,以防发大的附件大量占用带宽,便如smtp等。

  tc class add dev $DEV parent 1:2 classid 1:22 htb rate 30kbit ceil ${uplink-160}kbit prio 5

  1.2.3 在次干类下建立第三叶子类,不要太高的带宽,以防大量的数据堵塞网络,例如:ftp-data.

  tc class add dev $DEV parent 1:2 classid 1:23 htb rate 15kbit ceil ${UPLINK-170}kbit prio 6

  1.2.4 在次干类下建立第四叶子类。无所谓的数据通道,无需要太多的带宽,以防无所谓的人在阻碍正务。

  tc class add dev $DEV parent 1:2 classid 1:24 htb rate 5kbit ceil ${UPLINK -250}kbit prio 7

  在每个类下面再附加上另一个队列规定,随机公平队列(SFQ),不被某个连接不停占用带宽,以保证带宽的平均公平使用。

  #SFQ(stochastic fairness queueing 随机公平队列),SFQ的关键词是&会话&(或称作流),主要针对一个TCP会话或者UDP流,流量被分成相当多数量的FIFO队列中,每个队列对应一个会话。

  数据按照简单轮转的方式发送,每个会话都按顺序得到发送机会。这种方式非常公平,保证了每个会话都不会被其它会话所淹没,SFQ之所以被称为&随机&,是因为它并不是真的为每个会话创建一个队列,而是使用一个散列算法,把所有的会话映射到有限的几个队列中去。

  #参数perturb是多少秒后重新配置一次散列算法,默认为10秒.

  tc qdisc add dev $DEV parent 1:11 handle 111: sfq perturb 5

  tc qidsc add dev $DEV parent 1:12 handle 112: sfq perturb 5

  tc qdisc add dev $DEV parent 1:21 handle 121: sfq perturb 10

  tc qidsc add dev $DEV parent 1:22 handle 122: sfq perturb 10

  tc qidsc add dev $DEV parent 1:23 handle 123: sfq perturb 10

  tc qidsc add dev $DEV parent 1:24 handle 124: sfq perturb 10

  设置过滤器,handle是iptables作mark的值,让被iptables在mangle链做了mark的不同的值选择不同的通道classid,而prio是过滤器的优先级别

  tc filter add dev $DEV parent 1:0 protocol ip prio 1 handle 1 fw classid 1:11

  tc filter add dev $DEV parent 1:0 protocol ip prio 2 handle 2 fw classid 1:12

  tc filter add dev $DEV parent 1:0 protocol ip prio 3 handle 3 fw classid 1:21

  tc filter add dev $DEV parent 1:0 protocol ip prio 4 handle 4 fw classid 1:22

关键词标签:linux,TC+HTB流量控制

相关阅读 安装红帽子RedHat Linux9.0操作系统教程 Tomcat9.0如何安装_Tomcat9.0环境变量配置方法 多种操作系统NTP客户端配置 Linux操作系统修改IP Linux实现SCSI硬盘热插拔及在线识别 Linux下用CDMA modem拨号上网

文章评论
发表评论

热门文章 安装红帽子RedHat Linux9.0操作系统教程 安装红帽子RedHat Linux9.0操作系统教程 Linux服务器:设计高性能网站架构-LLMP Linux服务器:设计高性能网站架构-LLMP 使用Clonezilla迁移到虚拟Linux环境 使用Clonezilla迁移到虚拟Linux环境 Linux上的MRTG流量监控中心 Linux上的MRTG流量监控中心 Linux 双网卡绑定一个IP原理及实现 Linux 双网卡绑定一个IP原理及实现 linux和windows等系统远程控制ubuntu桌面 linux和windows等系统远程控制ubuntu桌面

相关下载

人气排行 Linux下获取CPUID、硬盘序列号与MAC地址 dmidecode命令查看内存型号 linux tc实现ip流量限制 安装红帽子RedHat Linux9.0操作系统教程 linux下解压rar文件 lcx.exe、nc.exe、sc.exe入侵中的使用方法 Ubuntu linux 关机、重启、注销 命令 查看linux服务器硬盘IO读写负载 linux命令行浏览器的使用方法 Linux NFS服务固定端口及防火墙配置 U盘安装Ubuntu 10.04 Linux清除用户登录记录和命令历史方法