找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 56807|回复: 162

[脚本] 【HTB】数据分类/队列(Queue)的理论及方法

  [复制链接]
发表于 2010-10-20 23:52:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×
本帖最后由 zooyo 于 2011-2-9 19:56 编辑

本文源地址:http://mching08.com/archives/325.html,转载请注明出处!

在上面一篇文章中已经说过了,所有的数据都要进队列才能对数据进行控制。如何对数据进行分类,进而进入相应的队列,从而使HTB对其进行有效的控制,已达到流量控制的作用。稍后,我将首先对分类的方法进行简单的介绍,然后分别通过在routeros上设置相应进入队列的方法对以上的理论加以实践。

1、数据分类的方法
总的来说,队列就是需要将网络上的流量进行分类,从而让设备对相应的队列进行控制。主要有以下几种分类的方法:包长的大小、IP地址、目的端口、此外还有P2P,应用层识别等。
下面分别对这几种方法做一些说明:
1)包长的大小:所谓的小包优先
小包一般是一些控制报文,在上传带宽比较小的时候非常有用,而且包长小的话,同样数目的包比大包要占用的带宽要小很多。一般来说512byte以下的报文为小包,传导的是网络中的控制信息。
2)IP地址:所谓的VIP优先
一般来说,一个网络内部可能有几个特殊的IP地址,可能是企业的高管,也可能是小区中缴费多的用户等等,他们理所应当获取较高的优先权。
3)目的端口:所谓的特殊应用优先
在网络环境中,一些通用的服务都有自己固定的端口,比如为大家所熟知HTTP的80端口,pop3的110端口,SMTP的25端口,ftp的21端口,ssh的22端口,telnet的23端口,dns的53端口,ssl的443端口等等。这就需要看具体的环境中,应用的什么服务比较多了,然后对这些端口进行配置。
4)其他:
都是一些非主流的分类的方法了,因为每个厂商都有自己的识别方法,而且识别率都无法达到100%,因此不对这些方法做何评价。只是对这些技术做一些介绍,典型的有RouterOS的L7识别,panabit的应用层识别等等。

2、如何有效的对队列进行管理
对队列进行管理的时候主要通过两个方面,一种是对队列的带宽进行管理(即流量监管),另一种是对队列的优先级进行管理(即流量整形)。

对此,我给出以下建议:分类层次应该为包大小------目的端口------IP地址。
下面说说我给出这种建议的依据:
1)包长小的包一般在网络中起控制作用,这种包的特点就是实时性要求特别高,占用带宽不高,为了保证上传流量不被过多的占用(有时候FTP上传也是需要占用带宽的),建议其CIR设置在可用上行带宽的一半以下,包长比较大的包可以将其进入一个队列。
2)下载队列中,可以不用去管大包小包,因为在用户看来,所接受的大包小包的重要程度是同等的。
3)前面已经说了,上传和下载是分开的,在1)中也说了上传应该注意的,下面我们来说说下载的。迅雷下载和网页流量,哪个更重要?显然是网页,因此将网页的80端口优先对于做网络优化的工程师来说是非常必要的。找到更多的对自己有用的端口,并对其进行优化使我们下一步的目标。
4)几个分类方法之间的配合
一般来说,小包中有也有各种服务的包,各种服务中,希望哪个IP请求的服务优先被满足?这就需要我们在标记的时候,对这些服务的包进去分类的区分。
5)PCQ的应用
如果某种服务下面,所有的IP的优先级都差不多,可以采用PCQ的方式,来让Routeros根据环境中用户的在线数量去平分带宽。

需要注意几点:
1)标记数据包需要通过首先标记连接,再去标记数据包,这样比较准确;
2)标记的时候应该包含所有的情况,包含时需要根据Passthrough属性的值来确定标记是否终止,标记数据包应该紧接在所标记连接以后;
3)mangle中,标记的顺序是从上到下的,匹配成功以后还会继续向下匹配,除非Passthrough的值为no;
4)将192.168.1.2的包分类标记有两种方法,一种是先标记192.168.1.2所有的数据连接,再标记192.168.1.2中80端口的连接,再标记其他端口的连接,中间的Passthrough的值全为yes;另一种方法是先标记192.168.1.2中80端口的连接,再去标记其他所有的连接,中间的Passthrough的值全部为no。显而易见,后者的方法更为科学,更为节省资源;
5)标记小包的时候,不要尝试着去标记小包的连接,应该是先标记连接以后再根据连接去标记该连接中的大包和小包。

