CN102148746A - 一种报文分类方法和系统 - Google Patents

一种报文分类方法和系统 Download PDF

Info

Publication number
CN102148746A
CN102148746A CN2010101211406A CN201010121140A CN102148746A CN 102148746 A CN102148746 A CN 102148746A CN 2010101211406 A CN2010101211406 A CN 2010101211406A CN 201010121140 A CN201010121140 A CN 201010121140A CN 102148746 A CN102148746 A CN 102148746A
Authority
CN
China
Prior art keywords
node
big tree
tree node
station diagram
address
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.)
Pending
Application number
CN2010101211406A
Other languages
English (en)
Inventor
黄小红
孙琼
陈宇
琚凯
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ZTE Corp
Original Assignee
ZTE Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by ZTE Corp filed Critical ZTE Corp
Priority to CN2010101211406A priority Critical patent/CN102148746A/zh
Publication of CN102148746A publication Critical patent/CN102148746A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明提供了一种报文分类方法,包括:以原始规则集中各报文分类规则的源地址和目的地址分别建立二叉树;使用位图分别存储所述二叉树;对待分类的数据包,根据该数据包的源地址和目的地址,分别查找对应的位图,得到两个匹配结果,根据这两个匹配结果和该数据包的其它信息,得到该数据包的报文分类规则。本发明还提供了一种报文分类系统。本发明可以减少内存占用,提高搜索速度。

Description

一种报文分类方法和系统
技术领域
本发明涉及移动通信系统,特别是涉及一种实现报文分类方法和系统。
背景技术
IPv4报文分类中,路由器提取五元组(目的IP地址,源IP地址,目的端口,源端口,协议)协议字段,根据所提取的五元组,从规则集中查找匹配的规则,以确定此数据包所属的流。如果一个数据包匹配多条规则,则路由器根据优先级最高原则对报文进行分类。在IPv4规则集中,规则格式如表1所示:
表1
  源IP地址   目的IP地址   源端口   目的端口   协议   流ID   优先级
其中,源IP地址和目的IP地址以无类域间路由的形式表示,均为32比特;源端口和目的端口以范围的形式表示;协议字段的内容可以为某一具体协议,例如TCP(传输控制协议)、UDP(用户数据报协议)等,也可以为表示任意协议的通配符“*”。
目前,实现报文分类的方法包括线性搜索法、基于决策树的搜索法、基于分解的搜索法和基于元组空间的方法。基于决策树的搜索法包括基于空间切割的决策树法和基于地址前缀的网格树法。
线性搜索法,是实现报文分类最简单的方法,但是,当规则集里的规则数增多时,该算法的查找效率线性下降。
基于决策树的搜索法,通过建立一棵决策树,将一个大规则集划分为小规则集,在这些小规则集中采用线性查找法或二分查找法等方法进行搜索,其查找效率取决于决策树的建立方式。
基于空间切割的决策树法中,如图1所示,决策树的根节点对应整个多维空间,生成子树的过程就是空间切割过程。该算法的查找效率取决于决策树的高度和在规则桶中线性搜索的效率。该算法中,由于一条规则可同时存在于多个规则桶中,所以存在内存膨胀的问题。另外,IPv6中,128比特的地址使得空间表示的难度加大,进行空间切割的难度也相应增大,因此,对IPv6而言,基于空间切割的决策树并不具有很好的扩展性。
基于地址前缀的网格树法,如图2所示,以源IP地址和目的IP地址建立一棵二维网格树:以源IP地址建立第一维树,则,第一维树的叶子节点所指向的第二维树都对应同一个源IP地址前缀,第二维树的叶子节点就对应一个前缀对(源IP地址前缀,目的IP地址前缀),第二维树的叶子节点所维护的规则桶中的每条规则都与相应的前缀对相匹配。该方法的查找效率取决于地址前缀的长度。IPv6的地址长度是IPv4的4倍,因此,如果将此方法直接用于IPv6报文分类中,其查找效率将会下降4倍。
基于分解的搜索法,如图3所示,将一个多维报文分类问题分解为多个一维搜索问题,每一维搜索结果的集合的交集即为能匹配的所有规则,从中选取优先级最高的规则作为最终结果。此类算法搜索效率高,但是,IPv6中,128比特的地址使得地址域上的搜索面临很大挑战。
由此可见,IPv6报文分类需处理256比特的地址空间(源地址,目的地址),如果将基于64比特地址空间的IPv4报文分类方法直接应用到IPv6报文分类中,上述方法或者不再适用,或者查找效率急剧下降。
发明内容
本发明要解决的技术问题是提供一种报文分类方法和系统,减少在基于树的包分类算法中空节点占用的额外内存,并且减少内存访问次数,提高包分类速度。
为了解决上述问题,本发明提供了一种报文分类方法,包括:
以原始规则集中各报文分类规则的源地址和目的地址分别建立二叉树;
使用位图分别存储所述二叉树;
对待分类的数据包,根据该数据包的源地址和目的地址,分别查找对应的位图,得到两个匹配结果,根据这两个匹配结果和该数据包的其它信息,得到该数据包的报文分类规则。
进一步地,上述方法还可具有以下特点,所述使用位图存储所述二叉树包括:
设置搜索步长N,N为正整数;
从所述二叉树的根节点开始,将所述二叉树划分为若干级大树节点,其中,每个大树节点包括所述二叉树的N层,该N层中,下一层的节点为上一层的节点的子节点,且每个大树节点的第一层包含1个节点,该节点称为该大树节点的根节点,下一级大树节点的根节点为上一级大树节点包含的最后一层节点的子节点;
为每个大树节点建立内部位图序列和外部位图序列,所述内部位图序列用于指示所述大树节点包括的各节点的位置和该节点是否为实节点,其中,实节点中包含优先级信息;所述外部位图序列用于指示所述大树节点下是否存在下一级大树节点及下一级大树节点与当前大树节点的位置信息。
进一步地,上述方法还可具有以下特点,按如下方式建立2^N-1位的内部位图序列:对每个大树节点,从该大树节点的第一层开始,每层从左到右遍历该大树节点包括的每一个节点,对每个节点,使用一个比特表示该节点是否为实节点,得到该大树节点的内部位图序列;
按如下方式建立2^N位的外部位图序列:对大树节点最后一层各节点对应的子节点,从左到右遍历,对每个子节点,使用一个比特表示是否存在以该子节点作为根节点的大树节点,得到该大树节点的外部位图序列。
进一步地,上述方法还可具有以下特点,所述内部位图序列中,对大树节点中的每个节点,使用比特1表示该节点为实节点,比特0表示所述节点为空节点,所述空节点指不包含优先级信息的节点;
所述外部位图序列中,对大树节点最后一层各节点对应的每个子节点,使用比特1表示所述存在以该子节点为根节点的大树节点,使用比特0表示不存在以该子节点为根节点的大树节点。
进一步地,上述方法还可具有以下特点,对每个大树节点的内部位图序列进行压缩,设置索引长度M1,所述内部位图序列每M1位对应一索引值,指示该M1位对应的节点中是否存在实节点;
和/或,对所述外部位图序列进行压缩,设置索引长度M2,所述外部位图序列每M2位对应一索引值,指示是否存在以该M2位对应的子节点为根节点的大树节点。
进一步地,上述方法还可具有以下特点,所述根据该数据包的源地址和目的地址,分别查找对应的位图包括:
A、将所述数据包的源地址或目的地址按所述搜索步长N进行分割,得到若干段地址,最后一段地址不足N位时,补0;
B、提取初始N位地址,查找第一级大树节点,得到匹配的报文分类规则集,其中,第一级大树节点其第一层节点为二叉树的根节点;判断该N位地址是否存在对应的下一级大树节点,如果存在,提取后续N位地址,执行步骤C;否则,查找结束,得到匹配结果;
C、根据当前提取的N位地址查找对应的下一级大树节点,得到匹配的报文分类规则集;判断该后续N位地址是否存在对应的下一级大树节点,如果存在,继续提取后续N位地址,返回步骤C;否则,查找结束,得到匹配结果。
进一步地,上述方法还可具有以下特点,其中,根据N位地址查找大树节点时,首先查找大树节点的内部位图序列的索引值,根据索引值进一步查找内部位图序列。
进一步地,上述方法还可具有以下特点,所述根据该数据包的源地址和目的地址,分别查找对应的位图,得到两个匹配结果,根据这两个匹配结果和该数据包的其它信息,得到该数据包的报文分类规则包括:
提取当前数据包的六元组,记录原始规则集中的默认规则;根据源地址和目的地址分别查找对应的位图,得到两个匹配结果,将得到的两个匹配结果进行“与”运算,之后将相与所得的匹配规则进行优先级从高到低的排序,与所述六元组的其它信息进行匹配,将匹配到的最高优先级作为该数据包的报文分类规则;如果没有查找到匹配的优先级,则将默认规则作为该数据包的报文分类规则。
本发明还提供一种报文分类系统,包括:
二叉树建立模块,用于以原始规则集中各报文分类规则的源地址和目的地址分别建立二叉树;
存储模块,用于使用位图分别存储所述二叉树;
查找模块,对待分类的数据包,根据该数据包的源地址和目的地址,分别查找对应的位图,得到匹配结果,根据匹配结果和该数据包的其它信息,得到该数据包的报文分类规则。
进一步地,上述系统还可具有以下特点,所述存储模块包括:
步长设置单元,用于设置搜索步长N,N为正整数;
转换单元,用于从所述二叉树的根节点开始,将所述二叉树划分为若干级大树节点,其中,每个大树节点包括所述二叉树的N层,该N层中,下一层的节点为上一层的节点的子节点,且每个大树节点的第一层包含1个节点,该节点称为该大树节点的根节点,下一级大树节点的根节点为上一级大树节点包含的最后一层节点的子节点;
位图序列建立单元,用于为每个大树节点建立内部位图序列和外部位图序列,所述内部位图序列用于指示所述大树节点包括的各节点的位置和该节点是否为实节点,其中,实节点中包含优先级信息;所述外部位图序列用于指示所述大树节点下是否存在下一级大树节点及下一级大树节点与当前大树节点的位置信息。
进一步地,上述系统还可具有以下特点,所述位图序列建立单元包括内部位图序列建立子单元和外部位图序列建立子单元,其中:
所述内部位图序列建立子单元,用于按如下方式建立2^N-1位的内部位图序列:对每个大树节点,从该大树节点的第一层开始,每层从左到右遍历该大树节点包括的每一个节点,对每个节点,使用一个比特表示该节点是否为实节点,得到该大树节点的内部位图序列;
所述外部位图序列建立子单元,用于按如下方式建立2^N位的外部位图序列:对大树节点最后一层各节点对应的子节点,从左到右遍历,对每个子节点,使用一个比特表示是否存在以该子节点作为根节点的大树节点,得到该大树节点的外部位图序列。
进一步地,上述系统还可具有以下特点,所述位图序列建立单元还包括压缩子单元,
所述压缩子单元,用于所述对每个大树节点的内部位图序列进行压缩,设置索引长度M1,所述内部位图序列每M1位对应一索引值,指示该M1位对应的节点中是否存在实节点;和/或,对所述外部位图序列进行压缩,设置索引长度M2,所述外部位图序列每M2位对应一索引值,指示是否存在以该M2位对应的子节点为根节点的大树节点。
进一步地,上述系统还可具有以下特点,所述查找模块包括分割单元和查找单元,其中:
所述分割单元,用于将所述数据包的源地址或目的地址按所述搜索步长N进行分割,得到若干段地址,最后一段地址不足N位时,补0;
所述查找单元,提取初始N位地址,查找第一级大树节点,得到匹配的报文分类规则集,其中,第一级大树节点其第一层节点为二叉树的根节点;判断该N位地址是否存在对应的下一级大树节点,如果不存在,查找结束,得到匹配结果;如果存在,提取后续N位地址,查找对应的下一级大树节点,重复执行直到不存在对应的下一级大树节点,得到匹配结果。
进一步地,上述系统还可具有以下特点,其中,所述查找单元根据N位地址查找大树节点时,首先查找大树节点的内部位图序列的索引值,根据索引值进一步查找内部位图序列。
本发明具有如下效果:
1.利用位图来表示搜索树的结构特征,以此来减少空节点的内存占用。在以往的基于树的结构中,空节点往往因为连接实节点的目的而得以保留。本发明采用位图记录节点位置,可以大大减少内存占用。
2.利用统计出来的规则集特征和位图中冗余重复节点的特性设计算法,来减少内存的访问次数。根据实验中获得的数据,在选取比较大的步长的时候检索速度会明显加快,然而空节点数量也会增多。这时,为了减小空节点的出现所带来的增大冗余位的匹配,采取对位传序列索引的方法;由于匹配空节点次数的减少,多余的内存访问次数自然降低;同时对原始位图进行索引也能够降低匹配过程中的匹配次数,从而提高搜索效率。
附图说明
通过结合附图并参考以下详细的算法描述。本领域技术人员可以更好的理解本发明,清楚本发明的原理,算法特点和数据结构特征,以及优点。其中:
图1是现有基于空间切割的决策树法示意图;
图2是现有基于地址前缀的网格树法示意图;
图3是现有分解的搜索法示意图;
图4是本发明报文分类方法流程图;
图5是本发明建立的二叉树示意图;
图6是本发明将二叉树转换为位图示意图;
图7是本发明匹配方法示意图。
具体实施方式
本发明的核心思想是,根据源地址和目的地址分别建立二叉树,使用位图存储所述二叉树,根据数据包的源地址和目的地址查找所述位图得到匹配结果,最终得到报文分类规则。其中,位图是利用“0”和“1”的序列描述空间或平面上某一点是否存在的方法。本发明中,利用位图来描述树结构中节点是否存在及其相对位置。
本发明提供的IPv6报文分类的方法,如图4所示,包括:
步骤10,根据源地址和目的地址构建两个标准的二叉树;
原始规则集中每个规则均表示为由源IP地址、目的IP地址、流标签、源端口、目的端口和协议类型组成的六元组,将每个规则的源IP地址和目的IP地址构建二叉树。如图5所示。
建立方法如下:地址前缀的一个比特对应二叉树的一个节点,地址前缀的每个比特分别存储在对应节点的路径上,与地址前缀匹配的节点联接一个规则栈;将每个规则添加到与IP地址的前缀匹配的节点关联的规则栈中,将和地址前缀匹配的节点的优先级存储到规则栈中。
步骤20,当成功创建完成两个二叉树之后,从根节点开始分别对两个二叉树进行大树节点的转换,并且得到每个大树节点中的内部位图序列和外部位图序列,从而分别得到源地址的二叉树对应的源地址位图和目的地址的二叉树对应的目的地址位图。
转换方法为:设置搜索步长N,N为正整数;从所述二叉树的根节点开始,将所述二叉树划分为若干级大树节点,其中,每个大树节点包括所述二叉树的N层,该N层中,下一层的节点为上一层的节点的子节点,且每个大树节点的第一层包含1个节点,该节点称为该大树节点的根节点,下一级大树节点的根节点为上一级大树节点包含的最后一层节点的子节点;以二叉树根节点为根节点的大树节点为第一级大树节点。
为每个大树节点建立内部位图序列和外部位图序列,所述内部位图序列用于指示所述大树节点包括的各节点的位置和该节点是否为实节点,其中,实节点中包含优先级信息;所述外部位图序列用于指示所述大树节点是否存在下一级大树节点及下一级大树节点与当前大树节点的位置信息。每个大树节点的所述内部位图序列为2^N-1位,其外部位图序列为2^N位。
其中,按如下方式建立2^N-1位的内部位图序列:对每个大树节点,从该大树节点的第一层开始,每层从左到右遍历该大树节点包括的每一个节点,使用一个比特表示该节点是否为实节点,得到该大树节点的内部位图序列。
具体包括:遍历这个大树节点当中所有的节点(每个节点称为该大树节点的小树节点),如果小树节点在原始的二叉树中不包含优先级信息,该节点称为空节点,即该节点不对应某一规则集,只作为连接其他节点用,则将这个点的位图置为0,对包含优先级信息的节点即实节点,其位图置为1。
举例来说,源地址树的部分结构图如图6所示。假设搜索步长N设定为3,也就是说每次搜索源地址或目的地址的3位,那么转换的方法就是截取从根节点开始的3层大树节点,也就是一个1,2,4的层结构,将这个层结构转化为一个大树节点。从第一层开始,每层从左到右遍历该大树节点的各小树节点,得到一个3层的大树节点的位图可以表示为1 01 0010,对于标示为1的实节点,将其连续储存在一段内存空间当中,查找的时候只需要根据位图计算出来相对位置就可以得到相应节点的信息。即,在查找的时候通过判别位图对应点的值(0或1),和其相对位置,就可以在连续储存的一段实结点中找到对应的节点,从而获得优先级信息。比如说看1010010的第6个位置的值是“1”,而在这个“1”之前存在2个“1”,那么可以判断,第6个位置的节点储存在这段连续内存中的第3个位置上。
另外,构建每个大树节点的外部位图序列,所述外部位图序列用于指示所述大树节点下是否存在下一级大树节点及下一级大树节点与当前大树节点的位置信息。
按如下方式建立2^N位的外部位图序列:对大树节点最后一层各节点对应的子节点,从左到右遍历,对每个子节点,使用一个比特表示是否存在以该子节点作为根节点的大树节点,得到该大树节点的外部位图序列。
如图6所示,由于每个大树节点的子节点的个数不再是2个,因此使用位图序列来标示此大树节点的子节点(即子大树节点,或称下一级大树节点)的存在情况。以图6中的步长为3的情况为例,则子大树节点的个数应该在2^(3)=8个以内,如果某一分支存在子大树节点,则标示为1,如果不存在,则标示为0。这样一来形成一串8位的序列,标示下一层子大树节点的情况,从而建立起来大树节点之间的联系。
进一步地,对每个大树节点的内部位图序列进行压缩,设置索引长度M1,所述内部位图序列每M1位对应一索引值,指示该M1位对应的节点中是否存在实节点;比如,M1位中均指示无实节点(比如,均为0),则可以将该M1位的索引设置为0,表示该M1位对应的节点中不存在实节点,否则,设置为1,表示该M1位对应的节点中存在实节点。
和/或,对所述外部位图序列进行压缩,设置索引长度M2,所述外部位图序列每M2位对应一索引值,指示是否存在以该M2位对应的子节点为根节点的大树节点。比如M2位均指示不存在以其对应的子节点为根节点的大树节点(比如,该M2位均为0),则可以将该M2位的索引设置为0,表示不存在以该M2位对应的子节点为根节点的大树节点,否则,设置为1,表示存在以该M2位对应的子节点为根节点的大树节点。
根据对原始规则集的统计分析,对位图中连续的“1”或“0”进行压缩。
在选择了比较长的步长的时候,位图就会变得很长。如果如果步长选定为5,则位图的长度会达到32bit,这时会出现很长的连续0或1。在这种情况下,我们对连续的0或1每8位(8位仅为举例)做一次索引,即假设原始位图是01010111 00000000 00000000 00110000,那么则将索引设置为1001,也就是说,如果碰到有连续的0则将某一位索引设置为0,否则设置为1,之后再进入原始的位图进行检索。这样一来,在进行位图检索的时候,碰到连续的0就可以直接跳过很多位,加快了检索的速度。如图7所示,为对已压缩的位图与未压缩的位图进行查找过程的对比。可以看到,压缩后查找速度大大加快。
步骤30,提取待分类数据包的源IP地址和目的IP地址,与位图节点进行匹配,得到匹配结果,根据匹配结果和该数据包的其它信息得到该数据包的报文分类规则。
具体包括:提取当前数据包的六元组,记录原始规则集中的默认规则;根据源地址和目的地址对源地址位图和目的地址位图搜索完成之后,将得到的两个匹配结果进行“与”运算,之后将相与所得的结果进行优先级从高到低的排序,再根据排序所得的列表到原始数据中查找其他域是否匹配,例如流标签,端口号,协议类型等。如果匹配,则返回此优先级作为数据包报文分类规则;否则在列表中继续查找下一个优先级是否匹配;如果没有查找到匹配的优先级,则将默认规则作为当前数据包的报文分类规则。
本发明支持并行查找,也就是说源地址和目的地址可以分别独立进行查找,最后根据这两个维度的查找结果做“与”运算。因为是按照搜索步长N进行数据结构的划分,因此在查找的过程中也要按照搜索步长进行检索,即每次提取每条流量(即每个源地址或目标地址)的N位进行匹配,直到取完128位为止。
其中,根据数据包的源地址和目的地址,查找位图时,包括:
A、将所述数据包的源地址或目的地址按所述搜索步长N进行分割,得到若干段地址,分割得到的最后一段地址不足N位时,补0;
B、提取初始N位地址,查找第一级大树节点,得到匹配的报文分类规则集;判断该N位地址是否存在对应的下一级大树节点,如果存在,提取后续N位地址,执行步骤C;否则,查找结束,得到匹配结果;
C、查找对应的下一级大树节点,得到匹配的报文分类规则集;判断该后续N位地址是否存在对应的下一级大树节点,如果存在,继续提取后续N位地址,返回步骤C;否则,查找结束,得到匹配结果。
其中,根据N位地址查找大树节点时,首先查找大树节点的内部位图序列的索引值,根据索引值进一步查找内部位图序列。
下面给出本发明的一具体实施例。
本发明提供的报文分类方法包括:
a、提取当前数据包的六元组,记录原始规则集中的默认规则;并分别根据源IP地址和目的IP地址搜索基于位图的大节点树;
b、步骤a中在两棵基于位图的大节点树搜索完成之后,匹配所得的两个结果进行“与”运算,之后将相与所得的结果进行优先级从高到低的排序,再根据排序所得的列表到原始数据中查找其他域是否匹配。如果匹配,则返回此优先级作为数据包报文分类规则;否则在列表中查找下一个优先级是否匹配,直到最终查找到默认规则,作为当前数据包的报文分类规则;
其中,步骤a之前包括:
2a.根据所设置的步长,设置大树节点所包含的小树节点的层数和个数;
2b.构建两个容器(vector),分别用来储存当前待转换的树节点(currentVec)和下一层将要被转换的树节点(nextVec),将根节点压入currentVec之内;
2c.对currentVec中的节点开始进行转换,转换完成之后得到所有currentVec中小树节点被转换后生成的大树节点,并且得到相应大树节点的内部位图和外部位图,之后按照从左到右的顺序收集这些大树节点的子节点,再将这些子节点按顺序压入到nextVec之中;
2d.将nextVec的元素复制到currentVec中,清空nextVec中的所有元素;
2e.判断currentVec内的元素个数,如果个数为0,则说明树节点转换完毕,跳出;否则回到2c。
在2c步骤中所述对小树节点进行转换之中,存储生成的大树节点之前,所述方法进一步包括:
3a.根据之前设置的步长,计算需要探索的小树节点的层数和个数。如果步长设置为N,那么需要探索的小树节点数就是(2^N-1),具体如图4所示,并且将这几个小树节点并入基于位图的大树节点当中;
3b.收集此大树节点的所有的子节点,并且将这些子节点储存在nextVec之中。
在步骤3a中所述探索小树节点的方法之中,步骤3b之前,所述方法进一步包括:
4a.根据步长确定探索小树节点需要的位串,例如对于步长是3的设置,确定初步查找步长为1,先生成(2^1-1)=1,在2进制表示为1的位串进行查找,位图初值设置为0;
4b.利用此位串,以每个大树节点的最顶端为根节点,按照0表示左孩子,1表示右孩子的方法,逐一检测所查找的小树节点是否存在优先级信息,所查找的长度为步长长度加1;
4c.将位图左移一位,如果所查找的节点存在包含优先级信息,位图的值加1,并且将当前的小节点存储在当前大树节点内部容器里面;否则直接转到4d;
4d.将位串的值减1,重复4b步骤;如果位串的值变成0,则回到4a步骤中,将当前查找步长加1,继续查找,直到查找步长增加到步长3为止,保存这时得到的内部位图;
4e.当搜索的步长等于之前设定的步长时,即在之前的例子中为3时,用生成的位串确定外部位图。设置外部位图的初值是1。假设步长是3,则从000一直搜索到111(2^3-1),每次搜索的位串依次加1。如果存在相应的节点则将外部位图左移一位,并且将位图的值加1,并且将下一层小节点的的指针储存在当前大树节点外部容器里面;否则只左移位图,不做其他操作;
4f.将所得到的内部位图,外部位图,内部节点容器,外部节点容器保存在大树节点的结构体当中。
在步骤4f之后,步骤3b之前,所述方法进一步包括:
5a.将得到的内部位图和外部位图进行多位加标签操作;
比如,假设设定的标签标识长度为4,对于步长是4的内部位图,即15位,每4位做一次标签;如果内部位图是1100 0000 1111 000,则将标签设定为1010,同理对外部位图加标签;
5b.将内部位图标签和外部位图标签存储到大树节点的结构体当中。
在提取当前数据包六元组之后,步骤b进一步包括:
6a.将当前数据包的源IP地址和目的IP地址分别在源IP规则所构建的树和目的IP规则所构建的树之中查找;
6b.根据之前设定的步长对IP地址进行分段,假设步长是N,则将IP地址分成等N长度的128/N段,对于不能整除的部分(例如N=3时,余2),将后面补若干位0。假设在某一次查找中,步长N=3,在对源IP地址的128位地址进行分割后,形成100 010 001 000......11100的位串;
6c.对于每N位IP位串,在构建的大树结构中进行查找,储存所经过的特定规则的优先级;
6d.将源IP地址和目的IP地址查找分别所得结果储存在两个容器列表里面,再将这两个容器列表想“与”,得到两个维度都匹配的优先级列表;
6e.根据6d中所得到的优先级列表,在原始规则数据中对其他维度进行进一步的匹配;
6f.输出6e中所有匹配条目中优先级最高的规则,此规则即为当前数据包所遵循的路径;
6g.如果还有新的数据包,则返回6a步继续查找;否则跳出,查找结束。
在6c步骤中所述对每个大节点进行匹配之中,读取下一层节点指针进行下一层匹配之前,所述方法进一步包括:
7a.根据所截取的N位IP位串,在内部位图里查找是否存在相匹配的规则集条目;
7b.首先检查大树节点中,最顶端的小节点是否存在相对应的规则集条目。如果有,则将此条目压入所有匹配的规则栈内;否则,开始检查大树节点中其他小节点;
7c.假设所截取的IP位串是100,则将第一位提取出来,即1,之后计算所对应的大树节点内部位图的位置,即从内部位图从左数第3位(1+2^1)。之后提取第二位,即0。因为之前一位是1,则下次要检查的位置是第从内部位图左数第6个位(10=2,2+2^2)。以此类推,计算出所要检查的所有位置。假设内部位图序列如附图3所示,为1 01 0010;图6中箭头走向表示搜索100序列所需要查找的节点;
7d.根据之前为位图所加的标签,检查宏观上某一段位图的情况。根据7c中所描述的例子,步长是3,内部位图序列一共有7位,如果所加标签是3位为一组,则标签应该有3位,即110。先检查3位标签的中第一位的值。如果第一位是1,说明其中存在节点,进行进一步原始位图的查找;如果是0,说明其中不存在节点,则跳出,搜索结束。
7e.如果对应的索引中位串是1,例如7c中所举例,查找原始位图第三位的情况。因为这一位是1,则说明有子节点存在,这时将其中所有的优先级都压入到相匹配的规则集容器中。
7f.将检测的步长加1,如果此步长为搜索的最大步长限制,则进行下一步外部位图的检测,执行步骤7g;否则回到7c;
7g.这时,已经将所有内部节点都查找完毕,开始进行外部位图的匹配。
7h.根据所截取的IP位串,计算出其所对应的外部位图的位置。例如IP为位串是100,则对应的外部位图的第5个位置,检验这个位置的值。如果这一位是1,则说明存在下一层大树节点,将指针赋值为下一层大树节点的指针;否则,说明不存在下一层节点,查找完毕。
由于源地址和目的地址两维可以进行独立的查找,并且基于位的操作更容易在硬件上实现,因此本发明在硬件实现下效果会更好。
本发明不限于IPV6报文的分类,也可用于其他类型的报文分类,比如IPV4报文。
本发明还提供一种报文分类系统,包括:
二叉树建立模块,用于以原始规则集中各报文分类规则的源地址和目的地址分别建立二叉树;
存储模块,用于使用位图分别存储所述二叉树;
查找模块,对待分类的数据包,根据该数据包的源地址和目的地址,分别查找对应的位图,得到匹配结果,根据匹配结果和该数据包的其它信息,得到该数据包的报文分类规则。
其中,所述存储模块包括:
步长设置单元,用于设置搜索步长N,N为正整数;
转换单元,用于从所述二叉树的根节点开始,将所述二叉树划分为若干级大树节点,其中,每个大树节点包括所述二叉树的N层,该N层中,下一层的节点为上一层的节点的子节点,且每个大树节点的第一层包含1个节点,该节点称为该大树节点的根节点,下一级大树节点的根节点为上一级大树节点包含的最后一层节点的子节点;
位图序列建立单元,用于为每个大树节点建立内部位图序列和外部位图序列,所述内部位图序列用于指示所述大树节点包括的各节点的位置和该节点是否为实节点,其中,实节点中包含优先级信息;所述外部位图序列用于指示所述大树节点下是否存在下一级大树节点及下一级大树节点与当前大树节点的位置信息。
其中,所述位图序列建立单元包括内部位图序列建立子单元和外部位图序列建立子单元,其中:
所述内部位图序列建立子单元,用于按如下方式建立2^N-1位的内部位图序列:对每个大树节点,从该大树节点的第一层开始,每层从左到右遍历该大树节点包括的每一个节点,对每个节点,使用一个比特表示该节点是否为实节点,得到该大树节点的内部位图序列;
所述外部位图序列建立子单元,用于按如下方式建立2^N位的外部位图序列:对大树节点最后一层各节点对应的子节点,从左到右遍历,对每个子节点,使用一个比特表示是否存在以该子节点作为根节点的大树节点,得到该大树节点的外部位图序列。
所述位图序列建立单元还包括压缩子单元,其中:
所述压缩子单元,用于所述对每个大树节点的内部位图序列进行压缩,设置索引长度M1,所述内部位图序列每M1位对应一索引值,指示该M1位对应的节点中是否存在实节点;和/或,对所述外部位图序列进行压缩,设置索引长度M2,所述外部位图序列每M2位对应一索引值,指示是否存在以该M2位对应的子节点为根节点的大树节点。
进一步的,所述查找模块包括分割单元和查找单元,其中:
所述分割单元,用于将所述数据包的源地址或目的地址按所述搜索步长N进行分割,得到若干段地址,最后一段地址不足N位时,补0;
查找单元,提取初始N位地址,查找第一级大树节点,得到匹配的报文分类规则集,其中,第一级大树节点其第一层节点为二叉树的根节点;判断该N位地址是否存在对应的下一级大树节点,如果不存在,查找结束,得到匹配结果;如果存在,提取后续N位地址,查找对应的下一级大树节点,重复执行直到不存在对应的下一级大树节点,得到匹配结果。
其中,所述查找单元根据N位地址查找大树节点时,首先查找大树节点的内部位图序列的索引值,根据索引值进一步查找内部位图序列。
本发明中,为源IP地址和目的IP地址分别建立的位图的树,在这两个树中并行查找,再将并行查找的结果相“与”,同时再线性查找其他维度,查找效率明显提高。同时,本发明解决了回溯的问题。在之前的基于位图的查找过程中,源IP地址树和目的IP地址树是串行查找的,在满足其中一个维度最大长度匹配的时候,也要满足另一个维度的最大长度匹配,而这样的要求需要在查找过程中有大量的回溯,因此效率比较低。在本发明中,由于并行查找的引入,就不会再出现回溯的问题,因此查找时间有很大降低。
当然,本发明还可有其它多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。

Claims (14)

1.一种报文分类方法,其特征在于,包括:
以原始规则集中各报文分类规则的源地址和目的地址分别建立二叉树;
使用位图分别存储所述二叉树;
对待分类的数据包,根据该数据包的源地址和目的地址,分别查找对应的位图,得到两个匹配结果,根据这两个匹配结果和该数据包的其它信息,得到该数据包的报文分类规则。
2.如权利要求1所述的方法,其特征在于,所述使用位图存储所述二叉树包括:
设置搜索步长N,N为正整数;
从所述二叉树的根节点开始,将所述二叉树划分为若干级大树节点,其中,每个大树节点包括所述二叉树的N层,该N层中,下一层的节点为上一层的节点的子节点,且每个大树节点的第一层包含1个节点,该节点称为该大树节点的根节点,下一级大树节点的根节点为上一级大树节点包含的最后一层节点的子节点;
为每个大树节点建立内部位图序列和外部位图序列,所述内部位图序列用于指示所述大树节点包括的各节点的位置和该节点是否为实节点,其中,实节点中包含优先级信息;所述外部位图序列用于指示所述大树节点下是否存在下一级大树节点及下一级大树节点与当前大树节点的位置信息。
3.如权利要求2所述的方法,其特征在于,
按如下方式建立2^N-1位的内部位图序列:对每个大树节点,从该大树节点的第一层开始,每层从左到右遍历该大树节点包括的每一个节点,对每个节点,使用一个比特表示该节点是否为实节点,得到该大树节点的内部位图序列;
按如下方式建立2^N位的外部位图序列:对大树节点最后一层各节点对应的子节点,从左到右遍历,对每个子节点,使用一个比特表示是否存在以该子节点作为根节点的大树节点,得到该大树节点的外部位图序列。
4.如权利要求3所述的方法,其特征在于,
所述内部位图序列中,对大树节点中的每个节点,使用比特1表示该节点为实节点,比特0表示所述节点为空节点,所述空节点指不包含优先级信息的节点;
所述外部位图序列中,对大树节点最后一层各节点对应的每个子节点,使用比特1表示所述存在以该子节点为根节点的大树节点,使用比特0表示不存在以该子节点为根节点的大树节点。
5.如权利要求2、3或4所述的方法,其特征在于,对每个大树节点的内部位图序列进行压缩,设置索引长度M1,所述内部位图序列每M1位对应一索引值,指示该M1位对应的节点中是否存在实节点;
和/或,对所述外部位图序列进行压缩,设置索引长度M2,所述外部位图序列每M2位对应一索引值,指示是否存在以该M2位对应的子节点为根节点的大树节点。
6.如权利要求5所述的方法,其特征在于,
所述根据该数据包的源地址和目的地址,分别查找对应的位图包括:
A、将所述数据包的源地址或目的地址按所述搜索步长N进行分割,得到若干段地址,最后一段地址不足N位时,补0;
B、提取初始N位地址,查找第一级大树节点,得到匹配的报文分类规则集,其中,第一级大树节点其第一层节点为二叉树的根节点;判断该N位地址是否存在对应的下一级大树节点,如果存在,提取后续N位地址,执行步骤C;否则,查找结束,得到匹配结果;
C、根据当前提取的N位地址查找对应的下一级大树节点,得到匹配的报文分类规则集;判断该后续N位地址是否存在对应的下一级大树节点,如果存在,继续提取后续N位地址,返回步骤C;否则,查找结束,得到匹配结果。
7.如权利要求6所述的方法,其特征在于,其中,根据N位地址查找大树节点时,首先查找大树节点的内部位图序列的索引值,根据索引值进一步查找内部位图序列。
8.如权利要求1所述的方法,其特征在于,所述根据该数据包的源地址和目的地址,分别查找对应的位图,得到两个匹配结果,根据这两个匹配结果和该数据包的其它信息,得到该数据包的报文分类规则包括:
提取当前数据包的六元组,记录原始规则集中的默认规则;根据源地址和目的地址分别查找对应的位图,得到两个匹配结果,将得到的两个匹配结果进行“与”运算,之后将相与所得的匹配规则进行优先级从高到低的排序,与所述六元组的其它信息进行匹配,将匹配到的最高优先级作为该数据包的报文分类规则;如果没有查找到匹配的优先级,则将默认规则作为该数据包的报文分类规则。
9.一种报文分类系统,其特征在于,包括:
二叉树建立模块,用于以原始规则集中各报文分类规则的源地址和目的地址分别建立二叉树;
存储模块,用于使用位图分别存储所述二叉树;
查找模块,对待分类的数据包,根据该数据包的源地址和目的地址,分别查找对应的位图,得到匹配结果,根据匹配结果和该数据包的其它信息,得到该数据包的报文分类规则。
10.如权利要求9所述的系统,其特征在于,所述存储模块包括:
步长设置单元,用于设置搜索步长N,N为正整数;
转换单元,用于从所述二叉树的根节点开始,将所述二叉树划分为若干级大树节点,其中,每个大树节点包括所述二叉树的N层,该N层中,下一层的节点为上一层的节点的子节点,且每个大树节点的第一层包含1个节点,该节点称为该大树节点的根节点,下一级大树节点的根节点为上一级大树节点包含的最后一层节点的子节点;
位图序列建立单元,用于为每个大树节点建立内部位图序列和外部位图序列,所述内部位图序列用于指示所述大树节点包括的各节点的位置和该节点是否为实节点,其中,实节点中包含优先级信息;所述外部位图序列用于指示所述大树节点下是否存在下一级大树节点及下一级大树节点与当前大树节点的位置信息。
11.如权利要求10所述的系统,其特征在于,
所述位图序列建立单元包括内部位图序列建立子单元和外部位图序列建立子单元,其中:
所述内部位图序列建立子单元,用于按如下方式建立2^N-1位的内部位图序列:对每个大树节点,从该大树节点的第一层开始,每层从左到右遍历该大树节点包括的每一个节点,对每个节点,使用一个比特表示该节点是否为实节点,得到该大树节点的内部位图序列;
所述外部位图序列建立子单元,用于按如下方式建立2^N位的外部位图序列:对大树节点最后一层各节点对应的子节点,从左到右遍历,对每个子节点,使用一个比特表示是否存在以该子节点作为根节点的大树节点,得到该大树节点的外部位图序列。
12.如权利要求10或11所述的系统,其特征在于,所述位图序列建立单元还包括压缩子单元,
所述压缩子单元,用于所述对每个大树节点的内部位图序列进行压缩,设置索引长度M1,所述内部位图序列每M1位对应一索引值,指示该M1位对应的节点中是否存在实节点;和/或,对所述外部位图序列进行压缩,设置索引长度M2,所述外部位图序列每M2位对应一索引值,指示是否存在以该M2位对应的子节点为根节点的大树节点。
13.如权利要求12所述的系统,其特征在于,
所述查找模块包括分割单元和查找单元,其中:
所述分割单元,用于将所述数据包的源地址或目的地址按所述搜索步长N进行分割,得到若干段地址,最后一段地址不足N位时,补0;
所述查找单元,提取初始N位地址,查找第一级大树节点,得到匹配的报文分类规则集,其中,第一级大树节点其第一层节点为二叉树的根节点;判断该N位地址是否存在对应的下一级大树节点,如果不存在,查找结束,得到匹配结果;如果存在,提取后续N位地址,查找对应的下一级大树节点,重复执行直到不存在对应的下一级大树节点,得到匹配结果。
14.如权利要求13所述的系统,其特征在于,其中,所述查找单元根据N位地址查找大树节点时,首先查找大树节点的内部位图序列的索引值,根据索引值进一步查找内部位图序列。
CN2010101211406A 2010-02-05 2010-02-05 一种报文分类方法和系统 Pending CN102148746A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2010101211406A CN102148746A (zh) 2010-02-05 2010-02-05 一种报文分类方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2010101211406A CN102148746A (zh) 2010-02-05 2010-02-05 一种报文分类方法和系统

Publications (1)

Publication Number Publication Date
CN102148746A true CN102148746A (zh) 2011-08-10

Family

ID=44422758

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2010101211406A Pending CN102148746A (zh) 2010-02-05 2010-02-05 一种报文分类方法和系统

Country Status (1)

Country Link
CN (1) CN102148746A (zh)

Cited By (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102420831A (zh) * 2011-12-16 2012-04-18 清华大学 一种多域网包分类方法
WO2016023232A1 (en) * 2014-08-15 2016-02-18 Hewlett-Packard Development Company, L.P. Memory efficient packet classification method
CN107948091A (zh) * 2017-11-02 2018-04-20 中国科学院声学研究所 一种网包分类的方法及装置
CN108123872A (zh) * 2017-12-21 2018-06-05 国网浙江省电力有限公司电力科学研究院 面向电力物联网的流量分类和转发方法及系统
WO2018196794A1 (en) * 2017-04-26 2018-11-01 Huawei Technologies Co., Ltd. Packet batch processing with graph-path based pre-classification
CN109194536A (zh) * 2018-07-27 2019-01-11 北京奇虎科技有限公司 一种网络流量过滤方法、装置及终端
CN109388707A (zh) * 2017-08-11 2019-02-26 腾讯科技(深圳)有限公司 短文本分类方法及装置
CN109905413A (zh) * 2019-04-30 2019-06-18 新华三信息安全技术有限公司 一种ip地址的匹配方法及装置
WO2019128740A1 (zh) * 2017-12-27 2019-07-04 华为技术有限公司 一种报文处理方法和装置
CN110474929A (zh) * 2019-09-27 2019-11-19 新华三信息安全技术有限公司 一种冗余规则检测方法及装置
CN111241138A (zh) * 2020-01-14 2020-06-05 北京恒光信息技术股份有限公司 数据匹配方法及装置
CN111327546A (zh) * 2020-02-25 2020-06-23 杭州迪普科技股份有限公司 一种报文转发的方法及装置
CN112307033A (zh) * 2020-11-23 2021-02-02 杭州迪普科技股份有限公司 数据包文件的重构方法、装置及设备
CN112367262A (zh) * 2020-08-20 2021-02-12 国家计算机网络与信息安全管理中心 一种五元组规则的匹配方法及装置
CN113282624A (zh) * 2021-05-25 2021-08-20 北京达佳互联信息技术有限公司 规则匹配方法、装置、电子设备及存储介质
WO2021218854A1 (zh) * 2020-04-27 2021-11-04 深圳市中兴微电子技术有限公司 报文分类方法及装置、电子设备、可读介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101345707A (zh) * 2008-08-06 2009-01-14 北京邮电大学 一种实现IPv6报文分类的方法及设备

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101345707A (zh) * 2008-08-06 2009-01-14 北京邮电大学 一种实现IPv6报文分类的方法及设备

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
刘宏义: "IPv6快速路由查找算法分析与研究", 《微电子学与计算机》 *
马思瑶: "基于子树分割的IPv6路由查找技术研究", 《万方数据库》 *

Cited By (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102420831B (zh) * 2011-12-16 2014-07-02 清华大学 一种多域网包分类方法
CN102420831A (zh) * 2011-12-16 2012-04-18 清华大学 一种多域网包分类方法
US10462062B2 (en) 2014-08-15 2019-10-29 Hewlett Packard Enterprise Development Lp Memory efficient packet classification method
WO2016023232A1 (en) * 2014-08-15 2016-02-18 Hewlett-Packard Development Company, L.P. Memory efficient packet classification method
WO2018196794A1 (en) * 2017-04-26 2018-11-01 Huawei Technologies Co., Ltd. Packet batch processing with graph-path based pre-classification
US10439930B2 (en) 2017-04-26 2019-10-08 Futurewei Technologies, Inc. Packet batch processing with graph-path based pre-classification
CN109388707B (zh) * 2017-08-11 2022-12-30 腾讯科技(深圳)有限公司 短文本分类方法及装置
CN109388707A (zh) * 2017-08-11 2019-02-26 腾讯科技(深圳)有限公司 短文本分类方法及装置
CN107948091A (zh) * 2017-11-02 2018-04-20 中国科学院声学研究所 一种网包分类的方法及装置
CN107948091B (zh) * 2017-11-02 2020-04-14 中国科学院声学研究所 一种网包分类的方法及装置
CN108123872A (zh) * 2017-12-21 2018-06-05 国网浙江省电力有限公司电力科学研究院 面向电力物联网的流量分类和转发方法及系统
WO2019128740A1 (zh) * 2017-12-27 2019-07-04 华为技术有限公司 一种报文处理方法和装置
US11134129B2 (en) 2017-12-27 2021-09-28 Huawei Technologies Co., Ltd. System for determining whether to forward packet based on bit string within the packet
CN109194536A (zh) * 2018-07-27 2019-01-11 北京奇虎科技有限公司 一种网络流量过滤方法、装置及终端
CN109905413A (zh) * 2019-04-30 2019-06-18 新华三信息安全技术有限公司 一种ip地址的匹配方法及装置
CN110474929A (zh) * 2019-09-27 2019-11-19 新华三信息安全技术有限公司 一种冗余规则检测方法及装置
CN110474929B (zh) * 2019-09-27 2021-06-22 新华三信息安全技术有限公司 一种冗余规则检测方法及装置
CN111241138A (zh) * 2020-01-14 2020-06-05 北京恒光信息技术股份有限公司 数据匹配方法及装置
CN111241138B (zh) * 2020-01-14 2024-02-06 北京恒光信息技术股份有限公司 数据匹配方法及装置
CN111327546A (zh) * 2020-02-25 2020-06-23 杭州迪普科技股份有限公司 一种报文转发的方法及装置
WO2021218854A1 (zh) * 2020-04-27 2021-11-04 深圳市中兴微电子技术有限公司 报文分类方法及装置、电子设备、可读介质
CN112367262A (zh) * 2020-08-20 2021-02-12 国家计算机网络与信息安全管理中心 一种五元组规则的匹配方法及装置
CN112307033A (zh) * 2020-11-23 2021-02-02 杭州迪普科技股份有限公司 数据包文件的重构方法、装置及设备
CN112307033B (zh) * 2020-11-23 2023-04-25 杭州迪普科技股份有限公司 数据包文件的重构方法、装置及设备
CN113282624A (zh) * 2021-05-25 2021-08-20 北京达佳互联信息技术有限公司 规则匹配方法、装置、电子设备及存储介质
CN113282624B (zh) * 2021-05-25 2024-05-14 北京达佳互联信息技术有限公司 规则匹配方法、装置、电子设备及存储介质

Similar Documents

Publication Publication Date Title
CN102148746A (zh) 一种报文分类方法和系统
CN101345707B (zh) 一种实现IPv6报文分类的方法及设备
CN102142009B (zh) 一种正则表达式匹配的方法及装置
CN102484610B (zh) 路由表建立方法和装置及路由表查找方法和装置
CN107291785A (zh) 一种数据查找方法及装置
CN101630323B (zh) 确定自动机的空间压缩方法
CN102308533A (zh) 对报文进行分类的方法及装置
CN103457700B (zh) Ndn/ccn网络中的数据包内容名称编码压缩方法
CN104283567A (zh) 一种名称数据的压缩、解压缩方法及设备
CN104579941A (zh) 一种OpenFlow交换机中的报文分类方法
CN108509505A (zh) 一种基于分区双数组Trie的字符串检索方法及装置
CN104636349B (zh) 一种索引数据压缩以及索引数据搜索的方法和设备
US10462062B2 (en) Memory efficient packet classification method
CN105515997B (zh) 基于bf_tcam实现零范围扩张的高效范围匹配方法
CN101594319A (zh) 表项查找方法和装置
CN108197313B (zh) 通过16位Trie树实现空间优化的词典索引方法
CN104778258A (zh) 一种面向协议数据流的数据抽取方法
Meiners et al. Hardware based packet classification for high speed internet routers
CN101241499B (zh) 在高内存访问位宽下实现Patricia查找树的方法
CN102045412B (zh) IPv6地址前缀压缩存储方法及设备
CN101848248B (zh) 一种规则查找方法和装置
CN107330094A (zh) 动态存储键值对的布鲁姆过滤器树结构及键值对存储方法
CN107943826A (zh) 一种适用于多类字段的高速数据流分类装置及方法
Prezza On locating paths in compressed tries
CN105718521A (zh) 一个基于Wavelet Tree的网络数据包索引系统

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C12 Rejection of a patent application after its publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20110810