一种数据处理方法和装置制造方法及图纸

技术编号:13964173 阅读:121 留言:0更新日期:2016-11-08 12:10
本发明专利技术实施例公开了一种数据处理方法和装置,应用于多位树,获取所述多位树的结构中包括至少一个Trie节点和对应的Prefix节点,Prefix节点的容量小于等于预设容量,Prefix节点包括PLPM、对应Trie节点中的路由前缀和对应Trie节点中路由前缀的下一跳信息,进行迭代操作,直到迭代后得到的多位树的总容量小于等于所述预设容量。可见,迭代后的多位树更加适合存放于缓存中,且Prefix节点中直接保存了PLPM和对应Trie节点中路由前缀的下一跳信息,使得在路由查找的过程中可以在得到匹配结果时直接获得对应的下一跳信息,由此减少了路由查找的访存次数,也减少了缓存失效的次数,直接提高了查找效率。

【技术实现步骤摘要】

本专利技术涉及数据处理领域,特别是涉及一种数据处理方法和装置
技术介绍
路由查找是根据报文的目的IP地址,查找路由器中的路由表,得到报文下一跳信息的过程。路由表中的每条路由都是一个路由前缀。路由前缀可以用‘0’,‘1’和‘*’组成的三值位串表示。如IPv4前缀192.168.1.0/24可以用下面的三值位串表示:110000001010100000000001********。‘*’表示不关心,既可以跟‘1’匹配,也可以跟‘0’匹配。所以,两个IPv4地址192.168.1.1和192.168.1.2都跟前缀192.168.1.0/24匹配。当后面有多个‘*’时,一般只写一个‘*’。比如‘01*’,表示前两位的值为“01”,后面的位都是‘*’。路由查找是一个最长前缀匹配(LPMLongestPrefixMatch)问题。当有多条前缀跟输入的IP地址匹配时,掩码最长的匹配前缀对应的下一跳信息才是最终的查找结果。假设IP地址的长度为9位,如果路由表中有两个前缀“01*”和“010*”,则IP地址010100101跟这两个前缀都匹配,但因为前缀“010*”比“01*”长,所以,“010*”才是最长的匹配前缀,它对应的下一跳信息才是最终的查找结果。现有技术中常用的路由查找算法主要是使用多位树(Multi-BitTrie),多位树可以理解为,根据路由前缀中的位串建立一棵二叉树,在二叉树中,如果当前位的值为‘0’则向左走一步,如果为‘1’则向右走一步。每次考虑的位数一般是固定多位,所述位数也可以理解为多位数的步长。如图1所示,图1为现有技术中多位树的结构示意图。其中p0的前缀为*,p1的前缀为0*,p2的前缀为10*,p3的前缀为111*,p4的前缀为0000*,p5的前缀为1001*,p6的前缀为11101*,p7的前缀为11111*,p8的前缀为000011*,p9的前缀为0000100*,p10的前缀为1110100*。假设步长为3,二叉树被分为如图1所示的7个子Trie,分别为T1到T7。多位树可以看作按步长把一个二叉Trie分成多个子Trie,并为每个子Trie创建一个Trie节点(TrieNode)。如果某个子Trie中有前缀,还要为该子Trie创建一个Prefix节点(PrefixNode)。落在该子Trie内部的前缀都保存在Prefix节点中。每条前缀对应的下一跳信息称为RE(REsult)。一般在多位树中只保存REIndex,也就是指向下一跳信息的指针。对于中间的每个子Trie,都需要为它计算一个当前最长前缀匹配(PresentLongestPrefixMatch,PLPM)。例如,对于子T2,由于覆盖它的最长前缀是p1,所以T2对应的PLPM是前缀p1。PLPM对应的REIndex一般保存在REIndex数组的第一个位置,并在Trie节点或者Prefix节点中用1位标识当前子Trie是否有对应的PLPM。图1中位于Level2和Level3的各个节点对应的PLPM已经在REIndex数组的右侧标出。Trie节点具有两类子节点,分别为Trie子节点和Prefix子节点,例如图1中的Trie节点T1有3个子节点是Trie节点,也就是T2,T3和T4;有一个子节点是Prefix节点,也就是跟T1关联的Prefix节点。每个Trie节点都有一个关联KEY,也就是子树的起始点对应的路由前缀。Trie节点的关联KEY可以看作从Trie的根节点到当前Trie节点的各个分段KEY组成的前缀。例如在图1中,T1的关联KEY是‘*’,T2的关联KEY是‘000*’,T3的关联KEY是‘010*’。Trie节点中要保存指向Trie子节点的指针。一个Trie节点的Trie子节点一般都是连续存放(可以看作一个数组),所以只需要保存Trie子节点的起始位置。比如图1中3个Trie节点T2,T3和T4都是Trie节点T1的子节点,把它们保存在一个数组中,只在Trie节点T1中保存数组的起始地址就可以了。Trie节点中也要保存指向Prefix子节点的指针。在已有的多位树算法中,一个Trie节点的Prefix子节点只是用于保存该Trie节点对应的子树中的前缀。另外,Trie节点中还要保存用于索引子节点的位图,位图的位数为2步长。位图中有几个1就表示有几个Trie子节点。在图1的例子中,因为步长为3,所以用于子节点索引的位图只需要8位。Trie节点T1的三个Trie子节点T2,T3和T4对应的分段KEY分别为000,100和111,所以T1中保存的用于索引子节点的位图为10001001。为了达到线速地处理收到的报文,路由查找一般都是用硬件实现。硬件中的查找结构一般是一个多级的流水线。基于Trie的算法可以把Trie的各级存放在硬件流水线的各级中。以图1为基础,图2为现有技术中多位树在硬件中的查找结构示意图。共分为5级,前3级保存3层Trie节点,第4级保存7个Trie节点对应的Prefix节点,第5级保存每个Prefix节点中的前缀对应的RE指针。查找时,输入KEY沿着流水线一级一级走下来,最终得到查找结果。假设IP地址的长度为9,查找IP地址111010011的过程如下:Step1:进入流水线的第一级,访问Trie节点T1,并从IP地址中提取出最高的3位‘111’。因为T1有对应的Prefix节点,所以记录该Prefix节点的指针。Step2:根据分段KEY‘111’访问Trie节点T1的子节点T4,并从IP地址中提取接下来的3位‘010’。因为T4也有对应的Prefix节点,所以更新查找的Prefix节点指针为T4对应的Prefix节点的指针。Step3:根据分段KEY‘010’访问Trie节点T4的子节点T7,并从IP地址中提取接下来的3位‘011’。因为T7也有对应的Prefix节点,所以更新查找的Prefix节点指针为T7对应的Prefix节点的指针。Step4:由于T7没有Trie子节点,所以使用最近一次保存的Prefix节点指针访问Prefix节点。在本例中也就是T7对应的Prefix节点。在Prefix节点中保存了子树T7中的前缀p10。输入KEY,也就是IP地址111010011跟前缀p10“1110100*”匹配(此处,只需要比较011跟‘0*’就可以了),而且该子树有对应的PLPM,所以p10对应的REindex保存在REindex数组的第二个位置(数组下标为1)。Step5:根据Step4中得到本文档来自技高网...

