专利名称:一种IPv6多域分类处理方法
技术领域:
本发明涉及数据分类处理领域,特别是涉及数据通信领域用于实现服务质量控制的一种分类处理方法。
背景技术:
分类处理技术广泛地应用在防火墙、基于策略的路由、VPN(Virtual PrivateNetwork,虚拟专用网络)和QoS(Quality of Service,服务质量)控制中。通常,分类处理规则包含数据报文头的五个域内容源IP地址、目的IP地址、源端口号、目的端口号和协议类型。
随着网络向高速化和业务多样化发展,特别是IPv6(Internet Protocol Version6,IPv6)网络的逐渐商用,分类处理方法需要支持IPv6。公开文献(Design ofMulti-field IPv6 Packet Classifiers Using Ternary CAMs,IEEE 2001)给出了一种采用CAM(Content Addressable Memories,内容关联存储器)结构实现IPv6多域分类的方法。在该方法中,设计了一个基于CLM(CAM-Like Memory)结构的硬件分类结构,可以同时发起对五个规则域的匹配查找;同时该文还提出了一种对IPv6数据报文协议字段和端口字段的压缩方法。但是这种用硬件实现分类的方法存在以下弊端(1)、缺乏灵活性,无法实现规则域的随意扩充。分类规则变化时,需要对原来的硬件进行重新开发。而对于实现QoS控制的分类来说,往往要求分类规则是灵活多变的,以方便ISP(Internet ServiceProvider,因特网服务提供商)根据网络上具体的应用进行配置。(2)、随着网络容量的扩大,需要对多种类型的业务流进行分类处理,分类处理规则数目将不断增多也日趋复杂,这将导致存储单元容量的急剧扩大。更高容量的存储单元不仅增加了CAM制造商的技术实现难度,而且面对成本作为产品占有市场的一个不可轻视的因素时,产品制造商需要在成本和功能之间寻找平衡。同时,硬件实现的分类装置,规则条目往往是固化在存储单元中,因此当需要添加新的规则条目时,就得面临重新设计硬件的尴尬。(3)、需要产品制造商本身具有ASIC(Application Specific Integrated Circuit,专用集成电路)研发的实力和基础。
对于支持多域分类处理的软件方式有以下三种(1)、使用线性表为数据结构,递归匹配规则的RFC(Recursive Flow Classification,递归流程分类)算法。(2)、使用哈希(hash)表结构的元组空间查找(Tuple Space Search)算法。(3)、基于trie表的多维查找。特别地,对于源和目的IP地址的二维查找,Grid-of-tries结构较为多用。通过在每个节点处设置jump-switch(跳转指针)克服trie查找中引入的back-tracking(回溯查找)问题。上述方法都是针对IPv4(Internet ProtocolVersion 4,互联网协议第4版)报文的分类处理方法,如果直接用于IPv6,则会由于IPv6长达128比特的地址长度,使得内存耗费增加(内存的耗费不仅指容纳规则库所占用的空间还包括建立各种数据结构所消耗的内存)。耗用内存空间越大,规则更新时的时间复杂度就越大,同时也将影响表的搜索时间。因此在分类方法关注的两个相互制约因素时间效率和空间效率之间,如何提高空间效率是较为关键的因素。
发明内容
本发明所要解决的技术问题在于提供一种用于IPv6多域分类处理方法,用以解决传统软件方法实现IPv6多域分类方法带来的内存空间耗费较大和影响搜索时间的问题,进而提高在应用时的空间效率。
为了实现上述目的,本发明提供了一种IPv6多域分类处理方法,其特点在于,对IPv6规则域进行压缩和归并;根据IPv6地址编址的可类聚和分层的特点,分段查找IPv6地址,将前16比特的IPv6地址域的内容和其他规则域的内容一起参与查找,独立出host id域;采用一三级表结构中的基本哈希表和扩展哈希表分开存放规则表,实现IPv6多域分类处理;其中,所述三级表结构,其第一级为基本哈希表,每一个哈希表条目是一二维的Grid-of-tries结构,构成其第二级表,其第三级表为两张相对独立的扩展哈希表。
上述的IPv6多域分类处理方法,其特点在于,该方法具体包括如下步骤步骤一,对五域规则中的协议类型、源端口号、目的端口号进行压缩,并分别抽取源和目的IPv6地址的前16比特进行五域的一次精确匹配基本哈希表查找;
步骤二,当地址规则中前缀长度大于16比特时,发起对源和目的IPv6地址的111:64位的最长96(48+48)比特的二维Grid of Tries(网格trie结构)的查找;步骤三,当地址规则为全长匹配时,发起对IPv6源和目的地址的末64比特host-id进行相对独立的扩展哈希表查找;及步骤四,获得动作结果,结束查找。
上述的IPv6多域分类处理方法,其特点在于,所述步骤一进一步包括步骤1、对端口域和协议域进行压缩;步骤2、抽取IPv6源和目的地址的前16比特,进行合并,参与基本哈希表精确匹配;步骤3、规则的归并,组成哈希表精确匹配的查找关键字;及步骤4、发起基本哈希表查找。
上述的IPv6多域分类处理方法,其特点在于,所述步骤二中,在基本哈希表条目中增加表征需要进行后续查找的标志位和查找指针,用以在前16比特和中间的48比特之间建立联系。
上述的IPv6多域分类处理方法,其特点在于,所述步骤三中,在Grid_of_Tries(网格trie结构)的最后一级叶子节点设置扩展哈希表查找的标志位,并对不需要该步查找的数据包设置返回基本哈希表查找的指针。
上述的IPv6多域分类处理方法,其特点在于,所述步骤四中,当只需要第一级基本哈希表查找时,查找结果可以直接从基本哈希表的条目中获得;当需要进行二级的Grid_of_Tries查找而不需要扩展哈希查找时,可以通过tries的指针,该指针指向基本哈希表的结果域;对于需要进行扩展查找时,动作结果可直接从扩展哈希表条目中获得。
上述的IPv6多域分类处理方法,其特点在于,查找扩展哈希表之前,将64比特的host-id还原为48比特的MAC地址,用以减少哈希表的内存占用。
上述的IPv6多域分类处理方法,其特点在于,在所述步骤一中添加规则域,对其进行归并,一起参与第一级的基本哈希表查找,用以扩充域宽。
上述的IPv6多域分类处理方法,其特点在于,根据IPv6地址分层的特点及地址掩码长度一般为8的整数倍的特点,只在每8比特后设置返回指针,用以减少对Grid-of-tries的jump-switch的指针个数。
上述的IPv6多域分类处理方法,其特点在于,对所述IPv6地址中间的48比特还可以再次进行分段,可以分成32+16的形式,进行两级的Grid_of_Tries的查找。
以下结合附图和具体实施例对本发明进行详细描述,但不作为对本发明的限定。
图1为本发明中协议字段压缩的编码映射示意图;图2为IPv6全球单播地址的编址构成示意图;图3为本发明中用于精确匹配的被分割和重组后的规则示意图;及图4为本发明中的表结构图。
具体实施例方式
图1所示为本发明中协议字段压缩的编码映射表;图2所示为IPv6全球单播地址的编址构成;图4所示为本发明中的表结构图及表条目定义。本发明的技术解决方案是针对IPv6分类面临的问题症结所在,即多维数和IPv6规则条目长度(五元组为296bit),对规则域进行适当的压缩和归并。特别地,利用IPv6地址编址的可类聚和分层的特点,将IPv6地址进行分段查找。前16比特的IPv6地址域的内容和其他三个规则域的内容一起参与查找,而独立出host id域;相应的,采用一个三级表结构第一级为基本哈希表(base-hash),每一个哈希表条目是一个二维的Grid-of-tries结构,从而构成第二级表;第三级表相对独立,是两张扩展哈希表(extended-hash)。利用两种表结构(hash哈希和trie)的有效结合,将规则表分开存放,在降维的同时,减小了由于地址长度增大带来的构建表结构的内存空间占用和规则库存储空间占用,从而提高了查找速度。其中,查找过程分为以下几个步骤步骤一,对五域规则中的协议类型、端口号(包括源和目的端口号)进行压缩,并分别抽取源和目的IPv6地址的前16比特进行五域的一次精确匹配base-hash查找。本步骤又包含如下操作(1)、对端口域和协议域进行压缩。特别考虑到对QoS控制中的分类应用来说,感兴趣的只是TCP(Transfer ControlProtocol,传输控制协议)和UDP(User Data Protocol,用户数据协议),而并不关心管理控制等其他协议报文,所以规则中的协议字段只需要2个比特。压缩的协议编码参见图1。对于端口域的压缩,采用公开文献(Design of Multi-fieldIPv6 Packet Classifiers Using Ternary CAMs,IEEE 2001)中的思想,压缩为4个比特。也可以根据QoS控制中普通数据业务、音频业务和视频业务的承载应用进行再次压缩。(2)、抽取IPv6源和目的地址的前16比特,进行合并,参与base-hash精确匹配。对于QoS控制,更多的关注于终端用户,因此分类规则中的地址域不应出现只是通配符*的情形,大多数为前缀匹配。同时对图2的IPv6可集聚全球单播地址的地址编址分析来看,前缀长度最短应为16比特,即包含顶层ID(否则没法标识一个网络)。所以分别从源和目的IPv6地址取前16比特并进行连接,组成长度为32比特位串。(3)、规则的归并,组成hash精确匹配的查找关键字。(4)、发起base-hash查找。
步骤二,只有当地址规则中前缀长度(Prefix Length)大于16比特时,需要发起对源和目的IPv6地址的111:64位的最长96(48+48)可以比特的二维Grid_of_Tries的查找。由于对地址进行了分割,所以需要在前16比特和中间的48比特之间建立联系。因此需要在base-hash表条目中增加表征需要进行后续查找的标志位和查找指针。
步骤三,只有当地址规则为全长匹配时,需要发起对IPv6源和目的地址的末64比特host-id(主机号)进行相对独立的extended-hash查找。在此,需要在Grid_of_Tries的最后一级叶子节点设置extended-hash查找的标志位,同时对不需要该步查找的数据包设置返回base-hash查找表的指针。
步骤四,获得动作结果。当只需要第一级base-hash查找时,查找结果可以直接从base-hash表的条目中获得;当需要进行二级的Grid_of_Tries查找而不需要extend-hash查找时,可以通过trie的指针,该指针指向base-hash表的结果域;对于需要进行extended-hash查找时,动作结构可直接从extended-hash表条目中获得,查找结束。
图3所示为本发明中用于精确匹配的被分割和重组后的规则示意图;如表1和表2所示为输入原始数据和规则示意表。
表1原始规则列表举例
表2输入数据相关域提取后的原始数据
以上表中的规则表和原始的输入数据为例,基于如下的假定,本发明的实施过程如下假定如下,①依托Intel网络处理,利用网络处理器上的硬件hash单元,发起hash索引值的计算②所有的表均存放在SRAM中,内存访问长度为32比特。
步骤一、当网络处理器接收到数据包时,首先是从包头中提取五个域的内容,得到如下信息(TCP,80,80,3ffe:3600:0001:0002∷1,3ffe:3600:0002:0003∷1)。对各域的信息进行压缩和归并。具体来说,①按照图1中的协议和端口的压缩编码规则,TCP对应的编码值为00,80的源端口和目的端口编码均为001001。②源和目的IPv6地址的前16比特的连接。连接后的比特串为0x3ffe3ffe。③归并。按图3的格式对压缩和重组后的五域内容进行归并。压缩归并后的48比特串为0x02493ffe3ffe。
步骤二、将48比特串进行精确base-hash匹配查找,由微码发起对硬件哈希单元操作的请求,返回值为48比特的index,作为base-hash表的索引。假定index指向如表1、2所示的条目。该条目中的信息如表中所示。条目中的flow-id的最高位valid-bit(有效位)为0,表明该flow-id(流标识)并不是真正的查找结果(地址规则的掩码长度大于16比特),还需下一级Grid-of-Tries表的查找,此时flow-id将指向下一级表。
在这里可能会出现一个数据包匹配原始规则表中多个规则的情况。这就涉及到规则的优先级问题。我们设定规则的地址域存在从属关系时,总是掩码长度长的规则优先级高一些。这样就产生了如何选择最优规则的问题,该问题的解决见步骤三。
步骤三、分别取IPv6目的地址和源地址的111:64位共96比特,组成二维数组(3600:0002:0003,3600:0001:0002)进行Grid_of_tries查找。该表的构建基于公开文献(Packet Classification for Core RoutersIs there an alternative to CAMs?,IEEE INFOCOM 2003)中已有方法,采用jump-switch克服trie查找中引入的back-tracking问题。首先进行dst-trie(目的地址trie)的匹配查找。对于本文所列出的规则库,dest-trie需要查完32比特,然后开始src-trie(源地址trie)的查找。当查到最长的16比特后,在本次查找的叶子节点处获得返回base-hash表的指针base-hash-index。
基于可能出现的哈希冲突考虑,在Grid-of-Tries的根节点处也添加返回base-hash的指针,从而防止步骤二中由于base-hash冲突引起的查找错误。使得最长匹配查找(规则的优先级造成,本身是不需要的)及时结束而返回到上一级表中。
步骤四、由于base-hash-index的高二位均为0(该两位分别表征是否还需要进行源和目的地址末64比特的extended-hash查找),表明不需要进行extended-hash表的查找。根据base-hash-index的值,返回base-hash表的action域。
步骤五、从索引所指的条目中获得最终的查找结果flow id(流标识),结束查找过程。网络处理器获取该查找结果,分类过程结束。
由于Intel网络处理器支持对SRAM的连续访问,在具体实现时还可以优化查找过程。
以上过程仅为举例,实际过程依规则库和输入数据包头内容决定。最差情况为源和目的地址均为全匹配的情况。在该种情况下,还需要发起对源和目的地址末64比特的独立的extended-hash查找。为了进一步减少hash表的内存占用,可以在查表之前对64比特的host-id进行还原。还原为48比特的MAC地址后再进行extended-hash查找。
本发明还有以下几点扩充1、可实现域宽的扩充。当需要增加规则域时(比如DSCP(Differentiated Services CodePoint,差分业务代码点)域),只需在步骤一中添加该域,对其进行归并,一起参与第一级的base-hash查找即可。2、在具体实现过程中,hash表的查找等操作也可以直接通过软件或其他变通方法实现。3、针对IPv6地址分层的特点及地址掩码长度一般为8的整数倍的特点,可以减少对Grid-of-tries的jump-switch的指针个数,只在每8比特后设置返回指针。4、对于IPv6地址中间的48比特还可以再次进行分段,比如可以分成32+16的形式,进行两级的Grid_of_Tries的查找。
本发明提出的一种用软件实现IPv6报文多域分类的方法能有效降低传统软件方法直接应用到IPv6报文而引入的巨大的内存空间耗费,从而提高了查表的速度。效果如下按照计算几何的最好结果,以1000条的规则数目来说,按公式LogN的时间和o(Nk)的空间(其中N为规则的条数,k为维数即包头中参与分类的域数)计算,当k=5,需要的空间为10005=1000TB。而本发明在地址前缀长度小于16比特的情况下只需要(1000×64)bit=8KB的空间。
当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
权利要求
1.一种IPv6多域分类处理方法,其特征在于,对IPv6规则域进行压缩和归并;根据IPv6地址编址的可类聚和分层的特点,分段查找IPv6地址,将前16比特的IPv6地址域的内容和其他规则域的内容一起参与查找,独立出主机号域;采用一三级表结构中的基本哈希表和扩展哈希表分开存放规则表,实现IPv6多域分类处理;其中,所述三级表结构,其第一级为基本哈希表,每一个哈希表条目是一二维的Grid-of-tries结构,构成其第二级表,其第三级表为两张相对独立的扩展哈希表。
2.根据权利要求1所述的IPv6多域分类处理方法,其特征在于,该方法具体包括如下步骤步骤一,对五域规则中的协议类型、源端口号、目的端口号进行压缩,并分别抽取源和目的IPv6地址的前16比特进行五域的一次精确匹配基本哈希表查找;步骤二,当地址规则中前缀长度大于16比特时,发起对源和目的IPv6地址的11164位的最长96(48+48)比特的二维Grid_of_Tries的查找;步骤三,当地址规则为全长匹配时,发起对IPv6源和目的地址的末64比特host-id进行相对独立的扩展哈希表查找;及步骤四,获得动作结果,结束查找。
3.根据权利要求2所述的IPv6多域分类处理方法,其特征在于,所述步骤一进一步包括步骤1、对端口域和协议域进行压缩;步骤2、抽取IPv6源和目的地址的前16比特,进行合并,参与基本哈希表精确匹配;步骤3、规则的归并,组成哈希表精确匹配的查找关键字;及步骤4、发起基本哈希表查找。
4.根据权利要求2所述的IPv6多域分类处理方法,其特征在于,所述步骤二中,在基本哈希表条目中增加表征需要进行后续查找的标志位和查找指针,用以在前16比特和中间的48比特之间建立联系。
5.根据权利要求2所述的IPv6多域分类处理方法,其特征在于,所述步骤三中,在Grid_of_Tries的最后一级叶子节点设置扩展哈希表查找的标志位,并对不需要该步查找的数据包设置返回基本哈希表查找的指针。
6.根据权利要求2所述的IPv6多域分类处理方法,其特征在于,所述步骤四中,当只需要第一级基本哈希表查找时,查找结果可以直接从基本哈希表的条目中获得;当需要进行二级的Grid_of_Tries查找而不需要扩展哈希查找时,可以通过tries的指针,该指针指向基本哈希表的结果域;对于需要进行扩展查找时,动作结果可直接从扩展哈希表条目中获得。
7.根据权利要求2所述的IPv6多域分类处理方法,其特征在于,查找扩展哈希表之前,将64比特的host-id还原为48比特的MAC地址,用以减少哈希表的内存占用。
8.根据权利要求2或3所述的IPv6多域分类处理方法,其特征在于,在所述步骤一中添加规则域,对其进行归并,一起参与第一级的基本哈希表查找,用以扩充域宽。
9.根据权利要求1所述的IPv6多域分类处理方法,其特征在于,根据IPv6地址分层的特点及地址掩码长度一般为8的整数倍的特点,只在每8比特后设置返回指针,用以减少对Grid-of-tries的jump-switch的指针个数。
10.根据权利要求4所述的IPv6多域分类处理方法,其特征在于,对所述IPv6地址中间的48比特还可以再次进行分段,可以分成32+16的形式,进行两级的Grid_of_Tries的查找。
全文摘要
本发明公开了一种IPv6多域分类方法,用以有效降低传统软件方法实现IPv6多域分类方法带来的内存空间耗费,其特征在于,该方法是对规则域进行适当的压缩和归并,利用IPv6地址编址的可类聚和分层的特点,对IPv6地址进行分段查找。
文档编号H04L29/06GK1805435SQ20051001116
公开日2006年7月19日 申请日期2005年1月13日 优先权日2005年1月13日
发明者刘丽娜, 甘振锦, 李华驿, 熊韬 申请人:中兴通讯股份有限公司