一种数据包递归流分类方法

文档序号:6590119阅读:218来源:国知局

专利名称::一种数据包递归流分类方法
技术领域
:本发明涉及IP网络中数据流的分类方法,具体涉及一种数据包的递归流分类方法,能够快速地对数据流进行分类处理。通常数据包流分类是根据数据包头的几个不同的域(如源IP地址、目的IP地址等),通过查找规则库进行的。这里,规则库是分类的依据,它由一系列的规则条目组成,每个规则条目对应一种特定的业务类型或处理方法。数据包分类的实质是对于特定的数据包D,在规则库中搜索与之匹配的规则R,以确定数据包D所应接受的服务类型。分类过程是通过数据包头的K个域进行的,规则库中的任意规则R中也包含K个域。数据包D匹配了规则R即为对于任意的域F,数据包头的第k个域D(k)都与规则R中的第k个域R(k)相匹配。一般地,规则R的任一域都定义了整数集上的一个范围或某个确定的整数值,数据包D匹配规则R,即为对任意的k,有D(k)R(k)。在IP网络中,规则库中规则包含的域个数越来越多,有时多达8个。而且,不同应用的规则库规模差别很大,从数十条到数万条规则不等。为了保证性能,要求数据流分类方法在最坏情况下的最大分组处理速率一般不能低于数据包的到达速率,方法性能不依赖于某一确定的业务特征,即方法的性能是与业务相分离的。在这种情况下,近年来在国内外出现了许多实用化的快速数据流分类方法。近年来在出现的快速数据流分类方法包括三重内容寻址存储器方法、基于比特向量的多维范围匹配方法、GridofTries方法、Tuple空间搜索方法、有向非循环图DAG方法、交叉乘积方法、RFC(recursiveflowclassification)递归流分类方法等。它们的一个共同特点是,在某些限定的条件下(如规则包含的域个数、存储空间和规则库的规模等)设计出来的,依赖特定的环境(如必须用硬件或软件)实现的。这其中,三重内容寻址存储器方法必须采用硬件实现,只适于小规则库,且不支持范围匹配;基于比特向量的多维范围匹配方法也需要硬件的辅助,而且该方法不利于规则库的扩展;GridofTries方法尽管查找速度挺快,但它只适合于二维前缀匹配查找;Tuple空间搜索方法的实现中,存在线性搜索问题,这影响了搜索的速度,尽管改进方案使方法的效率提高了很多,但搜索时间仍与规则库的规则条目的多少有关;有向非循环图DAG方法仅与分类器的维数K有关,而与规则条目数无关,但该方法在最坏情况下的空间复杂度太大;交叉乘积方法在最坏情况下的搜索时间得不到保证。从上述分析可以看出,绝大多数方法的性能都依赖于特定的硬件、规则条目数,或域个数。RFC分类方法是由StanfordUniversity大学的PankajGupta与NickMcKeown提出的。参考附图1所示,RFC分类方法的核心思想是,把数据包头的S比特通过几个阶段的递归映射,最后映射成所属类classID的T比特。每个阶段都通过映射,成为相对前一阶段更少的比特值。参考附图2所示,RFC分类方法包括多个递归映射阶段,每个阶段都进行一系列的并行内存查找,每次查找返回的值都比内存查找时输入的值有更少的比特值。该方法的实现由预处理与查找两部分组成。首先,对用户配置的一系列规则进行处理,在各个阶段,产生一系列预处理后生成的预处理向量表(Preprocessedtable),存放在内存中;然后,就可以根据数据包头中多个域的值,在内存中进行多次并行的哈希运算,查找各阶段生成的预处理向量表,最后查到分类结果(即类的标识)。RFC递归流分类方法,能够解决任意多个域条件下的流分类问题,其性能不依赖于规则条目数,也不依赖于特定的硬件,RFC分类方法的性能由阶段个数和数的形状(即各个域的组合情况)决定,这两个参数决定了内存查找的次数。当阶段数目增加时,所需的总内存空间减少,但是在搜索过程中会增加内存访问次数和时间。但是数据包的分类规则的域一般有两种某个范围或某个确定的值,这样就使得预处理过程相当复杂。由于针对规则中的域包括的值是一个确定的值,还是一个范围,其预处理应该有很大的不同,而现有技术的RFC分类方法没有很好的加以区分处理。而且,现有的RFC分类方法最后只是生成一个预处理向量表(table表)时,并没有根据不同的业务特点,进行区别处理。本发明所述的数据包递归流分类方法,实现步骤如下一、预处理阶段把规则库中规则包含的字段分成多个域,确定递归分类的阶段个数和各个域的组合情况;根据规则的域是确定值或范围分别处理,并生成递归分类各阶段的预处理向量表;1)第一阶段,对每个域包括的值进行分类,计算出各个域的等价类标识号及其个数,并把等价类识别号填入与各个域相对应的第一阶段的预处理向量表中;当域的类型是单一确定值时首先对域内的每一个整数值(0~2n-1,n为域的位数)进行循环取值;在循环的内部,还包括下列处理步骤a.遍历规则库中每条规则的相对应域的值,如果与循环中域的取值相等,修改类比特位图对应位的值(CBM值),否则,保持类比特位图值不变;b.如果生成的比特位图值是第一次出现,记录下该比特位图值,更新等价类标识,等价类标识的总个数加1,并用新的等价类标识号填入预处理向量表;c.否则,用原来的等价类标识号填入预处理向量表;d.最后把类比特位图值重置为初始值;当域的类型是一个范围时首先对域内的每一个整数值(0~2n-1,n为域的位数)进行循环取值;在循环的内部,还包括下列处理步骤a.遍历规则库中每条规则的相对应域的左区间值,如果与循环中域的取值相等,修改类比特位图对应位的值(CBM值),否则,保持类比特位图值不变;b.如果生成的比特位图值是第一次出现,记录下该比特位图值,更新等价类标识,等价类标识的总个数加1,并用新的等价类标识号填入预处理向量表;c.否则,用原来的等价类标识号填入预处理向量表;d.再遍历规则库中每条规则的域的右区间值,如果与循环中域的取值相等,把类比特位图中该规则号对应的位置重新设为0,并置规则结束标志位为真;否则,保持类比特位图值不变,规则结束标志位为假;e.判断规则结束标志位的真假;如果为假,则重新判断新生成的类比特位图是否第一次出现,如果是,更新等价类标识,等价类标识的总个数加1;如果为真,则循环下一个域的取值;f.如果为真,再判断规则库中是否有规则的左区间值等于循环中域的取值加1;如果是,则循环下一个域的取值;否则重新判断新生成的类比特位图是否第一次出现,如果是,更新等价类标识,等价类标识的总个数加1;2)根据前一阶段的预处理向量表,生成其它阶段的预处理向量表;具体包括以下处理步骤a.根据进行组合的域,分别循环选取每个预处理向量表中的一个等价类标识的类比特位图,将这些类比特位图按位与,得到新的类比特位图;b.根据所述类比特位图生成本阶段预处理向量表中所需的等价类标识,填入本阶段的预处理向量表中的相应位置;3)读取最后一阶段生成的预处理向量表中的等价类标识,找到与之对应的类比特位图,从所述类比特位图的最低位开始查找,找到第一个为1的位,用该位所在的位置号代替预处理向量表中的等价类标识号,更新最后一个阶段的预处理向量表;二、查找阶段将接收到的数据包在各阶段的预处理向量表中查找,确定出数据包所属的类标识,根据数据包的类标识对应的服务类型对数据包进行区分处理;具体包括以下处理步骤1)将接收到的数据包的包头对应分成多个域,每个域的值做为第一阶段索引值在第一阶段预处理向量表中进行并行内存查找;2)把前一阶段的查找结果按照预处理阶段域的组合情况,进行组合,生成一个新的索引值,在下一级的预处理向量表中递归查找;如果为两个域进行组合,组合方式为下一级索引值等于上一级某个域A查找结果的值乘以与它组合的另一个域B的等价类标识的个数,然后加上域B的查找结果;如果为多域的组合,先以某两个域组合的索引结果做为域的查找结果值再与第3个域进行组合,以此类推;3)最后一个阶段的查找结果获得的值就是数据包所属类的类标识,然后根据数据包的类标识对应的服务类型对数据包进行区分处理。本发明的方法能够在多个域条件下,快速地进行数据包的分类。方法的分类器具有相当好的数据结构和数据冗余性,能够很好地为分类方法所用。本发明的方法是基于多阶段逐步递减的分类方法,用硬件实现时,每秒钟能够分类3000万个数据包;用软件实现时,每秒钟能够分类100万个数据包。图2为数据包递归分类示意图。图3为数据包头域的划分示意图。图4为本发明数据包递归流分类方法实施例中第一阶段的处理流程图。图5是本发明数据包递归流分类方法实施例中的数据包递归分类示意图。图2所示的数据包递归分类示意图,包括多个递归映射阶段,每个阶段都进行一系列的并行内存查找,每次查找返回的值都比内存查找时输入的值有更少的比特值。首先,对用户配置的一系列规则进行处理,在各个阶段,产生一系列预处理后生成的预处理向量表(Preprocessedtable),存放在内存中;然后,就可以根据数据包头中多个域的值,在内存中进行多次并行的哈希运算,查找各阶段生成的预处理向量表,最后查到分类结果(即类的标识)。数据包头的F个域被分成多个chunk#,这多个chunk#就成为了第一阶段并行内存时的索引值,例如,图3所示的源、目的IP地址等几个域,就被分成8个chunk#。在后续阶段,就把前一阶段不同chunk#的内存查找结果(用术语eqID来表示)按照某种规则组合在一起,形成一个新的索引值,然后再进行内存的查找,找到一个新的eqID。这样递归查找,在最后阶段,查找结果获得一个确定的值,而该确定的值对应的就是数据包所属类的classID。根据该classID,就知道了数据包可得到何种服务类型。以下再具体说明本发明的数据包递归流分类方法的具体实现过程首先,是方法的预处理阶段。对于预处理阶段,其的第一阶段与后续阶段的处理方式是不一样的。在预处理的第一阶段,对规则库中的每个chunk#域包括的值进行分类,求出各个chunk#域的不同类别号(eqID)及其个数,并把eqID按照一定的填充方式,填入与各个域相对应的预处理向量表中(table表)。根据chunk#域包括的值是一个的确定的值,还是一个范围,分别进行了处理。当是一个确定的值时,生成的类别号eqID对应的是一个单个的值;当是一个范围时,生成的类别号eqID对应的是一个范围。图4是处理的流程图。图中,一个CBM与一个类别号eqID相对应,用于标识规则库中哪些规则符合该eqID,如果某条规则条目符合该eqID,那么就在CBM的该规则条目位置置为1,形成的CBM如,0000110010010001001000,CBM包括的位数等于规则条目数,每一位对应一条规则条目。在预处理的其余阶段,根据拟定的组合情况,采用与第一阶段不同的处理方式。其处理过程如下对组合的每一个chunk#,循环遍历每个chunk#的CBM,把要组合的每个chunk#域的CBM值按位与,生成一个CBM值。然后,判断生成的CBM值是否是第一次出现。如果是,那么说明有一个新的eqID号出现,因此eqID的总个数加1,同时记录下该CBM值,并用新的eqID号填充table表。否则,用老的eqID号填充table表。通过这样的循环遍历,最后就生成了table表、各个CBM值及eqID的个数。很明显的是,一个类比特位图CBM中,有可能多个位为1,也就是说,根据与等价类标识eqID对应的类比特位图CBM生成的预处理向量表,有很大的冗余性。因此,可以借助于这种冗余性,把所有的规则合在一起进行处理。已知的是,每个的控制访问列表号包括许多的规则条目,这其中最后的规则是一个默认的可以匹配任何数据包的规则。如果用户配置了多个不同的控制访问列表号,这样如果把所有的控制访问列表号包含的规则合在一起进行处理,生成最后的预处理向量表时,总是从各个eqID对应的CBM的最低位开始查找,那么其结果肯定是不对的,因为每个控制访问列表号都有多个可以匹配任何数据包的规则存在,查找CBM时,当该数据包不匹配第一个控制访问列表号的除最后一条规则外的所有规则时,该数据包仍然会匹配第一个控制访问列表号的最后一条规则,而不会继续往前,去查找第二个控制访问列表号包括的规则条目。为此,在生成与各控制访问列表号对应的预处理向量表时,应该从不同的控制访问列表号包括的规则所在的起始位置进行查找,而不是总是从最低位置开始进行查找,这样找到的第一个为1的bit所在的位置,对应的规则条目一定属于该控制访问列表号包括的规则,然后就可以把该位置的位置号填入相应的预处理向量表内。最后,就生成与各个控制访问列表号对应的预处理向量表了。其次,是方法的查找阶段。在其第一个阶段,以数据包头的多个chunk#为索引值,并行查找第一阶段生成的各个table表,获得各个eqID。然后,按照预处理阶段设定的组合情况,把这多个eqID组合,生成一个新的索引值,在各个阶段进行查找。组合方式为index=eqID_a*sizeB+eqID_b,其中eqID_a、eqID_b为上一级Chunk#查表得到的结果,sizeB为Chunk#B中类别号的个数。通过这样的递进查找,在最后阶段的查找结果获得了一个确定的值,而该确定的值对应的就是数据包所属类的classID(规则号)。根据该classID,就知道了数据包可以得到何种服务类型。当然,在查找的最后阶段也可以针对不同的应用,进行特定的查找。在上述二个必备条件的基础上,为了节省内存的使用、提高查找性能,还可以对RFC方法进行如下的优化处理。RFC方法预处理的最后一个阶段,生成table表时,开始的处理与前面其余阶段的处理类似,在table表中存放各个eqID号。接着的处理有所不同在这里,根据各个eqID对应的CBM值,从最低位开始查找,找到第一个为1的位(最先匹配原则,如应用在控制访问列表中),用该位所在的位置号(相对应于规则条目号)代替table表中的eqID号,这样重新生成各个table表。很明显的是,一个CBM中,有多个位置的值可能为1,也就是说,根据与eqID对应的CBM值生成的table表,有很大的冗余性。因此,在查找CBM的各个bit位,找到第一个为1的bit时,可以进行特殊处理。如果用户在核心路由器的多个端口配置了不同的控制访问列表号,已知的是,每个控制访问列表号都有一个默认的匹配任何数据包的规则。这样,如果把所有的控制访问列表号包含的规则合在一起,用RFC方法进行处理,按上面的RFC方法生成最后的table表时,总是从各个eqID对应的CBM值的最低位开始查找,那么其结果肯定是不对的,因为有多个可以匹配任何数据包的规则存在,查找CBM时,首先找到的肯定是第一个控制访问列表号的那个可以匹配任何数据包的规则。为此,在生成与各端口对应的table表时,应该从该端口包括的规则所在的起始位置进行查找,而不是总是从最低位置开始进行查找,这样找到的第一个为1的bit所在的位置,对应的规则条目一定属于该端口配置的规则之一,然后把该位置写入相应的table表内。最后,生成的table表就是与各端口对应的table表了。上述的特殊处理,可以节省绝大部分RFC方法预处理阶段需要的内存使用。事实上,通过把各个控制访问列表号的所有ACL条目混合在一起进行预处理,然后只是在形成最后一个表时生成与各个端口对应的预处理向量表。查找阶段,开始的查找与前面必备条件下论述的查找方式基本相同,只是在查找最后一个表时,只查找与本端口对应的预处理向量表,而不是预处理最后阶段原先形成的那个table表,这种处理方式除了最后一个阶段生成的多个table表外,只需维护一份其它阶段生成的各个预处理向量table表,极大的节省了内存的使用量。很明显,如果不这样处理,每个控制访问列表号各自要维护一份自己的每个阶段的各个table表,其占用的内存量使用量是惊人的。此外,为了节省查找次数与时间,提高查找性能,还可以进行如下的技巧性处理。在RFC方法预处理最后一个阶段生成的预处理向量表中,存放的是数据包所属类的规则号(classID),根据该classID,还需查找一次内存才能获得数据包可以得到的服务类型。实际上,这一次内存查找是多余的。在处理时,可以用规则号对应的服务类型代替规则号(classID)存放在最后一个阶段生成的table表内,这样查找最后一个预处理向量表,得到的直接就是规则号的服务类型。对于控制访问列表来说,可以把服务类型permit或deny存放在预处理向量内。另外,在查找阶段,可以通过判断预处理阶段生成的各个预处理向量表的类别号(eqID)的个数来节省查找读内存的次数。当知道预处理向量表的类别号(eqID)只有一类时,就可以不再从内存中读该预处理向量表,以获得类别号(eqID),而是直接把该类别号设为零,因为当只有一个类别号时,该类别号肯定为零。这样,也就节省了许多次的读内存次数,特别当有很多table表只有一类时。根据上述改进的RFC方法的思想,把它应用于实现某核心路由器的控制访问列表(ACL)的快速数据包过滤的实现过程。表1所示,为规则库中的规则条目。其中,前6条规则属于标准ACL号1,后6条规则属于扩展ACL号105,每个ACL号的最后一条规则是默认规则项,它可以匹配任意数据包。从表中可以看到,该规则库中包括的域有源IP地址、目的IP地址、源端口号、目的端口号、协议类型、TCP建链标志ACK_RSTE及ICMP协议的类型等。其中,源端口与目的端口域都是一个范围,在规则库中,用源端口与目的端口的左端点与右端点来加于标识。表1优选实例的规则库为了合理使用内存,把源IP地址、目的IP地址分成了4个chunk#,这样共有8个chunk#,这8个chunk#的组合情况如图5所示。考虑到核心路由器上软件系统的整个架构,把RFC方法的两个部分——预处理与查找,分别在不同的软件层进行实现。其中,预处理部分放在IP层实现,查找部分放在微码层实现。由于核心路由器的整个软件系统已经占用了绝大部分内存,而且查找所在的微码层只能访问到SDRAM内存的很少一部分,而RFC方法所消耗的内存非常大。核心路由器的接口板最多可以有24个端口,如果按常规考虑,每个端口各维护一份RFC方法预处理后生成的各个阶段的多张table表,那么内存的消耗肯定是巨大的,初步估算其内存消耗可能有几十兆,这种情况根本无法应用于核心路由器的软件系统中。为此,唯一的可行方法是让所有端口共享这些table表。这样,只需维护一份RFC方法预处理后生成的table表占用的内存空间。但是,由于各个端口的配置的ACL号可能是不一样的,如果把所有的规则条目混在一起后,那么最后进行查找时,怎么来区分各个不同端口呢?为此,对最后一个阶段生成的table表,根据前述最后一个阶段的优化处理方式进行了特殊处理,根据不同端口配置的不同ACL号,从最后一个table表中再生成多份与各自端口对应的table表,并根据规则条目号,把各自规则条目的Action(permit或deny)填入对应的table表。这样,按各自端口进行查找,进行最后一步查找时,查到的就是Action,根据该Action,就可以允许该数据包通过,或拒绝它通过。经过这样处理后,对24个端口的情况,并且每个table表中每个元素占用空间是一个byte时,其总共的内存消耗大约为2.4M。最后,仍然需要强调的是,当在预处理阶段,对各个chunk#域的组合方式确定之后(相应的其阶段数也就确定了),方法的查找次数也就固定了。就优选实例来说,按照现在对多个chunk#的组合方式来看,其查找次数是15次,即要读15次内存。这在规则条目较少的情况下,该方法的性能与线性查找差不多。但按照统计得来的数据,一般用户配置时,每个端口的规则条目平均为50条,因此用该方法是合适的。权利要求1.一种数据包递归流分类方法,其特征在于,实现所述方法的步骤是一、预处理阶段把规则库中规则包含的字段分成多个域,确定递归分类的阶段个数和各个域的组合情况;根据规则的域是确定值或范围分别处理,并生成递归分类各阶段的预处理向量表;二、查找阶段将接收到的数据包在各阶段的预处理向量表中查找,确定出数据包所属的类标识,根据数据包的类标识对应的服务类型对数据包进行区分处理。2.如权利要求1所述的数据包递归流分类方法,其特征在于,所述预处理阶段的具体实现步骤是1)第一阶段,对每个域包括的值进行分类,计算出各个域的等价类标识号及其个数,并把等价类识别号填入与各个域相对应的第一阶段的预处理向量表中;2)根据前一阶段的预处理向量表,生成其它阶段的预处理向量表;3)读取最后一阶段生成的预处理向量表中的等价类标识,找到与之对应的类比特位图,从所述类比特位图的最低位开始查找,找到第一个为1的位,用该位所在的位置号代替预处理向量表中的等价类标识号,更新最后一个阶段的预处理向量表。3.如权利要求1或2所述的数据包递归流分类方法,其特征在于,所述预处理阶段中的步骤2)还包括以下处理步骤a.根据进行组合的域,分别循环选取每个预处理向量表中的一个等价类标识的类比特位图,将这些类比特位图按位与,得到新的类比特位图;b.根据所述类比特位图生成本阶段预处理向量表中所需的等价类标识,填入本阶段的预处理向量表中的相应位置。4.如权利要求1或2所述的数据包递归流分类方法,其特征在于,所述预处理阶段中的步骤1)还包括以下处理步骤当域的类型是单一确定值时首先对域内的每一个整数值(0~2n-1,n为域的位数)进行循环取值;在循环的内部,还包括下列处理步骤a.遍历规则库中每条规则的相对应域的值,如果与循环中域的取值相等,修改类比特位图对应位的值(CBM值),否则,保持类比特位图值不变;b.如果生成的比特位图值是第一次出现,记录下该比特位图值,更新等价类标识,等价类标识的总个数加1,并用新的等价类标识号填入预处理向量表;c.否则,用原来的等价类标识号填入预处理向量表;d.最后把类比特位图值重置为初始值;当域的类型是一个范围时首先对域内的每一个整数值(0~2n-1,n为域的位数)进行循环取值;在循环的内部,还包括下列处理步骤a.遍历规则库中每条规则的相对应域的左区间值,如果与循环中域的取值相等,修改类比特位图对应位的值(CBM值),否则,保持类比特位图值不变;b.如果生成的比特位图值是第一次出现,记录下该比特位图值,更新等价类标识,等价类标识的总个数加1,并用新的等价类标识号填入预处理向量表;c.否则,用原来的等价类标识号填入预处理向量表;d.再遍历规则库中每条规则的域的右区间值,如果与循环中域的取值相等,把类比特位图中该规则号对应的位置重新设为0,并置规则结束标志位为真;否则,保持类比特位图值不变,规则结束标志位为假;e.判断规则结束标志位的真假;如果为假,则重新判断新生成的类比特位图是否第一次出现,如果是,更新等价类标识,等价类标识的总个数加1;如果为真,则循环下一个域的取值;f.如果为真,再判断规则库中是否有规则的左区间值等于循环中域的取值加1;如果是,则循环下一个域的取值;否则重新判断新生成的类比特位图是否第一次出现,如果是,更新等价类标识,等价类标识的总个数加1;5.如权利要求1所述的数据包递归流分类方法,其特征在于,所述查找阶段的具体实现步骤是1)将接收到的数据包的包头对应分成多个域,每个域的值做为第一阶段索引值在第一阶段预处理向量表中进行并行内存查找;2)把前一阶段的查找结果按照预处理阶段域的组合情况,进行组合,生成一个新的索引值,在下一级的预处理向量表中递归查找;如果为两个域进行组合,组合方式为下一级索引值等于上一级某个域A查找结果的值乘以与它组合的另一个域B的等价类标识的个数,然后加上域B的查找结果;如果为多域的组合,先以某两个域组合的索引结果做为域的查找结果值再与第3个域进行组合,以此类推;3)最后一个阶段的查找结果获得的值就是数据包所属类的类标识,然后根据数据包的类标识对应的服务类型对数据包进行区分处理。全文摘要本发明公开了一种数据包递归流分类方法,包括以下处理步骤预处理阶段,把规则库中规则包含的字段分成多个域,确定递归分类的阶段个数和各个域的组合情况;根据规则的域是确定值或范围分别处理,并生成递归分类各阶段的预处理向量表;查找阶段,将接收到的数据包在各阶段的预处理向量表中查找,确定出数据包所属的类标识,根据数据包的类标识对应的服务类型对数据包进行区分处理。本发明的方法能够在多个域条件下,快速地进行数据包的分类。本发明的数据包递归流分类方法的分类器具有相当好的数据结构和数据冗余性,能够很好地为分类方法所用。文档编号G06F7/06GK1477494SQ0213664公开日2004年2月25日申请日期2002年8月20日优先权日2002年8月20日发明者阮沈勇,马彧,钟卫东申请人:深圳市中兴通讯股份有限公司上海第二研究所,深圳市中兴通讯股份有限公司上海第二
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1