3、我们来对上面的理论在实际环境中加以实践
步骤是先标记数据包,然后将这些数据包应用在Queue Tree中。

  1. /ip firewall mangle
  2. add chain=prerouting src-address=192.168.1.0/24 protocol=icmp  action=mark-connection new-connection-mark=all_icmp_con passthrough=yes
  3. add chain=prerouting connection-mark=all_icmp_con action=mark-packet new-packet-mark=all_icmp_pack passthrough=no
  4. add chain=prerouting src-address=192.168.1.0/24 protocol=tcp dst-port=80 action=mark-connection new-connection-mark=all_80_con passthrough=yes
  5. add chain=prerouting connection-mark=all_80_con action=mark-packet packet-size=0-512 new-packet-mark=all_80_small_pack passthrough=no
  6. add chain=prerouting connection-mark=all_80_con action=mark-packet new-packet-mark=all_80_big_pack passthrough=no
  7. add chain=prerouting src-address=192.168.1.0/24 action=mark-connection new-connection-mark=all_other_con passthrough=yes
  8. add chain=prerouting connection-mark=all_other_con action=mark-packet packet-size=0-512 new-packet-mark=all_other_small_pack passthrough=no
  9. add chain=prerouting connection-mark=all_other_con action=mark-packet new-packet-mark=all_other_big_pack passthrough=no
  10. /queue tree
  11. add name=Down parent=lan
  12. add name=icmp_d parent=Down packet-mark=all_icmp_pack priority=1
  13. add name=80_small_d parent=Down packet-mark=all_80_small_pack priority=2
  14. add name=80_big_d parent=Down packet-mark=all_80_big_pack priority=3
  15. add name=other_small_d parent=Down packet-mark=all_other_small_pack priority=4
  16. add name=other_big_d parent=Down packet-mark=all_other_big_pack priority=5
  17. add name=Up parent=wan
  18. add name=icmp_u parent=Up packet-mark=all_icmp_pack priority=1
  19. add name=80_small_u parent=Up packet-mark=all_80_small_pack priority=2
  20. add name=80_big_u parent=Up packet-mark=all_80_big_pack priority=3
  21. add name=other_small_u parent=Up packet-mark=all_other_small_pack priority=4
  22. add name=other_big_u parent=Up packet-mark=all_other_big_pack priority=5
复制代码
这里只是给个示范,更多的端口需要自己去添加!
routeros
发表于 2010-10-21 00:03:09 | 显示全部楼层
赚个金币先
routeros
回复

使用道具 举报

发表于 2010-10-21 00:49:41 | 显示全部楼层
赚个金币先
routeros
回复

使用道具 举报

发表于 2010-10-21 02:07:49 | 显示全部楼层
打酱油去了
routeros
回复

使用道具 举报

发表于 2010-10-21 04:14:25 | 显示全部楼层
看看先,学习学习
routeros
回复

使用道具 举报

发表于 2010-10-21 08:30:26 | 显示全部楼层
打酱油去了
routeros
回复

使用道具 举报

发表于 2010-10-21 09:40:18 | 显示全部楼层
看看写的什么
routeros
回复

使用道具 举报

发表于 2010-10-21 09:45:45 | 显示全部楼层
看看先,学习学习
routeros
回复

使用道具 举报

发表于 2010-10-21 09:47:59 | 显示全部楼层
非金币帖支持
routeros
回复

使用道具 举报

发表于 2010-10-21 09:48:07 | 显示全部楼层
很好哦~~要学习一下~
routeros
回复

使用道具 举报

发表于 2010-10-21 09:52:34 | 显示全部楼层
学习一下啊
routeros
回复

使用道具 举报

发表于 2010-10-21 11:01:35 | 显示全部楼层
赚个金币先
routeros
回复

使用道具 举报

发表于 2010-10-21 12:57:07 | 显示全部楼层
看看先,学习学习
routeros
回复

使用道具 举报

发表于 2010-10-21 13:38:33 | 显示全部楼层
顶一下学习中。。。
routeros
回复

使用道具 举报

发表于 2010-10-21 14:09:55 | 显示全部楼层
看看.............
routeros
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|软路由 ( 渝ICP备15001194号-1|渝公网安备 50011602500124号 )

GMT+8, 2024-5-3 18:29 , Processed in 0.062316 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表