CN1774900A - 有界索引可扩展的基于散列的IPv6地址查找方法 - Google Patents
有界索引可扩展的基于散列的IPv6地址查找方法 Download PDFInfo
- Publication number
- CN1774900A CN1774900A CNA2004800097995A CN200480009799A CN1774900A CN 1774900 A CN1774900 A CN 1774900A CN A2004800097995 A CNA2004800097995 A CN A2004800097995A CN 200480009799 A CN200480009799 A CN 200480009799A CN 1774900 A CN1774900 A CN 1774900A
- Authority
- CN
- China
- Prior art keywords
- hash
- network address
- address
- look
- routing iinformation
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/74—Address processing for routing
- H04L45/742—Route cache; Operation thereof
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/167—Adaptation for transition between two IP versions, e.g. between IPv4 and IPv6
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/22—Parsing or analysis of headers
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Peptides Or Proteins (AREA)
Abstract
本发明提供了一种用于在诸如路由器这样的中间网络节点中高效查找地址路由信息的技术。为此,节点利用可用小的有界数目的从属查找来搜索的一个或多个“查找”表(LUT)来定位存储在其存储器中的路由信息,从而减小了传统执行的从属查找的数目。LUT被安排为使得每个表为子网掩码长度在不同的掩码长度范围(“步幅”)内的网络地址提供路由信息。根据该技术,节点通过按前缀长度减小的顺序搜索LUT,直到找到路由信息,来定位网络地址的路由信息。优选地,几个表被并行搜索。LUT中的匹配还可指向小的MTRIE,该MTRIE使得前缀中的最终比特能够被匹配。该最终MTRIE被用相对较小的有界数目的从属查找来搜索。
Description
相关申请
本发明与Felix Yuan等人的标题为“HIERARCHICAL HASHMETHOD FOR PERFORMING FORWARD ROUTE LOOKUP”的美国专利申请序列号No.[律师案卷号No.CISCP808]有关,这里通过引用将其教导明确包含进来。
技术领域
本发明一般而言涉及网络通信,更具体而言涉及在诸如路由器之类的中间网络节点中执行转发判决。
背景技术
计算机网络是用于在诸如计算机这样的节点之间传输数据的互连子网在地理上的分布式汇集。局域网(LAN)是这种子网的一个示例;多个LAN可由诸如路由器或交换机这样的中间网络节点进一步互连,以扩展计算机网络的有效“尺寸”并增大通信节点的数目。节点通常通过根据预定协议交换离散的数据分组来通信。在节点间传送的数据分组可包括固定尺寸的数据单元和/或可变尺寸的数据帧。分组通常包括被至少一个网络头部前插(“封装”)的“有效载荷”数据,所述至少一个网络头部是根据诸如传输控制协议/因特网协议(TCP/IP)这样的通信协议来编排格式的。在此上下文中,协议包括定义节点如何彼此交互的一组规则。
一般而言,中间网络节点被配置为在连接到多种数据链路和子网的节点之间交换数据分组。为此,中间节点实现用于通信节点的一组网络服务。这组服务可包括路由处理、路径确定和路径交换功能。路由处理功能确定接收到的分组所需的路由类型,而路径交换功能允许中间节点在第一接口上接受分组而在第二接口上转发该分组。路径确定或转发判决功能选择最适当的用于转发分组的接口。
中间网络节点中的转发判决通常是由节点中的转发引擎所执行。该引擎可在软件、硬件或其任何组合中实现。例如,该引擎可实现为可由专用集成电路(ASIC)、现场可编程门阵列(FPGA)、通用处理器、专用处理器等执行的软件或固件。数据分组在节点的网络接口之一处被接收,该接口例如被耦合到点到点链路、以太网链路、无线链路、光链路等。节点的网络接口从分组中解析出网络头部,并且将其传送到转发引擎以便处理。值得注意的是,可根据网络协议栈的不同层来处理头部,例如开放式系统互连(OSI)参考模型中所描述的那样。例如,引擎可被配置为工作于传统OSI模型的数据链路层(第2层)或网络协议层(第3层)。
转发引擎通过检测头部中包含的目的地地址而对接收到的分组头部执行转发判决。头部除了其他以外通常还包括分别指定分组的发送和接收节点的源和目的地地址。从而,分组可沿着最佳网络路径从一个节点“跳”到另一个节点,直到其到达其最终目的地。因此,转发引擎可将分组路由到其下一跳,并且在必要时替换分组的媒体访问控制(MAC)第2层头部。
分组的下一跳是通过路由存储在中间网络节点中的信息来确定的。路由信息被广义理解为包括用于实现节点的网络服务的任何信息,例如邻接信息、桥式转发信息等等。中间网络节点通常在可由转发引擎访问的数据结构中存储其路由信息。路由信息使得引擎能够确定下一跳,并且在某些情况下能够提供其他服务(服务质量、计费等等)。在操作中,转发引擎从接收到的分组的头部解析出目的地地址,并且执行“地址查找”操作,以确定是否有节点的任何数据结构包含对应于解析出的地址的路由信息。如果有的话,则下一跳被选择,并且分组被交换到相应的出口接口,并且其第2层(MAC)信息被适当地修改。
通常,中间网络节点中执行的第3层转发判决是基于因特网协议第4版(IPv4)网络地址的。根据IPv4地址格式,网络地址被表示为32比特(四字节)值,通常由四个0到255之间的数字来表示。从而,每个互连的子网可被分配一个唯一的IPv4地址范围。例如,典型子网可被分配地址空间212.47.101.*,其中星号是通配符,其最多能区分子网中的256个个体节点。例如,子网中的第一节点可被分配地址212.47.101.1,而第二节点可被分配地址212.47.101.2。
子网通常被与子网掩码相关联,子网掩码可用于从子网的地址空间内的网络地址中选出一组相邻的前缀比特。选中的前缀比特例如被中间网络节点用于定位到子网的路由。这里所使用的子网掩码长度是指子网掩码所选的前缀比特的数目,以下将N比特的子网掩码长度表示为/N。例如,假设一个典型子网与/25个网络地址相关联。因此,该典型子网可以与一个子网掩码(例如0xFFFFFF80)相关联,其指示需要网络地址中的前25个最高有效位的前缀来定位到该子网的路由。子网掩码及其使用在1999年9月出版的由Radia Perlman所著的题为“Interconnections Second Edition”的参考书的第9章中有更概括的描述,这里通过引用将该书结合进来,就如同在这里完整阐述了一样。
虽然其性能表现良好,但是IPv4协议已被确定具有若干缺点。主要缺点之一是其有限的地址数目。具体而言,预期IPv4的32比特地址将在几年之内被用尽。因此,已经开始进行开发IPv4的替代者亦即因特网协议第6版(IPv6)的工作。IPv6地址是128比特的—比当前的IPv4地址长四倍—因此在可用IP地址的数目上提供了相当大的增长。IPv6协议及其寻址体系结构在分别题为“Internet Protocol,Version 6(IPv6)Specification”和“IP Version 6 Addressing Architecture”的请求注解(RFC)2460和2373中概括描述,这里通过引用将这两个RFC结合进来,就如同在这里完整阐述了一样。
虽然IPv6大大增大了可用IP地址空间,但是与基于32比特IPv4地址的转发判决相比,基于125比特的IPv6地址的转发判决也消耗了更多资源,例如存储器、功率或处理带宽。通常由中间节点中的转发引擎所采用的传统IPv4地址查找技术常无法高效定位(即“查找”)IPv6地址的路由信息。通常可用根trie(RTRIE)、多路trie(MTRIE)、散列表或内容可寻址存储器(CAM)来实现的这些现有的IPv4地址查找技术,在被用来执行IPv6地址查找时,通常消耗过量的存储器、功率或处理资源。
例如,转发引擎可通过搜索RTRIE来执行IPv6地址查找。RTRIE是一类二进制trie,其“叶”节点包含指向存储路由信息的其他数据结构的指针。“Trie”型数据结构在Radia Perlman所著的题为“InterconnectionsSecond Edition”的参考书的第13章中概括描述,这里通过引用将该书结合进来,就如同在这里完整阐述了一样。IPv6地址的路由信息可通过在逐位基础上搜索RTRIE直到地址的对应叶节点被找到为止来定位。搜索RTRIE所需的从属查找的数目通常取决于区分路由表中的不同地址所需的地址比特的数目。这里所使用的从属查找被广义理解为在诸如在先存储器访问这样的在先操作完成之前无法被执行的存储器访问操作。因此,从属查找序列必须被顺序执行。
又例如,假设RTRIE只包含两个对应于IPv6地址FFFF::和FFFE::的叶节点,因此要区分这些地址只需要一比特(即第16个最高有效位,即地址比特113)。这里(以及以下),采用RFC 2373中描述的标准十六进制IPv6地址表示法,其中双冒号表示连续的零串。在此示例中,用于任一地址的叶节点都可通过例如基于比特113的值在RTRIE中执行仅一次查找来定位。如果将地址FFFD::添加到RTRIE,则必须执行两次从属查找(例如基于比特114和113)。随着附加的IPv6地址被添加到RTRIE中,定位地址的路由信息所需的从属查找的数目增大。
当RTRIE存储比上述示例中多得多的IPv6地址时,RTRIE中执行的从属查找的数目可能变得过分地大。在最坏情况下,在RTRIE中定位到IPv6地址之前,必须执行128次从属查找。用于每个前缀的大量从属读取是路由算法的不良品质。另外,一个查找可通过RTRIE中的单个比特来区别,而相同RTRIE中的另一个查找可能要求许多从属读取。查找时间的这种可变性是路由算法的另一个不良品质。
转发引擎还可通过搜索MTRIE来执行IPv6地址查找。MTRIE包括根节点,该根节点包括由IPv6地址的第一部分来索引的阵列。根节点中的每个阵列元素可存储一个指针,该指针涉及相应的“第一级”节点。从而包含2N条目的根节点阵列可最多涉及达2N个不同的第一级节点。每个第一级节点是由IPv6地址的第二部分来索引的阵列。每个第一级节点中的阵列元素可包含涉及相关的“第二级”节点的指针。通过这种分级方式,MTRIE中的连续级包含指数数目的节点(阵列),其中每个节点由IPv6地址的不同部分来索引。因此,IPv6地址查找涉及穿越MTRIE,直到定位出包含指向地址的路由信息的指针的阵列元素。“未使用”的阵列元素可存储涉及默认路由信息的指针,或者也可存储退化值,例如NULL值。
从而可构造MTRIE以使得所需的从属读取的数目被限制在合理的数字内。但是,由于在每一级必须定位的阵列的尺寸,所消耗的存储器的量急剧增大。可“调节”MTRIE的“步幅”(每一级所检查的比特数)以降低存储器开销。调节从本质上来说牺牲了期望在特定级别处分配的节点的数目,以换取该级别处的阵列的尺寸。因此,对于小阵列尺寸和较少MTRIE级别(例如就像IPV4传统查找通常所需的那样),MTRIE可在合理的存储器量中被实现。但是,对于128比特IPv6地址,MTRIE级别的数目和维护这些级别所需的存储器量就是不切实际的了。由于IPv6还处于其采纳周期的早期,因此路由分配无法被可靠地预测。因此,在MTRIE中实现IPv6查找可能需要可变步幅调节技术,而这种技术一般是不合需要的。此外,就处理资源来说,定位用于IPv6地址的路由信息所需的从属MTRIE查找的数目也可能是另人望而却步的。
某些转发引擎通过搜索散列表来执行IPv6地址查找。散列表是这样一种阵列,该阵列的条目可通过将传统散列函数应用到IPv6地址或其一部分来索引。在实践中,散列化不同地址的过程可能在表中生成相同的索引,从而导致“冲突”。在理想情况下,散列表大到足以容纳存储在中间节点中的每个IPv6地址,并且发生的冲突会很少。对于小地址空间,这是可以实现的。
但是,实际上,散列表的尺寸例如受限于节点的存储器可用性,并且当表存储大量IPv6地址时,常发生冲突。因此,每个散列表条目可以与相应的冲突地址列表相关联。不幸的是,每当散列表条目被索引时,这种列表通常被线性地搜索,这常导致过多的从属查找。此外,如果条目的列表被配置为存储最大数目的冲突地址,则某些地址可能无法适合于列表。在此情况下,转发引擎无法通过散列表定位这些地址的路由信息,从而引擎必须将查找推迟到后备机制中。
转发引擎可采用内容可寻址存储器而不是散列表或基于trie的数据结构来执行IPv6地址查找。CAM是一种存储设备,其包括用于在由数据值所定义的存储器位置处存储数据的逻辑和电路。因此,CAM可被配置为在由IPv6地址的值所定义的存储器位置处存储IPv6地址的路由信息。
虽然CAM可相对迅速地执行地址查找,但是它却有许多重大缺点。例如,CAM密度是有限的,并且可存储的路由的数目具有硬性极限(例如18兆比特CAM可存储125,000个IPv6地址,并且没有可用于扩展的空间)。因此,要执行对于较大路由表的IPv6地址查找可能需要多个CAM设备。此外,与诸如动态随机访问存储器(DRAM)这样的其他形式的存储设备相比,CAM消耗相对较大量的电功率。此外,目前CAM比其他传统存储设备更昂贵。总而言之,对于某些应用,在转发引擎中实现CAM的缺点强过了其执行快速IPv6地址查找的能力。
因此,需要提供一种IPv6地址查找技术,这种技术是确定性的,并且与散列表或基于trie的实现方式相比,这种技术采用较少的从属查找和较小的存储量。此外,该技术应该能够执行对于大路由密度(例如1,000,000路由)的地址查找,而不会消耗过量功率。该技术还不应把其操作踢给其他的可能较慢的地址查找算法。
发明内容
本发明提供了一种用于在诸如路由器这样的中间网络节点中高效查找地址路由信息的技术。为此,节点利用可用小的有界数目的从属查找来搜索的一个或多个“查找”表(LUT)来定位存储在其存储器中的路由信息,从而减小了传统执行的从属查找的数目。LUT被安排为使得每个表为子网掩码长度在不同的掩码长度范围(“步幅”)内的网络地址提供路由信息。根据该技术,节点通过按前缀长度减小的顺序搜索LUT,直到找到路由信息,来定位网络地址的路由信息。优选地,几个表被并行搜索。LUT中的匹配还可指向小的MTRIE,该MTRIE使得前缀中的最终比特能够被匹配。该最终MTRIE被用相对较小的有界数目的从属查找来搜索。
在示例性实施例中,每个LUT优选地被组织为具有多个条目的散列表,其中每个条目可存储涉及相应的“第二级”表的位置的指针。每个第二级表优选地被组织成一个散列表,该表包含多“页”,例如2m页(m=0,1,2,...),这些页被配置为存储与预定数目的(例如2个)网络地址相关联的路由信息的存储器位置。因此,中间网络节点可通过如下方式来定位与诸如IPv6地址这样的网络地址相关联的路由信息:查找LUT中的适当的条目,从而定位该条目的相应第二级表,然后查找该第二级表中的适当的页,并且搜索页的内容以查找节点中路由信息的存储器位置。
在操作中,网络地址的路由信息的存储器位置可按如下方式从LUT中取回:首先,通过利用诸如循环冗余校验(CRC)函数这样的第一散列函数散列化第一组地址比特,来生成对LUT的索引。例如,第一组地址比特是通过LUT的相关步幅来确定的。第二,生成的索引被用于查找相应的LUT条目,该LUT条目如果被填充,则涉及第二级表。第三,通过利用第二散列函数散列化第二组地址比特,来生成对第二级表中的页的索引。值得注意的是,第一和第二散列函数可以是相同的函数,并且第一和第二组地址比特也可以是相同的。然后被索引到的页的内容被按前缀长度减小的顺序搜索,以定位地址的路由信息的存储器位置。
对于发明的技术,另外,每个第二级表可“在工作中”被重新配置。具体而言,当新的网络地址被插入到“已满”的页中时,新添加的地址仍可以通过执行以下操作中的至少一种而被插入到第二级表中:(a)使第二级表中的页数加倍,(b)在第二级表中重新分布网络地址或(c)如果新地址与已在第二级表中的地址类似,则将新地址存储在可通过第二级表访问的MTRIE中。这里,可从页访问的MTRIE被组织为存储对应于页的具有最小(即“最不精确”)子网掩码长度的网络地址的路由信息的存储器位置。即,所有后续的“不那么精确”的前缀都被添加到MTRIE中,用于第二级匹配。
有利的是,发明的技术使得中间节点能够利用比传统所需的更少的从属查找来定位网络地址的路由信息,而不会大大增大其存储器或功率消耗,或者降低其路由密度。此外,该技术使得节点能够在不默认(即“踢”)给其他的可能较慢的地址查找算法的情况下定位路由信息。此外,可通过在CAM中和/或在多处理器环境中实现LUT,而使该技术更高效。
附图说明
通过联系附图参考以下描述,可以更好地理解本发明的以上和其他优点,附图中类似的标号表示相同或功能类似的元件,附图中:
图1是包含互连的子网和节点的汇集的计算机网络的示意性框图,这些节点中包括中间网络节点;
图2是例示性中间网络节点的示意性框图;
图3是可有利地在本发明的中间网络节点中实现的转发引擎的示意性框图;
图4是LUT布局,其描述根据本发明可用于存储路由信息的位置的根据16比特子网掩码长度“步幅”而安排的典型散列表集合;
图5是典型散列表及其相关联的第二级表的示意性框图;
图6是典型第二级表的示意性框图,其中MTRIE被创建来容纳添加的网络地址,例如IPv6地址;
图7A-B是示出根据本发明用于在第二级表中插入地址的步骤序列的流程图;
图8是示出根据本发明用于从一组第一级散列表或MTRIE中查找地址的路由信息的位置的步骤序列的流程图;以及
图9是示出根据本发明用于利用单独的第一级散列表来查找地址的路由信息的位置的步骤序列的流程图。
具体实施方式
A.中间网络节点
图1是计算机网络100的框图,该网络包括互连的子网和节点的汇集。这些节点可包括计算机,其中包括末端节点130和140,例如发送末端节点120和接收末端节点150;以及中间网络节点200,其中后者可以是交换机或路由器。网络100内所包括的子网105、110优选地是由中间节点200互连的局域网(LAN),但是网络也可包含其他通信链路,例如广域网。耦合到LAN的节点间的通信通常是通过在节点间交换离散分组160来实现的。
例如,当数据穿过协议栈的不同层时,发送节点120通过在诸如传统数据链路和网络层头部这样的头部内封装“有效载荷”数据,来生成数据分组160。然后分组通过网络被传输到中间节点200,该中间节点通过将数据分组路由到适当的接收节点150,来促进数据分组流经网络。具体而言,节点200接收来自输入端口的分组,解析数据链路和网络层头部,为分组做出转发判决,将新的数据链路头部附加到分组上,然后将分组发送到输出端口。
图2是可有利地用于本发明的中间节点200的示意性框图。该节点包括多个线路卡210、转发处理器(FP)模块230和路由处理器(RP)模块260。数据被线路卡接收,每个线路卡被耦合到至少一个网络,例如LAN105和110。更具体而言,线路卡可被配置为向/自多于一种类型的网络传送数据,这些网络除了其他以外还包括异步传送模式(ATM)、同步光网络(SONET)、帧中继、以太网、光纤分布式数据接口(FDDI)等。
线路卡210被多个高速单向(即点到点)链路212耦合到底板逻辑电路220。优选地,底板逻辑电路被实现为包括耦合到单向链路的接口电路215b的高性能专用集成电路(ASIC)。优选地,包含在位于每个线路卡上的高性能ASIC内的相应的接口电路215a将线路卡耦合到单向链路。接口电路一般将在线路卡处接收到的数据的传统格式转换成协议格式,用于在单向链路上传输,反之亦然。
一般而言,中间节点的功能性基础设施被划分成数据平面和控制平面。数据平面包括用于接收来自网络的数据分组以及在必要时为这些分组提供转发判决的组件。为此,数据平面从线路卡210延伸到单向链路212,通过这些链路到达底板逻辑电路220,并且通过底板到达FP模块230中的转发引擎300(例如处理器阵列)。转发引擎从本质上来说包括中间节点的转发路径功能,并且可实现为数据平面中的微代码硬件。在转发引擎在确定应在何时将分组转发到何处时处理数据分组的相关联的头部的同时,分组缓冲器240可存储数据分组160。经处理的头部被与其各自的数据分组合并,并且产生的分组被从底板传送到适当的线路卡和网络。
另一方面,控制平面包括用于管理/控制中间节点的操作的那些实体,因此控制平面从底板逻辑电路220延伸到RP模块260上的路由处理器270(例如通用MIPS处理器)。虽然未示出,但是诸如外围组件互连(PCI)总线这样的总线将FP模块上的底板逻辑与RP模块上的系统控制器280耦合。路由处理器被配置成执行用于中间节点的配置管理功能,例如构造和加载由FP模块230所使用的路由表。
路由处理器270被耦合到系统控制器280和存储器290。存储器可包括用于存储软件程序、缓冲器池、数据结构等的可由路由处理器和系统控制器寻址的同步动态随机访问存储器(SDRAM)的存储位置。例如,存储器290可存储一个或多个数据结构,这些数据结构包含节点的路由信息294,例如其邻接信息、桥式转发信息等。其部分通常位于存储器290中的网络路由操作系统292被路由处理器所执行,以执行控制/管理操作。可有利地用于本发明的网络路由操作系统的一个示例是Cisco Systems的互连网操作系统(IOS)。本领域的技术人员易于看出,其他存储器装置(包括各种计算机可读介质)也可用于存储和执行与中间节点200的操作有关的程序指令。
图3是转发引擎300的示意性框图,该转发引擎包括处理元件(TMC)阵列330,这些处理元件嵌入在输入和输出头部缓冲器之间,并且耦合到被分区成多个外部存储器(EXT MEM)资源340的存储器。EXT MEM资源340包括用于存储例如元件330所访问的数据结构且可由处理元件330所寻址的随机访问存储器(RAM)存储位置。每个处理元件330例如包括流水线式处理器,该处理器除了其他以外还包括多个算术逻辑单元(ALU),以及寄存器文件,该寄存器文件具有存储由ALU所处理的中间结果信息的多个通用寄存器。处理元件330可被排列成多行和多列,并且还被配置为多维脉动阵列。在图示实施例中,处理元件330以4×8阵列配置被排列成四(4)行和八(8)列,该配置被嵌入在输入缓冲器310和输出缓冲器320之间。但是,应该注意,其他配置方式(例如8×8阵列配置)也可有利地用于本发明。
每行的处理元件330被配置为“流水线”的级,这些级顺序地对由输入缓冲器310加载的诸如分组头部这样的暂态数据执行操作。相反,每列的处理元件330并行操作,以便几乎同时地对暂态数据执行相同操作,但却是按错开的阶段执行的。每个阶段包括预定数目的时钟周期,例如192个周期。每个EXT MEM 340专用于各自的一列处理元件330,并且还被用非暂态表数据进行配置,这些非暂态表数据是支持成列的处理元件所执行的类似功能所需的。由于同一列中的处理元件共享对公共存储器资源340的访问权限,因此一个阶段中的时钟周期可被划分成更小的“小阶段”,例如24个周期,这些小阶段被分配给该列的处理元件,以防止存储器访问冲突。输入缓冲器310的排序电路通过确保每个元件330在新阶段中将新的暂态数据加载到流水线中之前完成当前暂态数据的处理,来控制每个流水线的处理元件330。一般而言,当所有元件330都完成对其当前的暂态数据(当前上下文)的处理并且新的输入暂态数据(新的上下文)被输入缓冲器完整接收到时,开始新阶段的处理,即执行上下文切换。已被转发引擎充分处理的暂态数据退出输出缓冲器320。但是,要求附加处理的暂态数据可经反馈路径350被路由回输入缓冲器310,以便再一次“经过”引擎的多处理器阵列。
转发引擎300可被配置为执行中间节点200所提供网络服务中的一个或多个。例如,当转发引擎被配置为执行节点的转发判决时,输入缓冲器310可在单个阶段中例如从分组缓冲器240加载多个分组头部。所加载的头部随后被转发引擎中的不同行并行处理。为此,每列中的处理元件330可被配置为对行的分组头部同时执行相同的转发判决操作。例如,一列或多列中的处理元件可被配置为查找头部中指定的诸如IPv6地址这样的网络地址的路由信息294。例如,路由信息被从存储器290复制到可为处理元件所用的一个或多个EXT MEM资源340。通过这种方式,处理元件330可直接从转发引擎300的EXE MEM资源340查找路由信息294。
B.查找表的逻辑组织
根据图示实施例,转发引擎300的一列或多列中的处理元件330可被配置成通过搜索存储在一个或多个外部存储器资源340中一组“查找”表(LUT),来定位地址的路由信息294。有利地,每个LUT可用小的有界数目的(例如3-5个)从属查找来搜索,而不必默认(即踢)给其他的效率可能较低的地址查找算法。每个LUT(在外部存储器中)存储与子网掩码长度在掩码长度的预定范围(“步幅”)内的网络地址相关联的路由信息的存储器位置。此外,每个LUT优选地被组织成散列表,该散列表具有多个条目,这些条目可基于将散列函数应用到诸如IPv6地址这样的网络地址或其一部分的结果而被索引。
图4示出散列表布局400,其描述了可由转发引擎300搜索的一组典型散列表410的内容。例如,散列表被存储在外部存储器340中的一个或多个中,并且可由处理元件330访问。例如,假设对应于128比特IPv6地址的路由信息可通过散列表访问。另外,假设这些表是根据恒定的16比特步幅来组织的,以使得每个表与16个子网掩码长度的不同的不交迭范围相关联。当然,本领域的技术人员将会意识到散列表不必与如16比特步幅这样的恒定步幅相关联,并且这些表可存储可变比特长度的网络地址,而不仅是128比特地址。
根据图示的散列表布局400,每个散列表410存储子网掩码长度在最小掩码长度420和最大掩码长度430之间也包括最小掩码长度420和最大掩码长度430在内的网络地址的路由信息的位置。从而,掩码长度420和430定义表的相关步幅。例如,子网掩码长度等于/45的地址的路由信息的位置被存储在散列表6中,其相关步幅包括子网掩码长度/33-/48的范围。由于将在以下说明的原因,子网掩码长度在“最不精确”步幅(即/1至/16)内的地址的路由信息的位置被存储在MTRIE而不是散列表中。
每个散列表410中的条目或“散列线”是通过将诸如32比特CRC(CRC32)函数这样的散列函数应用到“前缀”地址比特440的预定范围来访问的。在图示实施例中,前缀比特440的范围是由以地址的最高有效位开始的连续的地址比特序列来定义的。该序列中的比特数目比表的最小掩码长度420小1。例如,最小子网掩码长度等于/113的散列表1是通过散列化112个前缀地址比特(即比特0-111)来索引的。类似地,对最小子网掩码长度等于/97的散列表2的索引是通过散列化96个前缀比特(即比特0-95)来生成的。更一般而言,N-1个前缀比特被散列化,以生成最小子网掩码长度为/N的散列表的索引。因为当最小子网掩码长度为/1时没有前缀比特要散列化,因此子网掩码长度在步幅/1到/16内的地址的路由信息可例如通过传统的4:4:4:4MTRIE来访问。
根据图示实施例,每个散列表410具有多个条目(例如29个条目),其中每个条目可存储涉及相应的“第二级”表的位置的指针。每个第二级表优选地被组织成一个散列表,该散列表包含多“页”,例如2n页(n=0,1,2,...),这些页被配置为存储与预定数目的(例如2个)网络地址相关联的路由信息的存储器位置。因此,散列表410可被视为“第一级”表,通过该“第一级”表可定位存储地址的路由信息的适当的第二级表。
图5是典型第一级散列表500以及它的两个相关联的第二级散列表550和560的示意性框图。表500包含多个被索引到的散列线,例如2m个散列线。例如,散列线502、504、506和508分别对应于索引等于0、1、2和2m-1的散列表条目。从操作上来说,散列表500中的散列线是通过将第一散列函数(Ho)应用到诸如IPv6地址这样的网络地址中的一组前缀比特而被索引的。正如先前参考图4所描述的那样,散列化的该组前缀比特可能与和表500相关联的预定范围的前缀比特440一致。例如,如果散列表存储/113-/128个地址,则112个前缀比特(即比特0-111)可被散列化,以生成到散列表的索引。如果必要的话,散列化前缀比特的结果可被截短或者掩蔽,以确保生成的散列线索引等于0到2m-1之间的值。例如,如果由散列函数Ho生成的索引是32比特值,但散列表500仅包含29个散列线,则所生成的散列值中的23个比特可被截短或掩蔽。
每个被索引到的散列线存储有效比特510、散列函数标识符520、指示散列线的相应的第二级表中的页数的值n 530,以及指向散列线的相应的第二级表的指针540。散列线的有效比特510的值指示至少一个网络地址的路由信息的位置是否被存储在散列线的第二级表中。例如,在散列表500中,等于“0”的有效比特510指示网络地址路由信息无法经由散列表条目502和508访问。相反,散列线504和506中等于“1”的有效比特510指示至少一个网络地址的路由信息的位置被存储在第二级表550和560中的每一个中。
散列函数标识符520标识第二散列函数(Hx,x=0,1,2,...),该第二散列函数可被应用到第二组地址比特,以索引第二级表中的页。第二散列函数Hx可以是与第一散列函数Ho相同的函数。优选地,第二组地址比特具有与第一级表相关联的前缀比特440相同的范围。例如,如果第一级表500存储/113-/128个地址,则112个前缀地址比特(即比特0-111)可用第二散列函数而被散列化,以生成对第二级表的索引。第二散列函数Hx被用于在第二级表的页内随机分布网络地址。
第一级散列表500中的每个散列线可以与不同的散列函数Hx相关联。例如,散列线502、504和506依靠不同的第二散列函数H1、H2和H3来生成对其各自的第二级表的索引。或者,两个或多个散列线可使用相同的散列函数Hx,例如散列线504和508。虽然散列函数Hx可实现不同的散列算法(例如消息摘要5(MD5)算法、CRC32算法或选择性异或(XOR)操作),但是也明确预期它们可采用使用不同“种子”值的公共散列算法。例如,散列函数H1、H2和H3可各自对应于使用不同初始值(或种子值)的相同CRC32散列函数。在此情况下,散列函数标识符520可标识用于初始化散列函数Hx的适当的种子值。
因此注意,值n530指示散列线的相应的第二级表中的页数。由于每个第二级表例如包含2n页,因此值n等于散列线的第二级表中的页数的以2为底的对数。因此,值n指示用于索引第二级表中的一页所需的比特数目。例如,假设CRC32散列函数Hx被用于生成对具有四页(即n=2)的第二级表的索引。在此情况下,要定位第二级表的四页之一只需要由CRC32函数生成的32比特索引中的两个比特。从而,生成的32比特索引中的30比特可被掩蔽或截短,以生成对第二级表的有效索引。
每个有效的散列线包含指针540,该指针涉及散列线的相应的第二级表的存储器位置。例如,有效散列线504和506包含指针540,该指针存储其相应的第二级表550和560的位置。或者,取代指针540,散列线504可包含指示其相应的第二级表的地址的索引。每个第二级表包含2n个被索引到的页570。如图所示,每页包含两个“桶(bucket)”580(即条目),但是本领域的技术人员将会意识到每页中可包含任意数目的桶。
每个桶580被配置为存储网络地址582,包括地址的相关联的子网掩码长度,以及“叶”标识符584。这里所使用的“叶”是位于外部存储器340中的数据结构,其存储路由信息294,例如邻接信息、桥式转发信息等。因此叶标识符584可以是涉及外部存储器资源340中叶的存储器位置的指针。因此,叶标识符584可用于定位其相关网络地址582的路由信息。值得注意的是,不同网络地址可依赖于相同的路由信息,因此可能被与相同的叶标识符配对。例如,在图5中,IPv6地址A::B:5000/127和A::C:8006/115的路由信息被存储在相同的叶中,例如叶3中。这里,A、B和C是任意值,A::B和A::C表示任意的112比特前缀。
优选地,存储在页的桶中的网络地址是按照前缀长度减小的顺序而列出的。即,页中的第一(“最顶部”)桶存储页的最精确的网络地址。例如,存储在第二级表560的页1中的两个IPv6地址B::D:8008/127和A::C:8006/115是按前缀长度减小的顺序来列出的。当页只包含一个网络地址时(例如表550中的页),页中的最顶部桶存储网络地址582及其相关联的叶标识符584。注意到,虽然为了示例目的,图5的第二级散列表550和560存储/113-/128个IPv6地址,但是典型的第二级表也可被配置成按其他步幅存储网络地址,而不会丧失一般性。
有利地,由散列表500所例示的散列表410的新颖组织使得中间网络节点能够利用与传统技术相比相对较少的从属查找来定位网络地址的路由信息。即,节点可通过利用第一散列函数Ho查找散列表410中的适当的散列线,利用第二散列函数Hx查找第二级表中的适当的页,然后搜索页的桶以查找地址的路由信息的存储器位置,来定位与诸如IPv6地址这样的网络地址相关联的路由信息。总而言之,本发明的地址查找过程仅对应于少量(例如3个)从属查找。此外,由于第一和第二级表的可扩展的有界组织,本发明还使得中间网络节点200能够在无需默认(即“踢”)给其他可能较慢的地址查找算法的情况下定位路由信息。
C.将地址插入查找表中
根据图示实施例,每个第二级表可“在工作中”被重新配置。具体而言,当新的网络地址被插入到“已满”的页中时,新添加的地址仍可以通过执行以下操作中的至少一种来被插入到第二级表中:(a)使第二级表中的页数加倍,(b)在第二级表中重新分布网络地址或(c)将附加地址存储在可通过第二级表访问的MTRIE中。有利地,上述三种技术可被单独使用或按各种组合使用,以将新地址插入到第二级表中。
通过使第二级表中的页数加倍,将有两倍那么多的桶可用于存储网络地址以及与其相关联的路由信息的位置。因此,由于页“已满”而无法“装”进第二级表的网络地址,可以被添加到第二级数据结构的“扩大”(例如加倍)版本中。为此,可分配附加的存储器来扩大第二级表,并且可利用表的相关联的散列函数Hx来在扩大后的表中重新分布网络地址。此外,与表相关的值n 530增大1,以指示在扩大后的第二级表中索引一页需要额外的一个比特。虽然在图示实施例中第二级表的尺寸加倍,但是本领域的技术人员将会理解在这里的教导的范围之内,这种表可被扩大其他倍数。
假设新的IPv6地址将要被加到典型第二级表560的页1中。由于页1已满(即它的桶包含地址A::C:8008/127和A::C:8006/115),因此表560中的页的数目可被加倍,以容纳新添加的地址。因此,表560中的页的数目从四(22)增大到八(23),并且表中的地址(包括新添加的地址),被用散列线506中指示的表的相关散列函数H3来重新分布。此外,由于表中的页的数目被加倍,因此散列线506中的值n530从2增大到3,从而指示要在新的扩大后的表560中索引一页需要3个比特。
不是增大第二级表的尺寸以插入新的网络地址,而是也可用不同的散列函数Hx来重新分布表中的地址。于是可以在第二级表中重新分布先前存储的地址之后,插入新地址。例如,再次假设新的IPv6地址将被添加到第二级表560中的页1。在表560中的地址先前被用散列线506中指示的散列函数H3分布在表的页间的情况下,它们可以用不同的散列函数(例如H4)来重新分布。在此情况下,散列线506中的散列函数标识符520被改变,以反映新的散列函数H4与第二级表560相关联。正如先前所注意到的,新的散列函数可采用不同的散列算法,或者可以是使用不同种子值的相同算法。在第二级表中的地址已被用新散列函数H4重新分布以后,新的IPv6地址可被添加到适当的桶580。可重复选择新散列函数H4的过程,直到找到提供容纳新添加的IPv6地址的合适分布的散列函数。
虽然上述用于重新分布第二级表中的地址的技术对于从属网络地址工作良好,但是它们对于非独立网络地址却不起作用。这里所使用的非独立地址被定义为具有生成相同散列表索引的相同前缀比特的网络地址。相反,独立地址包含不同前缀比特,并且因此与非独立地址不同,可能生成不同的散列表索引。例如,假设非独立IPv6地址A::B:0001/122和A::B:0002/128的路由信息的位置可通过/113-/128散列表来访问。因为地址具有相同的112比特前缀A::B,所以其散列化的前缀比特将会始终生成相同的到第二级表的页索引,而不论选择了哪个散列函数Hx。另一方面,如果地址是独立的,例如A::B:0001/122和A::C:0002/128,则其前缀是不同的,并且因此可以不必生成相同的页索引。
图6示出使第二级表中的页能够存储比其所拥有的桶数更多的网络地址的技术。这样,第二级表中的页可存储多个非独立或独立地址,这些地址在被函数Hx散列化时,生成相同的页索引。当新地址被添加到已满的页中时,页的“最顶部”的桶存储页的最精确的网络地址,剩余的不那么精确的地址被存储在可通过页的“最底部”的桶访问的MTRIE中。因为区别MTRIE存储的地址所需的比特数目限于地址子网掩码长度及其前缀长度的差异,因此在MTRIE中实现的级数可相对较小。这样,可在小的有界数目的从属查找中搜索MTRIE。
例如,如图6所示,假设IPv6地址A::D:8007/128和其路由信息(例如叶2)的位置被添加到第二级表560的页3中。因为添加的IPv6地址是页中最精确的(即,它具有最长的子网掩码长度(/128)),所以地址被存储在页的最顶部的桶580中。剩余的不那么精确的地址A::D:8009/125和A::D:8000/114被存储在MTRIE 600中。因为112个前缀比特被散列化以生成到典型第二级表560的页索引,并且该表存储子网掩码长度在步幅/113至/128中的IPv6地址,所以为了区别(即唯一定位)存储在MTRIE中的地址,最多需要16比特(128减112)。即,存储在MTRIE中的地址可基于其16个最低有效地址位的值(例如比特113-128的值)来定位。类似地,即使第二级表560按不同的16比特步幅存储地址,要区别存储在MTRIE 600中的地址也只需要跟在散列化的前缀地址比特后的16比特。从而可用相对较少的级别(例如4级)来实现MTRIE。
除了存储网络地址的路由信息的位置外,MTRIE 600还可包括“默认”路由。MTRIE 600中不存储特定网络地址的路由信息的位置的阵列元素可存储对包含默认路由信息的叶的涉及。或者,阵列元素可存储默认值,例如NULL值。一般而言,默认路由信息可对应于任何预定的路由信息294。例如,在图示实施例中,MTRIE的默认路由信息可以与中间网络节点200的路由表中最不精确的与存储在MTRIE中的网络地址具有相同的前缀比特的网络地址相关联。例如,因为MTRIE 600存储非独立地址A::D:8009/125和A::D:8000/114,所以默认路由信息可对应于存储在中间网络节点的路由表中的具有112比特前缀A::D的最不精确的IPv6地址。
图7A-B示出用于将地址插入到第二级表中的步骤序列。序列开始于步骤700处,并且前进到步骤705,在这里地址k(例如IPv6地址)以及它的相关子网掩码长度在中间节点200处被接收到。地址k可在网络“控制”分组的中下文中被接收到,该分组根据传统路由协议来编排格式,所述传统路由协议例如是开放式最短路径优先(OSPF)协议、内部网关路由协议(IGRP)、边界网关协议(BGP)等。接收到的控制分组还可包括指示网络地址k应该被添加以节点的路由表中的信息。
从操作上来说,控制分组在线路卡210处被接收到,并且通过接口电路215和底板逻辑电路220被转发到RP模块260。然后,分组根据路由器系统292被存储在存储器290中,并且被处理器270所处理。基于控制分组的内容,操作系统可确定地址k的路由信息的位置,并且如果必要的话,生成新叶来存储地址的路由信息。否则地址k被与已经存储在存储器290中的路由信息294相关联。
在步骤710处,路由器操作系统292确定地址k的子网掩码长度是否在存储在中间网络节点中的最小(即最不精确)掩码长度的步幅内。例如,假设操作系统在根据恒定的16比特步幅安排的一组散列表410中组织128比特IPv6地址,并且/1-/16步幅对应于节点的最小步幅。如果步骤710处的确定是肯定的,则序列前进到步骤715,在这里地址k及其相关联的路由信息例如被存储在传统4:4:4:4MTRIE中。然后操作系统在步骤770处更新可能由于添加地址k而受影响的任何默认路由信息,例如其他MTRIE结构中的默认路由信息。序列在步骤775处结束。
另一方面,如果地址k的相关联的子网掩码长度不在最小步幅内,则在步骤720处,操作系统292定位其步幅包含地址k的子网掩码长度的散列表410。接下来,在步骤725处,与散列表相关联的前缀比特440的范围被在地址k中定位,并且被诸如CRC32函数这样的散列函数Ho所散列。这里,Ho(k)表示应用到地址k中的前缀比特的函数Ho。然后所生成的散列值被用于索引所定位的散列表中的散列线。值得注意的是,所生成的散列值Ho(k)可被适当地掩蔽或截短,以确保它对应于有效的散列线索引。
在步骤730处,估计被索引到的散列线中的有效比特510的值,以确定散列线是否已在使用中。如果有效比特的值指示被索引到的散列线未在使用中,则在步骤735处,该值被更改,以指示散列线目前在使用中。此外,在尚未为被索引到的散列线分配第二级表的情况下,路由器操作系统292可被配置为分配新的第二级表。在这种情况下,被索引到的散列线中的指针540的值被修改,以涉及新分配的第二级表的位置。
接下来,在步骤740处,基于被索引到的散列线中的散列函数标识符520的值,标识诸如CRC32函数这样的第二散列函数Hx。例如,散列函数Hx可以是CRC32函数,它是由标识符520所指定的种子值初始化的。与散列表相关联的前缀比特440的范围再次被在地址k中定位,并且前缀比特被函数Hx散列化。被索引到的散列线中的值n530指示定位散列线的相应第二级表(该表是由散列线的指针540定位到的)中的页所需的所生成的散列值Hx(k)中的比特数目。例如,Hx(k)中的n个最低有效位可用于索引第二级表中的页。
在步骤745处,操作系统确定被索引到的页是否已满,即它的桶是否已包含地址582和叶指针584(或MTRIE指针)对。如果被索引到的页中的至少一个桶是空的,则在步骤750处,地址k、其子网掩码长度和其路由信息的位置被存储在被索引到的页中。优选地,以确保按前缀长度减小的顺序(即“最长前缀匹配”顺序)将地址存储在页的桶中的方式来插入地址k。在770处,默认路由信息(例如可通过其他散列表410访问的MTRIE结构中的路由信息)如果受到了地址k的添加的影响则被更新。然后序列在步骤775处结束。
如果,在步骤745处,被索引到的页被确定为已满,则序列可沿步骤755、760和765处指定的路径之一前进。沿第一路径,在步骤755处,可通过选择在第二级表的页之间随机分布地址的新的散列函数Hx来重新分布第二级表中的地址。例如,新的散列函数可以是CRC32函数,它是由与由散列函数标识符520所指定的原始Hx函数不同的种子值所初始化的。因此,散列函数标识符520被更改,以标识新选中的种子值。在重新分布第二级表中的地址后,在步骤755处,序列使用新的Hx函数返回步骤740。
或者,当在步骤745处被索引到的页被确定为已满时,序列可前进到步骤760,在这里第二级表中的页的数目被加倍。为此,操作系统可能必须分配附加的存储器,来存储第二级表。然后利用散列函数标识符520所指示的散列函数Hx,在整个扩大后的表中重新分布存储在第二级表中的网络地址。此外,值n 530被加1,以指示要索引扩大后的第二级表中的页则需要附加的比特。在重新分布第二级表中的地址后,在步骤760处,序列返回步骤740。
当在步骤745处确定被索引到的页已满时,序列还可沿步骤765处开始的路径前进。这里,地址k及其相关联的路由信息的位置被插入到可通过被索引到的页访问的MTRIE中。具体而言,如果还未创建MTRIE,则安排MTRIE以存储被索引到的页的最不精确的地址,即具有最小子网掩码值的地址。从而,如果地址k具有被索引到的页中的最大的子网掩码长度,则它被存储在页的最顶部的桶中,并且MTRIE是通过页的最底部的桶来访问的。相反,如果地址k是页的最不精确的地址之一,则它被存储在MTRIE的适当的条目中。接下来,在步骤770处,默认路由信息(例如其他MTRIE结构中的路由信息)如果受到了地址k的添加的影响则被更新。序列在步骤775处结束。
D.查找地址的路由信息
根据示例性实施例,转发引擎300通过按前缀长度减小的顺序搜索一组查找表(诸如散列表410),直到找到路由信息,来定位网络地址的路由信息。为此,转发引擎300的不同列中的处理元件330可被配置为在位于外部存储资源340中的不同散列表410中执行表查找。此外,转发引擎的多列(例如4列)中的处理元件可同时搜索多个散列表。对于示例性的实施例,另外,无法在散列表410中的任何一个中定位的网络地址的相关路由信息被存储在MTRIE中,该MTRIE与表类似,也可用相对较小的有界数目的从属查找来搜索。因此,转发引擎300中的一列处理元件330可被配置为在先前列中的处理元件无法在散列表410集合中定位到地址的路由信息的情况下搜索MTRIE。
图8是示出用于在中间网络节点200中查找地址的路由信息的位置的步骤序列的流程图。序列在步骤800处开始,并前进到步骤810处,在这里诸如IPv6地址这样的网络地址被从接收到的数据分组中解析出来。更具体而言,数据分组在线路卡210处被接收,并且通过接口电路215和底板接口逻辑220被转发到FP模块230。然后分组被存储在分组缓冲器240中,并且其头部被传送到转发引擎300,以便处理。引擎从头部中解析出目的地地址k,以便对接收到的分组执行转发判决。这里,假设地址k的相关子网掩码长度无法从分组头部中获得。然后转发引擎部分基于地址的相关联的路由信息来执行其转发判决,该路由信息是根据图8的剩余步骤来定位的。
在步骤820处,转发引擎例如在适当的存储器340中定位尚未为找到地址k的路由信息而被搜索的最精确的散列表410。例如,假设地址k是128比特IPv6地址,并且散列表410是根据恒定的16比特步幅来安排的,则最精确的、未被搜索的散列表最初对应于/113-/128散列表。接下来,在步骤900处,正如将参考图9更详细描述的那样,散列表被搜索。
如果在步骤830处,地址k的路由信息在散列表中被定位到,则序列在步骤860处结束。否则,在步骤840处,转发引擎确定是否还有另一散列表410要搜索。如果是的话,则序列返回步骤820。注意,当散列表被转发引擎并行搜索时,步骤820-840可被引擎300中的不同处理元件330同时执行。
如果所有散列表410都已被搜索,并且地址k的路由信息的存储器位置尚未被标识,则在步骤850处,转发引擎搜索对应于节点200的路由表中的最不精确的地址的MTRIE。例如,MTRIE可存储子网掩码长度在最不精确的步幅/1至/16内的IPv6地址的路由信息的位置。序列在步骤860处结束。因为图8中的步骤序列可在散列表410或MTRIE中定位具有任意子网掩码长度的网络地址的路由信息,因此该技术不需要将其执行踢给其他的可能较慢的地址查找算法。
图9是示出转发引擎300可执行的用于从散列表410中查找地址k的路由信息的存储器位置的步骤序列的流程图。序列在步骤900处开始,并且前进到步骤905,在这里与散列表相关联的前缀比特440的范围被在地址k中定位,并且被诸如CRC32函数这样的散列函数Ho所散列化。这里Ho(k)表示应用到地址k中的前缀比特的函数Ho。然后所生成的散列值被用于索引定位到的散列表中的散列线。值得注意的是,所生成的散列值Ho(k)可被适当掩蔽或截短,以确保它对应于有效的散列线索引。
接下来,在步骤910处,转发引擎基于散列线中的有效比特510的值,来确定被索引到的散列线是否有效。如果引擎确定该散列线无效,则在步骤950处,“不匹配”指示被例如返回给被配置为搜索地址k的路由信息的下一个处理元件330。序列在步骤960处结束。
但是,如果在步骤910处,散列线的有效比特510的值指示散列线有效,则在步骤920处,第二散列函数Hx基于被索引到的散列线中的散列函数标识符520的值而被标识。例如,散列函数Hx可以是CRC32函数,它是由标识符520指定的种子值来初始化的。与散列表相关联的前缀比特440的范围再次被在地址k中被定位,并且前缀比特被函数Hx所散列化。被索引到的散列线中的值n 530的值指示定位散列线的相应第二级表中的页所需的所生成的散列值Hx(k)中的比特数目,该第二级表是由散列线的指针540所定位的。例如,Hx(k)中的n个最低有效位可用于索引第二级表中的页。
然后,在步骤925处,优选地按照前缀长度减小的顺序搜索被索引到的页中的桶,并且转发引擎对存储在桶中的每个地址执行“精确匹配比较”测试。在步骤930处,如果存储在桶中的网络地址等于地址k,则满足精确匹配比较测试,并且确定在散列表410中找到地址k。在此情况下,在步骤935处,存储在桶中的叶标识符被返回,并且序列在步骤960处结束。
如果在被索引到的页的桶中未定位到地址k,则在步骤940处,转发引擎确定最底部的桶是否存储了对MTRIE的涉及。如果否的话,则在步骤945处,“不匹配”指示被返回,并且序列在步骤960处结束。否则,序列前进到步骤950,在这里基于位于地址k中的散列化前缀比特440之后的下一16个最高有效位来搜索MTRIE。如果转发引擎在MTRIE中定位出地址k,则在步骤955处,其相应的叶标识符被返回。另一方面,如果未在MTRIE中找到该地址,则“不匹配”指示可被返回,除非MTRIE中的默认路由被定位。在该情况下,在步骤955处,默认路由的叶位置被返回。序列在步骤960处结束。
E.结论
以上是对本发明的示例性实施例的详细描述。在不脱离本发明的精神和范围的情况下,可进行各种修改和添加。例如,虽然典型的散列表410的集合是根据恒定的16比特步幅来安排的,但是本领域的技术人员将会理解这些表可以与可变长度的步幅相关联,例如对于不同表具有不同步幅。此外,虽然示例性实施例中的路由信息294是存储在外部存储器资源340中的“叶”数据结构中的,但是还设想路由信息可被直接存储在适当的第二级表的桶中。即,桶580不是存储地址582和叶标识符584,而是可被配置为存储地址及其相关联的地址信息。此外,示例性实施例中采用的MTRIE数据结构也可利用其他数据结构来实现,例如基于trie的数据结构。
通过在CAM中实现第一级散列表410,可使得发明的技术更高效。由于第一级散列表的数目相对较小,因此可采用少量的CAM条目来例如基于网络地址的值而快速执行地址查找。因此,然后这些查找的结果可用于定位适当的第二级表并生成对第二级表的页索引。值得注意的是,CAM可用于实现第二级表中的某些或全部。
明确地设想本发明的教导可实现为软件,包括具有在计算机、硬件、固件或其组合上执行的程序指令的计算机可读介质。因此,此描述希望仅被以示例方式来理解,而不是限制本发明的范围。
Claims (23)
1.一种用于使中间网络节点高效查找与网络地址相关联的路由信息的方法,该方法包括:
(a)从所述中间网络节点中的一个或多个查找表的集合中选择一个查找表,每个查找表与不同的子网掩码长度范围相关联,其中被选中的查找表与尚未被搜索的最大子网掩码长度相关联;
(b)基于所述网络地址的值搜索所述被选中的查找表,以定位所述网络地址的路由信息的存储器位置;
(c)如果在所述被选中的查找表中未找到所述网络地址,则重复步骤(a)和(b),直到找到所述网络地址的路由信息的存储器位置或者已搜索了所有查找表;并且
(d)如果在所述查找表中的任何一个中都未找到所述网络地址,则搜索MTRIE,以查找所述网络地址的路由信息的存储器位置。
2.如权利要求1所述的方法,还包括:
在所述中间网络节点处接收包含所述网络地址的数据分组;并且
从接收到的数据分组中抽取所述网络地址。
3.如权利要求1所述的方法,其中所述搜索被选中的查找表的步骤(b)包括利用有界数目的从属查找来搜索所述被选中的查找表。
4.如权利要求1所述的方法,其中所述搜索被选中的查找表的步骤(b)包括按前缀长度减小的顺序搜索被选中的查找表。
5.如权利要求1所述的方法,还包括将所述一个或多个查找表的集合中的每个查找表组织为具有多个被索引的散列线的第一级散列表,每个被索引的散列线与相应的第二级表相关联,所述第二级表被配置为存储至少一个网络地址的路由信息的存储器位置。
6.如权利要求5所述的方法,还包括按照前缀长度减小的顺序在所述第二级表中存储网络地址的路由信息的位置。
7.如权利要求5所述的方法,其中在第一级散列表中的每个散列线包括有效比特、散列函数标识符、指向所述散列线的相应第二级表的指针以及指示可在所述散列线的相应第二级表中被索引的页的数目的值。
8.如权利要求5所述的方法,还包括基于将第一散列函数应用到所述网络地址中的第一组前缀比特的结果,来索引第一级散列表中的散列线。
9.如权利要求8所述的方法,还包括基于将第二散列函数应用到所述网络地址中的第二组前缀比特的结果,来索引第二级表中的页。
10.如权利要求9所述的方法,其中所述第一和第二散列函数是CRC32散列函数。
11.如权利要求9所述的方法,其中所述网络地址中的第一组和第二组前缀比特是相同的前缀比特。
12.如权利要求1所述的方法,其中所述网络地址是IPv6地址。
13.一种适合于利用有界数目的从属查找来查找与网络地址相关联的路由信息的中间网络节点,该节点包括:
网络接口,用于接收包含所述网络地址的分组;
存储器,其被配置为存储:
(a)至少一个具有多个被索引的散列线的第一级散列表,每个被索引的散列线与相应的第二级表相关联,所述第二级表被配置为存储至少一个网络地址的路由信息的存储器位置,以及
(b)至少一个MTRIE,其被配置为存储至少一个网络地址的路由信息的存储器位置;以及
转发引擎,其包括一个或多个处理元件,这些处理元件被配置为在所述至少一个第一级散列表中或在所述至少一个MTRIE中查找所述网络地址的相关路由信息的位置。
14.如权利要求13所述的中间节点,其中所述第二级表按前缀长度减小的顺序存储网络地址的路由信息的位置。
15.如权利要求13所述的中间节点,其中第一级散列表中的每个散列线包括有效比特、散列函数标识符、指向所述散列线的相应第二级表的指针以及指示可在所述散列线的相应第二级表中被索引的页的数目的值。
16.如权利要求13所述的中间节点,其中第一级散列表中的散列线是基于将第一散列函数应用到所述网络地址中的第一组前缀比特的结果而被索引的。
17.如权利要求16所述的中间节点,其中第二级表中的页是基于将第二散列函数应用到所述网络地址中的第二组前缀比特的结果而被索引的。
18.如权利要求17所述的方法,其中所述网络地址中的第一组和第二组前缀比特是相同的前缀比特。
19.如权利要求13所述的中间节点,其中所述网络地址是IPv6地址。
20.一种适合于利用有界数目的从属查找来查找与网络地址相关联的路由信息的装置,所述装置包括:
用于从中间网络节点中的一个或多个查找表的集合中选择一个查找表的装置,每个查找表与不同的子网掩码长度范围相关联,其中所述被选中的查找表与尚未被搜索的最大子网掩码长度相关联;
用于基于所述网络地址的值搜索所述被选中的查找表以定位所述网络地址的路由信息的存储器位置的装置;以及
用于如果在所述查找表中的任何一个中都未找到所述网络地址,则搜索MTRIE以查找所述网络地址的路由信息的存储器位置的装置。
21.如权利要求20所述的装置,还包括:
用于在所述中间网络节点处接收包含所述网络地址的数据分组的装置;以及
用于从接收到的数据分组中抽取所述网络地址的装置。
22.如权利要求20所述的装置,其中所述用于搜索被选中的查找表的装置还包括用于按前缀长度减小的顺序来搜索所述被选中的查找表的装置。
23.一种包括由处理器执行的指令的计算机可读介质,所述指令是用于高效查找与网络地址相关联的路由信息的方法的,该方法包括以下步骤:
(a)从中间网络节点中的一个或多个查找表的集合中选择一个查找表,每个查找表与不同的子网掩码长度范围相关联,其中被选中的查找表与尚未被搜索的最大子网掩码长度相关联;
(b)基于所述网络地址的值搜索所述被选中的查找表,以定位所述网络地址的路由信息的存储器位置;
(c)如果在所述被选中的查找表中未找到所述网络地址,则重复步骤(a)和(b),直到找到所述网络地址的路由信息的存储器位置或者已搜索了所有查找表;并且
(d)如果在所述查找表中的任何一个中都未找到所述网络地址,则搜索MTRIE,以查找所述网络地址的路由信息的存储器位置。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/439,022 US7325059B2 (en) | 2003-05-15 | 2003-05-15 | Bounded index extensible hash-based IPv6 address lookup method |
US10/439,022 | 2003-05-15 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1774900A true CN1774900A (zh) | 2006-05-17 |
CN100531199C CN100531199C (zh) | 2009-08-19 |
Family
ID=33417701
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2004800097995A Expired - Fee Related CN100531199C (zh) | 2003-05-15 | 2004-05-13 | 有界索引可扩展的基于散列的IPv6地址查找方法 |
Country Status (8)
Country | Link |
---|---|
US (1) | US7325059B2 (zh) |
EP (1) | EP1623557B1 (zh) |
CN (1) | CN100531199C (zh) |
AT (1) | ATE377318T1 (zh) |
AU (1) | AU2004241999B2 (zh) |
CA (1) | CA2520769C (zh) |
DE (1) | DE602004009788D1 (zh) |
WO (1) | WO2004105351A2 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102656580A (zh) * | 2009-04-21 | 2012-09-05 | 技术卫士安全有限责任公司 | 结构化数据的方法、预编译的异常列表引擎和网络设备 |
CN108696435A (zh) * | 2017-03-31 | 2018-10-23 | 英特尔公司 | 对于对称流的单个查找表条目 |
Families Citing this family (78)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7349923B2 (en) * | 2003-04-28 | 2008-03-25 | Sony Corporation | Support applications for rich media publishing |
US7325059B2 (en) | 2003-05-15 | 2008-01-29 | Cisco Technology, Inc. | Bounded index extensible hash-based IPv6 address lookup method |
US7539771B2 (en) * | 2003-06-06 | 2009-05-26 | Microsoft Corporation | Organizational locality in prefix-based structured peer-to-peer overlays |
US7346059B1 (en) * | 2003-09-08 | 2008-03-18 | Cisco Technology, Inc. | Header range check hash circuit |
US7366092B2 (en) * | 2003-10-14 | 2008-04-29 | Broadcom Corporation | Hash and route hardware with parallel routing scheme |
US8839417B1 (en) | 2003-11-17 | 2014-09-16 | Mcafee, Inc. | Device, system and method for defending a computer network |
US7433362B2 (en) * | 2004-11-05 | 2008-10-07 | Sbc Knowledge Ventures, L.P. | System and method for SONET NSAP addressing |
US7746865B2 (en) * | 2004-12-07 | 2010-06-29 | Intel Corporation | Maskable content addressable memory |
CN100444579C (zh) * | 2005-01-18 | 2008-12-17 | 北京大学 | 一种基于自适应缓存机制实现快速网络报文分发的方法 |
US20060187832A1 (en) * | 2005-02-18 | 2006-08-24 | Broadcom Corporation | Filter based range check in a network device |
US20060225115A1 (en) * | 2005-04-01 | 2006-10-05 | Microsoft Corporation | Systems and methods for network communication |
EP1869819A1 (en) * | 2005-04-12 | 2007-12-26 | Power-One Italy S.P.A. | Method and system for detecting messages in the presence of noise |
US7680806B2 (en) * | 2005-05-17 | 2010-03-16 | Cisco Technology, Inc. | Reducing overflow of hash table entries |
US7596141B2 (en) * | 2005-06-30 | 2009-09-29 | Intel Corporation | Packet classification using encoded addresses |
US7430560B1 (en) * | 2005-07-22 | 2008-09-30 | X-Engines, Inc. | Multi-level compressed lock-up tables formed by logical operations to compress selected index bits |
CN100496019C (zh) * | 2005-11-10 | 2009-06-03 | 中国科学院计算技术研究所 | IPv6路由表快速查找和更新的方法 |
US7730209B2 (en) * | 2006-01-18 | 2010-06-01 | Microsoft Corporation | Efficient dispatch of messages based on message headers |
GB0601913D0 (en) * | 2006-01-31 | 2006-03-08 | Ericsson Telefon Ab L M | Packet re-direction in a communication network |
US20070198566A1 (en) * | 2006-02-23 | 2007-08-23 | Matyas Sustik | Method and apparatus for efficient storage of hierarchical signal names |
US7889676B1 (en) * | 2006-04-13 | 2011-02-15 | Infoblox Inc. | Systems and methods for storing and retrieving data |
US8161185B2 (en) * | 2006-04-24 | 2012-04-17 | Cisco Technology, Inc. | Method and apparatus for assigning IPv6 link state identifiers |
US7861291B2 (en) * | 2006-06-02 | 2010-12-28 | Freescale Semiconductor, Inc. | System and method for implementing ACLs using standard LPM engine |
EP2055051A1 (en) * | 2006-08-25 | 2009-05-06 | University Of Florida Research Foundation, Inc. | Recursively partioned static ip router tables |
TWI417737B (zh) * | 2006-10-25 | 2013-12-01 | Hewlett Packard Development Co | 資產模型之即時識別與資產分類以協助電腦網路安全 |
US8108550B2 (en) * | 2006-10-25 | 2012-01-31 | Hewlett-Packard Development Company, L.P. | Real-time identification of an asset model and categorization of an asset to assist in computer network security |
US7827218B1 (en) * | 2006-11-18 | 2010-11-02 | X-Engines, Inc. | Deterministic lookup using hashed key in a multi-stride compressed trie structure |
US8015315B2 (en) * | 2007-03-09 | 2011-09-06 | Cisco Technology, Inc. | Compression of IPV6 addresses in a netflow directory |
US8432908B2 (en) * | 2008-02-06 | 2013-04-30 | Broadcom Corporation | Efficient packet replication |
GB0809966D0 (en) * | 2008-06-02 | 2008-07-09 | Artificial Lift Co Ltd | Drive means |
AU2013203537B2 (en) * | 2009-04-21 | 2015-11-19 | Techguard Security, Llc | Methods of structuring data, pre-complied exception list engines, and network appliances |
US9894093B2 (en) | 2009-04-21 | 2018-02-13 | Bandura, Llc | Structuring data and pre-compiled exception list engines and internet protocol threat prevention |
US9342691B2 (en) | 2013-03-14 | 2016-05-17 | Bandura, Llc | Internet protocol threat prevention |
US20100306751A1 (en) * | 2009-05-28 | 2010-12-02 | James Paul Schneider | Execution result caching and searching |
US8687621B2 (en) * | 2009-06-04 | 2014-04-01 | Cisco Technology, Inc. | Dynamically right-sizing prefixes for network and application performance |
US8271635B2 (en) * | 2009-06-17 | 2012-09-18 | Microsoft Corporation | Multi-tier, multi-state lookup |
KR101391467B1 (ko) * | 2010-01-05 | 2014-05-07 | 미쓰비시덴키 가부시키가이샤 | 라우팅 정보 생성 장치, 라우팅 정보 생성 방법 및 라우팅 정보 생성 프로그램이 기록된 기록 매체 |
US8819208B2 (en) | 2010-03-05 | 2014-08-26 | Solidfire, Inc. | Data deletion in a distributed data storage system |
US20120230194A1 (en) * | 2011-03-11 | 2012-09-13 | Broadcom Corporation | Hash-Based Load Balancing in Large Multi-Hop Networks with Randomized Seed Selection |
US9246810B2 (en) * | 2011-03-11 | 2016-01-26 | Broadcom Corporation | Hash-based load balancing with per-hop seeding |
US9838269B2 (en) | 2011-12-27 | 2017-12-05 | Netapp, Inc. | Proportional quality of service based on client usage and system metrics |
US9054992B2 (en) | 2011-12-27 | 2015-06-09 | Solidfire, Inc. | Quality of service policy sets |
US8805850B2 (en) * | 2012-05-23 | 2014-08-12 | International Business Machines Corporation | Hardware-accelerated relational joins |
CN103457855B (zh) * | 2012-06-04 | 2018-08-10 | 中兴通讯股份有限公司 | 无类域间路由表建立、以及报文转发的方法和装置 |
US9405783B2 (en) | 2013-10-02 | 2016-08-02 | Netapp, Inc. | Extent hashing technique for distributed storage architecture |
US9448924B2 (en) | 2014-01-08 | 2016-09-20 | Netapp, Inc. | Flash optimized, log-structured layer of a file system |
US9529546B2 (en) | 2014-01-08 | 2016-12-27 | Netapp, Inc. | Global in-line extent-based deduplication |
US9256549B2 (en) * | 2014-01-17 | 2016-02-09 | Netapp, Inc. | Set-associative hash table organization for efficient storage and retrieval of data in a storage system |
US9268653B2 (en) | 2014-01-17 | 2016-02-23 | Netapp, Inc. | Extent metadata update logging and checkpointing |
US20150244795A1 (en) | 2014-02-21 | 2015-08-27 | Solidfire, Inc. | Data syncing in a distributed system |
WO2015142250A1 (en) * | 2014-03-21 | 2015-09-24 | Telefonaktiebolaget L M Ericsson (Publ) | Addressing for device to device communications |
US9288019B2 (en) * | 2014-07-03 | 2016-03-15 | Intel Corporation | Apparatuses, methods, and systems for jitter equalization and phase error detection |
US9798728B2 (en) | 2014-07-24 | 2017-10-24 | Netapp, Inc. | System performing data deduplication using a dense tree data structure |
IL233776B (en) * | 2014-07-24 | 2019-02-28 | Verint Systems Ltd | A system and method for adjusting domains |
US9524103B2 (en) | 2014-09-10 | 2016-12-20 | Netapp, Inc. | Technique for quantifying logical space trapped in an extent store |
US9501359B2 (en) | 2014-09-10 | 2016-11-22 | Netapp, Inc. | Reconstruction of dense tree volume metadata state across crash recovery |
US9671960B2 (en) | 2014-09-12 | 2017-06-06 | Netapp, Inc. | Rate matching technique for balancing segment cleaning and I/O workload |
US10133511B2 (en) | 2014-09-12 | 2018-11-20 | Netapp, Inc | Optimized segment cleaning technique |
US9836229B2 (en) | 2014-11-18 | 2017-12-05 | Netapp, Inc. | N-way merge technique for updating volume metadata in a storage I/O stack |
US10798000B2 (en) * | 2014-12-22 | 2020-10-06 | Arista Networks, Inc. | Method and apparatus of compressing network forwarding entry information |
US10372695B2 (en) * | 2014-12-27 | 2019-08-06 | Intel Corporation | Technologies for computing rolling hashes |
CN105825371A (zh) * | 2015-01-07 | 2016-08-03 | 阿里巴巴集团控股有限公司 | 业务处理方法和装置 |
US9720601B2 (en) | 2015-02-11 | 2017-08-01 | Netapp, Inc. | Load balancing technique for a storage array |
US9680749B2 (en) * | 2015-02-27 | 2017-06-13 | Arista Networks, Inc. | System and method of using an exact match table and longest prefix match table as a combined longest prefix match |
US9762460B2 (en) | 2015-03-24 | 2017-09-12 | Netapp, Inc. | Providing continuous context for operational information of a storage system |
US9710317B2 (en) | 2015-03-30 | 2017-07-18 | Netapp, Inc. | Methods to identify, handle and recover from suspect SSDS in a clustered flash array |
US9740566B2 (en) | 2015-07-31 | 2017-08-22 | Netapp, Inc. | Snapshot creation workflow |
US20170097771A1 (en) | 2015-10-01 | 2017-04-06 | Netapp, Inc. | Transaction log layout for efficient reclamation and recovery |
US9830103B2 (en) | 2016-01-05 | 2017-11-28 | Netapp, Inc. | Technique for recovery of trapped storage space in an extent store |
US9846539B2 (en) | 2016-01-22 | 2017-12-19 | Netapp, Inc. | Recovery from low space condition of an extent store |
US10728103B2 (en) * | 2016-03-21 | 2020-07-28 | Dell Products L.P. | Edge device resourcing using recursive ledger chaining |
US10929022B2 (en) | 2016-04-25 | 2021-02-23 | Netapp. Inc. | Space savings reporting for storage system supporting snapshot and clones |
US10642763B2 (en) | 2016-09-20 | 2020-05-05 | Netapp, Inc. | Quality of service policy sets |
US10546018B2 (en) * | 2017-06-29 | 2020-01-28 | Arista Networks, Inc. | System and method of coalescing writes to a hardware table in a non-disruptive fashion |
US11005884B2 (en) * | 2017-09-29 | 2021-05-11 | Intel Corporation | Denial of service mitigation with two-tier hash |
US20200272424A1 (en) * | 2019-02-21 | 2020-08-27 | Research & Business Foundation Sungkyunkwan University | Methods and apparatuses for cacheline conscious extendible hashing |
CN114912405A (zh) * | 2021-02-08 | 2022-08-16 | 深圳比特微电子科技有限公司 | 采用全定制布局摆放的芯片以及用于实现挖矿算法的电子装置 |
CN114884877B (zh) * | 2022-06-14 | 2023-02-03 | 电子科技大学 | 一种哈希表和HOT相结合的IPv6路由查找方法 |
CN115550318B (zh) * | 2022-09-26 | 2024-07-16 | Oppo广东移动通信有限公司 | IPv6地址配置方法及装置、设备、存储介质 |
Family Cites Families (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6011795A (en) * | 1997-03-20 | 2000-01-04 | Washington University | Method and apparatus for fast hierarchical address lookup using controlled expansion of prefixes |
US6212183B1 (en) * | 1997-08-22 | 2001-04-03 | Cisco Technology, Inc. | Multiple parallel packet routing lookup |
US6018524A (en) * | 1997-09-09 | 2000-01-25 | Washington University | Scalable high speed IP routing lookups |
US6266706B1 (en) * | 1997-09-15 | 2001-07-24 | Effnet Group Ab | Fast routing lookup system using complete prefix tree, bit vector, and pointers in a routing table for determining where to route IP datagrams |
US6343072B1 (en) * | 1997-10-01 | 2002-01-29 | Cisco Technology, Inc. | Single-chip architecture for shared-memory router |
US6563823B1 (en) * | 1997-10-30 | 2003-05-13 | Marconi Communications, Inc. | Multi-resolution tree for longest match address lookups |
US6449256B1 (en) * | 1998-05-07 | 2002-09-10 | Washington University | Fast level four switching using crossproducting |
US6658002B1 (en) * | 1998-06-30 | 2003-12-02 | Cisco Technology, Inc. | Logical operation unit for packet processing |
US6212184B1 (en) * | 1998-07-15 | 2001-04-03 | Washington University | Fast scaleable methods and devices for layer four switching |
US6678269B1 (en) * | 1998-10-05 | 2004-01-13 | Alcatel | Network switching device with disparate database formats |
TW468116B (en) * | 1999-02-08 | 2001-12-11 | Wen-Shian Chen | High speed Internet protocol address lookups method for saving memory |
US6424650B1 (en) * | 1999-02-09 | 2002-07-23 | 3Com Corporation | Network address filter device |
US6192051B1 (en) * | 1999-02-26 | 2001-02-20 | Redstone Communications, Inc. | Network router search engine using compressed tree forwarding table |
US6374326B1 (en) * | 1999-10-25 | 2002-04-16 | Cisco Technology, Inc. | Multiple bank CAM architecture and method for performing concurrent lookup operations |
US6581106B1 (en) * | 2000-01-13 | 2003-06-17 | Pierluigi Crescenzi | Fast address lookup in routing tables |
US7103035B1 (en) * | 2000-01-14 | 2006-09-05 | Advanced Micro Devices, Inc. | Arrangement for searching network addresses in a network switch using multiple tables based on subnet identifier |
US6516383B1 (en) * | 2001-05-30 | 2003-02-04 | Cisco Technology, Inc. | Techniques for efficient location of free entries for TCAM inserts |
US7039018B2 (en) * | 2002-07-17 | 2006-05-02 | Intel Corporation | Technique to improve network routing using best-match and exact-match techniques |
US20040042463A1 (en) * | 2002-08-30 | 2004-03-04 | Intel Corporation | Method and apparatus for address lookup |
US7356033B2 (en) * | 2002-11-21 | 2008-04-08 | Lucent Technologies Inc. | Method and apparatus for performing network routing with use of power efficient TCAM-based forwarding engine architectures |
US7325059B2 (en) | 2003-05-15 | 2008-01-29 | Cisco Technology, Inc. | Bounded index extensible hash-based IPv6 address lookup method |
-
2003
- 2003-05-15 US US10/439,022 patent/US7325059B2/en not_active Expired - Fee Related
-
2004
- 2004-05-13 WO PCT/US2004/015281 patent/WO2004105351A2/en active IP Right Grant
- 2004-05-13 AU AU2004241999A patent/AU2004241999B2/en not_active Ceased
- 2004-05-13 CN CNB2004800097995A patent/CN100531199C/zh not_active Expired - Fee Related
- 2004-05-13 DE DE602004009788T patent/DE602004009788D1/de not_active Expired - Lifetime
- 2004-05-13 CA CA2520769A patent/CA2520769C/en not_active Expired - Fee Related
- 2004-05-13 EP EP04752323A patent/EP1623557B1/en not_active Expired - Lifetime
- 2004-05-13 AT AT04752323T patent/ATE377318T1/de not_active IP Right Cessation
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102656580A (zh) * | 2009-04-21 | 2012-09-05 | 技术卫士安全有限责任公司 | 结构化数据的方法、预编译的异常列表引擎和网络设备 |
CN103220375A (zh) * | 2009-04-21 | 2013-07-24 | 技术卫士安全有限责任公司 | 结构化数据的方法、预编译的异常列表引擎和网络设备 |
CN102656580B (zh) * | 2009-04-21 | 2015-07-15 | 技术卫士安全有限责任公司 | 结构化数据的方法、预编译的异常列表引擎和网络设备 |
CN103220375B (zh) * | 2009-04-21 | 2016-01-27 | 技术卫士安全有限责任公司 | 结构化数据的方法、预编译的异常列表引擎和网络设备 |
CN108696435A (zh) * | 2017-03-31 | 2018-10-23 | 英特尔公司 | 对于对称流的单个查找表条目 |
Also Published As
Publication number | Publication date |
---|---|
EP1623557A2 (en) | 2006-02-08 |
CA2520769A1 (en) | 2004-12-02 |
US7325059B2 (en) | 2008-01-29 |
WO2004105351A3 (en) | 2005-02-03 |
ATE377318T1 (de) | 2007-11-15 |
EP1623557B1 (en) | 2007-10-31 |
AU2004241999B2 (en) | 2009-11-12 |
WO2004105351A2 (en) | 2004-12-02 |
CN100531199C (zh) | 2009-08-19 |
AU2004241999A1 (en) | 2004-12-02 |
DE602004009788D1 (de) | 2007-12-13 |
US20040230696A1 (en) | 2004-11-18 |
CA2520769C (en) | 2011-05-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100531199C (zh) | 有界索引可扩展的基于散列的IPv6地址查找方法 | |
US8625604B2 (en) | Hash-based prefix-compressed trie for IP route lookup | |
JP5525273B2 (ja) | 階層的に構造化された可変長識別子を有するパケットを転送するためのシステム | |
Bando et al. | Flashtrie: Hash-based prefix-compressed trie for IP route lookup beyond 100Gbps | |
US7418505B2 (en) | IP address lookup using either a hashing table or multiple hash functions | |
TWI287723B (en) | Method and data structure for a low memory overhead database | |
US7079542B2 (en) | Internet protocol address look-up method | |
CN111937360B (zh) | 最长前缀匹配 | |
US20120023082A1 (en) | Longest Prefix Match Using Binary Search Tree | |
US9729447B2 (en) | Apparatus and method for processing alternately configured longest prefix match tables | |
Bando et al. | FlashTrie: beyond 100-Gb/s IP route lookup using hash-based prefix-compressed trie | |
Le et al. | Scalable tree-based architectures for IPv4/v6 lookup using prefix partitioning | |
US11652744B1 (en) | Multi-stage prefix matching enhancements | |
Le et al. | Memory-efficient and scalable virtual routers using FPGA | |
CN1787477A (zh) | IPv6路由表的查找方法 | |
Hemalatha et al. | Real time prefix matching based IP lookup and update mechanism for efficient routing in networks | |
Sun et al. | An on-chip IP address lookup algorithm | |
TWI239476B (en) | Address search | |
KR100686732B1 (ko) | 복수의 프리픽스로부터 데이터 패킷을 라우팅하기 위한데이터베이스 생성방법과 라우팅 방법 및 그 방법을이용한 라우터 | |
Erdem et al. | Value-coded trie structure for high-performance IPv6 lookup | |
JP4726310B2 (ja) | 情報検索装置、情報検索用マルチプロセッサおよびルータ | |
JP2013038536A (ja) | 半導体装置 | |
CN1315797A (zh) | 路由项的修改方法及其装置 | |
Xu et al. | MaP: Increasing node capacity of programmable cloud gateways | |
Erdem et al. | Clustered linked list forest for IPv6 lookup |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090819 Termination date: 20210513 |