专利名称:Ip查找方法和装置以及路由更新方法和装置的制作方法
技术领域:
本发明涉及基于IP的网络路由器,尤其涉及IP查找方法和路由更新方法。
背景技术:
IP查找是网络路由器的核心组成部分。自从1993年采用CIDR(无类别域间路由) 以来,IP查找问题变成了最长前缀匹配(LPM,Longest Prefix Matching)问题。给定一个目的IP地址,路由表中多个IP前缀可能匹配该地址。在这些匹配的前缀中,最长前缀对应的下一跳信息将正确决定数据包的下一跳。随着网络链路速率朝40(ibpS及其以上发展,基于最长前缀匹配的IP查找成为路由器中的一个主要瓶颈。为了达到40(ibpS的吞吐量,一个40字节的网络数据包需要在8纳秒之内完成IP查找,这在传统的基于软件的IP查找方法中难以实现。有两种硬件平台常用于实现高吞吐量三态内容可寻址存储器(TCAM)和静态随机存取存储器(SRAM)。TCAM是一种专用的高速查找器件,一个给定搜索关键字可以在0(1)的时间内与 TCAM中存储的所有条目同时进行比较,并输出匹配条目所在的地址。由于TCAM中的每个存储单元都可以被指定为三种状态(“0”“1”和1”(随意))之一,TCAM非常适用于最长前缀匹配。然而,一个给定的目的IP地址,可能匹配TCAM中存储的多条前缀,TCAM输出地址最小的匹配前缀的地址。因此,为了保证正确的最长前缀匹配,IP前缀在TCAM中的存储必须遵循一定的顺序限制。这种前缀之间的顺序限制导致路由更新时可能需要大量的前缀移动,从而影响转发性能,导致丢包。为了解决基于TCAM的路由更新问题,Devavrat Shah等人提出了两种具体的方法PL0_0PT 禾口 CA0_0PT (请参考文献Fast updating algorithms for TCAMs, Micro 2001)。在PL0_0PT方法中,所有的IP前缀按照前缀长度降序存储在TCAM中,同时将TCAM 中的空闲空间维护在TCAM中央位置。在CA0_0PT方法中,前缀长度顺序限制只应用于同一条链上的IP前缀(在用1比特特里树(1-bit trie)结构表示的IP前缀中,一条链指从该特里树的根节点出发的任意一条路径)。上述两种方法都降低了每次路由更新可能导致的前缀移动次数。然而,由于前缀长度顺序限制依然存在,一次路由更新仍然可能导致多次前缀移动。在Gesan Wang等人提出的MIPS (Minimum Independent Prefix kt,最小独立前 MM) ^firP (TCAM-Based Forwarding Engine with Minimum Independent Prefix Set (MIPS) for Fast Updating, ICC 2006),使用了一种叶推技术(leaf pushing), 将整个前缀集转换为一个不相交的前缀集,从而彻底地避免了前缀顺序。然而,叶推技术可能导致前缀复制。当更新一条被复制的前缀时,与该前缀对应的多条复制前缀都需要更新。 因此,在最坏情况下,一次路由更新仍然需要多次TCAM写操作。另一个常见的快速查找硬件技术是基于SRAM的IP查找流水线。1比特特里树数据结构常用于实现IP查找流水线。IP查找流水线的一种简单实现方式是将特里树的每个层次的节点分别存储到流水线中的一个流水级。每个流水级都有独立的SRAM来存储特里树节点,因此,多个流水级可以并行查找,从而实现高吞吐量(一个时钟周期输出一个IP查找结果)。然而,IP查找流水线中流水级的个数跟特里树的层数有直接关系(对ipv4来说是32个),在IP查找流水线中需要大量的SRAM。现场可编程逻辑门阵列(FPGA)内部有大量的小SRAM,因此,FPGA常用于实现基于SRAM的IP查找流水线。在基于SRAM的IP查找流水线中,快速的路由更新可以使用Anindya Basu等人提出的写气泡(write bubble)方法实现(请参考文献Fast incremental updates for pipelined forwarding engines, INFOCOM 2003)。然而,FPGA片内的SRAM是相对稀缺的资源,对其的合理分配和有效利用尤为重要。最近几年研究学者提出了大量的存储均衡方法,虽然很好的利用了片内的SRAM资源, 但是,从总体上讲,片内的SRAM资源还是很难满足目前大的路由表对SRAM容量的需求。片内SRAM存储容量的不足,成为基于FPGA片内SRAM的IP查找流水线的一个瓶颈,从而降低了基于FPGA片内SRAM的IP查找流水线的实用性。
发明内容
因此,本发明的目的在于克服上述现有技术的缺陷,提供一种IP查找装置,在保证快速查找的同时,支持快速的路由更新。本发明的目的是通过以下技术方案实现的根据本发明的一个方面,提供了一种IP查找装置,所述装置包括基于TCAM的IP查找引擎,其用于存储第一前缀集,所述第一前缀集包括根据路由器的转发信息库(FIB)构造的1比特特里树的所有叶子节点对应的前缀;基于SRAM的IP查找流水线,其用于存储第二前缀集,所述第二前缀集包括所述特里树的所有中间节点对应的前缀;优先级仲裁模块,其用于对基于TCAM的IP查找引擎和基于SRAM的IP查找流水线的输出结果进行仲裁,以输出下一跳信息。上述IP查找装置中,所述第二前缀集以1比特特里树的数据结构存储在基于SRAM 的IP查找流水线中。上述IP查找装置中,基于TCAM的IP查找引擎的输出结果比基于SRAM的IP查找流水线的输出结果具有更高的优先级。上述IP查找装置中,当基于TCAM的IP查找引擎和基于SRAM的IP查找流水线只有一个输出结果时,优先级仲裁模块直接选择该输出结果作为下一跳信息,否则,选择基于 TCAM的IP查找引擎的输出结果作为下一跳信息。上述IP查找装置中,基于SRAM的IP查找流水线中的每个流水级都采用独立的双口 SRAM,所述双口 SRAM的一个端口只进行读操作,另一个端口只进行写操作。根据本发明的另一个方面,提供了基于上述IP查找装置的IP查找方法,所述方法包括步骤1)在接收到待查询的数据包的目的IP地址后,同时将其送入基于TCAM的查找引擎和基于SRAM的查找流水线中进行查找;步骤2)当步骤1)只得到一个查找结果时,直接将该结果作为下一跳信息;当步骤 1)得到两个查找结果时,选择基于TCAM的查找引擎所输出的查找结果作为下一跳信息。根据本发明的又一个方面,提供了基于上述IP查找装置的路由更新方法,所述方法包括步骤1)基于路由器的转发信息库的路由更新,完成对路由器控制平面中辅助的1 比特特里树的更新,得到对第一前缀集和第二前缀集的更新操作序列;步骤2)根据所述更新操作序列,针对基于TCAM的查找引擎和基于SRAM的查找流水线,在数据平面中分别执行相应的更新操作。上述路由更新方法中,所述步骤1)中对路由器控制平面中辅助的1比特特里树的更新包括(a)插入一条新前缀,(b)删除一条已存在的前缀,以及(c)修改一条已存在的前上述路由更新方法中,所述插入一条新前缀的更新包括以下步骤步骤101)将前缀P插入原特里树T中,得到新的特里树T’ ;步骤10 在新特里树T’中,找到前缀P的最长前缀Q,所述最长前缀Q是在新特里树T’中离前缀P所处节点最近的祖先节点所对应的前缀;步骤10 如果前缀P是特里树T’中的非叶子前缀,则将前缀P插入第二前缀集;步骤104)如果P是特里树T’中的叶子前缀,则判断Q是否是原特里树T中的非叶子前缀;如果是,则将P插入第一前缀集,否则将Q插入第二前缀集并从第一前缀集中删除Q,然后将P插入第一前缀集。上述路由更新方法中,所述删除一条已存在的前缀的更新包括以下步骤步骤111)将前缀P从原特里树T中删除,得到新的特里树T’ ;步骤11 在原特里树T中找到前缀P的最长前缀Q,所述最长前缀Q是在原特里树T中离前缀P所处节点最近的祖先节点所对应的前缀;步骤113)如果前缀P在特里树T中是非叶子前缀,则从第二前缀集中删除P ;步骤114)如果前缀P在特里树T中是叶子前缀,则判断Q在特里树T’中是否是非叶子前缀,如果是,则从第一前缀集中删除P ;否则,从第一前缀集中删除P,然后将Q插入第一前缀集,并从第二前缀集中删除Q。上述路由更新方法中,所述步骤2、根据所述更新操作序列,在数据平面中相应地对基于TCAM的查找引擎进行写操作,对基于SRAM的查找流水线以写气泡的方式执行更新操作。根据本发明的又一个方面,还提供了一种路由更新装置,所述装置包括基于TCAM的IP查找引擎,其用于存储第一前缀集,所述第一前缀集包括根据路由器的转发信息库构造的1比特特里树的所有叶子节点对应的前缀;基于SRAM的IP查找流水线,其用于存储第二前缀集,所述第二前缀集包括所述特里树的所有中间节点对应的前缀;更新控制单元,其用于根据路由器的转发信息库的路由更新,完成对路由器控制平面中辅助的1比特特里树的更新,以得到对第一前缀集和第二前缀集的更新操作序列; 以及用于根据所述更新操作序列,在数据平面中分别对基于TCAM的查找引擎中的第一前缀集和基于SRAM的查找流水线中的第二前缀集进行更新。上述的路由更新装置中,在基于SRAM的IP查找流水线中以1比特特里树的数据
结构存储第二前缀集。上述的路由更新装置中,基于SRAM的IP查找流水线中的每个流水级都采用独立的双口 SRAM,所述双口 SRAM的一个端口只进行读操作,另一个端口只进行写操作。
上述的路由更新装置中,所述更新控制单元主要用于根据路由器的转发信息库的路由更新,采用如上所述的路由更新方法对完成对基于TCAM的查找引擎中的第一前缀集和基于SRAM的查找流水线中的第二前缀集进行更新。与现有技术相比,本发明的优点在于1、在实现快速IP查找的同时,支持快速的增量路由更新。通过结合TCAM和SRAM 的特点,针对其特点分别存储不同类型的前缀,可以实现很高的吞吐量,并同时支持快速的路由更新。在最坏情况下,一次路由更新只需要暂停IP查找过程1次TCAM写操作的时间。2、提高了 TCAM的利用率,并缓解了基于SRAM的查找流水线存储空间的不足的问题。由于在本发明中,在基于TCAM的查找引擎中存储的前缀是不相交的叶子前缀,叶子前缀之间不需要遵循任何顺序限制,因此,叶子前缀可以以任意顺序存储在TCAM中的任意位置。灵活的存储方式保证了 TCAM的利用率可以接近100% (仍然需要预留适当的空间供进一步路由更新使用)。而实际存储在基于SRAM的IP查找流水线中的重叠前缀集所需的空间也非常小,缓解了 FPGA片内SRAM存储空间不足的问题。
以下参照附图对本发明实施例作进一步说明,其中图1为根据本发明实施例的IP查找装置的结构示意图;图2(a)为本发明实施例中所使用的1比特特里树示意图;图2(b)为图2(a)所示的特里树的叶子节点对应的不相交前缀集示意图;图2 (C)为对应于重叠前缀集的剩余特里树的示意图;图3 (a)为根据本发明实施例的基于SRAM的IP查找流水线的结构示意图;图3(b)为图3(a)所示的IP查找流水线的每个流水级的细节示意图;图4为在图2(a)所示的特里树中插入一条叶子前缀给不相交前缀集和重叠前缀集的带来的变化的示意图;图5为在图2 (a)所示的特里树中删除一条叶子前缀给不相交前缀集和重叠前缀集的带来的变化的示意图;图6为根据本发明的实施例的IP查找装置的理论吞吐量和实际吞吐量对比示意图;图7为用实际路由表仿真的多种基于TCAM的查找引擎的更新开销对比图。
具体实施例方式为了使本发明的目的,技术方案及优点更加清楚明白,以下结合附图通过具体实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明, 并不用于限定本发明。图1示出了 IP查找装置的一个实施例的架构示意图。该IP查找装置包括两个并行的IP查找引擎一个基于TCAM的IP查找引擎和一个基于SRAM的IP查找流水线。在基于TCAM的IP查找引擎中,存储的是根据路由器的转发信息库构造的1比特特里树的所有叶子前缀,所述叶子前缀为特里树的叶子节点所对应的前缀。在基于SRAM的IP查找流水线中存储的是根据路由器的转发信息库构造的1比特特里树的所有非叶子前缀,所述非叶子前缀为特里树的中间节点所对应的前缀。应指出,根据路由器的转发信息库构造的1比特特里树的中间节点可能对应前缀,也有可能不对应任何前缀。为了描述方便,下文将1比特特里树简称为特里树。其中,可以使用本领域普通技术人员所熟知的构造1比特特里树的方法来根据路由器的转发信息库构造特里树。在本实施例中,为了直观地显示特里树构造过程,选取了一个简单的示例前缀集合P1-P6,分别对应于Pl 0*, P2 00*, P3 :11*,P4 100*, P5 :101*,P6 111*。图2(a)示出了根据该示例前缀集合构造的1比特特里树。在该特里树中以及后续所有附图的特里树中,灰色节点代表前缀节点(即,该节点对应一个前缀),有对应的下一跳信息;白色节点代表非前缀节点,没有对应的下一跳信息。值得注意的是,转发信息库中的条目不仅包括前缀,还包括对应的下一跳信息。下一跳信息的管理对于路由更新的影响不大,因此,为了描述的方便,本发明中忽略下一跳信息的管理,转发信息库和前缀集合这两个术语不加以区分。在图2(a)所示的特里树中,前缀P2、P4、P5和P6均为叶子前缀,将这些叶子前缀收集到一个叶子前缀集合中。图2(b)所示的是图2(a)的特里树的叶子前缀集合。由于叶子前缀集合中的前缀两两不相交,所以也可以称之为不相交前缀集。将不相交前缀集存储到IP查找装置的基于TCAM的IP查找引擎中。在所有的叶子前缀已经被收集到一个单独的叶子前缀集合之后,图2(a)所示的原始特里树中的所有叶子节点可以删除。删除掉节点4、7、8和9之后,剩下的特里树可能包含非前缀的叶子节点,如图2(a)中所示的节点5。这些非前缀的叶子节点不存储任何前缀信息,也不继续导向有效的前缀,因此,所有的非前缀的叶子节点都可以递归的删除,直到剩下的特里树中,所有的叶子节点都是前缀节点。最后裁剪后的特里树如图2(c)所示。 图2(c)所示的特里树中对应的前缀(其中,Pl对应0*,P3对应11*),与图2(b)中所示的前缀表示的地址范围有重叠,例如Pl表示的地址范围覆盖了 P2表示的地址范围。同时,裁剪过的特里树中前缀之间本身也有可能存在重叠,因此,也可以将图2(c)中所示的特里树对应的前缀集合称之为重叠前缀集。这个重叠前缀集中的前缀是不相交前缀集中的前缀的子前缀,例如Pl是P2的子前缀,P3是P6的子前缀。在本实施例中,将这个重叠前缀集以1 比特特里树数据结构存储到IP查找装置的基于SRAM的IP查找流水线中。在其他实施例中,也可以以其他的特里树数据结构将重叠前缀集存储到IP查找装置的基于SRAM的IP查找流水线中。在本实施例中,可以采用基于FPGA片内SRAM的IP查找流水线。对于一个给定的数据包,其数据包头部送入包头解析模块进行解析,抽取出目的 IP地址。同时,数据包缓存在数据包缓冲区中等待查询的下一跳信息。抽取出目的IP地址之后,目的IP地址被同时送入基于TCAM的IP查找引擎和基于SRAM的IP查找流水线进行同时查找。由于基于SRAM的查找流水线中存储的前缀为基于TCAM的查找引擎中存储的前缀的子前缀,TCAM查找引擎输出的结果具有更高的优先级(代表更长的前缀)。优先级仲裁模块对TCAM查找引擎和SRAM查找流水线的输出结果进行仲裁。当只有一个查找引擎输出查找结果时,优先级仲裁模块直接输出该结果作为最终的下一跳信息;当两个查找引擎均输出查找结果时,优先级仲裁模块选择TCAM查找引擎输出的结果作为下一跳信息。最后,一旦优先级仲裁模块输出下一跳信息,数据包修改模块从数据包缓冲区中读取一个数据包,根据下一跳信息对数据包头部进行相应的修改,然后将数据包发送到下一跳信息指定的物理接口。由于基于TCAM的IP查找引擎和基于SRAM的IP查找流水线都可以实现快速查找, 因此本实施例中的IP查找装置同样能够实现快速的IP查找。而且本实施例中的IP查找装置还有效的缓解了现有的基于FPGA片内SRAM的IP查找流水线中的存储空间不足的问题。 这是因为在该IP查找装置的基于SRAM的IP查找流水线中,只存储了重叠前缀集。在上文为了方便描述而使用的是一个简单的示例前缀集合P1-P6。但在使用真实的骨干网路由器的转发信息库构造特里树并进行划分后,可以发现,大约90%的前缀为不相交的叶子前缀, 重叠前缀集很小,其对应的裁剪过的特里树的节点数为原始特里树节点数的12%左右(请参考下文中的表1的分析结果)。因此,实际存储在基于SRAM的IP查找流水线中的重叠前缀集所需的空间非常小。更重要的是,本实施例中的IP查找装置能够支持快速的增量更新,因为在该IP查找装置的基于TCAM的IP查找引擎中,只存储了如图2(b)所示的叶子前缀集合(不相交前缀集)。由于叶子前缀集合中的前缀两两不相交,对于一个给定的目的IP地址,最多只能匹配其中的一个前缀。该不相交前缀集在基于TCAM的IP查找引擎中的存储不需要考虑任何顺序限制,一条新的前缀可以插入在基于TCAM的IP查找引擎中任意可用的位置,而不会导致不正确的最长前缀匹配。可见,在本发明的实施例中,在基于TCAM的IP查找引擎中的路由更新,不会导致任何前缀移动;另外,由于该不相交前缀集中的所有前缀天然不相交的,没有任何前缀被复制,因此,对于一次路由更新,最坏情况下只需要一次TCAM写操作即可完成。在现有的基于SRAM的IP查找流水线中,写气泡常用于实现增量更新(请参考文献:Fast incremental updates for pipelined forwarding engines, INFOCOM 2003 以及文献Dynamic pipelining =Making IP lookup truly scalable, SIGCOMM 2005)。但是在上述现有的方法中,流水线中使用的是单口 SRAM,写气泡有可能导致IP查找流水线的停顿,因为IP查找执行的是读操作,路由更新执行的是写操作,而读、写操作不可能同时在SRAM的同一个端口进行。目前FPGA中SRAM普遍具有双口特性,如Xilinx公司的 FPGA中的Block RAM就是双口的。现有的基于双口 SRAM的IP流水线设计(请参考文献 Memory—efficient and scalable virtual routers using FPGA,FPGA 2011),设计了两条独立的IP查找流水线,但是这两条流水线均进行IP查找和路由更新,虽然提高了性能,但是每个端口仍然是同时既做更新又做查找,并没有解决路由更新对查找的影响。但是,在根据本发明实施例的IP查找装置中,整体的IP查找性能取决于TCAM的查找性能(因为一般情况下,基于SRAM的查找流水线的查找性能高于基于TCAM的查找引擎)。因此,在又一个实施例中,在不影响整体查找性能的情况下,为了保证了在基于SRAM 的查找流水线中,路由更新对IP查找没有任何影响,在IP查找装置中采用了基于双口 SRAM 的、具有独立查找和更新通路的IP查找流水线。图3 (a)示出了基于双口 SRAM的、具有独立查找和更新通道通路的IP查找流水线的一个实施例的结构示意图。其中,双口 SRAM的一个端口专用于IP查找,另一个端口专用于路由更新。这样,虽然仍是采用一条流水线,但是路由更新和IP查找互不影响。图3(b) 描述了图3(a)所示的每个流水级的具体细节。在如图3(b)所示的流水级中,双口 SRAM的一个端口只进行读操作,即在IP查找时根据节点地址读出节点内容;另外一个端口只进行写操作,即在路由更新时在对应地址处添加或修改节点内容。因此,读、写操作可以无冲突地同时进行。这样,在如图3(a)所示的IP查找流水线中,IP查找和路由更新使用两条不同的数据通路进行,从而解决了路由更新对IP查找的影响。更具体地,在该实施例中,当重叠前缀集对应的特里树存储到基于SRAM的IP查找流水线时,不同层次的节点存储在不同的流水级中。当进行IP查找时,目的IP地址从图 3(a)所示的第一个流水级开始依次往后遍历。在每个流水级中,根据上一级输出的节点地址(第一个流水级直接访问地址0),读出当前流水级中访问的节点信息。如果当前节点为前缀节点,则更新最长前缀的内容。然后,根据目的IP地址对应比特的取值(0或1),以及当前访问节点的左、右孩子指针情况,判断应该遍历的当前节点的孩子节点在下一流水级中的地址。然后,使用孩子节点的地址访问下一个流水级。当IP查找从最后一个流水级退出时,记录的最长前缀即为该目的IP地址匹配的最长前缀。当进行路由更新时,路由器控制平面的软件中会计算实现当前更新的写气泡。值得注意的是,写气泡本身并不包含任何数据。在写气泡注入流水线之前,路由更新导致的在各个流水级中需要修改的数据及其地址事先由控制平面的软件计算好,然后存储在每个流水级对应的存储写气泡数据的先进先出存储器(Write Bubble FIFO)中(如图3(b)所示)。一个写气泡注入流水级后,依次访问每个流水级。当访问一个具体的流水级时,如果Write Bubble FIFO中当前内容的有效标志为1,则将当前内容中的数据写入其对应的地址。通过这种方法,写气泡不需要等待数据,访问每个流水级只需要一个时钟周期,这意味着写气泡遍历流水级的速度和IP查找遍历流水级的速度相同。因此,可以支持快速的IP查找和路由更新。另外,当使用基于1比特特里树作为IP查找流水线的数据结构时,在最坏情况下, 一次路由更新只需要一个写气泡(请参考文献=Dynamic pipelining =Making IP lookup truly scalable, SIGCOMM 2005),因此,IP查找和路由更新同时进行时,IP查找不会访问到一个不一致的特里树状态。即使某个IP查找和写气泡同时访问同一个流水级的同一个节点时,IP查找总是读出修改前的节点内容(请参考Xilinx公司FPGA片内SRAM的READ_ FIRST特性),并且,这种读优先的特性在整个遍历的过程中一直保持。因此,即使路由更新和IP查找同时进行,IP查找总是访问一棵完整的特里树,不会发生错误的最长前缀匹配。由此可见,在该实施例中IP查找装置中的路由更新的开销非常小,因为基于SRAM 的IP查找流水线中的路由更新对IP查找在性能上没有任何影响;而在基于TCAM的IP查找引擎中,一次路由更新在最坏情况下只需要进行一次TCAM写操作。而且与现有的基于双口 SRAM的两条流水线结构相比,本实施例中具有独立查找和更新通路的流水线结构简单、 实现方便。在又一个实施例中,还提供了一种基于上述IP查找装置的IP查找方法,该方法首先将根据路由器的转发信息库所构造的特里树分割成一个不相交的叶子前缀集合和一个重叠的前缀集合;将不相交的叶子前缀集合存储在基于TCAM的查找引擎中,将重叠的前缀集合以特里树的数据结构存储在基于SRAM的查找流水线中;同时在基于TCAM的查找引擎和基于SRAM的查找流水线中进行IP查找。主要包括以下步骤步骤1,分割根据路由器的转发信息库所构造的特里树。首先,将所构造的特里树的所有叶子前缀收集到一个集合(即不相交前缀集)。接着将原始特里树中的所有叶子节点删除,并从剩下的特里树中递归删除所有的非前缀叶子节点,直到裁剪后的特里树中,所有的叶子节点都是前缀节点。最后将裁剪后的特里树对应的所有前缀收集到另一个集合(即重叠前缀集)步骤2,将不相交前缀集存储到基于TCAM的查找引擎中,将重叠前缀集以特里树的数据结构存储到基于SRAM的查找流水线中。步骤3,同时在基于TCAM的查找引擎和基于SRAM的查找流水线中进行IP查找,当在基于TCAM的查找引擎和基于SRAM的查找流水线中只得到一个查找结果时,直接将该查找结果作为最终的下一跳信息;当在基于TCAM的查找引擎和基于SRAM的查找流水线中均得到查找结果时,选择基于TCAM的查找引擎中的查找结果作为下一跳信息。在又一个实施例中,还提出了一种用于上述IP查找装置的路由更新方法。在上述 IP查找装置的实例中,一次针对原始的转发信息库的路由更新,可能导致基于TCAM的查找引擎和基于SRAM的查找流水线中都产生路由更新。一次路由更新可以分为三类(1)插入一条新前缀;( 删除一条已存在的前缀;C3)修改一条已存在的前缀。第三类更新的实现非常简单,因为该类更新仅仅是对已有前缀的下一跳信息的修改,不会改变原始特里树的性质。然而,前面两类更新相对复杂,插入或者删除一条前缀均可能导致原始特里树形状的改变,从而同时影响不相交前缀集和重叠前缀集。通常,在路由器的控制平面维护一个辅助的1比特特里树,用于记录前缀存储在上述IP查找装置中的位置。应指出这个1比特特里树是在路由器的控制平面中(比如 CPU中)进行维护的,用于辅助路由更新。针对这个辅助1比特特里树的任何操作,都不会影响转发过程,因为转发引擎是在数据平面中。在该实施例中,一次完整的路由更新操作包括两个阶段。第一个阶段完成对路由器控制平面中辅助的特里树的更新。该阶段的主要目的是找到该路由更新对不相交前缀集和重叠前缀集的影响。根据第一个阶段的结果,第二个阶段主要分别针对基于TCAM的查找引擎和基于SRAM的查找流水线,在数据平面中具体实施更新操作(针对TCAM的写操作以及针对SRAM的写气泡)。下面结合图4和图5来更清楚地介绍上述路由更新过程。图4所示的是在图2(a)所示的特里树中插入一条新叶子前缀P7的场景。在前缀 P7插入之前,前缀P2、P4、P5和P6为叶子前缀,属于不相交前缀集,应该存储在基于TCAM 的查找引擎中;前缀Pl和P3为中间节点存储的前缀,属于重叠前缀集,应该以特里树的方式存储到基于SRAM的IP查找流水线中。在前缀P7插入之后,P7所在的节点为一个新的叶子节点,因此,前缀P7在更新后的特里树中变成一个新的叶子前缀。另外,由于前缀P7 的插入,之前的叶子前缀P2变成了非叶子前缀。前缀P7的插入给不相交前缀集和重叠前缀集带来的改变可以归纳为(1)前缀P2应该插入到重叠前缀集中;( 前缀P2应该从不相交前缀集中删除;C3)前缀P7应该插入到不相交前缀集。在这些改变在控制平面中被发现后,前缀P2应该以写气泡的方式插入到基于SRAM的IP查找流水线中,前缀P7应该覆盖基于TCAM的查找引擎中已经存储的前缀P2。叶子前缀在基于TCAM的查找引擎中的存储位置,可以记录在控制平面的辅助的1比特特里树的叶子节点中。图5所示的是在图2(a)所示的特里树中删除一条已存在的前缀P2的场景。在删除前缀P2之前,前缀P2、P4、P5和P6为叶子前缀,属于不相交前缀集,应该存储在基于TCAM 的查找引擎中;前缀Pl和P3为中间节点存储的前缀,属于重叠前缀集,应该以特里树的方式存储到基于SRAM的IP查找流水线中。在删除前缀P2之后,之前的非叶子前缀Pl变成了叶子前缀。前缀P2的删除给不相交前缀集和重叠前缀集带来的改变可以归纳为(1)前缀P2应该从不相交前缀集中删除;( 前缀Pl应该插入到不相交前缀集;C3)前缀Pl应该从重叠前缀集中删除。在这些改变在控制平面中被发现后,前缀Pl应该覆盖基于TCAM的查找引擎中已经存储的前缀P2。叶子前缀在基于TCAM的查找引擎中的存储位置,可以记录在控制平面的辅助的1比特特里树的叶子节点中。另外,前缀Pl在重叠前缀集中的删除操作,应该以写气泡的方式在基于SRAM的IP查找流水线中进行。图4和图5所示的仅仅是两种典型的更新场景,其它类型的插入和删除操作可以类似地完成。其中,所采用的前缀插入算法为
权利要求
1.一种IP查找装置,包括基于TCAM的IP查找引擎,其用于存储第一前缀集,所述第一前缀集包括根据路由器的转发信息库构造的1比特特里树的所有叶子节点对应的前缀;基于SRAM的IP查找流水线,其用于存储第二前缀集,所述第二前缀集包括所述特里树的所有中间节点对应的前缀;优先级仲裁模块,其用于对基于TCAM的IP查找引擎和基于SRAM的IP查找流水线的输出结果进行仲裁,以输出下一跳信息。
2.根据权利要求1所述的IP查找装置,其中,所述第二前缀集以1比特特里树的数据结构存储在基于SRAM的IP查找流水线中。
3.根据权利要求1所述的IP查找装置,其中,对基于TCAM的IP查找引擎的输出结果比基于SRAM的IP查找流水线的输出结果具有更高的优先级。
4.根据权利要求1所述的IP查找装置,其中当基于TCAM的IP查找引擎和基于SRAM 的IP查找流水线只有一个输出结果时,优先级仲裁模块直接选择该输出结果作为下一跳信息,否则,选择基于TCAM的IP查找引擎的输出结果作为下一跳信息。
5.根据权利要求1、2、3或4所述的IP查找装置,其中基于SRAM的IP查找流水线中的每个流水级都采用独立的双口 SRAM,所述双口 SRAM的一个端口只进行读操作,另一个端口只进行写操作。
6.一种基于如上述任一权利要求所述的IP查找装置的IP查找方法,所述方法包括 步骤1)在接收到待查询的数据包的目的IP地址后,同时将其送入基于TCAM的查找引擎和基于SRAM的查找流水线中进行查找;步骤2)当步骤1)只得到一个查找结果时,直接将该结果作为下一跳信息;当步骤1) 得到两个查找结果时,选择基于TCAM的查找引擎所输出的查找结果作为下一跳信息。
7.一种基于如权利要求1、2、3、4或5所述的IP查找装置的路由更新方法,所述方法包括步骤1)基于路由器的转发信息库的路由更新,完成对路由器控制平面中辅助的1比特特里树的更新,得到对第一前缀集和第二前缀集的更新操作序列;步骤2)根据所述更新操作序列,针对基于TCAM的查找引擎和基于SRAM的查找流水线,在数据平面中分别执行相应的更新操作。
8.根据权利要求7所述的路由更新方法,所述步骤1)中对路由器控制平面中辅助的1 比特特里树的更新包括(a)插入一条新前缀,(b)删除一条已存在的前缀,以及(c)修改一条已存在的前缀。
9.根据权利要求8所述的路由更新方法,所述插入一条新前缀的更新包括以下步骤 步骤101)将前缀P插入原特里树T中,得到新的特里树T’ ;步骤10 在新特里树T’中,找到前缀P的最长前缀Q,所述最长前缀Q是在新特里树 T’中离前缀P所处节点最近的祖先节点所对应的前缀;步骤103)如果前缀P是特里树T’中的非叶子前缀,则将前缀P插入第二前缀集; 步骤104)如果P是特里树T’中的叶子前缀,则判断Q是否是原特里树T中的非叶子前缀;如果是,则将P插入第一前缀集,否则将Q插入第二前缀集并从第一前缀集中删除Q, 然后将P插入第一前缀集。
10.根据权利要求8所述的路由更新方法,所述删除一条已存在的前缀的更新包括以下步骤步骤111)将前缀P从原特里树T中删除,得到新的特里树T’ ;步骤11 在原特里树T中找到前缀P的最长前缀Q,所述最长前缀Q是在原特里树T 中离前缀P所处节点最近的祖先节点所对应的前缀;步骤113)如果前缀P在特里树T中是非叶子前缀,则从第二前缀集中删除P ;步骤114)如果前缀P在特里树T中是叶子前缀,则判断Q在特里树T’中是否是非叶子前缀,如果是,则从第一前缀集中删除P ;否则,从第一前缀集中删除P,然后将Q插入第一前缀集,并从第二前缀集中删除Q。
11.根据权利要求7所述的路由更新方法,所述步骤幻根据所述更新操作序列,在数据平面中相应地对基于TCAM的查找引擎进行写操作,对基于SRAM的查找流水线以写气泡的方式执行更新操作。
12.—种路由更新装置,所述装置包括基于TCAM的IP查找引擎,其用于存储第一前缀集,所述第一前缀集包括根据路由器的转发信息库构造的1比特特里树的所有叶子节点对应的前缀;基于SRAM的IP查找流水线,其用于存储第二前缀集,所述第二前缀集包括所述特里树的所有中间节点对应的前缀;更新控制单元,其用于根据路由器的转发信息库的路由更新,完成对路由器控制平面中辅助的1比特特里树的更新,以得到对第一前缀集和第二前缀集的更新操作序列;以及用于根据所述更新操作序列,在数据平面中分别对基于TCAM的查找引擎中的第一前缀集和基于SRAM的查找流水线中的第二前缀集进行更新。
13.根据权利要求12所述的路由更新装置,其中,在基于SRAM的IP查找流水线中以1 比特特里树的数据结构存储第二前缀集。
14.根据权利要求12所述的路由更新装置,其中,基于SRAM的IP查找流水线中的每个流水级都采用独立的双口 SRAM,所述双口 SRAM的一个端口只进行读操作,另一个端口只进行写操作。
15.根据权利要求12、13或14所述的路由更新装置,其中所述更新控制单元对路由器控制平面中辅助的1比特特里树的更新包括(a)插入一条新前缀,(b)删除一条已存在的前缀,以及(c)修改一条已存在的前缀。
16.根据权利要求15所述的路由更新装置,所述更新控制单元以如下方式插入一条新前缀(101)将前缀P插入原特里树T中,得到新的特里树T’;(102)在新特里树T’中,找到前缀P的最长前缀Q,所述最长前缀Q是在新特里树T’ 中离前缀P所处节点最近的祖先节点所对应的前缀;(103)如果前缀P是特里树T’中的非叶子前缀,则将前缀P插入第二前缀集;(104)如果P是特里树T’中的叶子前缀,则判断Q是否是原特里树T中的非叶子前缀; 如果是,则将P插入第一前缀集,否则将Q插入第二前缀集并从第一前缀集中删除Q,然后将 P插入第一前缀集。
17.根据权利要求15所述的路由更新装置,所述更新控制单元以如下方式删除一条已存在的前缀(111)将前缀P从原特里树T中删除,得到新的特里树T’;(112)在原特里树T中找到前缀P的最长前缀Q,所述最长前缀Q是在原特里树T中离前缀P所处节点最近的祖先节点所对应的前缀;(113)如果前缀P在特里树T中是非叶子前缀,则从第二前缀集中删除P;(114)如果前缀P在特里树T中是叶子前缀,则判断Q在特里树T’中是否是非叶子前缀,如果是,则从第一前缀集中删除P;否则,从第一前缀集中删除P,然后将Q插入第一前缀集,并从第二前缀集中删除Q。
18.根据权利要求12所述的路由更新装置,其中,所述更新控制单元在数据平面中以对基于TCAM的查找引擎进行写操作的方式对第一前缀集进行更新;以及以写气泡的方式对基于SRAM的查找流水线中的第二前缀集进行更新。
全文摘要
本发明提供一种IP查找装置,其包括基于TCAM的IP查找引擎和基于SRAM的IP查找流水线,可以同时在这两个查找引擎中进行IP查找。在基于TCAM的IP查找引擎中,存储的是根据路由器的转发信息库构造的1比特特里树的所有叶子节点所对应的前缀,而在基于SRAM的IP查找流水线中,存储的是该特里树的中间节点对应的所有前缀。该装置在实现快速IP查找的同时,支持快速的增量路由更新。而且提高了TCAM的利用率,并缓解了基于FPGA片内SRAM的IP查找流水线存储空间不足的问题。
文档编号H04L12/56GK102307149SQ20111028651
公开日2012年1月4日 申请日期2011年9月23日 优先权日2011年9月23日
发明者罗腊咏, 谢应科, 谢高岗 申请人:中国科学院计算技术研究所