一种实现高速路由查找的方法和系统的制作方法

文档序号:7941103阅读:199来源:国知局
专利名称:一种实现高速路由查找的方法和系统的制作方法
技术领域
本发明涉及路由查找 技术领域,特别是指一种基于哈希(Hash)函数和Bloom Filter(BF)实现高速路由查找的方法和系统。
背景技术
随着互联网(Internet)的迅猛发展,用于主干网络互联的核心路由器的接口速率已经达到lOOGbps,该速率要求核心路由器在支持大容量路由表的情况下路由查找,即 IP查找的速率达到每秒几百万次。IP查找需要得到最长匹配前缀,由于高速查找的需要,软件查找的方式已经不适用,近年来研究人员提出了多种硬件查找方法以提高查找速率,其中以查找树(Trie)结构和三态内容寻址存储器(Ternary Content Addressable Memory, TCAM)最为流行。Trie以树形结构为基础,通过流水处理能够得到较高的吞吐率。由于树结构的特殊性,使得每级流水难以达到存储平衡,且每个树结点都要维护子结点信息,造成存储需求很大。利用一些优化方法可以达到存储平衡,但容易造成流水级数过多,难以维护。TCAM是目前查找模块中利用较为广泛的技术,查找过程简单,但要满足IOOGbps 的查找速率要求需要多片TCAM调度查找,功耗与发热量将成为严重问题。

发明内容
有鉴于此,本发明的主要目的在于提供一种实现高速路由查找的方法和系统,能够快速、稳定的实现大容量路由表的查询。为达到上述目的,本发明的技术方案是这样实现的本发明提供了一种实现高速路由查找的方法,所述方法包括利用哈希(Hash)函数和Bloom Filter (BF)将路由表项编码并储存;利用Hash和Bloom Filter对输入IP地址进行查询匹配,找到最长前缀匹配的路由表项。其中,所述利用Hash和Bloom Filter将路由表项编码,包括随机生成各级哈希函数并储存;按照路由前缀长度,对表项进行分组;在同一长度内,针对表项的起始地址根据哈希结果编码得到哈希BF(HBF);针对HBF中各个表项的偏移地址编码得到分类BF (CBF);对每个表项计算摘要,并根据CBF编码结果组织摘要和完整路由表项的储存。其中,在CBF编码之后,所述方法还包括进行CBF验证,确保组内各CBF不冲突, 否则随机更换哈希函数,重新编码HBF和CBF。其中,所述利用Hash和Bloom Filter对输入IP地址进行查询匹配,包括根据输入IP地址经过哈希查询HBF,得到一组表项的起始地址;同时,根据输入IP 地址经过哈希查询CBF,得到偏移地址;将起始地址加上偏移地址得到唯一的命中表项;根据命中表项读取摘要,与输入IP地址计算出的摘要进行对比,如果相同,则找到最长前缀匹配的路由表项;如果不同,则将所述输入IP地址存储在缓存(Cache)中。其中,在利用Hash和Bloom Filter对输入IP地址进行查询匹配之前,所述方法还包括根据输入IP地址查询Cache,如果命中则表示路由表项中没有所述输入IP地址, 否则利用Hash和Bloom Filter对输入IP地址进行查询匹配。其中,在所述 HBF编码之前,所述方法还包括针对各个路由前缀长度编码生成查询 BF (QBF);在根据输入IP地址经过哈希查询HBF之前,所述方法还包括根据输入IP地址经过哈希查询QBF。本发明还提供了一种实现高速路由查找的系统,所述系统包括路由表项编码储存模块和路由表项查询模块;其中,所述路由表项编码储存模块,用于利用Hash函数和Bloom Filter将路由表项编码并储存;所述路由表项查询模块,用于利用Hash和Bloom Filter对输入IP地址进行查询匹配,找到最长前缀匹配的路由表项。其中,所述路由表项编码储存模块利用Hash和Bloom Filter将路由表项编码,包括随机生成各级哈希函数并储存;按照路由前缀长度,对表项进行分组;在同一长度内,针对表项的起始地址根据哈希结果编码得到HBF ;针对HBF中各个表项的偏移地址编码得到CBF ;对每个表项计算摘要,并根据CBF编码结果组织摘要和完整路由表项的储存。其中,所述路由表项编码储存模块,在CBF编码之后,还用于进行CBF验证,确保组内各CBF不冲突,否则随机更换哈希函数,重新编码HBF和CBF。其中,所述路由表项查询模块利用Hash和Bloom Filter对输入IP地址进行查询匹配,包括根据输入IP地址经过哈希查询HBF,得到一组表项的起始地址;同时,根据输入IP 地址经过哈希查询CBF,得到偏移地址;将起始地址加上偏移地址得到唯一的命中表项;根据命中表项读取摘要,与输入IP地址计算出的摘要进行对比,如果相同,则找到最长前缀匹配的路由表项;如果不同,则将所述输入IP地址存储在Cache中。其中,所述路由表项查询模块在利用Hash和Bloom Filter对输入IP地址进行查询匹配之前,还用于根据输入IP地址查询Cache,如果命中则表示路由表项中没有所述输入IP地址,否则利用Hash和Bloom Filter对输入IP地址进行查询匹配。其中,所述路由表项编码储存模块在所述HBF编码之前,还用于针对各个路由前缀长度编码生成QBF ;所述路由表项查询模块,在根据输入IP地址经过哈希查询HBF之前,还用于根据输入IP地址经过哈希查询QBF。本发明所提供的实现高速路由查找的方法和系统,利用Hash函数和BloomFilter 将路由表项编码并储存;利用Hash和Bloom Filter对输入IP地址进行查询匹配,找到最长前缀匹配的路由表项。本发明提供的路由查找方法,与现有的查找方法相比,有以下优点一是查找过程快速、稳定。因算法主要操作由哈希与BF读取构成,可流水进行查询,通常Trie树或TCAM等方案需要多节拍完成一次IP地址查询,而本发明流水操作平均可每节拍完成一次完整的IP地址查询,在小于IO-"1的情况下因不命中导致多次查询,但可以使用 Cache避免此情况再次发生,平均查找速度快速稳定。二是存储消耗较小,可容纳路由表项数目大。本发明片内存储空间复杂度为O(Iog(I)n),其中1为同长度前缀的最多表项数量, η为总表项数量。片外存储空间复杂度为0(m),其中m为总表项比特数。


