CN114745453A - 一种将熵二叉树合并为多叉树的方法 - Google Patents
一种将熵二叉树合并为多叉树的方法 Download PDFInfo
- Publication number
- CN114745453A CN114745453A CN202210281824.5A CN202210281824A CN114745453A CN 114745453 A CN114745453 A CN 114745453A CN 202210281824 A CN202210281824 A CN 202210281824A CN 114745453 A CN114745453 A CN 114745453A
- Authority
- CN
- China
- Prior art keywords
- node
- strategy
- entropy
- nodes
- bits
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 38
- 206010041235 Snoring Diseases 0.000 claims description 14
- 230000010076 replication Effects 0.000 claims description 10
- 238000005192 partition Methods 0.000 claims description 9
- 238000004422 calculation algorithm Methods 0.000 abstract description 5
- 238000004364 calculation method Methods 0.000 abstract description 4
- 238000004891 communication Methods 0.000 abstract description 2
- 238000003066 decision tree Methods 0.000 description 12
- 238000010586 diagram Methods 0.000 description 7
- 238000000638 solvent extraction Methods 0.000 description 6
- 238000007635 classification algorithm Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/22—Parsing or analysis of headers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/24—Classification techniques
- G06F18/243—Classification techniques relating to the number of classes
- G06F18/24323—Tree-organised classifiers
Landscapes
- Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Theoretical Computer Science (AREA)
- Bioinformatics & Cheminformatics (AREA)
- General Engineering & Computer Science (AREA)
- Bioinformatics & Computational Biology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Evolutionary Biology (AREA)
- Evolutionary Computation (AREA)
- Physics & Mathematics (AREA)
- Artificial Intelligence (AREA)
- General Physics & Mathematics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明涉及一种将熵二叉树合并为多叉树的方法,属于通信技术领域。本发明通过自定义的信息熵公式,确保每个节点的规则能够均匀且尽可能复制少的划分至子节点;当某节点的信息熵为零时将该节点标记为叶子节点,信息熵为零能够确保叶子节点中的多条规则能够合并为一条;通过将多个二叉树的节点压缩为一个节点,能够明显降低树高,进而提高数据包的查找性能;通过多核多线程的方式创建熵二叉树,明显提高了建树时间;创建熵二叉树的关键步骤是计算信息熵,而信息熵的计算与规则本身的含义无关,这样就确定了该算法对于不同的规则集均有很强的适应性。
Description
技术领域
本发明属于通信技术领域,具体涉及一种将熵二叉树合并为多叉树的方法。
背景技术
数据包分类算法是网络中常用的一种算法。其目的是按照报文携带的头部信息,一般是源IP、目的IP、源端口、目的端口和协议号5个维度,把报文分成不同的种类,从而可以对其进行不同的处理。常见的应用有:访问控制列表,防火墙,基于流的计费统计。在核心网络设备和边缘网络设备中均有不同的应用。
进行数据包分类首先需要定义一套规则集,按照数据包的头部信息在规则集中进行查找。图1为规则示例,各个字段依次表示:源ip地址值/源ip掩码、目的ip地址值/目的ip掩码、源端口号范围、目的端口号范围和协议号值/协议号掩码值。每条规则都表示了一个范围,掩码小的规则表示的范围大。
在众多数据包分类算法中,hypercuts决策树是常用的一种。
hypercuts决策树存在两个明显的问题:
1)叶子节点中包含小于等于指定阈值条的规则。当进行数据包查找时,从根节点开始,沿着树的一个路径查找到叶子节点后,仍然需要和叶子节点中的多条规则进行匹配。
2)由于规则表示的是一个范围,因此在将规则从父节点划分至子节点时,同一条规则可能被划分至多个子节点。当规则的全部比特用尽时(比如对于ipv4五元组规则来说,共有104个比特),可能会造成规则依然不能被有效划分到叶子节点的问题。比如叶子节点最多允许包含6条规则,然而存在大于6条的规则均包含同一个范围,此时会导致hypercuts决策树建树失败,或者需要将少量的复制次数多的规则从原始规则集中剔除,然后使用余下的规则进行hypercuts决策树的创建,剔除的少量规则需要使用额外的算法进行数据包的查找。
发明内容
(一)要解决的技术问题
本发明要解决的技术问题是如何提供一种将熵二叉树合并为多叉树的方法,以解决hypercuts决策树的以上两个问题,查找性能得到明显提升。
(二)技术方案
为了解决上述技术问题,本发明提出一种将熵二叉树合并为多叉树的方法,该方法包括如下步骤:
S701、将熵二叉树中的节点称为小节点snode;将多叉树的节点称为大节点big_node,假设一个big_node最多包含n个snode;
S702、开始处理时,将熵二叉树的根节点作为待合并子树的根节点;
S703、创建一个大节点,将子树根节点加入到大节点的小节点链表snode_list中;
S704、遍历snode_list;
S705、snode_list是否已经遍历完成;如果遍历完成,说明当前big_node中的snode不足n个,执行第S714步;否则执行第S706步;
S706、获取snode_list中的一个小节点snode;
S707、将snode的孩子节点cnode加入到snode_list;
S708、判断snode_list中是否已包含n个snode;
S709、如果不是,则继续执行第S705、S706、S707和S708步;否则执行第S710步;
S710、再次遍历snode_list;
S711、获取一个snode,判断其孩子节点cnode是否位于snode_list中;
S712、如果是,则继续第S711步;否则执行第S713步;
S713、将cnode作为子树的根节点,再次执行第S703步至第S712步;
S714、将big_node标记为多叉树的叶子节点。
进一步地,n=7。
进一步地,所述熵二叉树的创建方法为:
使用策略的某个比特,将父节点的策略均匀的划分至左右两个子节点;其中,根节点拥有策略集合中的全部策略;
使用信息熵确定最佳的划分比特;信息熵越大,说明父节点的策略在指定比特越分散,越能够将策略均匀的划分至左右两个子节点;
当某个节点的最大信息熵为零时,说明当前节点的策略在未使用的比特熵已经没有区分度,此时将该节点标记为叶子节点,从而获得熵二叉树。
进一步地,所述熵二叉树的创建方法为:
S21、创建根节点,将策略集合中的所有策略分配给根节点;
S22、将根节点作为当前待处理节点;
S23、计算当前节点的最大信息熵;
S24、如果最大信息熵为0,则将当前节点标记为叶子节点;否则进行步骤S25;
S25、创建左右子节点,将最大信息熵所对应的比特作为划分比特;将父节点的策略划分至左右两个子节点;
S26、以深度优先递归处理左右子节点,将子节点作为新的当前待处理节点;
S27、重复步骤S23至S26,直至熵二叉树的所有路径的末端是叶子节点。
进一步地,所述策略为ipv4五元组策略、ipv6五元组策略、ipv6三元组策略或其他自定义策略。
进一步地,将父节点的策略划分至左右两个子节点包括:如果策略在划分比特的值为0,则将该策略划分至左子节点;如果策略在划分比特的值为1,则将该策略划分至右子节点;如果策略在划分比特的值是通配的,则将策略同时划分至左、右两个子节点。
进一步地,所述划分比特的选取过程如下:
S31、父节点中包含若干条策略,策略条数记为cur,这些策略待划分至左右子节点;对于ipv4五元组共104比特,定义104对计数器,每个比特对应一对计数器{lc,rc},lc表示使用指定比特将父节点策略划分至左子节点的条数,rc表示使用指定比特将父节点策略划分至右子节点的条数;将104对计数器初始化为0;
S32、获取父节点中的一条策略filt;
S33、选取ipv4五元组104比特中的某个比特n;
S34、根据策略在比特n的值进行如下处理:
如果其值为0,则左计数器lcn自增一;
如果其值为1,则右计数器rcn自增一;
如果其值为通配,则左右计数器lcn和rcn各自增一;
S35、重复步骤S33和S34,直到指定filt的104比特的计数统计完成为止;
S36、重复步骤S32、S33、S34和S35,直到将父节点的所有策略在104个比特的计数统计完为止;共计104对计数器;
S37、根据104对计数器计算出104个信息熵;最大信息熵所对应的比特即为父节点策略的划分比特。
进一步地,所述信息熵公式为:
其中:
3)并且0<a<=1,0<b<=1,a+b>=1;
4)公式中的部分,表示父节点策略划分至两个子节点的均匀程度,该值越大,说明策略划分越均匀;公式中的log2(a+b)部分,表示父节点的策略在划分至两个子节点时的复制程度,其中,当父节点的一条策略同时划分至两个子节点,则称该策略发生了一次复制,该值越大说明复制程度越高;完整的信息熵公式期望选取的划分比特能够将父节点的策略均匀且复制程度低的划分至左右两个子节点。
进一步地,对于ipv4五元组,将策略从根节点逐层向下层节点划分的过程中,每层会使用一个比特划分策略;第0层的根节点使用ipv4五元组104比特中,能够将策略最均匀的划分至孩子节点的比特;第1层的节点使用ipv4五元组中,除了第0层已使用过的比特外的103比特中,能够将策略最均匀的划分至孩子节点的比特;第2层的节点使用ipv4五元组中,除了第0层至第1层已使用过的比特外的102比特中,能够将策略最均匀的划分至孩子节点的比特;第3层的节点使用ipv4五元组中,除了第0层至第2层已使用过的比特外的101比特中,能够将策略最均匀的划分至孩子节点的比特;依次类推,随着层数的增加,ipv4五元组中未用于划分策略的比特对于节点中策略的区分度越来越小;直至完全没有区分度时,其最大信息熵为零,此时将节点标记为叶子节点。
进一步地,n个snode是一棵广度优先的熵二叉树的子树。
(三)有益效果
本发明提出一种将熵二叉树合并为多叉树的方法,本发明通过自定义的信息熵公式,确保每个节点的规则能够均匀且尽可能复制少的划分至子节点;当某节点的信息熵为零时将该节点标记为叶子节点,信息熵为零能够确保叶子节点中的多条规则能够合并为一条;通过将多个二叉树的节点压缩为一个节点,能够明显降低树高,进而提高数据包的查找性能;通过多核多线程的方式创建熵二叉树,明显提高了建树时间;创建熵二叉树的关键步骤是计算信息熵,而信息熵的计算与规则本身的含义无关(比如规则的字段个数、每个字段的比特数、每个字段表示的含义等),这样就确定了该算法对于不同的规则集均有很强的适应性。
本发明支持模糊匹配;支持为策略指定优先级;对策略的字段个数和各个字段的比特数有较强的适应性。比如可以支持ipv4五元组、ipv6五元组、ipv6三元组、及其它自定义策略;叶子节点中的多条策略可以合并为一条,提高查找性能。解决了上文提到的hypercuts决策树的第一个问题;能够处理规则范围覆盖严重的规则集。解决了上文提到的hypercuts决策树的第二个问题。
附图说明
图1为五元组规则示例;
图2为规则划分示例;
图3为建立熵二叉树的总体流程;
图4为选取最佳划分比特;
图5为熵二叉树的查找流程;
图6为熵二叉树合并为多叉树;
图7为小节点合并前,小节点树的示意图;
图8为小节点合并后,大节点树的示意图。
具体实施方式
为使本发明的目的、内容和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
本专利提出了一种基于信息熵创建决策树,然后根据该决策树进行数据包分类的方法。该方法解决了hypercuts决策树的以上两个问题,查找性能得到明显提升。并且对于规则集的适用性显著提升。
本发明专利首先通过信息熵创建一棵二叉树,然后合并为多叉树。二叉树的创建过程如下:
S11、使用策略的某个比特(假如策略集合是ipv4五元组策略,则是104比特中的某个比特位),将父节点的策略(根节点拥有策略集合中的全部策略)均匀的划分至左右两个子节点。
S12、使用信息熵确定最佳的划分比特。信息熵越大,说明父节点的策略在指定比特越分散,越能够将策略均匀的划分至左右两个子节点。
S13、当某个节点的最大信息熵为零时,说明当前节点的策略在未使用的比特熵已经没有区分度,此时将该节点标记为叶子节点。
本节用到的信息熵公式为:
其中:
3)并且0<a<=1,0<b<=1,a+b>=1。
4)公式中的部分,表示父节点策略划分至两个子节点的均匀程度,该值越大,说明策略划分越均匀。公式中的log2(a+b)部分,表示父节点的策略在划分至两个子节点时的复制程度(当父节点的一条策略同时划分至两个子节点,则称该策略发生了一次复制),该值越大说明复制程度越高。完整的信息熵公式期望选取的划分比特能够将父节点的策略均匀且复制程度低的划分至左右两个子节点。
为描述方便,下文以ipv4五元组为例进行说明。对于其他策略集,原理是一样的。
本方案根据策略集合创建一棵二叉树,将策略从父节点划分至左右两个子节点,二叉树的根节点拥有策略集合中的全部策略。根据策略在指定比特的值将策略进行划分:
1)如果策略在指定比特的值为0,则将该策略划分至左子节点;
2)如果策略在指定比特的值为1,则将该策略划分至右子节点;
3)如果策略在指定比特的值是通配的,则将策略同时划分至左、右两个子节点。
示例说明图见图2。图2中使用bit8(最低比特记为bit0)作为划分比特,父节点的策略没有尽可能平均的被划分至左、右子节点,该比特显然不是最佳的划分比特。如果bit16作为划分比特,能够将策略1、3和5划分至右子节点;将策略2和4划分至左子节点。bit16将规则划分的均匀程度比bit8要好。本文使用信息熵作为选取最佳划分比特的依据。
下文首先介绍熵二叉树创建的总体流程,然后再着重介绍如何选取最佳划分比特。
建立熵二叉树的总体流程图见图3。根据图3,熵二叉树的创建过程说明如下:
S21、创建根节点,将策略集合中的所有策略分配给根节点。
S22、将根节点作为当前待处理节点。
S23、计算当前节点的最大信息熵。最大信息熵的计算流程见下节。
S24、如果最大信息熵为0,则将当前节点标记为叶子节点。否则进行步骤S25。
S25、创建左右子节点,将最大信息熵所对应的比特作为划分比特。将父节点的策略划分至左右两个子节点。策略划分方法为:
S251、如果策略在划分比特的值为0,则将该策略划分至左子节点;
S252、如果策略在划分比特的值为1,则将该策略划分至右子节点;
S253、如果策略在划分比特的值是通配的,则将策略同时划分至左、右两个子节点。
S26、以深度优先递归处理左右子节点,将子节点作为新的当前待处理节点。
S27、重复步骤S23至S26,直至熵二叉树的所有路径的末端是叶子节点。
将策略从根节点逐层向下层节点划分的过程中,每层会使用一个比特划分策略。
第0层的节点(即根节点)使用ipv4五元组104比特中,能够将策略最均匀的划分至孩子节点的比特。
第1层的节点使用ipv4五元组中,除了第0层已使用过的比特外的103比特中,能够将策略最均匀的划分至孩子节点的比特。
第2层的节点使用ipv4五元组中,除了第0层至第1层已使用过的比特外的102比特中,能够将策略最均匀的划分至孩子节点的比特。
第3层的节点使用ipv4五元组中,除了第0层至第2层已使用过的比特外的101比特中,能够将策略最均匀的划分至孩子节点的比特。
依次类推,随着层数的增加,ipv4五元组中未用于划分策略的比特对于节点中策略的区分度越来越小。直至完全没有区分度时,其最大信息熵为零,此时将节点标记为叶子节点。
叶子节点中的所有策略在未用于划分策略的比特中是完全一样的,因此此时叶子节点中的多条策略可以仅保留优先级最大的一条,其余策略不再保留。
下文着重介绍熵二叉树创建的总体流程中提到的最大信息熵是如何计算的,最大信息熵所对应的比特即是节点规则的最佳划分比特。选取最佳划分比特的流程图见图4。根据图4,最佳划分比特的选取过程说明如下:
S31、父节点中包含若干条策略,策略条数记为cur,这些策略待划分至左右子节点。由于ipv4五元组共104比特,定义104对计数器,每个比特对应一对计数器{lc,rc},lc表示使用指定比特将父节点策略划分至左子节点的条数,rc表示使用指定比特将父节点策略划分至右子节点的条数;将104对计数器初始化为0。
S32、获取父节点中的一条策略filt。
S33、选取ipv4五元组104比特中的某个比特n。
S34、根据策略在比特n的值进行如下处理:
如果其值为0,则左计数器(记为:lcn)自增一。
如果其值为1,则右计数器(记为:rcn)自增一。
如果其值为通配,则左右计数器lcn和rcn各自增一。
S35、重复步骤S33和S34,直到指定filt的104比特的计数统计完成为止。
S36、重复步骤S32、S33、S34和S35,直到将父节点的所有策略在104个比特的计数统计完为止。共计104对计数器。
S37、根据104对计数器计算出104个熵。最大信息熵所对应的比特即为父节点策略的划分比特。
请注意:将策略从根节点逐层向下层节点划分的过程中,每层会使用一个比特划分策略,已经应用过的比特不会重复使用,因此随着树的层数增加,计数器的对数和熵的个数是逐层减少的。
在熵二叉树中进行数据包的key值查找的流程图见图5。根据图5,熵二叉树的key值查找过程说明如下:
S51、从熵二叉树的根节点开始处理。
S52、读取节点的信息,判断该节点是否为叶子节点。如果不是则执行步骤S53;否则执行步骤S55。
S53、获取当前节点中记录的划分比特索引值。查看key值在划分比特的值是否为零(以ipv4五元组为例,key值是一个104位的变量。查看key值在划分比特的值,指的是查看该104位变量指定比特位的值)。如果为零,则获取左子节点;否则获取右子节点。
S54、将获取到的子节点作为当前待查找节点,重复执行步骤S52和步骤S53。
S55、在叶子节点中获取策略索引,比较待查找的key值与策略是否匹配。
此外,为充分利用多核CPU的并行处理能力,减小熵二叉树的建立时间,可以通过多线程创建熵二叉树。具体过程如下:
S61、创建熵二叉树前,预先规划好哪些cpu核心可用于创建熵二叉树,将这些CPU核心的cpu id保存至配置文件的ENTRP_CPU_SET字段中。
S62、创建多个线程,线程的个数与可用CPU核心的个数相等。将线程与CPU核一对一绑定。
S63、首先创建熵二叉树的前n层(比如前10层),共得到1024个子树的根节点。将这些子树的根节点加入队列中。
S64、每个线程每次从子树根节点队列中获取一个子树根节点,并根据该子树根节点完成子树的创建。
S65、线程完成一棵子树的创建后,再从子树根节点队列中获取下一个子树根节点,创建另一棵子树。当子树根节点队列变为空时,完整的熵二叉树创建完成。
此外,本专利将熵二叉树的多个节点合并为一个节点,将二叉树变为多叉树。二叉树合并为多叉树的主要作用是降低树高,进而提升查找的性能;以及减少FPGA外挂DDR的空间占用。
将熵二叉树合并为多叉树的流程图见图6。根据图6,熵二叉树合并为多叉树的过程说明如下:
S701、将熵二叉树中的节点称为小节点snode。将多叉树的节点称为大节点
big_node,为描述方便,本专利假设一个big_node最多包含n=7个snode,实际上一个大节点可以包含任意个小节点,这n=7个snode是一棵广度优先的熵二叉树的子树。
S702、开始处理时,将熵二叉树的根节点作为待合并子树的根节点。
S703、创建一个大节点,将子树根节点加入到大节点的小节点链表snode_list中。
S704、遍历snode_list。
S705、snode_list是否已经遍历完成。如果遍历完成,说明当前big_node中的snode不足7个,执行第S714步;否则执行第S706步。
S706、获取snode_list中的一个小节点snode。
S707、将snode的孩子节点cnode加入到snode_list。
S708、判断snode_list中是否已包含7个snode。
S709、如果不是,则继续执行第S705、S706、S707和S708步;否则执行第S710步。
S710、再次遍历snode_list。
S711、获取一个snode,判断其孩子节点cnode是否位于snode_list中。
S712、如果是,则继续第S711步;否则执行第S713步。
S713、将cnode作为子树的根节点,再次执行第S703步至第S712步。
S714、将big_node标记为多叉树的叶子节点。
图7熵二叉树的示例图。图中相同颜色的小节点被合并至一个大节点。依次为:
编号为1,2,3,4,5,6,7的小节点合并为一个大节点;
编号为8,14,21的小节点合并为一个大节点;
编号为9,15,22,30,31的小节点合并为一个大节点;
编号为10,16,17,23,24,25,26的小节点合并为一个大节点;
编号为11,18,27,32,34,37,39的小节点合并为一个大节点;
编号为12,19,28的小节点合并为一个大节点;
编号为13,20,29,33,35,36,38的小节点合并为一个大节点;
图8同样是一个示例图,是一个将图7中的小节点合并为大节点后的示例图。将7个小节点合并为一个大节点后,每个大节点最多有8个子节点。虚线的圆表示不存在的节点,仅用来占位。
将7个小节点合并为一个大节点后,能够降低树高:
1)最少能将三层压缩为一层,比如图6中编号为10、16、17、23、24、25和26的这7个小节点位于一棵满二叉树中,被压缩为图7中编号为10的一个大节点中。
2)最多能将七层压缩为一层,比如图6中编号为11、18、27、32、34、37和39的这7个小节点位于一个链表中,被压缩为图7中编号为11的一个大节点中。
本发明的关键点:
1.通过自定义的信息熵公式,确保每个节点的规则能够均匀且尽可能复制少的划分至子节点。
2.当某节点的信息熵为零时将该节点标记为叶子节点,信息熵为零能够确保叶子节点中的多条规则能够合并为一条。
3.通过将多个二叉树的节点压缩为一个节点,能够明显降低树高,进而提高数据包的查找性能。
4.通过多核多线程的方式创建熵二叉树,明显提高了建树时间。
5.创建熵二叉树的关键步骤是计算信息熵,而信息熵的计算与规则本身的含义无关(比如规则的字段个数、每个字段的比特数、每个字段表示的含义等),这样就确定了该算法对于不同的规则集均有很强的适应性。
本发明的效果:
1.支持模糊匹配。
2.支持为策略指定优先级。
3.对策略的字段个数和各个字段的比特数有较强的适应性。比如可以支持ipv4五元组、ipv6五元组、ipv6三元组、及其它自定义策略。
4.叶子节点中的多条策略可以合并为一条,提高查找性能。解决了上文提到的hypercuts决策树的第一个问题。
5.能够处理规则范围覆盖严重的规则集。解决了上文提到的hypercuts决策树的第二个问题。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
Claims (10)
1.一种将熵二叉树合并为多叉树的方法,其特征在于,该方法包括如下步骤:
S701、将熵二叉树中的节点称为小节点snode;将多叉树的节点称为大节点big_node,假设一个big_node最多包含n个snode;
S702、开始处理时,将熵二叉树的根节点作为待合并子树的根节点;
S703、创建一个大节点,将子树根节点加入到大节点的小节点链表snode_list中;
S704、遍历snode_list;
S705、snode_list是否已经遍历完成;如果遍历完成,说明当前big_node中的snode不足n个,执行第S714步;否则执行第S706步;
S706、获取snode_list中的一个小节点snode;
S707、将snode的孩子节点cnode加入到snode_list;
S708、判断snode_list中是否已包含n个snode;
S709、如果不是,则继续执行第S705、S706、S707和S708步;否则执行第S710步;
S710、再次遍历snode_list;
S711、获取一个snode,判断其孩子节点cnode是否位于snode_list中;
S712、如果是,则继续第S711步;否则执行第S713步;
S713、将cnode作为子树的根节点,再次执行第S703步至第S712步;
S714、将big_node标记为多叉树的叶子节点。
2.如权利要求1所述的将熵二叉树合并为多叉树的方法,其特征在于,n=7。
3.如权利要求1所述的将熵二叉树合并为多叉树的方法,其特征在于,所述熵二叉树的创建方法为:
使用策略的某个比特,将父节点的策略均匀的划分至左右两个子节点;其中,根节点拥有策略集合中的全部策略;
使用信息熵确定最佳的划分比特;信息熵越大,说明父节点的策略在指定比特越分散,越能够将策略均匀的划分至左右两个子节点;
当某个节点的最大信息熵为零时,说明当前节点的策略在未使用的比特熵已经没有区分度,此时将该节点标记为叶子节点,从而获得熵二叉树。
4.如权利要求1所述的将熵二叉树合并为多叉树的方法,其特征在于,所述熵二叉树的创建方法为:
S21、创建根节点,将策略集合中的所有策略分配给根节点;
S22、将根节点作为当前待处理节点;
S23、计算当前节点的最大信息熵;
S24、如果最大信息熵为0,则将当前节点标记为叶子节点;否则进行步骤S25;
S25、创建左右子节点,将最大信息熵所对应的比特作为划分比特;将父节点的策略划分至左右两个子节点;
S26、以深度优先递归处理左右子节点,将子节点作为新的当前待处理节点;
S27、重复步骤S23至S26,直至熵二叉树的所有路径的末端是叶子节点。
5.如权利要求3或4所述的将熵二叉树合并为多叉树的方法,其特征在于,所述策略为ipv4五元组策略、ipv6五元组策略、ipv6三元组策略或其他自定义策略。
6.如权利要求3或4所述的将熵二叉树合并为多叉树的方法,其特征在于,将父节点的策略划分至左右两个子节点包括:如果策略在划分比特的值为0,则将该策略划分至左子节点;如果策略在划分比特的值为1,则将该策略划分至右子节点;如果策略在划分比特的值是通配的,则将策略同时划分至左、右两个子节点。
7.如权利要求6所述的将熵二叉树合并为多叉树的方法,其特征在于,所述划分比特的选取过程如下:
S31、父节点中包含若干条策略,策略条数记为cur,这些策略待划分至左右子节点;对于ipv4五元组共104比特,定义104对计数器,每个比特对应一对计数器{lc,rc},lc表示使用指定比特将父节点策略划分至左子节点的条数,rc表示使用指定比特将父节点策略划分至右子节点的条数;将104对计数器初始化为0;
S32、获取父节点中的一条策略filt;
S33、选取ipv4五元组104比特中的某个比特n;
S34、根据策略在比特n的值进行如下处理:
如果其值为0,则左计数器lcn自增一;
如果其值为1,则右计数器rcn自增一;
如果其值为通配,则左右计数器lcn和rcn各自增一;
S35、重复步骤S33和S34,直到指定filt的104比特的计数统计完成为止;
S36、重复步骤S32、S33、S34和S35,直到将父节点的所有策略在104个比特的计数统计完为止;共计104对计数器;
S37、根据104对计数器计算出104个信息熵;最大信息熵所对应的比特即为父节点策略的划分比特。
8.如权利要求3或4或6所述的将熵二叉树合并为多叉树的方法,其特征在于,所述信息熵公式为:
其中:
3)并且0<a<=1,0<b<=1,a+b>=1;
9.如权利要求4所述的将熵二叉树合并为多叉树的方法,其特征在于,对于ipv4五元组,将策略从根节点逐层向下层节点划分的过程中,每层会使用一个比特划分策略;第0层的根节点使用ipv4五元组104比特中,能够将策略最均匀的划分至孩子节点的比特;第1层的节点使用ipv4五元组中,除了第0层已使用过的比特外的103比特中,能够将策略最均匀的划分至孩子节点的比特;第2层的节点使用ipv4五元组中,除了第0层至第1层已使用过的比特外的102比特中,能够将策略最均匀的划分至孩子节点的比特;第3层的节点使用ipv4五元组中,除了第0层至第2层已使用过的比特外的101比特中,能够将策略最均匀的划分至孩子节点的比特;依次类推,随着层数的增加,ipv4五元组中未用于划分策略的比特对于节点中策略的区分度越来越小;直至完全没有区分度时,其最大信息熵为零,此时将节点标记为叶子节点。
10.如权利要求1所述的将熵二叉树合并为多叉树的方法,其特征在于,n个snode是一棵广度优先的熵二叉树的子树。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210281824.5A CN114745453B (zh) | 2022-03-21 | 2022-03-21 | 一种将熵二叉树合并为多叉树的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210281824.5A CN114745453B (zh) | 2022-03-21 | 2022-03-21 | 一种将熵二叉树合并为多叉树的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114745453A true CN114745453A (zh) | 2022-07-12 |
CN114745453B CN114745453B (zh) | 2024-06-11 |
Family
ID=82277751
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210281824.5A Active CN114745453B (zh) | 2022-03-21 | 2022-03-21 | 一种将熵二叉树合并为多叉树的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114745453B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102405622A (zh) * | 2010-08-24 | 2012-04-04 | 华为技术有限公司 | 二叉树建立、压缩和查找的方法和装置 |
CN106611284A (zh) * | 2016-06-20 | 2017-05-03 | 四川用联信息技术有限公司 | 一种哈夫曼物料采购决策算法 |
US20170222937A1 (en) * | 2014-08-15 | 2017-08-03 | Hewlett Packard Enterprise Developement Lp | A memory efficient packet classification method |
CN113723548A (zh) * | 2021-09-06 | 2021-11-30 | 北京左江科技股份有限公司 | 决策树规则集预处理的方法和装置 |
-
2022
- 2022-03-21 CN CN202210281824.5A patent/CN114745453B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102405622A (zh) * | 2010-08-24 | 2012-04-04 | 华为技术有限公司 | 二叉树建立、压缩和查找的方法和装置 |
US20170222937A1 (en) * | 2014-08-15 | 2017-08-03 | Hewlett Packard Enterprise Developement Lp | A memory efficient packet classification method |
CN106611284A (zh) * | 2016-06-20 | 2017-05-03 | 四川用联信息技术有限公司 | 一种哈夫曼物料采购决策算法 |
CN113723548A (zh) * | 2021-09-06 | 2021-11-30 | 北京左江科技股份有限公司 | 决策树规则集预处理的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN114745453B (zh) | 2024-06-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9208438B2 (en) | Duplication in decision trees | |
US9191321B2 (en) | Packet classification | |
US10460250B2 (en) | Scope in decision trees | |
US9595003B1 (en) | Compiler with mask nodes | |
US9432284B2 (en) | Method and apparatus for compiling search trees for processing request keys based on a key size supported by underlying processing elements | |
Kogan et al. | SAX-PAC (scalable and expressive packet classification) | |
US7684400B2 (en) | Logarithmic time range-based multifield-correlation packet classification | |
US8732110B2 (en) | Method and device for classifying a packet | |
US7545809B2 (en) | Packet classification | |
US7941390B2 (en) | System for managing multi-field classification rules relating to ingress contexts and egress contexts | |
US7251651B2 (en) | Packet classification | |
Cheng et al. | Packet classification using dynamically generated decision trees | |
US9268855B2 (en) | Processing request keys based on a key size supported by underlying processing elements | |
Daly et al. | Bytecuts: Fast packet classification by interior bit extraction | |
CN113723548A (zh) | 决策树规则集预处理的方法和装置 | |
CN114745453B (zh) | 一种将熵二叉树合并为多叉树的方法 | |
KR101153940B1 (ko) | 패킷 분류 장치 및 그 방법 | |
CN114637773A (zh) | 一种基于信息熵的数据包分类方法 | |
Chuprikov et al. | General ternary bit strings on commodity longest-prefix-match infrastructures | |
Macián et al. | An evaluation of the key design criteria to achieve high update rates in packet classifiers | |
CN114638309B (zh) | 一种基于信息熵的hypercuts决策树策略集预处理方法 | |
Demianiuk et al. | Approximate classifiers with controlled accuracy | |
CN115412423A (zh) | 一种提高基于决策树的数据包分类速率的方法 | |
CN113723549A (zh) | 一种基于bitmap的决策树的实现方法 | |
Linan et al. | Multidimensional packet classification with improved cutting |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |