CN101340363A - 一种实现多元数据包分类的方法及设备 - Google Patents
一种实现多元数据包分类的方法及设备 Download PDFInfo
- Publication number
- CN101340363A CN101340363A CNA2007101610654A CN200710161065A CN101340363A CN 101340363 A CN101340363 A CN 101340363A CN A2007101610654 A CNA2007101610654 A CN A2007101610654A CN 200710161065 A CN200710161065 A CN 200710161065A CN 101340363 A CN101340363 A CN 101340363A
- Authority
- CN
- China
- Prior art keywords
- code block
- rule
- address
- destination address
- memory space
- 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
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
一种实现多元数据包分类的方法及设备,具体包括:基于二维包分类算法构建匹配源/目的地址的数据结构,获得所有匹配的规则组并分别编码,以生成对应的代码块,通过该代码块描述规则中除所述源地址和目的地址外的其他字段;采用所述的二维包分类算法对数据包的源地址和目的地址进行匹配获得与所述数据包的源地址和目的地址匹配的一组规则所对应的代码块;之后,采用解释器解释执行所述代码块,获得数据包分类结果。本发明实施例的实现降低了多元数据包分类过程中对内存空间的需求,并提高了包分类速度。
Description
技术领域
本发明涉及网络通信技术领域,尤其涉及一种网络中实现多元数据包分类的方法及装置。
背景技术
数据包分类技术是网络提供更优质、更安全服务的基础。其中的快速包分类技术则是实现高速路由器的关键技术之一。现有技术中的包分类方法中,一种称为RFC(Recursive Flow Classification递归流分类)的包分类方法是目前已知的软件算法中速度最快的包分类方法。所述的递归流分类RFC方法的工作原理是通过构建RFC缩减树,将包头中参与分类的S长度比特数据映射到相应的多个阶段的等价类上,其中每个映射称为一次缩减,以达到加快分类速度的目的。
下面将结合附图1对上述RFC算法进行详细描述。在描述过程中假设采用的规则集包含有4条规则,具体如表1所示:
表1
Rule# | F1 | F2 | F3 | Action |
R1 | 001 | 010 | 011 | Permit |
R2 | 001 | 100 | 011 | Deny |
R3 | 01* | 100 | *** | Permit |
R4 | *** | *** | *** | Permit |
首先,根据表1给定的规则集构建一颗二阶段RFC缩减树,其中,规则集的每条规则中包含3个域,每个域值长度为3比特。则,二阶段RFC缩减树的构建过程如下:
Phase0阶段,将规则集的3个域(F1-F3)分别映射到图1中对应的3个预处理表(Chunk0-Chunk2)中。其中,每张预处理表的表项序号表示与该预处理表对应的域的一种可能取值,例如:Chunk0的表项表项序号“0”表示域F1的取值为‘000’。而每张预处理表的表项内容则为一个eqID号,所述的eqID号存储在与该预处理表相关联的eqID表中,根据相应的CBM位串确定。所述的CBM位串长度与规则集中的规则数相同,且CBM位串由高到低的每一位顺序对应一个规则号。以Chunk0中的eqID号的确定为例:表项序号“0”对应的域F1取值为‘000’,检查每条规则,只有R4的F1域取值与‘000’匹配,则CBM位串中与R4对应的位置‘1’(表示匹配表项序号“0”对应的域F1的取值‘000’),其余位置‘0’,即表项序号“0”对应的CBM位串为‘0001’。该位串第一次出现,因此将其填入Chunk0对应的eqID表的首位,并分配eqID号为‘0’。同理,表项序号“1”对应的域F1的取值为‘001’,相应的CBM位串为‘1101’,将该CBM位串填入eqID表的第二位,并分配eqID号为‘1’。按照同样的方法,依次各表项序号对应的eqID号。
Phase 1阶段,计算Phase 0阶段中各eqID表的交叉乘积表(Cross-Producting Table,CPT)。其中,所述的交叉乘积表的每个表项序号代表了eqID0-eqID2的一种组合(eqID0eqID1eqID2),例如表A的表项序号“0”代表(eqID0eqID1eqID2)的组合‘000’。而所述的交叉乘积表的表项内容为一个新的eqID号,所述的新的eqID号存储在与交叉乘积表对应的eqID表中,交叉乘积表中的eqID号通过以下方法获得:对于每一个表项序号,将该表项序号所代表的eqID组合中各eqID号对应的CBM位串按位相与,得到一个新的CBM位串;若该CBM位串在eqID表中已出现过,则将其对应的eqID号填入表项,否则分配一个新的eqID号,并在eqID表中添加一条新的纪录。例如,表A的表项“0”代表(eqID0eqID1eqID2)=‘000’,对应的3个CBM位串分别为‘0001’,‘0001’和‘0011’,按位相“与”得到新的CBM位串为‘0001’,分配eqID为‘0’。
完成上述二阶段缩减树的构建,即可根据该二阶段缩减树对数据包进行分类,以数据包头P(010,100,011)的查找过程为例,包括:
Phase 0阶段,用P1=010,P2=100和P3=011分别索引Chunk 0-Chunk2,查找匹配的eqID号,得到(eqID0eqID1eqID2)=221。
Phase 1阶段,按照Index=eqID0*3*2+eqID1*2+eqID2查找交叉乘积表A,匹配表项序号“17”,查表A得到eqID号=3,其对应的CBM位串为‘0011’,表示规则R3和R4均匹配,但按照最佳匹配原则,数据包匹配规则R3。
在实现本发明的过程中,发明人发现现有技术中至少存在如下问题:
1)RFC算法对内存的需求随着规则集的规模及要匹配的包头域的数量急剧增大。针对多元数据包如果采用RFC方法进行分类,将占用过多的内存资源,影响系统性能。
2)多核处理器构架是未来处理器技术的发展方向,但现有技术中的数据包分类方法都是基于通用处理器实现的,还没有基于多核处理器构架设计的数据包分类方法。
发明内容
本发明的实施例提供了一种实现多元数据包分类的方法及设备,使得多元数据包的分类过程中降低了对内存空间的需求,并保证较快的包分类速度。
为解决上述技术问题,本发明实施例首先通过构建基于二维包分类算法的数据结构找到所有可能匹配源地址和目的地址的规则组,对所述的各组规则分别编码并生成对应的代码块,通过所述代码块描述规则中除所述源地址和目的地址外的其他字段,完成对数据的预处理过程;然后,采用所述的二维包分类算法对待分类数据包的源地址和目的地址进行匹配获得与所述待分类数据包的源地址和目的地址匹配的一组规则所对应的代码块;最后,采用解释器解释执行所述代码块,对待分类数据包中除所述源地址和目的地址外的其他字段进行匹配,获得最终的数据包分类结果。
由上述本发明的实施例提供的技术方案可以看出,由于采用基于二维包分类算法数据结构和执行代码块寻找匹配规则的数据包分类方法,因此,本发明实施例大大降低了对内存空间的需求,并提高了多元数据包分类的速度。
附图说明
图1为现有技术中RFC包分类方法的示意图;
图2为本发明实施例提供的处理过程示意图;
图3为本发明实施例提供的多元数据包分类过程的示意图;
图4为本发明实施例构造缩减树的过程示意图;
图5为本发明实施例中对规则进行编码的过程示意图;
图6为本发明实施例中的指令格式的结构示意图;
图7为本发明实施例提供的多元数据包分类设备的结构示意图。
具体实施方式
在本发明实施例中,为了降低多元数据包分类过程中对内存空间的需求,并保证较快的包分类速度,提供了一种实现多元数据包分类的技术方案,通过分析实际的包分类规则集,发现匹配一对给定的<源IP地址,目的IP地址>的规则数,在绝大多数情况下(99%)不多于5个,因此,本发明实施例中提出可将多元数据包分类问题划分为两个子问题,即1)用数据包的源IP地址和目的IP地址找到所有匹配的规则;2)在匹配的规则中进一步匹配其它字段,最终找到优先级最高的分类规则。
本发明实施例提供的针对多元数据包分类的处理方案如图2所示,具体可以包括以下步骤:
步骤1,通过基于二维包分类算法构建数据结构找到所有可能匹配源地址和目的地址的规则组,对所述的规则组分别编码并生成对应的代码块,通过该代码块描述规则中除所述源地址和目的地址外的其他字段;
该步骤为本发明实施例的预处理过程,其中,生成对应的代码块的处理具体可以包括:首先,对各组规则中的每条规则编码为一条指令,生成每组规则对应的代码块,并为所述代码块分配相应的存储空间;之后,将各代码块存储空间首地址存放到所述数据结构中对应的各组规则指向的位置;
步骤2,采用二维包分类算法对待分类数据包的源地址和目的地址进行匹配获得与所述待分类数据包的源地址和目的地址匹配的一组规则所对应代码块;
步骤3,采用解释器解释执行所述代码块,对待分类数据包中除所述源地址和目的地址外的其他字段进行匹配,获得数据包分类结果。
该步骤中具体可以包括:解释器首先获得所述数据结构中的存储空间首地址;之后,根据所述存储空间首地址载入对应存储空间中的代码块,并执行该代码块,以获得匹配的规则号。
为提高多元数据包的分类速度,在上述本发明实施例中,所述的二维包分类算法可以但不仅限于应用递归流分类RFC算法。其中,在采用所述的RFC算法的本发明应用实施例中,其运行速度与RFC算法相当,但大大降低了对内存空间的需求。
以采用RFC算法及解释器执行对IP数据包进行处理为例,本发明实施例在实现过程中具体可以包括以下的预处理过程和两个阶段查找过程:
预处理过程,如图4、5所示,首先生成RFC缩减树数据结构,在完成了基于源/目的IP地址构造缩减树的操作后,还需要将通过RFC缩减树匹配获得的所有可能的规则列表进行编码,以生成对应的代码块。其中,每一规则列表被编码成特定的指令,如CISC指令等,通过相应的指令描述规则中除源IP地址和目的IP地址以外的其它字段;即在构造RFC缩减树后,需要对得到所有规则列表中的规则进行编码,并组织为相应的代码块,如空间连续的代码块等;
在该过程中生成RFC缩减树数据结构与现有技术中的RFC算法不同的是:在最后一个交叉乘积表中,并未保存最后匹配的规则号,而是保存将在第二阶段查找过程被执行的代码块的存储空间首地址;
第一阶段查找过程,如图3所示,使用与RFC算法相似的缩减树处理源/目的IP地址,即利用RFC算法进行源/目的IP地址的匹配处理,从而获得匹配的规则列表所对应的代码块存储空间首地址,该匹配的规则列表中包含一个或多个规则,即采用RFC缩减树对待分类数据包的<源IP地址,目的IP地址>进行匹配,找到匹配这一对地址的所有规则;
第二阶段查找过程,从第一阶段查找过程获得的匹配的规则列表中找到最后匹配的规则,即执行第一阶段查找过程得到的相应代码块获得匹配结果,具体可以利用从RFC缩减树查到的首地址装载目标代码块,并由解释器执行该代码块,以对待分类数据包中除所述源地址和目的地址外的其他字段进行匹配,返回与输入数据包匹配的规则号(Rule ID)作为最后的匹配结果。
上处理过程算法可以简称为TIC(Two-stage Interpreting based Classification,基于解释的二阶段包分类算法),采用TIC实施包分类查找过程前,须完成预处理过程。
参照图4和图5所示,上述本发明实施例中预处理处理过程具体可以包括以下处理过程:
(1)在缩减树phase 2交叉乘积表(CPT10)中表项设置为指向其位串表(eqID20)中相应表项入口;为每个位串分配一块存储空间,为提高访问效率,相应的存储空间可以与cache line(高速缓冲存储器存储界)空间大小相同并保持数据对齐,将各个位串对应的存储空间的首地址填入所有指向该位串的交叉乘积表的表项中;
(2)完成相应的存储空间的分配后,则对位串表示的待处理规则进行编码,相应的编码过程可以包括:
从位串的最高位(表示最高优先级的规则,然后优先级递减)开始依次寻找第一阶段匹配的规则,根据规则的匹配模式和指令规范进行编码,之后将指令字节码依次压入分配到的代码块空间中;
代码块的空间大小为一个cache line(如64bytes或32bytes),当压入一定数量的指令后代码块空间可能会出现溢出,若出现溢出,则需要分配一个新的代码块空间,并将新代码块空间的首地址作为‘GOTO’指令的操作数,将GOTO指令放到上一代码块最后4bytes,并用NOP指令填满GOTO指令和上一代码块最后一条指令之间的空隙;
继续在新代码块空间中压入指令,重复以上过程直到位串表示的所有规则都被编码且压入代码块。
当eqID20中所有的位串都被处理后,如图3所示,CPT10中的所有表项也均被填入对应的代码块首地址,此时,便可以释放eqID20的存储空间,本发明实施例的预处理过程结束。
在上述预处理过程中,需要使用相应的指令规范进行编码,该指令规范具体可以但不限于如表2和表3所示:
表2.TIC算法中指令规范说明
指令名称 | 指令码 | Operand0 | Operand1 | Operand2 | Operand3 | Operand4 | 指令长度 |
NOP | 0x00 | - | - | - | - | - | 4bytes |
EM_WC_EM | 0x01 | Protocol | Des.Port | - | - | - | 8bytes |
EM_WC_WC | 0x02 | Protocol | - | - | - | - | 4bytes |
EM_WC_AR | 0x03 | Protocol | Des.Port1 | Des.Port2 | - | - | 8bytes |
EM_WC_HI | 0x04 | Protocol | - | - | - | - | 4bytes |
EM_EM_WC | 0x05 | Protocol | Src.Port | - | - | - | 8bytes |
EM_EM_EM | 0x06 | Protocol | Src.Port | Des.Port | - | - | 8bytes |
EM_AR_WC | 0x07 | Protocol | Src.Port1 | Src.Port2 | - | - | 8bytes |
GOTO3 | 0x08 | - | - | - | - | - | 4bytes |
WC_WC_EM | 0x09 | - | Des.Port | - | - | - | 8bytes |
WC_WC_WC | 0x0A | - | - | - | - | - | 4bytes |
WC_WC_AR | 0x0B | - | Des.Port1 | Des.Port2 | - | - | 8bytes |
WC_WC_HI | 0x0C | - | - | - | - | - | 4bytes |
WC_EM_WC | 0x0D | - | Src.Port | - | - | - | 8bytes |
WC_EM_EM | 0x0E | - | Src.Port | Des.Port | - | - | 8bytes |
WC_AR_WC | 0x0F | - | Src.Port1 | Src.Port2 | - | - | 8bytes |
EM_WC_LO | 0x10 | Protocol | - | - | - | - | 4bytes |
EM_EM_AR | 0x11 | Protocol | Src.Port | - | Des.Port1 | Des.Port2 | 12bytes |
EM_EM_HI | 0x12 | Protocol | Src.Port | - | - | - | 8bytes |
EM_EM_LO | 0x13 | Protocol | Src.Port | - | - | - | 8bytes |
EM_AR_EM | 0x14 | Protocol | Src.Port1 | Src.Port2 | Des.Port | - | 12bytes |
EM_AR_AR | 0x15 | Protocol | Src.Port1 | Src.Port2 | Des.Port1 | Des.Port2 | 12bytes |
EM_AR_HI | 0x16 | Protocol | Src.Port1 | Src.Port2 | - | - | 8bytes |
EM_AR_LO | 0x17 | Protocol | Src.Port1 | Src.Port2 | - | - | 8bytes |
EM_HI_WC | 0x18 | Protocol | - | - | - | - | 4bytes |
EM_HI_EM | 0x19 | Protocol | Des.Port | - | - | - | 8bytes |
EM_HI_AR | 0x1A | Protocol | Des.Port1 | Des.Port2 | - | - | 8bytes |
EM_HI_HI | 0x1B | Protocol | - | - | - | - | 4bytes |
EM_HI_LO | 0x1C | Protocol | - | - | - | - | 4bytes |
表3.TIC算法中指令规范说明(续)
基于该表2和表3,根据规则的匹配模式和指令规范进行编码的过程如图5所示,在该过程中,相应的规则的匹配模式可以为通配、高段端口、低段端口、任意范围匹配或精确匹配等。
本发明实施例中,为尽量压缩存储空间并提高指令执行效率,在第一阶段具体可以采用CISC指令格式中包含一个8比特的操作符和一个16比特的规则号,其中操作符用于指示该指令的具体操作类型,规则号则用于标识该指令所对应的规则(在规则成功匹配后将会被指令返回)。另外,本发明实施例中提供了3种类型的CISC指令格式,如图6所示,这3种类型的CISC指令格式的长度分别为4字节、8字节和16字节,其中,4字节的CISC指令格式中还包括一个8比特的operand0;8字节的CISC指令格式中还包括一个8比特的operand0,可选的包括一个16比特的operand1;16字节的CISC指令格式中还包括一个8比特的operand0,一个16比特的operand1和一个16比特的operand3,可选的包括一个16比特的operand2,和/或一个16比特的operand4。其中,operand0用于协议号的匹配计算,operand1-operand4用于源/目的端口号的匹配计算。
进一步的,在本发明实施例中,将规则集中端口号的匹配模式可以划分为5类,包括:WC(Wildcard通配),HI([1024:65535]高段端口)LO([0:1023]低段端口),AR(Arbitrary Range任意范围匹配)和EM(Exact Match精确匹配);将协议号的匹配模式分为两类,分别为:WC和EM。同时,本发明实施例为规则的每一种匹配模式分配相应的操作符。具体的每种匹配模式对应的操作符可查阅表2、表3得到。
下面对上述本发明实施例中第一阶段查找的处理过程进行说明,在第一阶段查找过程可以采用的处理过程具体可以包括:
如图3所示,使用与RFC算法相似的缩减树处理源/目的IP地址,即利用RFC算法进行源/目的IP地址的匹配处理,从而获得匹配的规则列表所对应的代码块地址,该匹配的规则列表中包含一个或多个规则,即采用RFC缩减树对数据包的<源IP地址,目的IP地址>进行匹配,找到匹配这一对地址的所有规则。
下面再对上述本发明实施例中第二阶段查找的处理过程进行说明,在第二阶段查找过程可以采用的处理过程具体可以包括:
在第一阶段查找结束后,解释器程序将可以得到待执行的代码块首地址,此时,解释器将载入以该首地址开始的代码块;载入代码块后,解释器开始解释并执行当前指令字节码,若输入的网络包头中协议号、源和目的端口号皆在指令执行过程中符合操作符和相应操作数所定义的匹配语义,则执行结果返回true,即表示查找过程搜索到最佳匹配规则,解释器返回该规则的ID;否则,解释器继续解释执行下一条指令;若当前代码块中所有指令的执行结果均没有返回true(即均返回false),则相应的GOTO指令将被执行,返回附加代码块首地址。根据该地址,解释器载入新的代码块并依次执行该代码块中指令直到查找到最佳匹配规则。
相应的上述处理过程具体可以通过执行以下代码段实现:
Input:Ei//address of the first encoded block(输入代码块首地址Ei)
Output:ID//id of the best matching rule(输出最匹配的规则ID)
------------------------------------------------
1:entry=Ei;(输入Ei)
2:fetch(entry);//read the block(读代码块)
3:while(getInstruction()){
//get an instruction of the block(从代码块中顺序取出一条指令)
4: result=decode_execute();(执行当前指令字节码)
5: if(result)
6: return ID;(返回规则ID)
7: else
8: continue;(执行下一条指令)
9:}
10: entry=Ei+1;//another block must be fetched(返回代码块首地址)
11: goto 2;(返回第2步)
在上述处理过程中,对于不同的存储架构,相应的载入代码块具有不同的含义:在具备cache存储架构中,需要将代码块读入到cache;当不具备cache时,则可以将代码块读入片内存储器,如对于Intel IXP2800 Network Processor(网络处理器),可以将代码块读入Local Memory(本地存储器)。
为便于对本发明实施例的理解,下面将结合附图对本发明实施例的具体实现方案进行详细描述。
本实现方案以基于5元组<源IP地址,目的IP地址,协议,源端口,目的端口>的IP数据包的分类过程为例,设定规则集如表4所示,为便于描述,不妨将所述的分类过程分为如图2所示的数据预处理阶段及规则匹配阶段,其中:
表4.一个含有5条规则的5域规则集
Rule# | Src.IP | Des.IP | Protocol | Src.Port | Des.Port | Action |
R0 | 0.83.0.77 | 0.0.4.6 | 17 | * | 80 | Act0 |
R1 | 0.83.1.* | 0.0.4.6 | 17 | * | ≥1024 | Act1 |
R2 | 0.83.0.77 | *.*.*.* | 6 | 123 | 123 | Act2 |
R3 | 0.83.1.* | 0.0.4.6 | 17 | * | [20,30] | Act3 |
R4 | *.*.*.* | *.*.*.* | * | * | * | Act4 |
数据预处理阶段
首先根据表4提供的规则集构建如图4所示的RFC缩减树:
Phase0阶段,将源IP地址(Src.IP)的第1、2字节和源IP地址的第3、4字节,目的IP地址(Des.IP)的第1、2字节和目的IP地址的第3、4字节分别映射到预处理表Chunk0-Chunk3中。其中,每张预处理表的表项序号表示与该预处理表对应的地址字节的一种可能取值,而每张预处理表的表项内容则为一个eqID号。
Phase1阶段,计算Phase0阶段得到的eqID01表和eqID02表的交叉成绩表CPT00,及eqID03表和eqID04表的交叉乘积表CPT01,并分别生成对应的eqID10表和eqID11表。
Phase2阶段,计算Phase1阶段得到的交叉乘积表CPT00和CPT01的交叉乘积表CPT10,并生成对应的eqID20表。
生成关于<源IP地址,目的IP地址>的RFC缩减树。
如图4所示,在eqID20构造完成之后,得到4个不同的CBM位串‘00001’,‘00101’,‘10101’和‘01011’,为所述的4个CBM位串分别分配存储空间,并将存储空间的首地址填入表CPT10中对应的表项中。另外,所述的4个CBM位串分别表示4个规则列表:[R4],[R2,R4],[R0,R2,R4]和[R1,R3,R4],然后对4个规则列表分别编码。以CBM位串‘01011’为例,即对规则列表[R1,R3,R4]的规则R1、R3、R4顺序编码,并依次压入CBM位串‘01011’对应的存储空间,其具体编码过程如下:
查表2、表4可知R1规则中的协议号(Protocol)‘17’为精确匹配,源端口号(Src.Port)‘*’为通配,目的端口号(Des.Port)‘≥’为高段端口,故R1的指令操作符为‘EM_WC_HI’,得到具体编码指令‘0000 0100 00010001 0000 0000 0000 0001’(即0x04),并将该指令压入CBM位串‘01011’对应的存储空间中,然后,将R3和R4按照同样的方法进行编码并依次压入代码块。其中,R3的指令操作符为‘EM_WC_AR’,对应的编码指令为‘00000011 0001 0001 0000 0000 0000 0011 0000 0000 0001 1110 0000 00000001 0100’(即0x03),R4的指令操作符为‘WC_WC_WC’,对应的编码指令为‘0000 1010 0000 0000 0000 0000 0000 0100’(即0x0A)。另外,查表2可知R1,R3和R4编码后的指令长度分别为4字节,8字节和4字节,在代码块中共占用16bytes空间。由于16bytes小于代码块的64bytes空间大小,因此不需要申请新的存储空间,并且用操作符‘NOP’对应的指令将存储空间填满。
完成对所述的RFC缩减树中表eqID20中各CBM位串表示的规则列表的编码后,释放表eqID20的存储空间。
在上述应用实施例中,可以但不仅限于通过下述代码段对所述的规则列表进行编码:
TIC_Preprocessor(Classifier C){
1:C_IP_Ad_Pair=getIPAdPair(C);//从规则集中取出源/目的IP地址域
2:C_Port_Protocol=getPortProtocol(C);//从规则集中取出协议和源/目的端口号域
3:Code_Port_Protocol=encode(C_Port_Protocol);//对每个规则中的协议和源/目的端口号域进行编码
4:setPhase0Chunks(C_IP_Ad_Pair);//将源/目的IP地址映射到缩减树的Chunk0~Chunk3中
5:setPhase1Chunks();//通过Chunk0~Chunk1计算得到CPT00和CPT01
6:setPhase2Chunk();//通过CPT00和CPT01计算得到CPT10,并保留eqID20表中的位串信息
7:while(currentBS=getBitStr(eqID20)){//依次从eqID20表中取出位串
8:address=initCodeBlock();//初始化一个新的代码块空间
9:setAddress(CPT10,currentBS,address);//将CPT10表中对应当前位串的所有表项设置为代码块首地址
10:while(currentRule=getRule(currentBS)){//从当前位串中依次得到待匹配的规则号
11:flag=addCode(currentRule,Code_Port_Protocol);//将规则号在Code_Port_Protocol中对应的编码指令加入当前代码块中
12:if(flag==false){//如果当前代码块已经没有足够的空间
13:temple=initCodeBlock();//初始化一个新的附加代码块空间
14:setGoto(temple);//在当前代码块中设置指针指向附加代码块
15:address=temple;
16:addCode(currentRule,Code_Port_Protocol);//将规则号在Code_Port_Protocol中对应的编码指令加入附加代码块中
17:}//if
18:}//while
19:}//while
20:}//TIC_Preprocessor
规则匹配阶段
在本阶段中首先提取待分类数据包的包头信息,并用其中的<源IP地址,目的IP地址>字段在上述的RFC缩减树上进行查找,找出匹配该对地址字段的规则所在的代码块存储空间首地址,然后执行该代码块中的指令,并最终返回匹配的规则号。下面以数据包头P<0.83.1.32,0.0.4.6,17,23,22>为例详细说明所述的规则匹配过程:
步骤1)根据数据包头P中的相应字段83,288,0和1030分别索引表Chunk0-Chunk3,得到(eqID00eqID01eqID02eqID03)=1201,其中‘83’、‘288’、‘0’和‘1030’分别是地址字段‘0.83’、‘1.32’,‘0.0’和‘4.6’对应的十进制字段;
步骤2)按照Index00=eqID00*3+eqID01和Index01=eqID02*2+eqID03分别检索到交叉乘积表CPT01和CPT01的相应表项内容为‘2’和‘1’;
步骤3)按照Index10=eqID10*2+eqID11检索到交叉乘积表CPT10的表项序号‘5’,并读出该表项内的代码块存储空间的首地址;
步骤4)根据步骤3)中得到的首地址,将相应存储空间中的代码块载入到高速缓存器或其它片内储存器,并依次执行上述代码块中的指令,并返回匹配规则号R3,具体可以包括:
首先执行第一条指令‘0000 0100 0001 0001 0000 0000 0000 0001’,其中,第0~7位‘00000100’为操作符,表示该规则的协议匹配模式为精确匹配,源端口匹配规则为通配,目的端口匹配规则为≥1024;第8~15位‘00010001’为操作数,表示协议精确匹配17;第16~31位‘0000000000000001’为该指令所对应的规则号1。执行过程为:(17==17)&&(22>=1024)不成立,return fa/se,即协议号匹配,但目的端口不匹配,故返回‘false’。继续执行下一条指令“0000 0011 0001 0001 0000 0000 00000011 0000 0000 0001 1110 0000 0000 0001 0100”,其中,第0~7位‘00000011’为操作符,表示该规则的协议匹配模式为精确匹配,源端口匹配规则为通配,目的端口匹配规则为范围匹配;第8~15位‘00010001’为操作数,表示协议精确匹配17;第16~31位‘0000000000000011’为该指令对应的规则号3;第32~63位‘0000000000011110 0000000000010100’为操作数,表示目的端口号大于等于20且小于等于30。执行过程为:(17==17)&&(30>=22>=20)成立,return rule/D,即协议号与目的端口均匹配,返回‘3’,表示数据包匹配规则R3,查找结束。
需要指出的是,本发明实施例不仅限于应用于基于5元组IP数据包的分类,还适用于其他多元数据包的分类。对于实现其他多元数据包分类的具体实现方案,本领域的技术人员可以依据上述应用实施例的描述并结合现有技术轻易联想到,因此不再详细描述。
本发明实施例还提供一种多元数据包分类的设备,其结构如图7所示,具体实现结构可以包括:
预处理模块,用于生成基于二维包分类算法查找源地址和目的地址的数据结构,并对由所述数据结构获得的所有可能的规则组进行编码,以生成各组规则对应的代码块,通过所述代码块描述规则中除所述源地址和目的地址外的其他字段;
包头信息提取模块,用于提取待分类的数据包的包头信息;
二维包分类算法匹配模块,用于通过所述二维包分类算法数据结构对所述包头信息提取模块获得的数据包中的源地址和目的地址进行匹配,获得与所述数据包的源地址和目的地址匹配的一组规则所对应代码块的存储空间首地址;
解释器,用于根据所述的存储空间首地址载入所述预处理模块获得的代码块,执行该代码块中的指令,对待分类数据包中除所述源地址和目的地址外的其他字段进行匹配,获得匹配的规则号作为包分类的结果。
为适应不同的存储架构,基于多核多线程处理器体系结构实现的该多元数据包分类设备中解释器在载入所述预处理模块获得的代码块的过程中具体可以将代码块载入到高速缓存器或片内存储器,例如,在具备高速缓存器的情况下,将代码块载入高速缓存器;否则,将代码块载入片内存储器。
本发明实施例的设备还可以包括:首地址存储模块,用于保存所述预处理模块获得的代码块所在的存储空间的首地址,并提供给所述解释器。
上述本发明具体应用实施例与RFC算法相比具有的有益效果包括:
(1)运行速度与RFC相当,但内存需求小得多
这是因为RFC算法对规则集中所有域的匹配均使用缩减树,而缩减树占用内存空间大小随着规则中域的数量增加呈现非线性增长;TIC则仅使用缩减树匹配源/目的IP地址域,其它域的匹配利用解释器进行,从而避免了缩减树占用过多内存空间。实验数据表明,TIC比RFC减少27%-97%的内存需求,平均减少66%。
(2)更新性能好
实验数据表明,TIC比RFC减少50%-97%的规则集更新处理时间,平均减少80%。
(3)适用于不同存储结构的多核多线程架构
这是因为TIC算法充分利用了并行多核体系结构的特点,在提高对CPU计算能力的依赖的同时减少了算法对外部存储器的访问次数,从而合理利用了多核结构中强大的CPU计算能力,避免了存储访问瓶颈。另一方面,解释器能够高效地运行在具备cache或不具备cache的体系结构中,对规则进行编码并分块组织保证了解释器最大限度地访问cache数据,在不具备cache的情况下,算法显式地将指令块读入片内存储器同样可以保证解释器在执行指令期间最大限度访问片内存储器上的数据。
TIC算法在Intel Core 2 Duo X86和Intel IXP2800网络处理器上分别使用4线程和32线程时均获得了10Gbps的分类速度,而且实验数据表明算法具有几乎线性的加速比,这意味着当有更多可用的计算核时,还可以获得更高的分类速度。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
Claims (8)
1、一种实现多元数据包分类的方法,其特征在于,包括:
通过构建基于二维包分类算法的数据结构找到所有可能匹配源地址和目的地址的规则组,对所述的各组规则分别编码并生成对应的代码块,通过所述代码块描述规则中除所述源地址和目的地址外的其他字段;
采用所述的二维包分类算法对待分类数据包的源地址和目的地址进行匹配获得与所述待分类数据包的源地址和目的地址匹配的一组规则所对应的代码块;
采用解释器解释执行所述代码块,对待分类数据包中除所述源地址和目的地址外的其他字段进行匹配,获得数据包分类结果。
2、根据权利要求1所述的方法,其特征在于,所述的生成对应的代码块的处理具体包括:
对各组规则中的每条规则编码为一条指令,生成每组规则对应的代码块,并为所述代码块分配相应的存储空间;
将各代码块存储空间首地址存放到所述数据结构中与其对应的一组规则指向的位置。
3、根据权利要求2所述的方法,其特征在于,解释器解释执行所述代码块的过程具体包括:
获得所述数据结构中的存储空间首地址;
根据所述存储空间首地址载入对应存储空间中的代码块,并执行该代码块。
4、根据权利要求3所述的方法,其特征在于,该方法还包括:
在具备高速缓存器的处理器结构中,将所述的代码块载入高速缓存器;
或者,
在不具备高速缓存器的处理器结构中,将所述的代码块载入片内存储器。
5、根据权利要求1至4任一项所述的方法,其特征在于,所述的编码的处理过程包括:
按照预定的指令格式对所述各组规则进行编码,所述的指令格式包含操作符、操作数和规则号,其中,所述的操作符用于指示指令的具体操作类型,所述的规则号用于标识指令所对应的规则,所述操作数用于进行协议号、源端口或目的端口的匹配计算。
6、根据权利要求2、3或4所述的方法,其特征在于,为所述代码块分配相应的存储空间的处理包括:
当针对一组规则的编码获得的代码块需要多个存储空间时,则采用操作符‘GOTO’作为从一个存储空间跳转到另一个存储控制的指令。
7、一种实现多元数据包分类的设备,其特征在于,包括:
预处理模块,用于生成基于二维包分类算法查找源地址和目的地址的数据结构,并对由所述数据结构获得的所有可能的规则组进行编码,以生成对应的代码块,通过所述代码块描述规则中除所述源地址和目的地址外的其他字段;
包头信息提取模块,用于提取待分类的数据包的包头信息;
二维包分类算法匹配模块,用于通过所述二维包分类算法数据结构对所述包头信息提取模块获得的数据包中的源地址和目的地址进行匹配,获得与所述数据包的源地址和目的地址匹配的一组规则所对应的代码块;
解释器,用于载入所述预处理模块获得的代码块,执行该代码块中的指令,对待分类数据包中除所述源地址和目的地址外的其他字段进行匹配,获得匹配的规则号作为包分类的结果。
8、根据权利要求7所述的设备,其特征在于,该设备还包括:
首地址存储模块,用于保存所述预处理模块获得的代码块所在的存储空间的首地址,并提供给所述解释器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200710161065A CN101340363B (zh) | 2007-12-24 | 2007-12-24 | 一种实现多元数据包分类的方法及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200710161065A CN101340363B (zh) | 2007-12-24 | 2007-12-24 | 一种实现多元数据包分类的方法及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101340363A true CN101340363A (zh) | 2009-01-07 |
CN101340363B CN101340363B (zh) | 2012-09-19 |
Family
ID=40214321
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200710161065A Expired - Fee Related CN101340363B (zh) | 2007-12-24 | 2007-12-24 | 一种实现多元数据包分类的方法及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101340363B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101500012B (zh) * | 2009-02-27 | 2012-08-22 | 中国人民解放军信息工程大学 | 一种报文分类方法和系统 |
CN102819586A (zh) * | 2012-07-31 | 2012-12-12 | 北京网康科技有限公司 | 一种基于高速缓存的url分类方法和设备 |
CN103841112A (zh) * | 2014-03-18 | 2014-06-04 | 杭州华三通信技术有限公司 | 基于网包分类的分类规则处理方法及装置、匹配装置 |
CN109672623A (zh) * | 2018-12-28 | 2019-04-23 | 大唐软件技术股份有限公司 | 一种报文处理方法和装置 |
CN110083663A (zh) * | 2019-04-09 | 2019-08-02 | 北京中科智营科技发展有限公司 | 一种数据展示的分类优化方法和装置 |
CN111163077A (zh) * | 2019-12-26 | 2020-05-15 | 国家计算机网络与信息安全管理中心 | 一种基于网络处理器实现多维连续掩码的系统和方法 |
CN113342468A (zh) * | 2021-06-23 | 2021-09-03 | 山石网科通信技术股份有限公司 | 容器数据处理方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100512949B1 (ko) * | 2003-02-28 | 2005-09-07 | 삼성전자주식회사 | 필드레벨 트리를 이용한 패킷분류장치 및 방법 |
-
2007
- 2007-12-24 CN CN200710161065A patent/CN101340363B/zh not_active Expired - Fee Related
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101500012B (zh) * | 2009-02-27 | 2012-08-22 | 中国人民解放军信息工程大学 | 一种报文分类方法和系统 |
CN102819586A (zh) * | 2012-07-31 | 2012-12-12 | 北京网康科技有限公司 | 一种基于高速缓存的url分类方法和设备 |
CN102819586B (zh) * | 2012-07-31 | 2015-10-07 | 北京网康科技有限公司 | 一种基于高速缓存的url分类方法和设备 |
CN103841112A (zh) * | 2014-03-18 | 2014-06-04 | 杭州华三通信技术有限公司 | 基于网包分类的分类规则处理方法及装置、匹配装置 |
CN103841112B (zh) * | 2014-03-18 | 2017-07-14 | 新华三技术有限公司 | 基于网包分类的分类规则处理方法及装置、匹配装置 |
CN109672623A (zh) * | 2018-12-28 | 2019-04-23 | 大唐软件技术股份有限公司 | 一种报文处理方法和装置 |
CN109672623B (zh) * | 2018-12-28 | 2020-12-25 | 大唐软件技术股份有限公司 | 一种报文处理方法和装置 |
CN110083663A (zh) * | 2019-04-09 | 2019-08-02 | 北京中科智营科技发展有限公司 | 一种数据展示的分类优化方法和装置 |
CN110083663B (zh) * | 2019-04-09 | 2021-08-17 | 北京中科智营科技发展有限公司 | 一种数据展示的分类优化方法和装置 |
CN111163077A (zh) * | 2019-12-26 | 2020-05-15 | 国家计算机网络与信息安全管理中心 | 一种基于网络处理器实现多维连续掩码的系统和方法 |
CN113342468A (zh) * | 2021-06-23 | 2021-09-03 | 山石网科通信技术股份有限公司 | 容器数据处理方法及装置 |
CN113342468B (zh) * | 2021-06-23 | 2023-08-08 | 山石网科通信技术股份有限公司 | 容器数据处理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN101340363B (zh) | 2012-09-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101340363A (zh) | 一种实现多元数据包分类的方法及设备 | |
US10942943B2 (en) | Dynamic field data translation to support high performance stream data processing | |
US7716577B2 (en) | Method and apparatus for hardware XML acceleration | |
US7665016B2 (en) | Method and apparatus for virtualized XML parsing | |
US7596745B2 (en) | Programmable hardware finite state machine for facilitating tokenization of an XML document | |
CA2820500C (en) | Method and device for high performance regular expression pattern matching | |
Peng et al. | Chain-based DFA deflation for fast and scalable regular expression matching using TCAM | |
US6865664B2 (en) | Methods, systems, and computer program products for compressing a computer program based on a compression criterion and executing the compressed program | |
JP2003084987A (ja) | Xml文書の妥当性を検証するためのオートマトンの生成方法、xml文書の妥当性検証方法、xml文書の妥当性を検証するためのオートマトンの生成システム、xml文書の妥当性検証システムおよびプログラム | |
CN112650499A (zh) | 基于OpenCL平台实现对交易所level-2 FAST行情的硬件解码处理的系统 | |
CN105659274A (zh) | 用于在可重构平台中解码数据流的方法和设备 | |
Ficara et al. | Differential encoding of DFAs for fast regular expression matching | |
Sun et al. | Attention-based machine learning model for smart contract vulnerability detection | |
CN1359491A (zh) | 用于资源受限装置的面向对象的指令集 | |
EP2332068A2 (en) | Modular forest automata | |
CN1897534A (zh) | 具有金融交易报文处理能力的智能卡及其方法 | |
CN106549673A (zh) | 一种数据压缩方法及装置 | |
CN102870116A (zh) | 内容匹配方法和装置 | |
US9830326B2 (en) | Identifying data offsets using binary masks | |
CN112231645A (zh) | 一种基于主动学习的恶意pdf文档检测方法 | |
US20110264669A1 (en) | method for compressing a .net file | |
McKenzie et al. | Error repair in shift-reduce parsers | |
US20080306948A1 (en) | String and binary data sorting | |
US7864081B2 (en) | Fast implementation of decoding function for variable length encoding | |
CN108573069A (zh) | 一种加速压缩流量正则表达式匹配的Twins方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20120919 Termination date: 20161224 |
|
CF01 | Termination of patent right due to non-payment of annual fee |