图1为Bl oom Filter的基本原理示意图;图2为Bloom Filter多长度查询引擎示意图;图3为本发明一种实现高速路由查找的方法流程示意图;图4为PCBre基本体系结构示意图;图5为本发明一种实现高速路由查找的系统结构示意图。
具体实施例方式为了更好的理解本发明,首先介绍一下Bloom Filter(BF)。BF是一个空间效率很高的数据结构,它由一个位数组和一组哈希(Hash)映射函数组成。BF可以用于检索一个元素是否在一个集合中,它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率。图1为Bloom Filter的基本原理示意图,如图1所示,BF的主要部分由一个m比特向量和k个哈希函数组成,每个哈希函数能够将集合中的一个元素映射到区间
上的一个整数,对应m比特向量上的一位。由集合构造BF时,首先将m比特向量初始化为全0,每个集合元素经过k个哈希函数映射到不超过k个比特位上,将对应位设置为1。查询某元素是否属于该集合时,同样经由k个哈希函数将查询元素映射到不超过k 个bit位,只需判断这些bit位是否均为1 若均为1,元素可能属于集合,若有至少一位为 0,则元素一定不属于该集合。图中hi (s)、h2 (s)为哈希函数,si、s2为元素集合,si和s2 构成的集合经由哈希函数hi (s)、h2 (s)映射到三个比特位上。当X为查询输入时,经由哈希函数hi (s)、h2 (s)映射到两个比特位上均为1,则X可能属于集合;当Y为查询输入时, 经由哈希函数hi (s)、h2 (s)映射到两个比特位上,一个比特位为1,另一个比特位为0,则Y 一定不属于该集合。使用Bloom Filter时不会漏判但有可能出现误判,这种情况称为正误识(False Positive, FP),其概率被称为错误判对率(False Positive Rate, FPR),对给定的k、m、η, 可计算如下f = (l-exp(-kn/m))k前述Bloom Filter的缺点,最主要的一是存在FPR,二是不能确定所命中串。但实际上二者相互关联,若能确定命中串,则只需要一次串比较即可排除FPR,使Bloom Filter 变为精确匹配。本发明应用Bloom Filte的基本原理为对于输入字符串中命中普通BF的元素, 首先利用另一组BF的命中位置对输入字符串进行初步分类,此时可匹配到一个小规模的特征串集合,即扩展BF(Extended Bloom Filter, EBF)。其中k个链表对应特征串构成的集合,设该集合元素数量为v,当k= 1时该BF退化为普通的Hash,故称此组Bloom Filter 为HBF,称原始BF为查询BF(Query BF, QBF)。之后再利用多组Bloom Filter命中结果对输入字符串细致分类,使其对应到唯一可能匹配的特征串,若不匹配该特征串则输入字符串也不可能匹配集合内的其他任何特征串,再进行一次比较验证以确定是否为该特征串, 即可精确匹配。细致分类的基本方法为将相互冲突的特征串编码,依照每bit位的编码结果分为不同组,利用多组Bloom Filter结果逐步减小命中集合。例如对冲突集合[a,b,c,d],依次编码为00、01、10、11。使用BFO、BFl两个BF分类。对应将[b,d]存储于BFO中,而[c, d]存储于BFl中。同时查询(BF0,BF1)的命中结果可能为(0,0),(0,1), (1,0), (1,1)四种之一,与编码对应,则将可能的命中集合缩小到[a,b,c, d]之一。称此类Bloom Filter 为分类 BF (Classify BF, CBF)。

