决策树规则集预处理的方法和装置与流程

文档序号:27681752发布日期:2021-11-30 23:57阅读:123来源:国知局
决策树规则集预处理的方法和装置与流程

1.本发明属于领域,具体涉及一种决策树规则集预处理的方法和装置。


背景技术:

2.数据包分类算法是网络中常用的一种算法。其目的是按照报文携带的头部信息,一般是源ip、目的ip、源端口、目的端口和协议号5个维度,把报文分成不同的种类,从而可以对其进行不同的处理。常见的应用有:访问控制列表,防火墙,基于流的计费统计。在核心网络设备和边缘网络设备中均有不同的应用。决策树是众多数据包分类算法中常用的一种。
3.通过决策树进行数据包分类的关键点是决策树的创建。决策树的创建是根据规则集的特征将父节点的规则尽可能平均的划分给多个子节点。根节点拥有规则集中的全部规则,经过多级树节点的划分后叶子节点中仅包含小于指定数量的规则。从而达到将一个大规则集划分成多个小规则集,然后在指定小规则集中查找数据包的目的。进行数据包查找时,从根节点开始根据创建决策树时的信息查找下级节点,直至叶子节点,然后在叶子节点包含的小规则集中进行查找。
4.图1为规则示例,各个字段依次表示:源ip地址值/源ip掩码、目的ip地址值/目的ip掩码、源端口号范围、目的端口号范围和协议号值/协议号掩码值。每条规则都表示了一个范围,掩码小的规则表示的范围大。
5.在决策树实现中,由于规则表示的是一个范围,因此在将规则从父节点划分至子节点时,同一条规则可能被划分至多个子节点,这种情况在本专利中称为规则复制。规则复制会导致决策树创建时间过长和存储资源消耗过多的问题。决策树创建完成后,规则集中每条规则的复制次数多少不一。为保证决策树的创建效率,可以将复制次数多的规则从规则集中剔除后重新创建决策树。在本专利中将复制次数多的规则称为大规则。
6.大规则的表现形式:第一类:表示范围很大的规则。即ip掩码小、端口号范围大以及协议号掩码小的规则。图2中规则5表示的范围相对较大,其复制次数相对会较多。第二类:相互覆盖的规则。尽管单条规则表示的范围不大,但是多条类似的规则表示的范围相互覆盖。图3中规则1至规则5表示的范围都不大,但是这5条规则表示的范围相互覆盖,不能被尽可能平均的划分至不同的子节点,同样会造成规则复制次数增多。因此需要根据这5条规则的复制次数,将某条复制次数相对多的规则判定为大规则。
7.通过ip掩码大小和端口号范围大小可以很方便的识别出第一类大规则。但是在几万条甚至几十万条规则中识别出若干组相互重叠的规则,并且识别出各个重叠规则组中哪条规则是大规则就不容易了。本发明实施例提供了一种预处理规则集的方法,能够准确识别出规则集中的两类大规则。规则集经过预处理后再创建决策树,能够降低规则复制,解决决策树创建时间过长和存储资源消耗过多的问题。


技术实现要素:

8.(一)要解决的技术问题
9.本发明要解决的技术问题是如何提供一种决策树规则集预处理的方法和装置,以解决决策树创建时间过长和存储资源消耗过多的问题。
10.(二)技术方案
11.为了解决上述技术问题,本发明提出一种决策树规则集预处理的方法,该方法包括如下步骤:
12.step1:判断当前子节点规则个数是否大于叶子节点规则个数上限阈值pre_leaf_rules_max,如果小于等于该阈值,则执行step7及后续步骤;否则执行step2;
13.step2:判断子节点是否仍存在有效的划分维度;如果当前子节点没有有效划分维度,则执行step7及后续步骤;否则执行step3。
14.step3:判断指定维度是否仍存在划分比特;如果指定维度不存在划分比特,则执行step7及后续步骤;否则执行step4;
15.step4:判断当前子节点的高度是否超过树高上限阈值pre_tree_height_max;如果当前子节点的树高大于等于该阈值,则执行step7及后续步骤;否则执行step5和step6;
16.step5:该子节点每条规则的复制数自增1,step6:该子节点作为新的父节点继续逐级划分规则;执行完step6后,子节点作为新的父节点,再次执行step1至step4,直至所有节点经过规则划分后,各个子节点均能执行step7及后续步骤;
17.step7:该子节点置为叶子节点,step8:该子节点每条规则的复制数自增1,标志预建树成功。
18.进一步地,决策树创建前会预先设置多个阈值:树高上限tree_height_max、叶子节点规则个数上限leaf_rules_max,而在预处理阶段,为预建树设置新的阈值:树高上限pre_tree_height_max和叶子节点规则个数上限pre_leaf_rules_max,树高上限pre_tree_height_max大于tree_height_max,叶子节点规则个数上限pre_leaf_rules_max大于leaf_rules_max。
19.进一步地,为所有规则各维护一个计数变量,初始状态时规则集中的所有规则均属于决策树根节点,并且所有计数变量被初始化为零,在创建树的过程中,从根节点开始将规则逐层划分至下层节点,直至下层节点所含的规则个数小于叶子节点规则个数上限pre_leaf_rules_max,该节点被标记为叶子节点;规则每次从父节点被划分至一个子节点后,该规则对应的计数变量自增一,即规则复制次数自增一。
20.进一步地,决策树中的每个节点包括以下关键信息:
21.1)当前节点树高tree_height:表示从根节点至当前节点树的层数;
22.2)当前节点的划分维度cut_dim:共5个比特位,从比特0至比特4依次表示协议号、目的端口号、源端口号、目的ip地址和源ip地址五个维度,cut_dim某个比特为1时,表示使用对应的维度作为划分维度;
23.3)当前节点在指定划分维度使用几个比特作为划分比特cut_num[5]:由包含5个元素的数组表示,从cut_num[0]至cut_num[4]依次表示协议号、目的端口号、源端口号、目的ip地址和源ip地址五个维度的划分比特数;
[0024]
4)从根节点至当前节点的父节点的路径上,各个节点的划分比特数之和,称为当
前节点的累计划分比特数,用accu_cut_num[5]表示,从accu_cut_num[0]至accu_cut_num[4]依次表示协议号、目的端口号、源端口号、目的ip地址和源ip地址五个维度的累计划分比特数;
[0025]
5)指向孩子节点内存的指针children_ptr:父节点的多个孩子节点存储在连续的内存块中,children_ptr指向该内存块的首地址;
[0026]
6)孩子节点个数child_num:计算划分维度对应的划分比特数的和cut_num_sum,孩子节点个数child_num为:2的cut_num_sum次幂。
[0027]
进一步地,父节点规则划分至子节点的方法包括:当父节点仅使用一个维度i作为划分维度时,则划分比特数为cut_num[i],累计划分比特数为accu_cut_num[i];当需要将父节点的某条规则r划分至子节点时,获取该规则在维度i的第accu_cut_num[i]比特至第accu_cut_num[i]+cut_num[i]

1比特的值,该值即为子节点索引值idx,表示规则r将被划分至父节点的第idx个子节点,当维度i的掩码值mask小于accu_cut_num[i]+cut_num[i]时,即维度i第mask个比特至第accu_cut_num[i]+cut_num[i]个比特是通配的,因此规则r会被划分至多个子节点。
[0028]
进一步地,父节点规则划分至子节点的方法包括:当使用两个维度i和j作为划分维度时,获取划分维度i在第accu_cut_num[i]比特至第accu_cut_num[i]+cut_num[i]

1比特的值idxi;获取划分维度j在第accu_cut_num[j]比特至第accu_cut_num[j]+cut_num[j]

1比特的值idxj;将idxj左移cut_num[i]个比特后,与idxi作位或运算,得到索引值idx,该值即为子节点的索引,表示规则r将被划分至父节点的第idx个子节点;同样由于掩码通配,规则r可能会被划分至多个子节点。
[0029]
进一步地,所述step2的判断方法为:每个维度的数据占用的最大比特数是固定的,当子节点的各个维度的累计划分比特数accu_cut_num均等于对应的最大比特数时,该子节点就不存在有效的划分维度;
[0030]
所述step3的判断方法为:如果在所有指定划分维度,所有规则的掩码均小于等于对应维度的累计划分比特数accu_cut_num,则判定指定维度不存在划分比特;
[0031]
所述step4的判断方法为:节点信息中包含了当前节点的树高tree_height,直接比较子节点中的tree_height是否大于等于树高阈值pre_tree_height_max。
[0032]
进一步地,所述step8后还包括如下步骤:预建树成功后,遍历预创建的决策树的每个叶子节点,如果叶子节点所含规则数rule_num大于创建决策树时叶子节点规则数阈值leaf_rules_max,则将叶子节点中的规则按照规则复制次数从小到大排序,将第leaf_rules_max+1至rule_num

1条规则标记为大规则。
[0033]
进一步地,用户规则集经过预处理后,被划分为两部分:少量的大规则和大量的小规则,使用大量的小规则进行决策树的创建,并将决策树信息保存到硬件,通过决策树查找模块进行查找,少量的大规则借助硬件并行查找。
[0034]
本发明还提供一种决策树规则集预处理的装置,该装置包括处理器,该处理器用于执行上述方法。
[0035]
(三)有益效果
[0036]
本发明提出一种决策树规则集预处理的方法和装置,通过对比规则集预处理前后,决策树创建的时间和内存占用数据发现,本方案具有以下明显优势:
[0037]
1)明显减小了决策树创建时间。
[0038]
2)显著减小了决策树节点所占用的fpga片内ram资源。
[0039]
3)降低了树高,减少对应的逻辑资源,减少处理延迟。
附图说明
[0040]
图1为规则示例;
[0041]
图2为大规则1:大范围的规则示例;
[0042]
图3为大规则2:相互覆盖的规则示例;
[0043]
图4为父节点与子节点的内存布局;
[0044]
图5为规则集预处理流程;
[0045]
图6为整体处理流程。
具体实施方式
[0046]
为使本发明的目的、内容和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
[0047]
本发明专利通过一次决策树预创建,识别出规则集中的少量大规则。通常决策树创建前会预先设置多个阈值:树高上限tree_height_max、叶子节点规则个数上限leaf_rules_max等。而在预建树阶段,为保证预建树成功以及减小预建树时间和存储资源占用,为预建树设置新的阈值:树高上限pre_tree_height_max(大于tree_height_max)和叶子节点规则个数上限pre_leaf_rules_max(大于leaf_rules_max)。
[0048]
预建树前,将规则集中的规则全部分配给根节点。决策树预创建和决策树创建的过程类似,由于本专利的关注点是规则集的预处理,所以不过多描述决策树创建过程。决策树的预创建是递归处理的,本专利详细描述单次递归处理的过程,以此说明通过决策树预创建准确标记大规则的原理。单次递归处理就是将父节点的规则划分至子节点后,根据不同阈值,分别对各个子节点进行处理的过程。
[0049]
首先说明规则复制次数的统计方法:为所有规则各维护一个计数变量。初始状态时规则集中的所有规则均属于决策树根节点,并且所有计数变量被初始化为零。在创建决策树的过程中,从根节点开始将规则逐层划分至下层节点,直至下层节点所含的规则个数小于叶子节点规则个数上限pre_leaf_rules_max,该节点被标记为叶子节点。规则每次从父节点被划分至一个子节点后,该规则对应的计数变量自增一,即规则复制次数自增一。
[0050]
决策树中的每个节点包括以下关键信息:
[0051]
1)当前节点树高tree_height:表示从根节点至当前节点树的层数。根节点的树高为0,根节点的孩子节点的树高为1,孙子节点的树高为2,依次类推。
[0052]
2)当前节点的划分维度cut_dim:共5个比特位,从比特0至比特4依次表示协议号、目的端口号、源端口号、目的ip地址和源ip地址五个维度。cut_dim某个比特为1时,表示使用对应的维度作为划分维度。
[0053]
划分维度的获取方法:将当前节点所含规则在各个维度的不同个数,分别保存在数组diff_num[5]中,计算diff_num[5]五个成员的平均值avg_num,将diff_num[i]大于avg_num的维度作为划分维度,最多选取三个维度。
[0054]
3)当前节点在指定划分维度使用几个比特作为划分比特cut_num[5]:由包含5个元素的数组表示。从cut_num[0]至cut_num[4]依次表示协议号、目的端口号、源端口号、目的ip地址和源ip地址五个维度的划分比特数。
[0055]
划分比特数的获取方法:尝试不同划分比特数,将父节点规则划分至多个子节点,计算子节点规则数的标准差,作为反应规则划分平均程度的依据。将规则划分平均程度最高的划分比特作为最终的划分比特数。
[0056]
4)从根节点至当前节点的父节点的路径上,各个节点的划分比特数之和,称为当前节点的累计划分比特数,用accu_cut_num[5]表示。从accu_cut_num[0]至accu_cut_num[4]依次表示协议号、目的端口号、源端口号、目的ip地址和源ip地址五个维度的累计划分比特数。
[0057]
5)指向孩子节点内存的指针children_ptr:父节点的多个孩子节点存储在连续的内存块中,children_ptr指向该内存块的首地址。
[0058]
6)孩子节点个数child_num:确定划分维度cut_dim和划分比特数cut_num[5]后,子节点的个数也就确定了。
[0059]
孩子节点个数计算方法:计算划分维度对应的划分比特数的和cut_num_sum,孩子节点个数child_num为:2的cut_num_sum次幂。父节点与子节点的内存布局如图4所示。子节点的索引从0开始编号,图中子节点n的索引值为child_num