【技术保护点】
一种数据处理方法,其特征在于,应用于多位树,所述多位树中包括多个路由前缀,所述方法包括:获取所述多位树的结构中包括至少一个树Trie节点和对应的前缀Prefix节点,所述Prefix节点的容量小于等于预设容量,所述Prefix节点包括当前最长前缀匹配PLPM、对应Trie节点中的路由前缀和对应Trie节点中路由前缀的下一跳信息,第一Trie节点为所述至少一个Trie节点中的任一Trie节点,所述第一Trie节点包括对应的位图,所述第一Trie节点对应的Prefix节点包括直接Prefix节点和非直接Prefix节点,所述直接Prefix节点中包括所述第一Trie节点中的路由前缀、所述直接Prefix节点的PLPM和所述第一Trie节点中路由前缀的下一跳信息,所述非直接Prefix节点包括所述第一Trie节点下连接的Trie节点中的路由前缀、所述非直接Prefix的PLPM和所述第一Trie节点下连接的Trie节点中路由前缀的下一跳信息;进行迭代操作,直到迭代后得到的多位树的总容量小于等于所述预设容量;一次所述迭代操作具体为:利用得到的Prefix节点的关联前缀建立新的多位树,根据所述新的多位树的结构获取Trie节点和对应的Prefix节点,并对应保存本次迭代前相应的位图。...

