一种实现三重内容可寻址存储器范围匹配的前缀扩展方法

文档序号:7953089阅读:171来源:国知局
专利名称:一种实现三重内容可寻址存储器范围匹配的前缀扩展方法
技术领域
本发明涉及计算机网络技术领域,尤其涉及使用TCAM(Ternary ContentAddressable Memory,三重内容可寻址存储器)实现ACL/QoS(Access ControlList/Quality of Service,访问控制列表/服务质量)方面的技术,主要应用在路由器,交换机,防火墙,入侵检测系统等网络设备。
背景技术
现今的网络设备中,大多都需要实现ACL/QoS,这些技术中最关键部分就是规则匹配,但是因为规则中的字段很多,匹配方式也不同,所以当规则很多时,匹配速度就成了性能瓶颈。现以ACL举例,传统的ACL由五元组构成源IP地址,目的IP地址,源端口号,目的端口号,协议。一般的实现中,IP地址使用前缀匹配,协议使用精确匹配,而端口则使用范围匹配。目前实现ACL主要有两种途径,一种是使用软件实现,最典型的就是RFC(RecursiveFlow Classification,递归流分类)算法;另一种就是使用硬件实现,最典型的就是TCAM。当然硬件实现肯定比软件快很多,尤其是在一些高速网络中,一般都使用硬件进行加速。
TCAM是一种专用三重内容可寻址存储器,可以进行快速大量并行搜索。搜索的时候,存储器中所有的条目同时与搜索关键字比较,搜索结果就是匹配项的物理地址。在进行条目匹配时,条目的每个位可以是0、1、x三种状态,如果是x,那么该位不参与比较,默认是成功,否则关键字和条目的相应位进行比较,如果相同则成功否则失败。在比较过程中,如果某位不匹配,那么该条目匹配失败;如果所有位都匹配,那么该条目匹配成功。
TCAM硬件的固有特性使得TCAM非常适合进行精确匹配和前缀匹配,这时可以使用TCAM直接表示这些字段。比如MAC(Media Access Control,介质访问控制)地址表、MPLS(Multi-protocol Label Switching,多协议标签交换)转发表就是精确匹配,而IPv4/v6(Internet Protocol version 4/6,互联网协议第四/六版)路由表则是前缀匹配。但是当TCAM用于范围匹配时,比如TCP/UDP(Transfer Control Protocol/User Datagram Protocol,传输控制协议/用户数据报协议)端口范围,那么这时就无法简单的直接表示这些字段。
TCAM的范围匹配问题一直是应用TCAM的难点,而目前还没有一个很好的方法来解决这个问题。中国专利基于TCAM的解决范围匹配的并行IP包分类器及方法,申请号200510011511,公开号1674557,使用了一种区域编码法来解决范围匹配问题,但是该方法有如下缺点需要对查找关键字进行处理,查找效率低,依赖规则库,需要使用很多扩展位,支持范围个数有限,更新效率低,需要占用额外的TCAM空间等。本发明实现了一种简单的前缀扩展方法,可以有效的解决TCAM范围匹配问题。

