CN102281196B - 决策树生成方法及设备、基于决策树报文分类方法及设备 - Google Patents
决策树生成方法及设备、基于决策树报文分类方法及设备 Download PDFInfo
- Publication number
- CN102281196B CN102281196B CN201110229772.9A CN201110229772A CN102281196B CN 102281196 B CN102281196 B CN 102281196B CN 201110229772 A CN201110229772 A CN 201110229772A CN 102281196 B CN102281196 B CN 102281196B
- Authority
- CN
- China
- Prior art keywords
- node
- rule
- decision tree
- cutting
- cut
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开一种决策树生成方法及设备、基于决策树的报文分类方法及设备。该决策树生成方法包括:将原始规则集中的规则转化为决策树的范围数组;由根节点开始,采用多比特前缀与HiCuts算法结合的方式裁剪,直到每一节点的规则数小于预设值。该基于决策树的报文分类方法包括:提取报文中的源、目的IP地址,并将其转换为决策树查询数组;由根节点开始查找,根据裁剪的维及裁剪的次数进行依次查找,直到获得叶子节点;将报文查询数组与叶子节点中的规则进行比较,获得与该报文匹配的规则。本发明通过采用比特前缀与HiCuts结合生成决策树,减少了该决策树的深度,使得基于该决策树进行查找时既提高了查询效率,而且还节省了内存的占用空间。
Description
技术领域
本发明涉及通讯领域,尤其涉及一种决策树生成方法及设备、基于决策树报文分类方法及设备。
背景技术
随着网络应用的发展,如今的网络设备,例如:路由器、防火墙、3G网元等,通常需要支持访问控制、QOS(Quality of Service,服务质量)、策略路由等一系列功能。这些功能的一个共同点就是需要根据报文的信息进行分类,然后对不同类型的报文做相应的处理。因此,报文分类成为了这些设备的一个基本功能。
报文分类的实现通常可分为:硬件方式和软件方式。硬件方式需要由专门的子卡或芯片来实现,这些硬件的价格通常都比较昂贵。为了节约成本,同时也为了适用一些无法使用硬件做报文分类的环境,针对IPv4报文分类,人们提出了一系列软件实现报文分类的算法。
典型的报文分类算法大致可分为几类:线性查找法、基于特里树的报文分类、几何学算法(例如,HiCuts等)、启发式算法(例如,RFC等)。
1.线性查找法是报文分类最简单的方法,对于一个包含N个条目的规则集,空间复杂度和时间复杂度都是O(N),所以这种方法不适用于包含条目数多的规则集。
2.基于特里树的报文分类算法是一维特里树的扩展。其中典型的算法是Hierarchical Tries,当规则包含d个域(维),且每个域的长度最大值是w时,空间复杂度是O(dw),查询时间复杂度是O(wd)。将算法的数据结构改成多比特特里树(Multi-Bit Trie)时,会减少查询时间复杂度,相应的空间复杂度也会增加。图1显示了一组一维前缀数据所生成的多比特特里树的部分节点。由于IPv6的地址长度是IPv4地址长度的4倍,无论是将IPv6地址拆分成多个域,还是把IPv6地址作为一个域生成特里树,其查找时间都会急剧增大。所以,这种算法无法直接应用到IPv6报文分类。
3.HiCuts(Hierarchical Intelligent Cuttings)是一种典型的基于决策树的报文分类算法。其基本思想是:以预设规则的每一字段看作一个维度,将分类器中所有规则按范围空间进行循环分组,直到每一组(桶)都只有少于或等于指定条(binth)的规则,从而形成一棵决策树。在这棵决策树中包含所有规则的节点为根节点,少于或等于binth条规则的节点看成叶节点,其他节点就是中间节点,每次分组的方法就是裁剪决策树策略。查找时,从根节点开始,在这棵决策树中,根据裁剪策略,找到叶节点,再通过线性匹配来找到匹配规则。
在规则空间均匀分布的情况下,HiCuts有很好的性能。但是如果一个d维规则集中的大部分规则只能通过某一维来划分,其他维的值相似或相同,HiCuts树的深度和结点会大大增加,预处理时间和占用的内存空间都会成倍增加,同时也会大大影响算法的查询性能。而且IPv6地址长度是IPv4地址长度的4倍,如果直接将此算法应用于IPv6报文分类,把IPv6地址看成一维,在最差情况下,其性能也会下降4倍。
4.RFC(Recursive Flow Classification)算法是一种适用于多维报文分类快速查找算法。该算法的优点是:查询速度快,查询时间复杂度可用与维度k相关的少数几次内存访问来表示,与规则数N无关,而且不存在最坏情况下的查询性能下降。算法的缺点是:预处理过程十分复杂(不论在时间和空间上);算法所需的内存空间难以用表达式来描述,其大小与规则集中的规则数N,规则的维度k,以及规则之间的离散程度密切相关。
IPv6报文分类采用这种算法时,需要将IPv6地址扩展成多个维(维数是IPv4地址的4倍),这将导致内存访问次数的增加,同时也会使得内存占用更加不可控。所以RFC算法对于IPv6报文分类无论在空间复杂度还是查询时间复杂度方面都不理想。
综上所述,相比IPv4报文分类,IPv6报文分类所面临的主要问题是地址长度的扩大。而上述基于IPv4的报文分类算法都无法直接应用到IPv6报文分类。
发明内容
本发明的主要目的是提供一种决策树生成方法方法,旨在使得基于该决策树进行查找时的效率提高,并减少查找时占用的内存空间。
本发明提供一种决策树生成方法,包括以下步骤:
将原始规则集中的规则转化为决策树的范围数组;
由根节点开始,采用多比特前缀与HiCuts算法结合的方式裁剪,直到每一节点的规则数小于预设值。
优选地,所述由根节点开始,采用多比特前缀与HiCuts算法结合的方式裁剪,直到每一节点的规则数小于预设值的步骤具体为:
将决策树以包含所有规则的节点作为根节点,并将其放入队列;
判断队列是否为空,是则结束本流程;否则在队列首节点包含的规则数大于或等于预设值时采用HiCuts算法,启发式的选择裁剪的维和裁剪的次数;在队列首节点包含的规则数小于预设值时返回执行判断队列是否为空的步骤;
根据裁剪的维及裁剪的次数,采用多比特前缀方式进行裁剪,生成子节点;
将包含规则的子节点放入队列,并返回执行判断队列是否为空的步骤。
优选地,所述采用HiCuts算法,启发式的选择裁剪的维和裁剪的次数的步骤具体为:
去除冗余规则;
计算每一维裁剪操作后的各项数据;
根据每一维上裁剪后的数据,在包含的规则数大于或等于预设值的首节点上选择其中一维进行裁剪。
优选地,所述根据裁剪的维及裁剪的次数,采用多比特前缀方式进行裁剪,生成子节点的步骤包括:
根据裁剪的次数,申请相应大小内存;
根据裁剪的维和裁剪的次数确定每个子节点的范围;
确定每个子节点包含的规则。
本发明还提供了一种决策树生成设备,包括:
规则转换模块,用于将原始规则集中的规则抽象为决策树的范围数组;
裁剪模块,用于以包含所有规则的节点作为根节点,采用多比特前缀与HiCuts算法结合的方式裁剪,直到每一节点的规则数小于预设值。
优选地,所述裁剪模块包括:
根节点确定单元,用于将决策树以包含所有规则的节点作为根节点,并将其放入队列;
队列判断单元,用于判断所述队列是否为空;
节点判断单元,用于当队列不为空时,判断队列首节点包含的规则数是否小于预设值;
裁剪参数设置单元,用于在队列首节点包含的规则数大于或等于预设值时采用HiCuts算法,启发式的选择裁剪的维和裁剪的次数;
节点生成单元,用于根据裁剪的维及裁剪的次数,采用多比特前缀方式进行裁剪,生成子节点,并将所述子节点放入队列。
优选地,所述裁剪参数设置单元具体用于:
去除冗余规则;
计算每一维裁剪操作后的各项数据;
根据每一维上裁剪后的数据,在包含的规则数大于或等于预设值的节点上选择其中一维进行裁剪。
优选地,所述节点生成单元具体用于:
根据裁剪的次数,申请相应大小内存;根据裁剪的维和裁剪的次数确定每个子节点的范围;确定每个子节点包含的规则。
本发明又提供了一种基于决策树的报文分类方法,该决策树由上述生成方法生成,所述报文分类方法包括以下步骤:
提取报文中的源、目的IP地址,并将其转换为决策树查询数组;
由根节点开始查找,根据裁剪的维及裁剪的次数进行依次查找,直到获得叶子节点;
将报文的查询数组与叶子节点中的规则进行比较,获得与查询数组匹配的规则。
优选地,所述由根节点开始查找,根据裁剪的维及裁剪的次数进行依次查找,直到获得叶子节点的步骤包括:
将根节点设置为当前查找节点;
判断所述查找节点是否为空,是则设置无法找到匹配规则的标识,并结束本流程;否则在查找节点包含的规则数小于预设值时,将报文的查询数组与叶子节点中的规则进行比较,获得与查询数组匹配的规则;在查找节点包含的规则数大于或等于预设值时,根据裁剪的维、裁剪的次数及查询数组进行查找,获得子节点,并将所述子节点设置当前查找节点,再返回执行判断查找节点是否为空的步骤。
优选地,将报文的查询数组与叶子节点中的规则进行比较,获得与查询数组匹配的规则的步骤包括:
将查询数组的每一维与叶子节点中的规则的每一维对应进行匹配,都匹配时,则返回匹配的规则序号,并结束本流程;否则设置无法找到匹配规则的标识,并结束本流程。
本发明又提供了一种基于决策树的报文分类设备,包括:
报文转换模块,用于提取报文中的源、目的IP地址,并将其转换为决策树查询数组;
节点查找模块,用于由根节点开始查找,根据裁剪的维及裁剪的次数进行依次查找,直到获得叶子节点;
规则匹配模块,用于将报文的查询数组与叶子节点中的规则进行比较,获得与查询数组匹配的规则。
优选地,所述节点查找模块包括:
查找节点设置单元,用于将根节点设置为当前查找节点;
节点规则判断单元,用于判断该查找节点是否为空,不为空时则判断所述查找节点包含的规则数是否小于预设值;
子节点查找单元,用于在查找节点包含的规则数大于或等于预设值时,根据裁剪的维、裁剪的次数及查询数组进行查找,获得子节点,再通过所述查找节点设置单元将所述子节点设置为当前查找节点;
查找结果单元,用于在查找节点为空时,设置无法找到匹配规则的标识。
优选地,所述规则匹配模块具体用于:将查询数组的每一维与叶子节点中的规则的每一维对应进行匹配,都匹配时,返回匹配的规则序号至所述查找结果单元;否则通过所述查找结果单元设置无法找到匹配规则的标识。
本发明通过采用比特前缀与HiCuts结合生成决策树,减少了该决策树的深度,使得基于该决策树进行查找时既提高了查询效率,而且还节省了内存的占用空间。
附图说明
图1是现有技术中基于特里树的报文分类算法中生成的多比特特里树的部分节点的结构示意图;
图2是本发明决策树的生成方法一实施例的流程示意图;
图3是本发明采用多比特前缀与HiCuts结合的方式进行裁剪步骤的流程示意图;
图4是应用本发明决策树生成方法生成的决策树一实施例的结构示意图;
图5是本发明决策树生成设备一实施例的结构示意图;
图6是本发明决策树生成设备一实施例中裁剪模块的结构示意图;
图7是本发明基于决策树的报文分类方法一实施例的流程示意图;
图8是本发明基于决策树的报文分类方法一实施例中由根节点开始查找,获得叶子节点过程的流程示意图;
图9是本发明基于决策树的报文分类设备一实施例的结构示意图;
图10是本发明基于决策树的报文分类设备一实施例中节点查找模块的结构示意图;
图11是线性查找和MBT-HiCuts进行IPv6报文分类处理比较结果示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
以下结合说明书附图及具体实施例进一步说明本发明的技术方案。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
图2是本发明决策树生成方法一实施例的流程示意图。需要说明的是,本发明决策树生成方法,本身不关注数据的具体含义,本实施例仅以IPv6报文为例,当然还可以扩展到其他类型的数据应用中。
参照图2,本发明决策树生成方法包括以下步骤:
步骤S101、将原始规则集中的规则转化为决策树的范围数组;
步骤S102、由根节点开始,采用多比特前缀与HiCuts算法结合的方式裁剪,直到每一节点的规则数小于预设值。
步骤S101具体为:提取原始规则集中规则的源、目的IPv6地址和掩码等数据,并将其转换成决策树范围数组表示的规则格式,存入到决策树规则集对应的维上。决策树每一维的长度可以权衡报文匹配规则时的查找效率及裁剪决策树的深度来设置,本实施例中设置决策树每一维的长度为32位。
下面以一组IPv6的原始规则集为例对步骤S101具体描述。该IPv6的原始规则集中源、目的IPv6地址和掩码如表1所示。
表1
规则 | 源IPV6地址 | 目的IPV6地址 |
R1 | 0:0001::/32 | 2011::/16 |
R2 | 0:0001:2001::/48 | 2012::/16 |
R3 | 0:0001:4001::/48 | 2001::/8 |
R4 | 0:0001:2001::/48 | 4001::/16 |
R5 | 0:0001::/32 | 8001::/16 |
R6 | 0:0001:E001::/48 | 2000::/3 |
由于IPv6地址长度是128位,决策树的维长度是32位,所以IPv6地址需要拆分成4个维度。按这种方法存储表1转换后的规则,决策树存储规则的维数等于8(dim1-dim8)。因此,把源IPv6地址对应到dim1-dim4;目的IPv6地址对应到dim5-dim8。转换后存入决策树中的规则集如表2所示。
表2
上述步骤S102中,预设值指叶子节点中包含的规则数的最大值。由于预设值过大将降低决策树的深度,而增加叶子节点中线性查找的时间;预设值过小将增加决策树的深度,而减少叶子节点中线性查找的时间,因此该预设值的设置需权衡决策树的深度及叶子节点中线性查找的时间。
参照图3,上述步骤S102包括以下步骤:
步骤S1021、将决策树以包含所有规则的节点作为根节点,并将其放入队列;
步骤S1022、判断队列是否为空,是则结束该流程;否则执行步骤S1023;
步骤S1023、判断该队列首节点包含的规则数是否小于预设值,是则执行步骤S1022;否则执行步骤S1024;
步骤S1024、采用HiCuts算法,启发式的选择裁剪的维和裁剪的次数;
步骤S1024进一步包括:
步骤A1、去除冗余规则;
由于在每个节点上,当低优先级的规则在每一维上都被高优先级的规则包含时,低优先级的规则就是冗余规则。所有去除冗余规则,既可以减少内存的占用,又能缩小问题处理的规模。
步骤A2、计算每一维裁剪操作后的各项数据,包括:裁剪次数;以及相应的裁剪后各个子节点的规则数总和、裁剪后的空间度量值;
裁剪次数越大,决策树的深度越低,从而查询效率越高,但是内存的消耗也会增大。故此处裁剪次数的设置需要权衡查询效率和内存消耗。
由于本实施例的裁剪采用多比特前缀方式,因此裁剪次数为2n,n就是裁剪的前缀比特位数。如图1所示,在Root node上,裁剪最前面的3个比特(n=3),那么裁剪次数为:23=8。
HiCuts算法的预处理程序使用一种启发式方法,动态的由当前裁剪的情况和一个全局配置的内存空间测量函数spmf来决定裁剪次数,spmf定义如下:
spmf(N)=spfac*N
spfac是预先指定的内存膨胀因子;N表示当前节点上规则条目数。某个节点上裁剪后的内存消耗度量定义如下:
在满足下面的不等式的前提下,选择最大的裁剪次数。
sm(C)<spmf(N)
由于原有HiCuts算法根据裁剪次数,采用二分法方式查找,这种方法裁剪次数越多,比较次数也就越多。而本发明采用多比特前缀方式裁剪,有效地利用IP地址前缀的特征,通过这种方式进行查询时,可以根据前缀值,一次性定位到子树的位置,提高查询效率。
步骤A3、根据每一维上裁剪后的数据,在当前节点上选择其中一维进行裁剪。
对于同样的一组规则,采用不同的方法做裁剪,生成的决策树差别很大。所以选择裁剪维的方法至关重要。HiCuts算法给了4种选择的方法:
方法一:最小化子节点的规则最大条目总数。
方法二:选择子节点分布中熵最大的那个分布作为裁剪的维。
方法三:选择内存消耗度量最小的维。
方法四:选择规则的不同的范围个数最大的维。
这四种方法对不同的规则集裁剪的效果也不一样,具体选择哪种方法可以根据具体情况动态决定。
步骤S1025、根据裁剪的维及裁剪的次数,采用多比特前缀方式进行裁剪,生成子节点;
执行步骤S1025的同时,可在当前节点上记录裁剪的维和裁剪的次数,供后期的查找操作使用。
步骤S1025进一步包括:
步骤B1:根据裁剪的次数,申请相应大小内存;
内存以指针数组方式表示,每个数组元素都是一个指针,指针根据序号的值,指向相应的子节点。例如:图1中的Root node裁剪8次,申请的内存就是一个含有8个指针的数组。数组的序号也就是裁剪比特数组成的值(000~111)。
步骤B2、根据裁剪的维和裁剪的次数确定每个子节点的范围;
由于是按照多比特前缀方式做等分裁剪,所以每个子节点的范围值也就是父节点的范围按照裁剪的维和裁剪比特位做等分处理。例如:图1中Rootnode裁剪后前缀为100的子节点Node 1在dim1维上的范围就是100*(*表示后面的数据可以是任意值)。
步骤B3、确定每个子节点包含的规则。
在确定子节点规则时,将父节点中,符合当前子节点在裁剪维上范围的规则记录到本节点上。例如:图1中Root node裁剪后前缀为100的子节点Node 1包含规则(R1,R2,R6,R9)。
步骤S1026、将包含规则的子节点放入队列,并执行步骤S1022。
下面将针对表2所示的规则集,对决策树的生成过程具体描述。首先,预先设定决策树参数如下:
(1)桶大小:binth=3;
(2)内存膨胀因子:spfac=2;
(3)裁剪时选择维的方法:方法四-选择规则的不同的范围个数最大的维。
根据上述决策树的生成方法,可以生成如图4所示的决策树。图4中的圆角矩形表示中间节点(包括根节点),方角矩形表示叶子节点。该决策树的生成过程如下:
步骤C1、将决策树包含所有规则的节点作为根节点,即包含规则R1~R6的节点;
步骤C2、对根节点进行裁剪时,选择dim5,裁剪8次(裁剪前3比特);
步骤C3、根据裁剪的次数(裁剪前3比特),则三个比特对应的取值为000、001、010、011、100、101、110及111。当该三个比特对应的取值为001时,R1~R6中在对应比特位包含(或等于)001的规则有{R1,R2,R3,R6},所以生成子节点1,而且该子节点1包含这些规则。同理,取值为010、100时分别生成子节点2和3。取其他值时,都没有规则满足条件,所以不生成子节点。
步骤C4、节点2和节点3的规则数都小于binth,所以这两个节点是叶子节点,无需继续裁剪;而节点1包含的规则数目大于binth,所以这个节点是中间节点,需要继续做裁剪操作。
步骤C5、取出节点1,对节点1进行裁剪时,选择dim2裁剪,裁剪4次(裁剪前2比特),则两个比特对应的取值为00、01、10及11。当该两个比特对应的取值为00时,R1、R2、R3及R6四个规则在对应比特位包含(等于)00的规则有{R2,R3},所以生成子节点4。同理,取值为01、10、11时分别生成节点5~节点7三个子节点。由于节点4~节点7的规则数都小于binth,所以这四个节点是叶子节点,无需再做裁剪操作。
图5是本发明决策树生成设备一实施例的结构示意图。
参照图5,本发明决策树生成设备包括:
规则转换模块10,用于将原始规则集中的规则抽象为决策树的范围;
裁剪模块20,用于以包含所有规则的节点作为根节点,采用多比特前缀与HiCuts算法结合的方式裁剪,直到每一节点的规则数小于预设值。
规则转换模块10具体用于:提取原始规则集中规则的源、目的IPv6地址和掩码等数据,并将其转换成决策树范围数组表示的规则格式,存入到决策树规则集对应的维上。决策树每一维的长度可以权衡报文匹配规则时的查找效率及裁剪决策树的深度来设置。
参照图6,裁剪模块20进一步包括:
根节点确定单元21,用于将决策树以包含所有规则的节点作为根节点,并将其放入队列;
队列判断单元22、用于判断所述队列是否为空;
当队列判断单元22判断该操作队列为空时,则表示裁剪结束。
节点判断单元23,用于当队列不为空时,取出队列的首节点,判断该首节点包含的规则数是否小于预设值;
裁剪参数设置单元24,用于当首节点包含的规则数大于或等于预设值时,采用HiCuts算法,启发式的选择裁剪的维和裁剪的次数;
裁剪参数设置单元24具体用于:去除冗余规则;计算每一维裁剪操作后的各项数据,包括:裁剪次数,以及相应的裁剪后各个子节点的规则数总和、裁剪后的空间度量值;根据每一维上裁剪后的数据,在当前首节点上选择其中某一维进行裁剪。
节点生成单元25,用于根据裁剪的维及裁剪的次数,采用多比特前缀方式进行裁剪,生成子节点,并将该子节点放入队列。
节点生成单元25具体用于:根据裁剪次数,申请相应大小内存;根据裁剪的维和裁剪的次数确定每个子节点的范围;确定每个子节点包含的规则。
本发明通过采用比特前缀与HiCuts结合生成决策树,减少了该决策树的深度,使得基于该决策树进行查找时既提高了查询效率,而且还节省了内存的占用空间。
图7是本发明基于决策树的报文分类方法一实施例的流程示意图。
参照图7,本发明基于上述生成方法生成的决策树而提出的报文分类方法,该方法包括以下步骤:
步骤S201、提取报文中的源、目的IP地址,并将其转换为决策树查询数组;
转换报文地址时,查询数据对应的数组序号需要和决策树中的维一一对应起来。以表3中的报文为例。
表3
报文 | SRC IP | DST IP |
P1 | 0:1::1 | 2011:123::1 |
P2 | 0:1:2001::1 | E001::1 |
例如:报文P1源IP地址是0:1::1,对应到决策树的前四维,那么转换后需要对应到数组的前四个元素,每个元素32位,对应的值是{0x1,0x0,0x0,0x1}。同理,目的IP地址是2011:123::1,对应到数组的后四个元素,对应的值是{0x20110123,0x0,0x0,0x1},那么最终生成的查询数组的值就是{0x1,0x0,0x0,0x1,0x20110123,0x0,0x0,0x1}。
步骤S202、由根节点开始查找,根据裁剪的维及裁剪的次数进行依次查找,直到获得叶子节点;
步骤S203、将报文的查询数组与叶子节点中的规则进行比较,获得与该报文的查询数组匹配的规则。
参照图8,步骤S202进一步包括:
步骤S2021、将根节点设置为当前查找节点;
确定决策树的根节点,即包含所有规则的节点,并将该根节点设置为当前查找节点,以便由决策树的根节点开始查找。
步骤S2022、判断该查找节点是否为空,是则执行步骤S2025;否则执行步骤S2023;
判断该查找节点中是否包含规则,是则判断该查找节点不为空,否则为空。
步骤S2023、判断该查找节点包含的规则是否小于预设值,是则执行步骤S2031;否则执行步骤S2024;
该预设值与上述决策树生成方法中的预设值为同一个值。
步骤S2024、根据裁剪的维、裁剪的次数及查询数组进行查找,获得子节点,再执行步骤S2022;
该裁剪的维、裁剪的次数均与生成决策树时的参数一致,例如,以图4的决策树为例,根节点处裁剪的维为dim5,裁剪的次数为8(裁剪前3比特)
步骤S2025、设置无法找到匹配规则的标识,并结束该流程。
步骤S203进一步包括:
步骤S2031、将查询数组的每一维与叶子节点中的规则的每一维对应进行匹配,当两者的每一维都匹配时,则执行步骤S2032;否则执行步骤S2025;
步骤S2032、返回匹配的规则序号,并结束该流程。
基于图4所示的决策树,报文P1转换为查询数组后,从根节点开始查找。由于根节点既不为空,也不是叶子节点,因此根据当前节点上裁剪的维、裁剪的次数以及查询数组进行查找。由决策树生成的参数选择,根节点选择dim5裁剪前3比特,查询数组第5维的值是0x20110123,其前3比特是001,所以获得子节点1。由于该子节点1既不为空,也不是叶子节点,所以按照同样的方法由子节点1开始查找,由决策树生成的参数选择,节点1选择dim2裁剪前2比特,查询数组第2维的值是0x0,其前2比特是00,所以获得子节点4。由于该子节点4不为空,但是为叶子节点,因此可以结束查找流程。获得叶子节点后,将报文P1转换后的查询数组的每一维与子节点4中包含的规则的每一维对应进行匹配,即查询数组的每一维的值是否在子节点4中包含的规则的每一维对应的范围值内,是则匹配;否则不匹配。由于子节点4包含规则R1及R2。通过查询数组{0x1,0x0,0x0,0x1,0x20110123,0x0,0x0,0x1}在节点4节点包含的规则R1及R2的每一维上依次匹配,可以看到查询数组的值可以匹配到规则R1在每一维上的范围。所以报文P1可以最终找到与之匹配的规则R1。
同理,根据上述方法对报文P2转换后的查询数组在决策树上进行查找匹配,则无法找到与报文P2匹配的规则。
图9是本发明基于决策树的报文分类设备一实施例的结构示意图。
参照图9,本发明基于决策树的报文分类设备包括:
报文转换模块201,用于提取报文中的源、目的IP地址,并将其转换为决策树查询数组;
节点查找模块202,用于由根节点开始查找,根据裁剪的维及裁剪的次数进行依次查找,直到获得叶子节点;
规则匹配模块203,用于将报文的查询数组与叶子节点中的规则进行比较,获得与该报文查询数组匹配的规则。
参照图10,节点查找模块202进一步包括:
查找节点设置单元2021,用于将根节点设置为当前查找节点;
节点规则判断单元2022,用于判断该查找节点是否为空,不为空时则判断该查找节点所包含的规则数是否小于预设值;
子节点查找单元2023,用于当判断查找节点包含的规则数大于或等于预设值时,根据裁剪的维、裁剪的次数及查询数组进行查找,获得子节点,再通过查找节点设置单元2021将该子节点设置为当前查找节点;
查找结果单元2024,用于在查找节点为空时,设置无法找到匹配规则的标识。
规则匹配模块203具体用于:将查询数组的每一维与叶子节点中的规则的每一维对应进行匹配,当两者的每一维都匹配时,返回匹配的规则序号至查找结果单元2024;否则通过查找结果单元2024设置无法找到匹配规则的标识。
以下为IPv6报文收发过程中,分别以线性查找和MBT-HiCuts(多比特前缀与HiCuts结合)分别实现报文的分类处理进行比较。两者处理方式的比较结果如图11所示:图中横轴表示配置的规则数;纵轴表示性能下降百分比。从图中可以看出:规则数较少时两种方法的性能基本一致。随着规则数的增加,相比线性查找,MBT-HiCuts算法查询效率的优势也越来越明显。
以上所述仅为本发明的优选实施例,并非因此限制其专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (12)
1.一种决策树生成方法,其特征在于,包括以下步骤:
将原始规则集中的规则转化为决策树的范围数组;
将决策树以包含所有规则的节点作为根节点,并将其放入队列;判断队列是否为空,是则结束本流程;否则在队列首节点包含的规则数大于或等于预设值时采用HiCuts算法,启发式的选择裁剪的维和裁剪的次数;在队列首节点包含的规则数小于预设值时返回执行判断队列是否为空的步骤;根据裁剪的维及裁剪的次数,采用多比特前缀方式进行裁剪,生成子节点;将包含规则的子节点放入队列,并返回执行判断队列是否为空的步骤;
所述将原始规则集中的规则转化为决策树的范围数组具体包括:
提取原始规则集中规则的源、目的IPv6地址和掩码,并将其转换成决策树范围数组表示的规则格式,存入到决策树规则集对应的维上;所述决策树每一维的长度通过权衡报文匹配规则时的查找效率及裁剪决策树的深度来设置。
2.根据权利要求1所述的方法,其特征在于,所述采用HiCuts算法,启发式的选择裁剪的维和裁剪的次数的步骤具体为:
去除冗余规则;
计算每一维裁剪操作后的各项数据;
根据每一维上裁剪后的数据,在包含的规则数大于或等于预设值的节点上选择其中一维进行裁剪。
3.根据权利要求1所述的方法,其特征在于,所述根据裁剪的维及裁剪的次数,采用多比特前缀方式进行裁剪,生成子节点的步骤包括:
根据裁剪的次数,申请相应大小内存;
根据裁剪的维和裁剪的次数确定每个子节点的范围;
确定每个子节点包含的规则。
4.一种决策树生成设备,其特征在于,包括:
规则转换模块,用于将原始规则集中的规则抽象为决策树的范围数组;
裁剪模块,所述裁剪模块包括:
根节点确定单元,用于将决策树以包含所有规则的节点作为根节点,并将其放入队列;
队列判断单元,用于判断所述队列是否为空;
节点判断单元,用于当队列不为空时,判断队列首节点包含的规则数是否小于预设值;
裁剪参数设置单元,用于在队列首节点包含的规则数大于或等于预设值时,采用HiCuts算法,启发式的选择裁剪的维和裁剪的次数;
节点生成单元,用于根据裁剪的维及裁剪的次数,采用多比特前缀方式进行裁剪,生成子节点,并将所述子节点放入队列;
所述规则转换模块具体用于:提取原始规则集中规则的源、目的IPv6地址和掩码,并将其转换成决策树范围数组表示的规则格式,存入到决策树规则集对应的维上;所述决策树每一维的长度通过权衡报文匹配规则时的查找效率及裁剪决策树的深度来设置。
5.根据权利要求4所述的设备,其特征在于,所述裁剪参数设置单元具体用于:
去除冗余规则;
计算每一维裁剪操作后的各项数据;
根据每一维上裁剪后的数据,在包含的规则数大于或等于预设值的节点上选择其中一维进行裁剪。
6.根据权利要求4所述的设备,其特征在于,所述节点生成单元具体用于:
根据裁剪的次数,申请相应大小内存;根据裁剪的维和裁剪的次数确定每个子节点的范围;确定每个子节点包含的规则。
7.一种基于决策树的报文分类方法,其特征在于,所述决策树由权利要求1所述的方法生成,所述报文分类方法包括以下步骤:
提取报文中的源、目的IP地址,并将其转换为决策树查询数组;
由根节点开始查找,根据裁剪的维及裁剪的次数进行依次查找,直到获得叶子节点;
将报文的查询数组与叶子节点中的规则进行比较,获得与查询数组匹配的规则。
8.根据权利要求7所述的报文分类方法,其特征在于,所述由根节点开始查找,根据裁剪的维及裁剪的次数进行依次查找,直到获得叶子节点的步骤包括:
将根节点设置为当前查找节点;
判断所述查找节点是否为空,是则设置无法找到匹配规则的标识,并结束本流程;否则在查找节点包含的规则数小于预设值时,将报文的查询数组与叶子节点中的规则进行比较,获得与查询数组匹配的规则;在查找节点包含的规则数大于或等于预设值时,根据裁剪的维、裁剪的次数及查询数组进行查找,获得子节点,并将所述子节点设置为当前查找节点,再返回执行判断查找节点是否为空的步骤。
9.根据权利要求7或8所述的报文分类方法,其特征在于,所述将报文的查询数组与叶子节点中的规则进行比较,获得与查询数组匹配的规则的步骤包括:
将查询数组的每一维与叶子节点中的规则的每一维对应进行匹配,都匹配时,则返回匹配的规则序号,并结束本流程;否则设置无法找到匹配规则的标识,并结束本流程。
10.一种基于决策树的报文分类设备,其特征在于,所述决策树由权利要求1所述的方法生成,包括:
报文转换模块,用于提取报文中的源、目的IP地址,并将其转换为决策树查询数组;
节点查找模块,用于由根节点开始查找,根据裁剪的维及裁剪的次数进行依次查找,直到获得叶子节点;
规则匹配模块,用于将报文的查询数组与叶子节点中的规则进行比较,获得与查询数组匹配的规则。
11.根据权利要求10所述的报文分类设备,其特征在于,所述节点查找模块包括:
查找节点设置单元,用于将根节点设置为当前查找节点;
节点规则判断单元,用于判断该查找节点是否为空,不为空时则判断所述查找节点包含的规则数是否小于预设值;
子节点查找单元,用于在查找节点包含的规则数大于或等于预设值时,根据裁剪的维、裁剪的次数及查询数组进行查找,获得子节点,再通过所述查找节点设置单元将所述子节点设置为当前查找节点;
查找结果单元,用于在查找节点为空时,设置无法找到匹配规则的标识。
12.根据权利要求10所述的报文分类设备,其特征在于,所述规则匹配模块具体用于:将查询数组的每一维与叶子节点中的规则的每一维对应进行匹配,都匹配时,返回匹配的规则序号至所述查找结果单元;否则通过所述查找结果单元设置无法找到匹配规则的标识。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110229772.9A CN102281196B (zh) | 2011-08-11 | 2011-08-11 | 决策树生成方法及设备、基于决策树报文分类方法及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110229772.9A CN102281196B (zh) | 2011-08-11 | 2011-08-11 | 决策树生成方法及设备、基于决策树报文分类方法及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102281196A CN102281196A (zh) | 2011-12-14 |
CN102281196B true CN102281196B (zh) | 2017-10-10 |
Family
ID=45106389
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110229772.9A Active CN102281196B (zh) | 2011-08-11 | 2011-08-11 | 决策树生成方法及设备、基于决策树报文分类方法及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102281196B (zh) |
Families Citing this family (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102664787B (zh) * | 2012-04-01 | 2014-10-08 | 华为技术有限公司 | 决策树的生成方法和装置 |
CN103986667B (zh) * | 2014-05-07 | 2017-10-10 | 华为技术有限公司 | 选择数据包分类算法的方法和装置 |
CN105591915A (zh) * | 2014-10-22 | 2016-05-18 | 中兴通讯股份有限公司 | 一种路由表的维护方法和装置 |
CN105630797B (zh) * | 2014-10-29 | 2019-02-26 | 阿里巴巴集团控股有限公司 | 数据处理方法及系统 |
CN104916281B (zh) * | 2015-06-12 | 2018-09-21 | 科大讯飞股份有限公司 | 大语料音库裁剪方法及系统 |
CN105025013B (zh) * | 2015-06-12 | 2018-04-10 | 国家计算机网络与信息安全管理中心 | 基于优先级Trie树的动态IP匹配模型的建立方法 |
CN105939323A (zh) * | 2015-12-31 | 2016-09-14 | 杭州迪普科技有限公司 | 数据包过滤方法及装置 |
CN105843924A (zh) * | 2016-03-25 | 2016-08-10 | 南京邮电大学 | 一种认知计算中基于cart的决策树构建方法 |
CN106453387B (zh) * | 2016-07-28 | 2019-08-13 | 电子科技大学 | 基于Hicuts算法的安全策略冲突检测及消除方法 |
CN106027393B (zh) * | 2016-07-29 | 2019-06-07 | 杭州迪普科技股份有限公司 | 网包规则集的分类方法及装置 |
CN108632235B (zh) * | 2017-08-31 | 2020-07-07 | 新华三技术有限公司 | 一种网包分类决策树建立方法及装置 |
CN107948091B (zh) * | 2017-11-02 | 2020-04-14 | 中国科学院声学研究所 | 一种网包分类的方法及装置 |
CN108123872B (zh) * | 2017-12-21 | 2020-09-04 | 国网浙江省电力有限公司电力科学研究院 | 面向电力物联网的流量分类和转发方法及系统 |
CN108170866B (zh) * | 2018-01-30 | 2022-03-11 | 深圳市茁壮网络股份有限公司 | 一种样本查找方法及装置 |
CN108449226B (zh) * | 2018-02-28 | 2021-07-23 | 华青融天(北京)软件股份有限公司 | 信息快速分类的方法和系统 |
CN109542601B (zh) * | 2018-11-20 | 2020-12-29 | 杭州迪普科技股份有限公司 | 策略编译方法、装置、电子设备及计算机存储介质 |
CN110019987B (zh) * | 2018-11-28 | 2023-05-09 | 创新先进技术有限公司 | 一种基于决策树的日志匹配方法和装置 |
CN111382323B (zh) * | 2018-12-29 | 2023-08-11 | 贵州白山云科技股份有限公司 | 一种数据检索优化方法、装置和计算机设备 |
CN111242164A (zh) * | 2019-12-27 | 2020-06-05 | 天津幸福生命科技有限公司 | 一种决策结果的确定方法、装置及设备 |
CN111107181B (zh) * | 2019-12-30 | 2022-07-12 | 北京天融信网络安全技术有限公司 | Nat规则匹配方法、装置、电子设备及存储介质 |
CN113642594A (zh) * | 2020-04-27 | 2021-11-12 | 深圳市中兴微电子技术有限公司 | 报文分类方法及装置、电子设备、可读介质 |
CN113632427A (zh) | 2021-06-25 | 2021-11-09 | 新华三技术有限公司 | 一种报文匹配方法、装置、网络设备及介质 |
CN113762424B (zh) * | 2021-11-09 | 2022-02-01 | 鹏城实验室 | 一种网络包分类方法及相关装置 |
CN114638309B (zh) * | 2022-03-21 | 2024-04-09 | 北京左江科技股份有限公司 | 一种基于信息熵的hypercuts决策树策略集预处理方法 |
CN117609894B (zh) * | 2024-01-23 | 2024-04-09 | 中国人民解放军国防科技大学 | 一种基于分区策略的高性能报文分类方法、设备及介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1688140A (zh) * | 2005-06-03 | 2005-10-26 | 清华大学 | 基于网络处理器的高速多维报文分类算法的设计和实现 |
CN1815997A (zh) * | 2005-01-31 | 2006-08-09 | 国际商业机器公司 | 一种用于因特网的基于规则集合划分的分组分类的方法 |
CN1822567A (zh) * | 2005-12-23 | 2006-08-23 | 清华大学 | 基于网络流量的多域网包分类方法 |
CN1905523A (zh) * | 2006-08-02 | 2007-01-31 | 华为技术有限公司 | 一种多域流分类的实现方法 |
CN1992674A (zh) * | 2005-12-31 | 2007-07-04 | 华为技术有限公司 | 一种基于多比特分割的多维分组分类方法 |
-
2011
- 2011-08-11 CN CN201110229772.9A patent/CN102281196B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1815997A (zh) * | 2005-01-31 | 2006-08-09 | 国际商业机器公司 | 一种用于因特网的基于规则集合划分的分组分类的方法 |
CN1688140A (zh) * | 2005-06-03 | 2005-10-26 | 清华大学 | 基于网络处理器的高速多维报文分类算法的设计和实现 |
CN1822567A (zh) * | 2005-12-23 | 2006-08-23 | 清华大学 | 基于网络流量的多域网包分类方法 |
CN1992674A (zh) * | 2005-12-31 | 2007-07-04 | 华为技术有限公司 | 一种基于多比特分割的多维分组分类方法 |
CN1905523A (zh) * | 2006-08-02 | 2007-01-31 | 华为技术有限公司 | 一种多域流分类的实现方法 |
Non-Patent Citations (4)
Title |
---|
CLASSIFYING PACKETS WITH HIERARCHICAL INTELLIGENT CUTTINGS;Pankaj Gupta等;《IEEE Micro2000》;20000228;第20卷(第1期);第34-41页 * |
多决策树包分类算法;李振强等;《电子与信息学报》;20080415;第30卷(第4期);第975-978页 * |
适用于GIDS报文分类的P-HiCuts算法;龚俭等;《哈尔滨工业大学学报》;20080331;第40卷(第3期);第448-452页 * |
高性能多维包分类算法的研究;赵姣姣;《万方学位论文库》;20110531;第1-95页 * |
Also Published As
Publication number | Publication date |
---|---|
CN102281196A (zh) | 2011-12-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102281196B (zh) | 决策树生成方法及设备、基于决策树报文分类方法及设备 | |
Van Lunteren et al. | Fast and scalable packet classification | |
Jiang et al. | Large-scale wire-speed packet classification on FPGAs | |
CN1992674B (zh) | 一种基于多比特分割的多维分组分类方法 | |
Gkantsidis et al. | Conductance and congestion in power law graphs | |
CN101146027B (zh) | 基于访问控制列表分类的方法 | |
CN101827137B (zh) | 一种基于哈希表和扩展存储器的高性能IPv6地址查找方法 | |
CN102377664B (zh) | 一种基于tcam的区域匹配装置和方法 | |
CN101345707B (zh) | 一种实现IPv6报文分类的方法及设备 | |
CN100385880C (zh) | 分组分类装置和使用字段级特里结构的方法 | |
CN104580027A (zh) | 一种OpenFlow报文转发方法及设备 | |
CN101242362B (zh) | 查找键值生成装置及方法 | |
CN106416158B (zh) | 用于大规模数据中心网络的业务工程 | |
Liu et al. | Incremental forwarding table aggregation | |
Chang et al. | Fast packet classification using recursive endpoint-cutting and bucket compression on FPGA | |
Wu et al. | A tabu search approach to the cell formation problem | |
CN107145963A (zh) | 一种基于深度优先的配电网路径搜索方法 | |
Pao et al. | A multi-pipeline architecture for high-speed packet classification | |
CN101241499B (zh) | 在高内存访问位宽下实现Patricia查找树的方法 | |
CN100472427C (zh) | 一种数据包递归流分类方法 | |
CN1992673B (zh) | 一种路由器或防火墙中实现分组流识别的方法 | |
Baek et al. | Cost effective mobile agent planning for distributed information retrieval | |
CN100488173C (zh) | 对流分类算法进行自动选择的方法 | |
CN201577106U (zh) | 防火墙策略生成装置及系统 | |
Kekely et al. | Packet classification with limited memory resources |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |