专利名称:实现三重内容可寻址存储器范围匹配的分段编码扩展方法
技术领域:
本发明涉及计算机网络技术领域,尤其涉及使用TCAM(TernaryContent Addressable Memory,三重内容可寻址存储器)实现ACL/QoS(Access Control List/Quality of Service,访问控制列表/服务质量)方面的技术,主要应用在路由器、交换机、防火墙、入侵检测系统等网络设备。
背景技术:
现今的网络设备中,大多都需要实现ACL/QoS,这些技术中最关键部分就是规则匹配,但是因为规则中的字段很多,匹配方式也不同,所以当规则很多时,匹配速度就成了性能瓶颈。现以ACL举例,传统的ACL由五元组构成源IP地址,目的IP地址,源端口号,目的端口号,协议。一般的实现中,IP地址使用前缀匹配,协议使用精确匹配,而端口则使用范围匹配。目前实现ACL主要有两种途径,一种是使用软件实现,最典型的就是RFC(Recursive Flow 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应用于ACL/QoS方面的范围匹配问题,提供一种高效的方法实现范围扩展。
为达到上述目的,本发明提供了一种实现三重内容可寻址存储器范围匹配的分段编码扩展方法,适用于网络设备中使用三重内容可寻址存储器的范围匹配,其特点在于,将需要进行范围匹配的字段分成多个分段,引入一个扩展函数,该扩展函数能使用一个三重内容可寻址存储器的条目表示每个分段内的任意范围,然后对于每个分段使用所述扩展函数进行扩展,从而通过对所述字段进行分段编码的方式来实现三重内容可寻址存储器应用于访问控制列表或服务质量方面的范围匹配。
上述的方法,其特点在于,按照如下方式将需要进行范围匹配的字段分成多个分段判断是否能分成相同长度的分段,是则分成相同长度的分段以得到最好的平均扩展倍数和扩展比特位数,否则按照分段长度从小到大的顺序排列各分段以减少平均扩展条目数,从而获得良好的扩展系数。
上述的方法,其特点在于,所述扩展函数利用三重内容可寻址存储器条目的每个位的三种状态0、1、x,来表示每个分段内的任意范围。
上述的方法,其特点在于,所述扩展函数为如下形式f_expand(I)=(2W-1-I)个0+(I)个1;其中W表示字段比特位数,I表示W可以表示的数值范围;如用闭区间[M,N]来表示所有的范围,则所述扩展函数将所有的范围表示如下≥M表示为(2W-1-M)个x+(M)个1;≤N表示为(2W-1-N)个0+(N)个x;M≤I≤N表示为(2W-1-N)个0+(N-M)个x+(M)个1。
上述的方法,其特点在于,在添加规则时对需要进行范围匹配的字段进行扩展,扩展的过程是一个完全多叉树的迭代过程,每次迭代都找出一个扩展条目然后进行分段编码,直到找出所有的扩展条目。
上述的方法,其特点在于,在查找规则时对需要进行范围匹配的字段进行分段编码处理后再进行查找。
上述的方法,其特点在于,对IP地址采用如下措施实现范围匹配对IP地址的高位使用前缀表示,对IP地址的低位使用分段编码扩展方法进行扩展。
上述的方法,其特点在于,所述完全多叉树的迭代过程包括如下步骤步骤401,把起始节点M赋给一个用于迭代的变量L;步骤402,如果L>N则跳到步骤409;步骤403,如果N≤L父节点的最右孩子,则L和N是兄弟节点,把[L~N]进行编码并加入扩展条目中,然后跳到步骤409;步骤404,如果L是最左孩子,跳到步骤406;步骤405,L是右孩子,把L到其父节点的最右孩子进行编码并加入扩展条目中,同时把L指向父节点最右孩子的下一个节点,然后跳到步骤402以开始下一轮迭代;步骤406,L是最左孩子,使用L的祖先节点进行覆盖,找到L的最大右祖先节点,因为N>L该最大右祖先节点一定存在,同时该最大右祖先节点满足下面的条件该节点的最右叶子节点≤N;步骤407找到该最大右祖先节点的一个最大同层节点,因为N>L该最大同层节点一定存在,同时该最大同层节点满足下面的条件该节点的最右叶子节点≤N;步骤408,如果最大同层节点≤最大右祖先节点的最右兄弟节点,那么最大同层节点和最大右祖先节点是兄弟节点,能够进行编码,因此把L的最大右祖先节点到最大同层节点进行编码并加入扩展条目中,L指向最大同层节点最右叶子节点的下一个节点;否则最大同层节点和最大右祖先节点不是兄弟节点,不能进行编码,因此把L的最大右祖先节点到L的最右兄弟节点进行编码并加入扩展条目中,L指向最右兄弟节点最右叶子节点的下一个节点,跳到步骤402;步骤409,迭代结束。
上述的方法,其特点在于,对于IPv4访问控制列表采用“4-4-4-4”的分段形式。
上述的方法,其特点在于,对于IPv6访问控制列表采用“4-4-4-4”或“5-5-6”的分段形式。
本发明的技术效果在于采用本发明所述方法可以简单高效的实现TCAM的范围匹配。本发明不仅可以支持端口的范围匹配,同时还可以支持IP地址的范围匹配,为使用TCAM实现ACL/QoS提供了一个非常好的解决方法。它的优点如下查找效率高,不依赖规则库,支持任意范围,更新效率高,扩展系数低,不占用额外的TCAM空间等。
图1是分段编码扩展方法用到的概念描述;图2是分段编码扩展方法中的编码原理图;图3是分段编码扩展方法的证明示意图;图4是分段编码扩展方法的流程图;图5是具体实施方式
中使用的例子;图6是具体实施方式
中使用的例子。
具体实施例方式
下面结合附图对技术方案的实施作进一步的详细描述(1)基本概念介绍本技术方案使用了很多完全多叉树里的概念,下面进行介绍,请参考图1进行阅读(a)孩子/父节点如果一个多叉树中的某个节点有下一层节点,那么该节点就叫做它下一层节点的父节点;下一层节点就是该节点的孩子节点,最左/右边的孩子节点叫最左/右孩子,最左孩子的右边孩子节点叫右孩子,最右孩子的左边孩子节点叫左孩子。注意孩子/父节点是一个层次相对概念。
(b)兄弟/同层节点父节点相同的两个节点叫兄弟节点;同层的其它节点称为同层节点。最左/右边的兄弟节点叫最左/右兄弟节点,兄弟节点也是同层节点。
(c)左/右祖先节点一个节点沿其左/右侧向上经过的所有节点统称为该节点的左/右祖先节点。
(d)叶子/枝干节点最下一层节点称为叶子节点;其它节点称为枝干节点。叶子节点为第0层,枝干节点从第1层开始。
(e)节点覆盖范围一个节点沿左右两侧包含的所有节点统称为该节点的覆盖范围。
(f)最大左/右祖先节点一个节点M相对于同层左边/右边的一个节点N有一个最大左/右祖先节点,该祖先节点在该层覆盖的节点范围中,最左/右边的节点≥/≤节点N。
(g)最左/右叶子节点一个枝干节点覆盖的所有叶子节点中最左/右边的节点称为最左/右叶子节点。
(2)方法介绍W表示字段bit位数,那么可以表示的数值范围为I=
定义扩展函数f_expand(I)=(2W-1-I)个0+(I)个1对于所有的范围,都可以使用闭区间[M,N]来表示。由上面的函数特性以及图2可以总结出≥M可以表示为(2W-1-M)个x+(M)个1≤N可以表示为(2W-1-N)个0+(N)个xM≤I≤N可以表示为(2W-1-N)个0+(N-M)个x+(M)个1使用上面的编码方法,任何一个范围都可以使用一个TCAM条目表示,但是对于一个W bit的字段就要扩展成2W-1个bit,存储和查找时都要将字段进行编码处理。如果要表示16bit的端口号,那么则需要65535bit,显然无法实现。这时可以采用Multi-bit Trie表的思想将字段分段后再进行编码,具体方法如下
对于W bit的字段将其分成K0,K1,K2,...,Kt-1共T个分段;对于任意的Ki,Ki≥1;对于任意的Ki和Kj,Ki可以不等于Kj,即每个分段可不等;当K0=1时,一个范围最多扩展成2(T-1)个条目;当K0>1时,一个范围最多扩展成2T-1个条目;W bit的字段将扩展成(2K0-1)+(2K1-1)+...+(2Kt-1-1)bit;如果每个分段的长度相同为K(K>1),那么一个范围最多扩展成2(W÷K)-1个条目,W bit的字段将扩展成(W÷K)×(2W/K-1)bit。
分段原则如下(a)最好平均分配各段的长度,这样可以得到最好的平均扩展倍数和扩展bit位数;(b)各分段按分段的长度进行递增排列可以减少平均扩展条目数。
(3)方法证明命题(下面几个命题是成立的,这里就不证明了)(a)在相同情况下,跨度越远,所需要的条目个数越多。相同情况是指两个范围的两个起始节点和两个终止节点都是最左/右孩子,或者都是非最左/右孩子。
(b)对于两个兄弟节点,如果左边的节点是最左孩子,那么在终止边界相同情况下,右边的节点需要的条目个数≥左边节点。
(c)对于两个兄弟节点,如果右边的节点是最右孩子,那么在起始边界相同情况下,左边的节点需要的条目个数≥右边节点。
(d)对于两个节点,如果它们都是同一个父节点的右孩子,那么在终止边界相同的情况下,它们需要的条目个数相同。
(e)对于两个节点,如果它们都是同一个父节点的左孩子,那么在起始边界相同的情况下,它们需要的条目个数相同。
(f)对于任意一个节点的所有孩子中任意范围的孩子都可以使用一个编码来表示这些孩子。
结论(a)通过上面6个命题可以得到,当起始节点是第一层枝干节点第一个节点的右孩子,终止节点是第一层枝干节点最后一个节点的左孩子时,所扩展的条目个数最多。
(b)可以用递归法证明次内层节点包络线可以覆盖上面所说的区域,所以次内层节点的个数即是扩展的最大条目个数。
(c)可以用递归法证明当第一个分段的位数=1时,一个范围最多扩展成2(T-1)个条目。
(d)可以用递归法证明当第一个分段的位数>1时,一个范围最多扩展成2T-1个条目。
(e)根据完全多叉树特性可得如果W bit字段的每个分段长度相同为K(K>1),那么范围[1~(2K-1),(2W-2K)~(2W-2)]扩展的条目数最多为2(W÷K)-1。
证明示意图见图3。
(4)方法实现对于给定范围[M,N],进行前缀扩展方法的流程图见图4。该方法采用一个逐步迭代的过程,每个迭代过程找出一个扩展条目,直到找出所有的扩展条目,具体步骤描述如下步骤401把起始节点M赋给一个变量L,该变量用于迭代。
步骤402如果L>N则迭代结束跳到步骤409。
步骤403如果N≤L父节点的最右孩子则迭代结束,这时L和N是兄弟节点,把[L~N]进行编码并加入扩展条目中,然后跳到步骤409。
步骤404如果L是最左孩子,跳到步骤406。
步骤405到这一步,L是右孩子。因为L是右孩子,所以不可能使用其祖先节点对其进行覆盖。把L到其父节点的最右孩子进行编码并加入扩展条目中,同时把L指向父节点最右孩子的下一个节点,然后跳到步骤402开始下一轮迭代。
步骤406到这一步,L是最左孩子,可以使用其祖先节点对其进行覆盖。找到L的最大右祖先节点,该最大右祖先节点一定存在因为N>L,同时该最大右祖先节点满足下面的条件该节点的最右叶子节点≤N步骤407找到该最大右祖先节点的一个最大同层节点,该最大同层节点一定存在因为N>L,同时该最大同层节点满足下面的条件
该节点的最右叶子节点≤N步骤408如果最大同层节点≤最大右祖先节点的最右兄弟节点,那么最大同层节点和最大右祖先节点是兄弟节点,可以进行编码,因此把L的最大右祖先节点到最大同层节点进行编码并加入扩展条目中,L指向最大同层节点最右叶子节点的下一个节点。否则最大同层节点和最大右祖先节点不是兄弟节点,不可以进行编码,因此把L的最大右祖先节点到其最右兄弟节点进行编码并加入扩展条目中,L指向最右兄弟节点最右叶子节点的下一个节点。跳到步骤402开始下一轮迭代。
步骤409迭代结束。
当采用分段编码扩展方法扩展字段时,字段已经被处理过了,所以相应查找方式也要变化,不过非常简单,只需要把查找关键字中被编码扩展的字段采用同样的方式进行分段编码即可进行查找。
(5)端口的分段方法对于16位端口号,如果采用4-4-4-4分段,那么最多扩展成7×7=49个条目,需要额外的(15×4-16)×2=88bit进行编码;如果采用5-5-6分段,那么最多扩展成5×5=25个条目,需要额外的(31×2+63-16)×2=218bit进行编码。而一般的ACL组成为<acl-id><src-ip><dest-ip><src-port><dest-port><proto>
TCAM条目的宽度一般为72bit,144bit,288bit,576bitIPv4 ACL=8+32+32+16+16+8=112bit,所以采用288bit条目4-4-4-4分段是合理的,因为112+88=200bit<288bitIPv6 ACL=8+128+128+16+16+8=304bit,所以采用576bit条目5-5-6分段是合理的,因为304+218=522bit<576bit,当然也可以使用4-4-4-4分段,虽然扩展系数变大,但是等分段实现起来要比不等分段简单很多。
(6)IP地址的范围匹配目前的IP地址一般只支持前缀匹配,虽然也可以支持范围匹配,但是范围有限,并且限制的太死,如果要支持灵活的范围匹配,虽然可以直接使用分段编码扩展法,但是扩展的条目数太多,尤其是当扩展IPv6地址时,所以这个方法行不通。根据IP地址的特点,即使支持范围,主要也是对一些主机地址的限制,比如10.1.1.6~10.1.1.24。根据实际应用情况,主机地址一般都是使用低位进行表示,而高位则是网络地址,这时可以对IP地址采用如下方式表示网络地址(高位)前缀匹配,采用前缀直接表示主机地址(低位)范围匹配,采用分段编码扩展方法进行扩展比如可以对IPv4地址的低8位进行4-4分段编码扩展,高24位使用前缀表示。这样就可以灵活的实现IP地址的范围匹配。
(7)具体例子如图5所示,W=4bit,K=2bit,进行2-2分段,那么根据公式可得需要扩展成2×(22-1)=6bit,最多需要2×(4÷2)-1=3个条目,范围是[1~3,12~14],下面就使用上面的方法找出[1,14]扩展的所有条目步骤501起点1是一个右孩子,所以将[1~3]进行编码,并加入扩展条目中,现在起点=3+1=4。
00 01→000 00100 11→000 111[1,3]→000 xx1步骤502起点4是一个最左孩子,找到它的最大右祖先节点为01xx,该祖先节点的最右叶子节点=7≤14;找到该祖先节点的最大同层节点为10xx,该同层节点的最右叶子节点=11≤14。因为最大右祖先节点和最大同层节点是兄弟节点,所以将
进行编码,并加入扩展条目中,现在起点=11+1=12。
01 xx→001 xxx10 xx→011 xxx[4,11]→0x1 xxx步骤503起点12是一个最左孩子,而14和它是兄弟节点,所以将[12~14]进行编码,并加入扩展条目中,这时迭代结束。
11 00→111 00011 10→111 011[12,14]→111 0xx经过上面这些迭代过程后可以得到表示范围[1,14]总共需要3个前缀分别如下
扩展条目 覆盖范围 节点个数000 xx11~3 30x1 xxx4~118111 0xx12~14 3现在假设查找关键字中的字段值是6,将其扩展变成01 10→001 011然后使用001 011与000 xx1、0x1 xxx、111 0xx进行TCAM匹配,可得只有0x1 xxx匹配,而0x1 xxx表示的范围是[4-11],所以结果完全正确。
图6是另一个更复杂的例子,W=6bit,K=2bit,进行2-2-2分段,那么根据公式可得需要扩展成3×(22-1)=9bit,最多需要3×(4÷2)-1=5个条目,范围是[1~3,60~62],扩展方法与上面的例子基本类似,下面主要说一下不同的地方。当迭代到节点4时,起点4是一个最左孩子,找到它的最大右祖先节点为0001xx,最大同层节点为1110xx,因为最大右祖先节点和最大同层节点不是兄弟节点,所以将0001xx到其最右兄弟节点0011xx进行编码即
,并加入扩展条目中,现在起点=15+1=16。
00 01 xx→000 001 xxx00 11 xx→000 111 xxx[4,15]→000 xx1 xxx以上所述仅为本发明的较佳实施例,并非用来限定本发明的实施范围;凡是依本发明所作的等效变化与修改,都被本发明的专利范围所涵盖。
权利要求
1.一种实现三重内容可寻址存储器范围匹配的分段编码扩展方法,适用于网络设备中使用三重内容可寻址存储器的范围匹配,其特征在于,将需要进行范围匹配的字段分成多个分段,引入一个扩展函数,该扩展函数能使用一个三重内容可寻址存储器的条目表示每个分段内的任意范围,然后对于每个分段使用所述扩展函数进行扩展,从而通过对所述字段进行分段编码的方式来实现三重内容可寻址存储器应用于访问控制列表或服务质量方面的范围匹配。
2.根据权利要求1所述的方法,其特征在于,按照如下方式将需要进行范围匹配的字段分成多个分段判断是否能分成相同长度的分段,是则分成相同长度的分段以得到最好的平均扩展倍数和扩展比特位数,否则按照分段长度从小到大的顺序排列各分段以减少平均扩展条目数,从而获得良好的扩展系数。
3.根据权利要求1或2所述的方法,其特征在于,所述扩展函数利用三重内容可寻址存储器条目的每个位的三种状态0、1、x,来表示每个分段内的任意范围。
4.根据权利要求3所述的方法,其特征在于,所述扩展函数为如下形式f_expand(I)=(2W-1-I)个0+(I)个1;其中W表示字段比特位数,I表示W可以表示的数值范围;如用闭区间[M,N]来表示所有的范围,则所述扩展函数将所有的范围表示如下≥M表示为(2W-1-M)个x+(M)个1;≤N表示为(2W-1-N)个0+(N)个x;M≤I≤N表示为(2W-1-N)个0+(N-M)个x+(M)个1。
5.根据权利要求3所述的方法,其特征在于,在添加规则时对需要进行范围匹配的字段进行扩展,扩展的过程是一个完全多叉树的迭代过程,每次迭代都找出一个扩展条目然后进行分段编码,直到找出所有的扩展条目。
6.根据权利要求5所述的方法,其特征在于,在查找规则时对需要进行范围匹配的字段进行分段编码处理后再进行查找。
7.根据权利要求5所述的方法,其特征在于,对IP地址采用如下措施实现范围匹配对IP地址的高位使用前缀表示,对IP地址的低位使用分段编码扩展方法进行扩展。
8.根据权利要求5所述的方法,其特征在于,所述完全多又树的迭代过程包括如下步骤步骤401,把起始节点M赋给一个用于迭代的变量L;步骤402,如果L>N则跳到步骤409;步骤403,如果N≤L父节点的最右孩子,则L和N是兄弟节点,把[L~N]进行编码并加入扩展条目中,然后跳到步骤409;步骤404,如果L是最左孩子,跳到步骤406;步骤405,L是右孩子,把L到其父节点的最右孩子进行编码并加入扩展条目中,同时把L指向父节点最右孩子的下一个节点,然后跳到步骤402以开始下一轮迭代;步骤406,L是最左孩子,使用L的祖先节点进行覆盖,找到L的最大右祖先节点,因为N>L该最大右祖先节点一定存在,同时该最大右祖先节点满足下面的条件该节点的最右叶子节点≤N;步骤407找到该最大右祖先节点的一个最大同层节点,因为N>L该最大同层节点一定存在,同时该最大同层节点满足下面的条件该节点的最右叶子节点≤N;步骤408,如果最大同层节点≤最大右祖先节点的最右兄弟节点,那么最大同层节点和最大右祖先节点是兄弟节点,能够进行编码,因此把L的最大右祖先节点到最大同层节点进行编码并加入扩展条目中,L指向最大同层节点最右叶子节点的下一个节点;否则最大同层节点和最大右祖先节点不是兄弟节点,不能进行编码,因此把L的最大右祖先节点到L的最右兄弟节点进行编码并加入扩展条目中,L指向最右兄弟节点最右叶子节点的下一个节点,跳到步骤402;步骤409,迭代结束。
全文摘要
本发明公开了一种实现三重内容可寻址存储器范围匹配的分段编码扩展方法,适用于网络设备中使用三重内容可寻址存储器的范围匹配,其特征在于,将需要进行范围匹配的字段分成多个分段,引入一个扩展函数,该扩展函数能使用一个三重内容可寻址存储器的条目表示每个分段内的任意范围,然后对于每个分段使用所述扩展函数进行扩展,从而通过对所述字段进行分段编码的方式来实现三重内容可寻址存储器应用于访问控制列表或服务质量方面的范围匹配。本发明可简单高效的实现三重内容可寻址存储器的范围匹配,不仅支持端口的范围匹配,同时支持IP地址的范围匹配,查找效率高,不依赖规则库,支持任意范围,扩展系数低,不占用额外的TCAM空间。
文档编号G06F17/30GK101035061SQ20061001146
公开日2007年9月12日 申请日期2006年3月9日 优先权日2006年3月9日
发明者王俊川, 郑其杉, 胡龙斌 申请人:中兴通讯股份有限公司