1。
[0060]
父节点规则划分至子节点的方法:
[0061]
1)当父节点仅使用一个维度i作为划分维度时,则划分比特数为cut_num[i],累计划分比特数为accu_cut_num[i]。当需要将父节点的某条规则r划分至子节点时,获取该规则在维度i的第accu_cut_num[i]比特至第accu_cut_num[i]+cut_num[i]

1比特的值(注意:此处最高比特记为第0比特、次高比特记为第1比特、依次类推),该值即为子节点索引值idx,表示规则r将被划分至父节点的第idx个子节点。当维度i的掩码值mask小于accu_cut_num[i]+cut_num[i]时,即维度i第mask个比特至第accu_cut_num[i]+cut_num[i]个比特是通配的,因此规则r会被划分至多个子节点。
[0062]
2)当父节点使用多个维度作为划分维度时,处理方法与仅使用一个维度时类似。为叙述方便,此处假定使用两个维度i和j作为划分维度。获取划分维度i在第accu_cut_num[i]比特至第accu_cut_num[i]+cut_num[i]

1比特的值idxi;获取划分维度j在第accu_cut_num[j]比特至第accu_cut_num[j]+cut_num[j]

1比特的值idxj。将idxj左移cut_num[i]个比特后,与idxi作位或运算,得到索引值idx,该值即为子节点的索引,表示规则r将被划分至父节点的第idx个子节点。同样由于掩码通配,规则r可能会被划分至多个子节点。使用3个维度作为划分维度的情况与使用2个维度的情况类似,不再赘述。
[0063]
3)对于父节点中的其他规则,均采用与规则r一样的处理方法,依次划分至子节点。
[0064]
规则集预处理流程如图5所示。该图详细介绍了将父节点规则划分至子节点后的处理流程。
[0065]
1)step1:判断当前子节点规则个数是否大于阈值pre_leaf_rules_max,如果小于等于阈值,则执行step7及后续步骤;否则执行step2。
[0066]
2)step2:判断子节点是否仍存在有效的划分维度。
[0067]
判断方法:每个维度的数据占用的最大比特数是固定的。比如:源ip和目的ip各占用32比特,源端口和目的端口各占用16比特,协议号占用8比特。当子节点的各个维度的累计划分比特数accu_cut_num均等于对应的最大比特数时,该子节点就不存在有效的划分维度了。
[0068]
有效划分维度被用尽而规则又没有被划分开的原因是相互重叠的规则太多,此时需要将当前子节点提前标记为叶子节点。
[0069]
如果当前子节点没有有效划分维度,则执行step7及后续步骤;否则执行step3。
[0070]
3)step3:判断指定维度是否仍存在划分比特。
[0071]
判断方法:如果在所有指定划分维度,所有规则的掩码均小于等于对应维度的累计划分比特数accu_cut_num,则判定指定维度不存在划分比特。
[0072]
不存在有效划分比特,说明当前子节点中包含较多的大规则,此时需要将当前子节点提前标记为叶子节点。
[0073]
如果指定维度不存在划分比特,则执行step7及后续步骤;否则执行step4。
[0074]
4)step4:判断当前子节点的高度是否超过树高阈值pre_tree_height_max。
[0075]
判断方法:节点信息中包含了当前节点的树高tree_height。直接比较子节点中的tree_height是否大于等于树高阈值pre_tree_height_max即可。
[0076]
为保证查找效率,需要限制决策树的高度。当当前子节点的树高大于等于树高阈值pre_tree_height_max时,需要将当前子节点提前标记为叶子节点。
[0077]
如果当前子节点的树高大于等于阈值,则执行step7及后续步骤;否则执行step5和step6。
[0078]
5)step5:该子节点每条规则的复制数自增1,step6:该子节点作为新的父节点继续逐级划分规则;执行完step6后,子节点作为新的父节点。再次执行步骤1)至步骤4)。直至所有节点经过规则划分后,各个子节点均能执行step7及后续步骤,step7:该节点成为叶子节点,step8:该节点每条规则的复制数自增1。标志预建树成功。
[0079]
6)预建树成功后,遍历预创建的决策树的每个叶子节点,如果叶子节点所含规则数rule_num大于创建决策树时叶子节点规则数阈值leaf_rules_max,则将叶子节点中的规则按照规则复制次数从小到大排序,将第leaf_rules_max+1至rule_num