【技术特征摘要】
1.一种数据处理方法,其特征在于,应用于多位树,所述多位树中包括
多个路由前缀,所述方法包括:
获取所述多位树的结构中包括至少一个树Trie节点和对应的前缀Prefix
节点,所述Prefix节点的容量小于等于预设容量,所述Prefix节点包括当前最
长前缀匹配PLPM、对应Trie节点中的路由前缀和对应Trie节点中路由前缀
的下一跳信息,第一Trie节点为所述至少一个Trie节点中的任一Trie节点,
所述第一Trie节点包括对应的位图,所述第一Trie节点对应的Prefix节点包
括直接Prefix节点和非直接Prefix节点,所述直接Prefix节点中包括所述第一
Trie节点中的路由前缀、所述直接Prefix节点的PLPM和所述第一Trie节点
中路由前缀的下一跳信息,所述非直接Prefix节点包括所述第一Trie节点下
连接的Trie节点中的路由前缀、所述非直接Prefix的PLPM和所述第一Trie
节点下连接的Trie节点中路由前缀的下一跳信息;
进行迭代操作,直到迭代后得到的多位树的总容量小于等于所述预设容
量;
一次所述迭代操作具体为:
利用得到的Prefix节点的关联前缀建立新的多位树,根据所述新的多位
树的结构获取Trie节点和对应的Prefix节点,并对应保存本次迭代前相应的
位图。
2.根据权利要求1所述的方法。其特征在于,还包括:
获取待查找路由地址;
根据所述待查找路由地址从最后一次迭代得到的多位树开始进行最长前
缀匹配LPM,根据匹配到的Prefix节点所包含的位图以及所述待查找路由地
址确定上一次迭代中多位树中的Prefix节点;
进行循环匹配,直到匹配结果为匹配到未迭代前的多位树中的Prefix节
点或出现无匹配前缀;
所述循环匹配具体为:
根据在第N次迭代中获得的多位树匹配得到的Prefix节点所包含的位图
以及所述待查找路由地址确定第N-1次迭代中获得的多位树中的Prefix节点;
若所述匹配结果为匹配到未迭代前的多位树中的Prefix节点,则将所述

\t未迭代前的多位树中的Prefix节点中与所述待查找路由地址匹配的路由前缀
的下一跳信息作为所述待查找路由地址的下一跳信息;
若所述匹配结果为出现无匹配前缀,则将出现无匹配前缀的Prefix节点
的PLPM所对应路由前缀的下一跳信息作为所述待查找路由地址的下一跳信
息。
3.根据权利要求1所述的方法,其特征在于,还包括:
将多位树中在同一单连接结构中的多个Trie节点作为一个Trie节点处理,
所述单连接结构具体包括在所述多位树的连接结构中一个Trie节点下只连接
一个Trie节点的结构。
4.根据权利要求1所述的方法,其特征在于,还包括:
所述Prefix节点通过至少一个前缀簇PCL存储PLPM、对应Trie节点中
的路由前缀和对应Trie节点中路由前缀的下一跳信息,所述PCL与Trie节点
一一对应。
5.根据权利要求1至4任一项所述的方法,其特征在于,
所述预设容量根据处理系统的缓存大小决定。
6.一种数据处理装置,其特征在于,应用于多位树,所述多位树中包括

【专利技术属性】
技术研发人员:张文勇
申请(专利权)人:北京华为数字技术有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1