上述是一种编码BF时没有发生错误命中的理想情况,实际中可能由于FI3R而出现例如输入字符串a命中BF0,或输入字符串b同时命中BF0、BF1之类错误情况。为避免编码错误,需在每次计算生成编码后遍历同长度所有冲突的特征串进行验证。若发生错误冲突, 需要随机生成新的Hash函数并重新编码,此过程可以由软件自动完成,一旦编码除非更新特征串否则无需再更换Hash函数。因此只要将总体错误概率控制在较低水平即可保证其成功率与硬件实现的可行性。无需担心的是,不属于特征集合的输入字符串如果错误命中,并不会对最后查询结果产生影响,实际流量中的输入字符串无论是否错误命中BFO或BF1,也只能分类后对应到[a,b,c,d]之一,再取出该特征串进行一次比较验证即可排除FP。假设输入字符串X命中结果为(0,0),则X或者等于特征串a,或者不匹配[a,b,c, d]任何特征串,在与a比较后排除FP,故该分类能够较好的实现精确匹配。这种方法的一个不足是对每个长度需要1呢2 (ν)个CBF,虽然每个BF存储元素数量少,总体资源占用不多,但实现较复杂。一种改进方案是利用每个长度均需要一组BF的特点,使用一个输入字符串的不同长度前缀子串进行分类,从而使每长度仅需要1个CBF, 而代价是每长度串的前缀串最多跨越(ν)个不同长度。例如,长度为6的特征串,Hash 后同时有8个串相互冲突,则将6字节串的4、5、6字节前缀串存储于CBF4-6中,输入字符串查询CBF4-6后可由结果得到3位2进制编码对应串0-7。不同长度前缀CBF组成的集合可称为前缀分类BF (Prefix Classify BF,PCBF),整套系统应用多级多组BF,称其为前缀分类 BF 组(Prefix Classify BF Group,PCBFG)。BF应用于路由查找时,需对每个前缀长度设置一组BF,同时查询所有长度,其结构如图2所示。根据上述原理可知本发明的基本思想是利用Hash函数和Bloom Filter将路由表项编码并储存;利用Hash和Bloom Filter对输入IP地址进行查询匹配,找到最长前缀匹配的路由表项。下面结合附图和具体实施例对本发明的技术方案进一步详细阐述。图3为本发明一种实现高速路由查找的方法流程示意图,如图3所示,所述方法包括以下步骤步骤301,利用哈希(Hash)函数和Bloom Filter将路由表项编码并储存;具体的,所述利用Hash和Bloom Filter将路由表项编码,包括随机生成各级哈希函数并储存;按照路由前缀长度,对表项进行分组;在同一长度内,针对表项的起始地址(base_address)根据哈希结果编 码HBF ;针对HBF中各个表项的偏移地址(offset)编码 CBF ;对每个表项计算摘要,并根据CBF编码结果组织摘要和完整路由表项的储存。其中,根据CBF编码结果组织摘要和完整路由表项的储存,具体为在片内存储表项的一个摘要用于初步验证,用片外DDR3存储完整的表项。进一步的,在HBF编码之前,所述方法还包括针对各个路由前缀长度编码生成 QBF。具体的,针对各个不同的路由前缀长度进行QBF编码的目的在于,可以在查询中过滤大部分流量,减少后续比较次数以降低系统功耗。该级BF容量很小,且并非必要。进一步的,在CBF编码之后,所述方法还包括进行CBF验证,确保组内各CBF不冲突,否则随机更换哈希函数,重新编码HBF和CBF。步骤302,利用Hash和Bloom Filter对输入IP地址进行查询匹配,找到最长前缀匹配的路由表项。具体的,所述利用Hash和Bloom Filter对输入IP地址进行查询匹配,包括根据输入IP地址经过哈希查询HBF,得到一组表项的起始地址;同时,根据输入IP地址经过哈希查询CBF,得到偏移地址;将起始地址加上偏移地址得到唯一的命中表项;根据命中表项读取摘要,与输入IP地址计算出的摘要进行对比,如果相同,则找到最长前缀匹配的路由表项;如果不同,则将所述输入IP地址存储在Cache中。进一步的,在利用Hash和Bloom Filter对输入IP地址进行查询匹配之前,所述方法还包括根据输入IP地址查询缓存(Cache),如果命中则读取Cache中的结果,否则执行步骤302。其中,所述读取Cache中的结果表示所述输入IP地址对应的表项信息没有存储在本表中,查表结果为“No Result”。进一步的,在根据输入IP地址经过哈希查询HBF之前,所述方法还包括根据输入IP地址经过哈希查询QBF。通过QBF可以根据前缀长度进行分类,在查询过程中每个长度中最多命中一个表项,取最长命中长度从片外DDR3取出该可能命表项,进行一次直接比较。在不命中情况下,使用Cache以防止查找速度再次下降。本发明主要分为多级多组结构,图4为PCBre基本体系结构示意图,如图4所示, 所述结构中第一级(Stepl)为QBF,该级与普通BF相同,其实是否设计此级QBF对于系统的准确性和吞吐率并无影响,其作用仅为过滤大部分流量,减少后续比较次数以降低系统功耗, 该级BF容量很小,且并非必要,故后文进行计算存储消耗时并没有将此计算在内。当QBF 命中时,对命中长度进行第二级查询,若有多长度命中则利用硬件系统特性并行查询。假设在极端情况下,没有QBF或QBF同时命中所有长度,则并行查询所有后续BF组,仍然对系统性能无影响。第二级(St印2)查询HBF,即为表H(Table. H),得到基础地址(base_addr)。第三级(St印3)为PCBF,查询一组BF得到编码,即偏移地址,与基础地址相加得特征串地址addr,为图中Step 3。该级可与HBF并行,也可待HBF命中确定后查询以减少读存储次数。第四级(Step4)根据特征串地址,由特征串表(Table. S)中取出该串与输出串直接比较,即St印4。若比较成功,则提交特征串地址与报文至软件层进行后续处理,否则当前命中为FP,输入下一字节进行下一次匹配。对通常每长度串数为IO3 IO4数量级的DPI特征串集合,片上存储已足够,该引擎无需使用片外存储,系统工作频率可尽量高。进行多字节匹配扩展时,可共享多端口存储,或多个匹配引擎并行。存储相对并行带宽的扩展代价为线性增长或更低。以上表明该系统频率方面仅受限于当前技术可达到的工作频率上限,带宽方面仅受限于成线性增长的存储,故非常易 于实现高速DPI系统以满足骨干网线速要求。本发明的基本思想是试图根据 Hash结果匹配特征串,如前所述这种思路的难点在于如何处理冲突。本发明并不力求避免冲突,而是在存在冲突的前提下,将输入字符串分类定位到唯一可能的特征串再进行匹配。图5为本发明一种实现高速路由查找的系统结构示意图,如图5所示,所述系统包括路由表项编码储存模块51和路由表项查询模块52 ;其中,所述路由表项编码储存模块51,用于利用Hash函数和Bloom Filter将路由表项编码并储存;具体的,所述路由表项编码储存模块51利用Hash和Bloom Filter将路由表项编码,包括随机生成各级哈希函数并储存;按照路由前缀长度,对表项进行分组;在同一长度内,针对表项的起始地址根据哈希结果编码HBF ;针对HBF中各个表项的偏移地址编码 CBF ;对每个表项计算摘要,并根据CBF编码结果组织摘要和完整路由表项的储存。其中,根据CBF编码结果组织摘要和完整路由表项的储存,具体为在片内存储表项的一个摘要用于初步验证,用片外DDR3存储完整的表项。进一步的,所述路由表项编码储存模块51,在HBF编码之前,还用于针对各个路由前缀长度编码生成QBF。具体的,针对各个不同的路由前缀长度进行QBF编码的目的在于,可以在查询中过滤大部分流量,减少后续比较次数以降低系统功耗。该级BF容量很小,且并非必要。进一步的,所述路由表项编码储存模块51,在CBF编码之后,还用于进行CBF验证, 确保组内各CBF不冲突,否则随机更换哈希函数,重新编码HBF和CBF。所述路由表项查询模块52,用于利用Hash和Bloom Filter对输入IP地址进行查询匹配,找到最长前缀匹配的路由表项。具体的,所述路由表项查询模块52利用Hash和Bloom Filter对输入IP地址进行查询匹配,包括根据输入IP地址经过哈希查询HBF,得到一组表项的起始地址;同时,根据输入IP地址经过哈希查询CBF,得到偏移地址;将起始地址加上偏移地址得到唯一的命中表项;根据命中表项读取摘要,与输入IP地址计算出的摘要进行对比,如果相同,则找到最长前缀匹配的路由表项;如果不同,则将所述输入IP地址存储在Cache中。进一步的,所述路由表项查询模块52,在利用Hash和Bloom Filter对输入IP 地址进行查询匹配之前,还用于根据输入IP地址查询Cache,如果命中则读取Cache中的结果,否则利用Hash和Bloom Filter对输入IP地址进行查询匹配。其中,所述读取 Cache中的结果表示所述输入IP地址对应的表项信息没有存储在本表中,查表结果为“No Result,,。进一步的,所述路由表项查询模块52,在根据输入IP地址经过哈希查询HBF之前, 还用于根据输入IP地址经过哈希查询QBF。通过QBF可以根据前缀长度进行分类,在查询过程中每个长度中最多命中一个表项,取最长命中长度从片外DDR3取出该可能命表项,进行一次直接比较。在不命中情况下,使用Cache以防止 查找速度再次下降。 以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
权利要求
1.一种实现高速路由查找的方法,其特征在于,所述方法包括利用哈希(Hash)函数和Bloom Filter(BF)将路由表项编码并储存;利用Hash和Bloom Filter对输入IP地址进行查询匹配,找到最长前缀匹配的路由表项。
2.根据权利要求1所述的方法,其特征在于,所述利用Hash和BloomFilter将路由表项编码,包括随机生成各级哈希函数并储存;按照路由前缀长度,对表项进行分组;在同一长度内, 针对表项的起始地址根据哈希结果编码得到哈希BF(HBF);针对HBF中各个表项的偏移地址编码得到分类BF (CBF);对每个表项计算摘要,并根据CBF编码结果组织摘要和完整路由表项的储存。
3.根据权利要求2所述的方法,其特征在于,在CBF编码之后,所述方法还包括进行 CBF验证,确保组内各CBF不冲突,否则随机更换哈希函数,重新编码HBF和CBF。
4.根据权利要求2所述的方法,其特征在于,所述利用Hash和BloomFilter对输入 IP地址进行查询匹配,包括根据输入IP地址经过哈希查询HBF,得到一组表项的起始地址;同时,根据输入IP地址经过哈希查询CBF,得到偏移地址;将起始地址加上偏移地址得到唯一的命中表项;根据命中表项读取摘要,与输入IP地址计算出的摘要进行对比,如果相同,则找到最长前缀匹配的路由表项;如果不同,则将所述输入IP地址存储在缓存(Cache)中。
5.根据权利要求4所述的方法,其特征在于,在利用Hash和BloomFilter对输入IP 地址进行查询匹配之前,所述方法还包括根据输入IP地址查询Cache,如果命中则表示路由表项中没有所述输入IP地址,否则利用Hash和Bloom Filter对输入IP地址进行查询匹配。
6.根据权利要求4所述的方法,其特征在于,在所述HBF编码之前,所述方法还包括 针对各个路由前缀长度编码生成查询BF(QBF);在根据输入IP地址经过哈希查询HBF之前,所述方法还包括根据输入IP地址经过哈希查询QBF。
7.一种实现高速路由查找的系统,其特征在于,所述系统包括路由表项编码储存模块和路由表项查询模块;其中,所述路由表项编码储存模块,用于利用Hash函数和Bloom Filter将路由表项编码并储存;所述路由表项查询模块,用于利用Hash和Bloom Filter对输入IP地址进行查询匹配, 找到最长前缀匹配的路由表项。
8.根据权利要求7所述的系统,其特征在于,所述路由表项编码储存模块利用Hash和 Bloom Filter将路由表项编码,包括随机生成各级哈希函数并储存;按照路由前缀长度,对表项进行分组;在同一长度内, 针对表项的起始地址根据哈希结果编码得到HBF ;针对HBF中各个表项的偏移地址编码得到CBF ;对每个表项计算摘要,并根据CBF编码结果组织摘要和完整路由表项的储存。
9.根据权利要求8所述的系统,其特征在于,所述路由表项编码储存模块,在CBF编码之后,还用于进行CBF验证,确保组内各CBF不冲突,否则随机更换哈希函数,重新编码HBF禾口 CBF0
10.根据权利要求8所述的系统,其特征在于,所述路由表项查询模块利用Hash和 Bloom Filter对输入IP地址进行查询匹配,包括根据输入IP地址经过哈希查询HBF,得到一组表项的起始地址;同时,根据输入IP地址经过哈希查询CBF,得到偏移地址;将起始地址加上偏移地址得到唯一的命中表项;根据命中表项读取摘要,与输入IP地址计算出的摘要进行对比,如果相同,则找到最长前缀匹配的路由表项;如果不同,则将所述输入IP地址存储在Cache中。
11.根据权利要求10所述的系统,其特征在于,所述路由表项查询模块在利用Hash和 Bloom Filter对输入IP地址进行查询匹配之前,还用于根据输入IP地址查询Cache,如果命中则表示路由表项中没有所述输入IP地址,否则利用Hash和Bloom Filter对输入IP 地址进行查询匹配。
12.根据权利要求10所述的系统,其特征在于,所述路由表项编码储存模块在所述HBF 编码之前,还用于针对各个路由前缀长度编码生成QBF ;所述路由表项查询模块,在根据输入IP地址经过哈希查询HBF之前,还用于根据输入 IP地址经过哈希查询QBF。
全文摘要
本发明公开了一种实现高速路由查找的方法,利用哈希(Hash)函数和Bloom Filter将路由表项编码并储存;利用Hash和Bloom Filter对输入IP地址进行查询匹配,找到最长前缀匹配的路由表项。本发明还公开了一种实现高速路由查找的系统,通过上述方法和系统,能够快速、稳定的实现大容量路由表的查询,并且降低了存储消耗,提高了可容纳路由表项数目。
文档编号H04L12/56GK102333036SQ201110314798
公开日2012年1月25日 申请日期2011年10月17日 优先权日2011年10月17日
发明者全成斌, 刘博岩, 孙远航, 李彧, 程晨, 赵有健 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1