1条规则标记为大规则。
[0080]
7)在具有实际意义的规则集中,大规则的数量很少,并且通过本实施例可以准确的将其识别出来,少量大规则通过硬件并行查找。
[0081]
8)规则集预处理时,已经将大规则标记出来。未标记的大量规则作为决策树创建时的规则集。
[0082]
规则集预处理仅需要进行一次,后续可能的多次决策树创建均可使用预处理后的规则集。
[0083]
从原始规则集中分离出的少量大规则通过硬件并行查找;余下的大量小规则通过决策树查找。整体处理流程如图6:
[0084]
用户规则集经过本专利介绍的规则集预处理后,被划分为两部分:少量的大规则和大量的小规则。使用大量的小规则进行决策树的创建,并将决策树信息保存到硬件(如fpga)。少量的大规则需要借助硬件并行查找。当在硬件中查询数据包与哪条规则匹配时,
通过决策树查找模块和并行查找模块分别进行查找。如果两个模块有多条规则与数据包匹配,则需要经过优先级仲裁模块,输出优先级最高的规则为最终的匹配规则。
[0085]
通过对比规则集预处理前后,决策树创建的时间和内存占用数据发现,本方案具有以下明显优势:
[0086]
1)明显减小了决策树创建时间。
[0087]
2)显著减小了决策树节点所占用的fpga片内ram资源。
[0088]
3)降低了树高,减少对应的逻辑资源,减少处理延迟。
[0089]
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1