发明内容
本发明所要解决的技术问题是提供一种简单易行的实现TCAM范围匹配的前缀扩展方法,以解决TCAM应用于ACL/QoS方面的范围匹配问题。
为实现上述目的,本发明提出了一种实现三重内容可寻址存储器范围匹配的前缀扩展方法,实现报文分类规则匹配中的端口范围匹配或IP地址范围匹配,其中,将规则中需要范围匹配字段的起始值设为完全二叉树的起始节点,迭代找出全部扩展前缀,该找出扩展前缀的步骤具体包括步骤一,判断当前节点是左孩子,还是右孩子;步骤二,若当前节点为右孩子,则所述当前节点单独占用一个前缀,所述当前节点的下一个节点设为新的当前节点,并返回所述步骤一;步骤三,若当前节点为左孩子,则所述当前节点的最大右祖先节点占用一个前缀,所述当前节点的所述最大右祖先节点的最右叶子节点的下一个节点设为新的当前节点,并返回所述步骤一。
上述的实现三重内容可寻址存储器范围匹配的前缀扩展方法,其中,当节点中存在起始节点时,所述步骤一之前还包括将起始节点作为最初的当前节点的步骤。
上述的实现三重内容可寻址存储器范围匹配的前缀扩展方法,其中,当节点中存在终止节点时,所述步骤一还包括以下步骤步骤31,判断所述当前节点是否大于或等于或小于所述终止节点;
步骤32,若所述当前节点大于所述终止节点,则结束迭代;步骤33,若所述当前节点等于所述终止节点,则结束迭代并将所述当前节点加入扩展前缀中;步骤34,若所述当前节点小于所述终止节点,则进行迭代。
上述的实现三重内容可寻址存储器范围匹配的前缀扩展方法,其中,所述步骤三还包括以下步骤步骤41,将所述当前节点的上一层祖先节点设为当前祖先节点;步骤42,判断所述当前祖先节点是左孩子还是右孩子;步骤43,若所述当前祖先节点是右孩子,则所述当前祖先节点为所述当前节点的最大右祖先节点;步骤44,若所述当前祖先节点是左孩子,则将所述当前祖先节点的上一层祖先节点设为新的当前祖先节点,并返回步骤42。
上述的实现三重内容可寻址存储器范围匹配的前缀扩展方法,其中,当节点中存在终止节点时,所述步骤43还包括以下步骤步骤51,判断所述当前祖先节点的最右叶子节点是否大于所述终止节点;步骤52,若是,则将所述当前祖先节点的下一层左孩子设为所述当前节点的最右祖先节点;步骤53,若否,则所述当前祖先节点即为所述当前节点的最右祖先节点。
上述的实现三重内容可寻址存储器范围匹配的前缀扩展方法,其中,当节点中存在终止节点时,所述步骤44还包括以下步骤步骤61,判断所述当前祖先节点的最右叶子节点是否大于所述终止节点;步骤62,若是,则将所述当前祖先节点的下一层左孩子设为所述当前节点的最右祖先节点;步骤63,若否,则将所述当前祖先节点的上一层祖先节点设为新的当前祖先节点,并返回所述步骤42。
上述的实现三重内容可寻址存储器范围匹配的前缀扩展方法,其中,判断所述当前祖先节点的覆盖范围是否大于所述终止节点,判断公式如下L-1+POW2(level)≤N“L”表示所述当前祖先节点覆盖的起始叶子节点,“POW2(level)=2level”表示所述当前祖先节点覆盖的叶子节点个数,“L-1+POW2(level)”就表示所述当前祖先节点覆盖的最右叶子节点,“N”表示所述终止节点。
上述的实现三重内容可寻址存储器范围匹配的前缀扩展方法,其中,当对Wbit字段进行扩展时,Wbit字段在范围[1,2W-2]所扩展的前缀个数最多为2(W-1),所述完全二叉树的高度为W+1,W表示字段bit位数。
上述的实现三重内容可寻址存储器范围匹配的前缀扩展方法,其中,当对IP地址进行范围匹配时,高位使用前缀表示,低位使用所述前缀扩展方法进行扩展。
采用本发明所述方法可以简单有效地实现TCAM的范围匹配。本发明不仅可以支持端口的范围匹配,同时还可以支持IP地址的范围匹配,为使用TCAM实现ACL/QoS提供了一个非常好的解决方法。它的优点如下不改变查找关键字,查找效率高,不依赖规则库,不使用扩展位,支持任意范围,更新效率高,不占用额外的TCAM空间等。


图1是本发明前缀扩展方法的概念描述示意图;图2是本发明前缀扩展方法的证明示意图;图3是本发明前缀扩展方法的流程图;图4是本发明查找最大右祖先节点的流程图;图5是本发明具体实施方式
的示意图。
具体实施例方式
下面结合附图对技术方案的实施作进一步的详细描述本技术方案使用了很多完全二叉树里的概念,图1是本发明前缀扩展方法的概念描述示意图。如图1所示,包括以下概念a.孩子/父节点如果一个二叉树中的某个节点有下一层节点,那么该节点就叫做它下一层节点的父节点;下一层节点就是该节点的孩子节点,左/右边的孩子节点叫左/右孩子。注意孩子/父节点是一个层次相对概念。
b.兄弟/同层节点父节点相同的两个节点叫兄弟节点;同层的其它节点称为同层节点。兄弟节点也是同层节点。
c.左/右祖先节点一个节点沿其左/右侧向上经过的所有节点统称为该节点的左/右祖先节点。
d.叶子/枝干节点最下一层节点称为叶子节点;其它节点称为枝干节点。叶子节点为第0层,枝干节点从第1层开始。
e.节点覆盖范围一个节点沿左右两侧包含的所有节点统称为该节点的覆盖范围。
f.最大左/右祖先节点一个节点M相对于同层左边/右边的一个节点N有一个最大左/右祖先节点,该祖先节点在该层覆盖的节点范围中,最左/右边的节点≥/≤节点N。
g.最左/右叶子节点一个枝干节点覆盖的所有叶子节点中最左/右边的节点称为最左/右叶子节点。
本发明的设计思想在于通过使用一组前缀来表示一个范围。例如4bit表示[3,12]将扩展成0011(3),01xx(4-7),10xx(8-11)和1100(12)。W-bit字段最多扩展成2(W-1)个前缀。
图2是本发明前缀扩展方法的证明示意图。如图所示,要证明本方法必需要阐述以下几个成立的命题,该些命题自身的证明过程,在这里不以说明了。以成立的命题包括a.在相同情况下,跨度越远,所需要的前缀个数越多。相同情况是指两个范围的两个起始节点和两个终止节点都是左/右孩子。
b.对于两个兄弟节点,左边的节点是左孩子,在终止边界相同的情况下,右边的节点需要的前缀个数≥左边节点。
c.对于两个兄弟节点,右边的节点是右孩子,在起始边界相同的情况下,左边的节点需要的前缀个数≥右边节点。
在上述3个命题的前提下,可以推出下述结论1.当起始节点是第一层枝干节点第一个节点的右孩子,终止节点是第一层枝干节点最后一个节点的左孩子时,所需要的前缀个数最多。
2.可以用递归法证明次内层节点包络线可以覆盖上面所说的区域,所以次内层节点的个数即是需要的最大前缀个数。
3.根据完全二叉树特性可得Wbit字段在范围[1,2W-2]所扩展的前缀个数最多为2(W-1)。
图3是本发明前缀扩展方法的流程图。如图所示,对于给定范围[M,N],该方法采用一个逐步迭代的过程,每个迭代过程找出一个前缀,直到找出所有的前缀,具体步骤描述如下步骤S301,把起始节点M赋给一个变量L,该变量用于迭代。
步骤S302,如果L>N则迭代结束跳到步骤S307。
步骤S303,如果L=N则迭代结束,将L节点加入扩展前缀中,然后跳到S307。
步骤S304,如果L是左孩子,跳到S306,判断是否是左孩子只需要将LMOD2,如果为0则为左孩子,否则为右孩子。
步骤S305,L是右孩子,因为L是右孩子,所以不可能使用其祖先节点对其进行覆盖,因此L必须单独占一个前缀,将L节点加入扩展前缀中,同时把L指向其下一个节点,然后跳到步骤S302开始下一轮迭代。
步骤S306,L是左孩子,所以可以使用其祖先节点对其进行覆盖。找到L的最大右祖先节点,该最大右祖先节点一定存在因为N>L,同时该最大右祖先节点满足下面的条件该节点的最右叶子节点≤N,这样就可以使用该祖先节点覆盖一大片节点,把该最大右祖先节点加入扩展前缀中,同时把L指向该最大右祖先节点最右叶子节点的下一个节点,这正好是该祖先节点覆盖的叶子节点区域,然后跳到S302开始下一轮迭代。
步骤S307,迭代结束。
图4是本发明查找最大右祖先节点的流程图。如图所示,具体包括如下步骤步骤S401,设置变量level=1,ancestor=L÷2,level表示当前的节点层次,最下面一层为0,ancestor表示祖先节点所在层的节点序号。因为祖先节点一定存在,所以先将这两个变量设置成第一层祖先,即其父节点。该父节点在第一层,它所在层的节点序号为叶子节点序号L÷2,这是由完全二叉树的特性确定的。
步骤S402,如果ancestor MOD2=0则跳到S404,即判断ancestor节点是否是其父节点的左孩子。因为现在需要找最大右祖先节点,所以这个过程也是一个迭代的过程,所经过的每一层节点都必须是其父节点的左孩子,这样就可以保证是按向右上方向的路径进行遍历。
步骤S403,ancestor是右孩子,这时迭代结束,然后判断当前祖先节点的覆盖范围是否超过N,判断公式如下L-1+POW2(level)≤NL是该祖先节点覆盖的起始叶子节点,POW2(level)=2level表示该祖先节点覆盖的叶子节点个数,那么L-1+POW2(level)就表示该祖先节点覆盖的最右叶子节点。如果最右叶子节点>N,那么说明覆盖的区域已经超过N,所以将level减1,即将祖先节点向下降一级,这样就可以保证最右叶子节点≤N,因为现在的祖先节点在前一轮迭代过程中已经满足该条件。执行完操作后跳到S405。
步骤S404,ancestor是左孩子,第一个条件满足了,然后判断该祖先节点的最右叶子节点是否超过N,判断方法参见S403。如果超过则迭代结束,把level减1,跳到S405;否则说明该层的右祖先节点是合法的,然后继续迭代上一层右祖先节点将level加1,ancestor除以2后跳到S402开始下一轮迭代。
步骤S405,迭代结束。
迭代完成后,L节点在level层的祖先节点即为当前的最大右祖先节点。该祖先节点的表示方法如下假设使用W bits表示,那么L可以表示成bw-1…b1b0,其level层的最大右祖先节点表示方法是将L的低level位置成x,其它位不变,结果如下bw-1…blevel+1blevelxlevel-1…x1x0说明b表示为0/1,x表示任意。
目前的IP地址一般只支持前缀匹配,虽然也可以支持范围匹配,但是范围有限,并且限制的太死,如果要支持灵活的范围匹配,那么如何实现呢?如果直接使用前缀扩展法,那么方法将变得复杂,另外扩展的条目也会太多,尤其是扩展IPv6地址时,所以这个方法行不通。根据IP地址的特点,即使支持范围,主要也是对一些主机地址的限制,比如10.1.1.2~10.1.1.100。根据实际应用情况,主机地址一般都是使用低位进行表示,而高位则是网络地址,这时可以对IP地址采用如下方式表示网络地址(高位)前缀匹配,采用前缀直接表示主机地址(低位)范围匹配,采用前缀扩展方法进行扩展比如可以对IPv4地址的低8位进行前缀扩展,高24位使用前缀表示,这样就可以灵活的实现IP地址的范围匹配。
图5是本发明具体实施方式
的示意图。如图5所示,W=4bit时的情况,根据公式可得最多需要2×(4-1)=6个前缀,范围是[1,14],下面就使用上面的方法找出所有的前缀步骤S501,起点1是一个右孩子,因为1MOD2=1,所以将0001加入扩展前缀中,现在起点=1+1=2。
步骤S502,起点2是一个左孩子,因为2MOD2=0,找到它的最大右祖先节点为001x,该祖先节点的最右叶子节点=3≤14,把001x加入扩展前缀中,现在起点=3+1=4。
步骤S503,起点4是一个左孩子,因为4MOD2=0,找到它的最大右祖先节点为01xx,该祖先节点的最右叶子节点=7≤14,把01xx加入扩展前缀中,现在起点=7+1=8。
步骤S504,起点8是一个左孩子,因为8MOD2=0,找到它的最大右祖先节点为10xx,该祖先节点的最右叶子节点=11≤14,把10xx加入扩展前缀中,现在起点=11+1=12。
步骤S505,起点12是一个左孩子,因为12MOD2=0,找到它的最大右祖先节点为110x,该祖先节点的最右叶子节点=13≤14,把110x加入扩展前缀中,现在起点=13+1=14。
步骤S506,因为起点14=终点14,所以将1110加入扩展前缀中,这时迭代结束。
下面再以步骤S503为例,说明如何找最大右祖先节点步骤01,level=1,ancestor=4÷2=2。
步骤02,因为2MOD2=0(左孩子),4-1+POW2(1)=5≤14,所以level=1+1=2,ancestor=2÷2=1。
步骤03,因为1MOD2=1(右孩子)≠0,所以迭代结束,然后判断4-1+POW2(2)=7≤14,说明当前第2层的祖先节点是合法的最大右祖先节点。因为4表示成0100,所以该祖先节点表示成01xx。
经过上面这些迭代过程后可以得到表示范围[1,14]总共需要6个前缀分别如下
扩展前缀覆盖范围节点个数00011~11001x2~3201xx4~7410xx8~11 4110x12~13 2111014~14 1现在假设查找关键字中的字段值是6,那么0110与0001、001x、01xx、10xx、110x、1110进行TCAM匹配,可得只有01xx匹配,而01xx表示的范围是[4-7],所以结果完全正确。
当然,本发明还可有其它多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的普通技术人员当可根据本发明做出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
权利要求
1.一种实现三重内容可寻址存储器范围匹配的前缀扩展方法,实现报文分类规则匹配中的端口范围匹配或IP地址范围匹配,其特征在于,将规则中需要范围匹配字段的起始值设为完全二叉树的起始节点,迭代找出全部扩展前缀,该找出扩展前缀的步骤具体包括步骤一,判断当前节点是左孩子,还是右孩子;步骤二,若当前节点为右孩子,则所述当前节点单独占用一个前缀,所述当前节点的下一个节点设为新的当前节点,并返回所述步骤一;步骤三,若当前节点为左孩子,则所述当前节点的最大右祖先节点占用一个前缀,所述当前节点的所述最大右祖先节点的最右叶子节点的下一个节点设为新的当前节点,并返回所述步骤一。
2.根据权利要求1所述的实现三重内容可寻址存储器范围匹配的前缀扩展方法,其特征在于,当节点中存在起始节点时,所述步骤一之前还包括将起始节点作为最初的当前节点的步骤。
3.根据权利要求1所述的实现三重内容可寻址存储器范围匹配的前缀扩展方法,其特征在于,当节点中存在终止节点时,所述步骤一还包括以下步骤步骤31,判断所述当前节点是否大于或等于或小于所述终止节点;步骤32,若所述当前节点大于所述终止节点,则结束迭代;步骤33,若所述当前节点等于所述终止节点,则结束迭代并将所述当前节点加入扩展前缀中;步骤34,若所述当前节点小于所述终止节点,则进行迭代。
4.根据权利要求1所述的实现三重内容可寻址存储器范围匹配的前缀扩展方法,其特征在于,所述步骤三还包括以下步骤步骤41,将所述当前节点的上一层祖先节点设为当前祖先节点;步骤42,判断所述当前祖先节点是左孩子还是右孩子;步骤43,若所述当前祖先节点是右孩子,则所述当前祖先节点为所述当前节点的最大右祖先节点;步骤44,若所述当前祖先节点是左孩子,则将所述当前祖先节点的上一层祖先节点设为新的当前祖先节点,并返回步骤42。
5.根据权利要求4所述的实现三重内容可寻址存储器范围匹配的前缀扩展方法,其特征在于,当节点中存在终止节点时,所述步骤43还包括以下步骤步骤51,判断所述当前祖先节点的最右叶子节点是否大于所述终止节点;步骤52,若是,则将所述当前祖先节点的下一层左孩子设为所述当前节点的最右祖先节点;步骤53,若否,则所述当前祖先节点即为所述当前节点的最右祖先节点。
6.根据权利要求4所述的实现三重内容可寻址存储器范围匹配的前缀扩展方法,其特征在于,当节点中存在终止节点时,所述步骤44还包括以下步骤步骤61,判断所述当前祖先节点的最右叶子节点是否大于所述终止节点;步骤62,若是,则将所述当前祖先节点的下一层左孩子设为所述当前节点的最右祖先节点;步骤63,若否,则将所述当前祖先节点的上一层祖先节点设为新的当前祖先节点,并返回所述步骤42。
7.根据权利要求5、6所述的实现三重内容可寻址存储器范围匹配的前缀扩展方法,其特征在于,判断所述当前祖先节点的覆盖范围是否大于所述终止节点,判断公式如下L-1+POW2(level)≤N“L”表示所述当前祖先节点覆盖的起始叶子节点,“POW2(level)=2level”表示所述当前祖先节点覆盖的叶子节点个数,“L-1+POW2(level)”就表示所述当前祖先节点覆盖的最右叶子节点,“N”表示所述终止节点。
8.根据权利要求1所述的实现三重内容可寻址存储器范围匹配的前缀扩展方法,其特征在于,当对Wbit字段进行扩展时,Wbit字段在范围[1,2W-2]所扩展的前缀个数最多为2(W-1),所述完全二叉树的高度为W+1,W表示字段bit位数。
9.根据权利要求1所述的实现三重内容可寻址存储器范围匹配的前缀扩展方法,其特征在于,当对IP地址进行范围匹配时,高位使用前缀表示,低位使用所述前缀扩展方法进行扩展。
全文摘要
本发明提出了一种实现三重内容可寻址存储器范围匹配的前缀扩展方法,实现报文分类规则匹配中的端口范围匹配或IP地址范围匹配,其中,将规则中需要范围匹配字段的起始值设为完全二叉树的起始节点,迭代找出全部扩展前缀,该找出扩展前缀的步骤具体包括步骤一,判断当前节点是左孩子,还是右孩子;步骤二,若当前节点为右孩子,则所述当前节点单独占用一个前缀,所述当前节点的下一个节点设为新的当前节点,并返回所述步骤一;步骤三,若当前节点为左孩子,则所述当前节点的最大右祖先节点占用一个前缀,所述当前节点的所述最大右祖先节点的最右叶子节点的下一个节点设为新的当前节点,并返回所述步骤一。
文档编号H04L29/06GK101039253SQ20061001151
公开日2007年9月19日 申请日期2006年3月17日 优先权日2006年3月17日
发明者王俊川, 姚学军, 于伟 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1