三重内容可寻址内存协助的包分类的制作方法_3

文档序号:8399490阅读:来源:国知局
理对两个没有父子关系的前缀也可成立。例如,Q5(带标签D3)和Q4(带标签Dl)没有父子关系,因此可将Dl和D3设计为使以下两个等式成立:
[0050]D3.Value&Dl.Mask ! = Dl.Value&Dl.Mask (3)
[0051]Dl.Value&D3.Mask ! = D3.Value&D3.Mask (4)
[0052]对图4中的值进行快速验证可以证明等式(3)和(4)都成立。应理解,只要父前缀和子前缀的关系可以验证,标签中的Value和Mask部分可使用任意适当的值。
[0053]现在重新参考图3。在一实施例中,在搜索所述哈希化分trie树A时,在其源分trie树部分进行的源网络地址查找可同时返回最短前缀匹配(SPM)(用S.SPM表示)和最长前缀匹配(LPM)(用S.LPM表示)的标签。同样,在其目的分trie树部分进行的目的网络地址查找可同时返回所述SPM(用D.SPM表示)和LPM(用D.LPM表示)的标签。例如,假设收到的包(带源地址和目的地址)匹配到规则R7,其中规则R7与源前缀Pl (标签为SI)和目的前缀Q5(标签为D3)相关联。在查找过程中,可将所述源地址的比特与所述trie树120中的源地址进行匹配。如果匹配到R7,查找结果可返回标签SO为S.SPM, SI为S.LPM。进一步地,可将所述目的地址的比特与所述trie树150中的目的地址进行匹配。如果匹配到R7,查找结果可返回标签DO为D.SPM, D3为D.LPM。
[0054]在一实施例中,可生成第二哈希键,用于定位乘积表中的表项(或者根据具体实现,定位乘积表表项的字段)。所述第二哈希键的生成可考虑最短匹配的标签的Value部分(用S.SPM.Value和D.SPM.Value表示)以及所述哈希化分trie树表中的哈希化分trie树地址。例如,对于匹配规则R7的包,其对应的第二哈希键可用标签S0、标签DO及所述哈希化分trie树A的地址进行计算。为描述清晰,规则R7对应的所述第二哈希键,在图3中用(S0,D0)表示,可用来访问乘积表的表项U。注意在所述哈希键的计算中可不需要SO和DO的Mask部分(使用Value部分)。
[0055]所述乘积表表项U内的字段可将所述哈希化分trie树A的标签与所述数据库100中的规则相关联。例如,可将规则R7与字段(SI,D3)关联,其中SI对应S.LPM, D3对应D.LPMo由于对分trie树(如所述哈希化分trie树A)的查找可返回S.SPM, S.LPM,D.SPM及D.LPM,在满足以下两个条件时,可将所述结果看作与具有源标签(用FS表示)和目的标签(用FD表示)的字段相匹配:
[0056]条件1:
[0057]FS与S.SPM或S.LPM相同,或者FS为S.SPM的子标签及S.LPM的父标签。
[0058]条件2:
[0059]FD与D.SPM或D.LPM相同,或者FD为D.SPM的子标签及D.LPM的父标签。
[0060]所述条件I和2可通过以下举例进行理解。从图1可以看出,规则R8和规则R7具有相同的源前缀Pl,相同的源端口和目的端口,及相同的协议,且R8的目的前缀Q3为R7的目的前缀Q5的父前缀,因此R8包含R7。第一示例中,假定包包括的(源地址,目的地址)为(010000,110000)。使用所述源地址和目的地址的查找可返回SO为S.SPM, SI为S.LPM,DO为D.SPM,以及D3为D.LPM。应用上述条件I和2,可以看出字段(SI,D0)和(SI,D3),由于同时满足条件I和2,因此都与查找结果匹配,而字段(SO,Dl)和(SO,D2),由于不满足条件2,因此与查找结果不匹配。在第二示例中,假定(源地址,目的地址)为(010000,100000)的键返回SO为S.SPM, SI为S.LPM, DO为D.SP,以及Dl为D.LPM0在所述第二示例中,由于D2和D3不满足条件2,因此字段(SO,D2)and(Sl,D3)与所述键不匹配。但是,字段(SI,D0)和(SO,Dl),由于同时满足条件I和2,因此与所述键相匹配。这些字段的关联规则为R8和R9,所述规则R8和R9有交叉。具体地,所述R9对应的源前缀PO为所述R8对应的源前缀Pl的父前缀,而所述R8对应的目的前缀Q3为所述R9对应的目的前缀Q4的父前缀。进一步地,由于共享同样的源端口、目的端口及协议,因此所述规则R8和R9为相交规则。
[0061]在一实施例中,乘积表表项U内的字段可根据其关联规则的优先级进行排序,所述优先级可通过规则表确定。例如,可认为所述乘积表表项U中的第一个匹配字段具有最高优先级。这样,具有地址比特(010000,110000)的包可解析为与规则R7关联的(S1,D3),而具有地址比特(010000,100000)的包可解析为与规则R8关联的(SI,D0)。
[0062]如图3所示,乘积表可用于将规则映射到多维度的标签。在乘积表表项中,每个字段可具有指向规则表中的关联数据的索引或指针,并且所述规则表中的每个表项可储存对应其匹配规则的源端口、目的端口及协议的信息。在使用中,可将包的源端口、目的端口和协议字段与所述规则表中的关联表项进行比较,匹配即表明所述包的完整分类。从而,可实现通过多维的哈希化分trie树及乘积表进行高效搜索,进行规则匹配。
[0063]图3中,可以看出一些所述哈希化分trie树在其源分trie树部分的标签中可不具有父子关系。例如,所述哈希化分trie树F的源分trie树部分的标签没有父子关系。这样,从所述分trie树F到所述乘积表的两个哈希键中的每一个可与同一字段的项相关联。这是因为分trie树F与叶子规则(如RO和R6)相关联,所述叶子规则有至少一个具有叶子前缀(如,P2为规则RO的源前缀)的维度。在使用中,如果所述规则数据库由叶子规则主导,则所述乘积表结构及搜索过程可相应简化以获得益处,如节省芯片面积。
[0064]注意,除了储存多维哈希化分trie树的公共根节点外,TCAM(如所述TCAM 210)还可用于储存包分类规则(如R0-R9中的一条或多条)。为支持包同时匹配所述TCAM中的规则和所述TCAM中的trie/分trie树的情况,所述TCAM可用于支持多匹配指示。在一实施例中,TCAM AD表(如所述TCAM AD表220)中的表项可指示其关联TCAM表项是规则还是分trie树根节点。如果所述TCAM表项为规则,则所述TCAM AD表项可进一步指示与所述规则对应的优先级信息及动作表指针。
[0065]进一步地,当包匹配所述TCAM中的多条规则和所述TCAM中的trie/分trie树根节点时,所述优先级信息可用于选择具有最高优先级的规则。对于匹配的分trie树根节点,其在分trie树表(如,所述分trie树表230)、乘积表(如所述乘积表240)和规则表(如所述规则表250)中的关联表项可用本发明所述的流程进行搜索。可在所述规则表中添加规则优先级字段和动作表指针。可通过比较所述规则表中的优先级并从所述匹配的规则(储存在所述TCAM 210中)中选出最高优先级来进行优先级选择。进一步地,可使用优先级选择模块(如所述优先级选择模块260)选择具有较高优先级的规则,以对动作表(所述动作表270)进行索引。
[0066]所公开的各实施例可应用于网络地址匹配所述TCAM中多个分trie树根节点的情况。此时,由于支持多匹配,通常昂贵的TCAM可仍然只搜索一次,而其他数据结构,包括所述分trie树表、所述乘积表和/或所述规则表可搜索两次或两次以上。对所述其他数据结构的每次搜索可针对每个匹配的TCAM分trie树根节点。而且,可进行优先级选择,找出具有最高优先级的匹配规则,以对所述动作表进行索引。
[0067]图5示出了包分类方法500的一个实施例,所述方法可由包括处理器系统(如,所述系统200)的网络设备实现。从步骤510开始,所述方法500可获取或接收包括源地址和目的地址的包。注意所述包可在本地获取,或从其他网络设备远程获取,可采用任意适当结构作为其格式,并且可包括其他信息维度,如源端口、目的端口、协议等。
[0068]在步骤520,所述方法500可确定所述源地址中一个或多个最高有效位(MSB)与TCAM(如所述TCAM 210)中储存的源地址前缀的匹配项,或所述目的地址中一个或多个MSB与所述TCAM中储存的目的地址前缀的匹配项,或两者。如前所述,如果储存在所述TCAM中的源地址前缀或目的地址前缀就是“*”,则任意收到的包都可视为与其匹配。
[0069]在步骤530,所述方法500可基于与所述源地址前缀和所述目的地址前缀的至少一个相关联的数据生成哈希键,其中所述关联数据储存于至少一个非TCAM内存(如,所述TCAM AD表220)。例如,所述TCAM AD表中的表项可指定用什么信息来计算所述哈希键,如,是否使用与所述源地址前缀,或所述目的地址前缀、或所述两者关联的数据。进一步地,用于计算所述哈希键的所述信息可包括,例如,PartKey (TCAM中的前缀之后的一些比特)和对应TCAM表项的地址或为所述TCAM表项分配的软件定义标识。
[0070]在步骤540,所述方法500可用所述哈希键搜索储存于所述至少一个非TCAM内存中的多维trie树。例如,所述多维trie树可储存为分trie树表中的哈希化分trie树,且可在搜索过程中定位属于所述哈希化多维trie树的多个分trie树(如,源分trie树和目的分trie树)。在步骤540,所述方法500可基于所述搜索将所述收到的包映射到一条或多条规则。注意映射所述包还可进一步基于其他结果,因此术语“基于”可指示完全或部分的相关性。在步骤550,所述方法500可将所述源地址中的比特(如所述PartKey后的比特)与属于所述分trie树的一个或多个源地址前缀进行匹配。在步骤560,所述方法将所述目的地址中的比特(如所述PartKey后的比特)与属于所述分trie树的至少一个目的地址前缀进行匹配。在一实施例中,所述一个或多个匹配过的源地址前缀包括SPM和LPM,其中所述SPM的标签可表示为S.SPM,所述LPM的标签可表示为S.LPM ;所述至少一个匹配过的目的地址前缀包括SPM和LPM,其中所述SPM的标签可表示为D.SPM,所述LPM的标签可表示为D.LPM。因此,在搜索所述多维trie树后可返回所述S.SPM、S.LPM、D.SPM及D.LPM。
[0071]在步骤570,所述方法可,对所述接收的包,基于所述一个或多个匹配过的源地址前
当前第3页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1