CN103312615B - 使用可变数量前缀的最长前缀匹配搜索 - Google Patents

使用可变数量前缀的最长前缀匹配搜索 Download PDF

Info

Publication number
CN103312615B
CN103312615B CN201310080611.7A CN201310080611A CN103312615B CN 103312615 B CN103312615 B CN 103312615B CN 201310080611 A CN201310080611 A CN 201310080611A CN 103312615 B CN103312615 B CN 103312615B
Authority
CN
China
Prior art keywords
prefix
sets
varying
group
length
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.)
Active
Application number
CN201310080611.7A
Other languages
English (en)
Other versions
CN103312615A (zh
Inventor
约翰·基恩
让-马克·弗拉伊朗
迪帕克·格尔
斯里尼瓦桑·贾甘纳坦
希拉克什米·阿杜苏麻里
Original Assignee
Jungle Network
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Jungle Network filed Critical Jungle Network
Publication of CN103312615A publication Critical patent/CN103312615A/zh
Application granted granted Critical
Publication of CN103312615B publication Critical patent/CN103312615B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/74Address processing for routing
    • H04L45/745Address table lookup; Address filtering
    • H04L45/748Address table lookup; Address filtering using longest matching prefix
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/74Address processing for routing
    • H04L45/745Address table lookup; Address filtering
    • H04L45/7453Address table lookup; Address filtering using hashing

Abstract

本公开涉及使用可变数量前缀的最长前缀匹配搜索,其中,一种示例网络装置包括控制面和过滤器查找模块,该过滤器查找模块包括支持最大数量的不同前缀长度的并行查找的布隆过滤器。过滤器查找模块访问布隆过滤器,以确定与前缀集合中的条目匹配的最长长度前缀。控制面接收包括多于布隆过滤器支持的最大数量的不同前缀长度的前缀长度,其中,前缀长度集合与一个应用相关联,基于接收的前缀长度集合生成两组或多组不同前缀长度,其中,两组或多组不同前缀长度中的每组都包括不多于最大数量的不同前缀长度,并且用于一个应用相关联的两组或多组不同前缀长度对过滤器查找模块编程。

Description

使用可变数量前缀的最长前缀匹配搜索
技术领域
本公开涉及计算机网络,并且更具体地,涉及计算机网络内的流量转发。
背景技术
计算机网络是可以交换数据并共享资源的互联计算装置的集合。在基于分组的网络中,计算装置通过将数据分成称为包的小块来通信数据,包从源装置到目标装置在整个网络上单独路由。目标装置从包提取数据并且将数据组装成其原始形式。将数据分成包使得源装置能够仅重发送在传输中可能丢失的那些单个包。
包在源装置和目标装置之间使用诸如网关、防火墙、交换机和路由器的中间网络装置来传输。当网络接收传入的包或发送传出的包时,网络装置可以对包应用一个或多个过滤器,以在特定条件下对包执行定义的操作。为了识别应用于给定包过滤器条件,网络装置可以从包提取诸如目的互联网协议(IP)地址、源或目标端口以及协议的信息。然后网络装置执行网络装置中安装的过滤器条件的搜索,以确定所提取的信息是否满足由任一个过滤器条件规定的标准。
识别匹配过滤器条件以应用于包的一个传统方法包括,对所提取的信息的至少一部分应用哈希函数(即,密钥),以确定所提取的信息在哈希表中的可能位置。密钥对应于具有预定长度的所提取的信息的一部分(例如,源或目的IP地址的前缀)。即,向哈希函数输入一个或多个密钥,以生成哈希表中的一个或多个可能位置。然后网络装置查找哈希表中的每个可能位置,以确定是否在任意可能位置中找到了该密钥。当为可能位置定义了一个或多个过滤器条件时,在哈希表中找到密钥。根据最长前缀匹配算法,路由器应用与所找到的与哈希表中的对应密钥的匹配的最长前缀相关的过滤器条件。
为了提高网络装置识别应用于包的过滤器条件的速度,网络装置可以配置为同时对特定网络地址的多个不同前缀长度进行与哈希表中的地址前缀的可能匹配的评价。然而,可以同时评价的从不同前缀长度生成的不同前缀的数量可能受到各种硬件或软件制约的限制。
发明内容
总体而言,本发明描述了以下技术:通过在不同前缀长度的数量大于可以由硬件或软件同时评价的前缀长度的数量时,将较短前缀长度有效转换成较长前缀长度,支持使用可变数量的不同前缀长度的最长前缀匹配,同时使由创建额外前缀进行搜索引起的吞吐量降低最小化。例如,本公开的技术使得可以应用于指定多个连续组的前缀长度。即,本公开的技术保持了与前缀长度的数量相同的前缀数,并且使得硬件或软件搜索来遍历基于前缀长度生成的不同前缀组,而不是创建额外前缀。具体地,当搜索与过滤器标准匹配的最长前缀时,搜索第一组前缀长度。如果第一组前缀长度中包括的前缀长度都不匹配,则搜索第二组前缀长度。继续该过程,直到找到了匹配,或者已经对所有组搜索了匹配并且没有找到匹配。每个组的大小可以限制到用于执行搜索的硬件或软件所支持的最大大小。
在一个实例中,一种方法包括:通过网络装置接收前缀长度集合(组),前缀长度集合包括多于网络装置的布隆过滤器(Bloomfilter)能够并行查找的最大数量的不同前缀长度的多个不同前缀长度,其中,前缀长度集合与一个应用相关联。该方法还包括,基于接收的前缀长度集合,生成两组或多组不同前缀长度,其中,两组或多组不同前缀长度中的每组都包括不多于最大数量的不同前缀长度;并且通过网络装置的控制面,利用与一个应用相关联的两组或多组不同前缀长度对网络装置的过滤器查找模块编程。
在另一实例中,一种网络装置包括控制面和过滤器查找模块,过滤器查找模块包括布隆过滤器。其中,布隆过滤器支持最大数量的不同前缀长度的并行查找,并且其中,过滤器查找模块访问布隆过滤器,以确定与前缀集合中的条目匹配的最长长度前缀。控制面配置为接收前缀长度集合,该前缀长度集合包括多于布隆过滤器支持的最大数量的不同前缀长度的多个不同前缀长度,其中,前缀长度集合与一个应用相关,基于接收到的前缀长度集合生成两组或多组不同前缀长度,其中,两组或多组不同前缀长度中的每组都包括不多于最大数量的不同前缀长度,并且用与一个应用相关联的两组或多组不同前缀长度对过滤器查找模块编程。
在另一实例中,一种计算机可读存储介质用这样的指令进行编码,该指令用于使得网络装置的一个或多个可编程处理器:接收前缀长度集合,前缀长度集合包括多于网络装置的布隆过滤器能够并行查找的最大数量的不同前缀长度的多个不同前缀长度,其中,前缀长度集合与一个应用相关联。该指令还使得一个或多个可编程处理器基于接收的前缀长度集合,生成两组或多组不同前缀长度,其中,两组或多组不同前缀长度中的每组都包括不多于最大数量的不同前缀长度;并且用与一个应用相关联的两组或多组不同前缀长度,对网络装置的过滤器查找模块编程。
本公开的技术可以提供若干优点。例如,该技术提供了一种将由不同前缀长度集合生成的不同前缀数量维持到不同前缀长度数量的机制,这可以减少需要搜索的前缀数。此外,还可以将前缀分组,使得如果在第一组中找到了前缀,则不需要在搜索剩余组的前缀。通过不创建额外前缀进行搜索并对前缀分组,可以减少在比执行搜索的硬件或软件更多的为网络地址指定的不同前缀长度能够同时搜索时使用的时间量和处理功率。因此,该技术使得网络装置支持大集合的前缀长度,同时使与处理从大集合的前缀长度生成的前缀相关联的性能损失最小化。
在附图和以下描述中给出了一个或多个实例的细节。其他特征、目标和优点将从说明书和附图以及权利要求中显而易见。
附图说明
图1是示出包括其任一个都可以实施本公开的技术的各种网络装置的示例系统的框图。
图2是示出包括根据本公开的一个或多个技术配置的过滤器查找块的示例路由器的框图。
图3是更详细地示出路由器的过滤器查找块的框图。
图4是更详细地示出路由器的示例前缀查找模块的框图。
图5是更详细地示出路由器的示例布隆过滤器的框图。
图6A和图6B是示出用于根据本公开的一个或多个技术执行查找的示例操作的流程图。
具体实施方式
图1是示出包括其任一个都可以实施本公开的技术的多种网络装置的示例系统2的框图。如图1所示,系统2包括网络10、客户端装置14以及服务器装置16。网络10包括便于访问连接至网络10的各种网络装置(包括客户端装置14和服务器装置16)之间的内容的路由器12A-12E(统称为“路由器12”)。虽然示出为包括路由器12,但是在其他实例中,系统2可以包括额外的或可选的网络装置,诸如网关、交换机、集线器、防火墙、入侵检测/防御(IDP)装置和/或便于数据在各网络装置之间传输的任何其他类型的网络设备或装置。虽然相对于路由器或其他网络装置进行了描述,但是实现最长前缀匹配算法的任何装置都可以实现这里描述的技术,并且该技术不限于路由器或其他网络装置。
网络10使得能够使用一个或多个基于分组的协议(诸如传输控制协议/互联网协议(TCP/IP))在网络装置之间传输内容。在这方面,网络10可以支持经由离散数据单元(通常称为“包”)的数据传输。结果,网络10可以称为“基于分组”或“分组交换”网络。虽然在本公开中描述了传输、传送或以其他形式支持包,但是网络10可以根据由任何其他协议定义的任何其他离散数据单元来传输数据,诸如由异步传输模式(ATM)协议定义的单元、或由用户数据报协议(UDP)定义的数据报。
在该实例中,客户端装置14表示可以向服务器装置16提交服务请求的装置。类似地,服务器装置16表示响应于请求为客户端装置14提供服务的装置示例。客户端装置14和服务器装置16还可以参与双向通信会话,其中,服务器装置16请求来自客户端装置14的服务,并且客户端装置14为服务器装置16提供所请求的服务。这样,客户端装置14和服务器装置16可以每个都充当服务器和客户端。客户端装置14可以表示端点装置,诸如移动装置(例如,笔记本电脑、台式机、或其他移动电话)、个人计算机、计算终端、互联网功能电视或用于提供基于互联网的电视服务的装置、或其他此类装置。服务器装置16可以表示web服务器、文件服务器、对端设备(例如,另一用户的计算装置)、数据库服务器、打印服务器、或客户端装置可以从其请求服务的其他装置。
客户端装置14经由网络10向服务器装置16提交请求。在图1示出的实例中,客户端装置14通信地耦合至路由器12A。在其他实例中,客户端装置14可以经由额外的网络装置(诸如访问线路、无线基础设施、和回程网络等)通信地耦合至路由器12A。网络10的路由器12被配置为确定通过网络10到达各目的地(例如,服务器装置16)的路径。路由器12实施路由协议,以确定通过网络10的路径,以及与其他路由器12分享所确定的路径。在图1的实例中,路由器12A确定存在的到达服务器装置16的两个路径。从路由器12A开始到达服务器装置16的第一路径包括路由器12D、路由器12E以及服务器装置16。从路由器12A开始到达服务器装置16的第二路径包括路由器12B、路由器12C、路由器12E以及服务器装置16。一般而言,路由器12A包括控制面,其执行路由协议来学习网络10的拓扑以及选择这些路由的其中之一。在接收到从客户端装置14发往服务器装置16的数据时,路由器12A的数据面对包中的密钥信息执行查找功能,并且沿所选择的路径转发数据。
在转发包之前,路由器12可以对包应用一个或多个过滤器。在一些实例中,过滤器指定一个或多个条件以及要对与条件匹配的包执行的一组动作。在各个实例中,该条件指定了一个或多个源互联网协议(IP)地址、目的IP地址、源端口、目标端口、协议和/或其他包字段。要执行的动作可以包括以下的一个或多个:向包贴标签(用于多协议标签交换(MPLS)以传送(tunnel)包)、去除或调换包上的标签、检查包的病毒、对包执行深度包检测、对包执行服务处理的量化(例如,使一个包优先于其他包)、拦截或丢弃包(例如,当已经确定与包相关的源或目的地是恶意的时候)或其他服务。
在一些实例中,当转发单个包以识别要应用于包的一个或多个过滤器时,数据面执行最长前缀匹配算法。例如,过滤器可以存储在过滤器表中,并且指定与包匹配的标准(诸如网络前缀)。总的来说,由过滤器指定的标准控制着数据面将把哪些过滤器应用于包。一个实例是,路由器12A可以不必用单个服务器装置16的具体源或目标网络地址(例如,10.1.1.8)来配置,而是可以配置为使得具有与特定前缀匹配的源或目标地址(例如,与网络前缀10.1/16对应的地址范围)的包将具有由路由器12A应用于包的特定过滤器。一般来说,路由器12A的数据面使用最长前缀匹配算法来识别对应于与所接收的包的密钥信息匹配的最长前缀的过滤器表中的条目。路由器12A应用在以下的过滤器表的条目中指定的一组滤波器:该滤波器表被标识为存储所接收的包的密钥信息所满足的最长匹配前缀。
在一些实例中,路由器12使用哈希单元来识别与特定包匹配的过滤器。在一个实例中,哈希单元支持从/0至/128的前缀长度(其充当哈希单元中的密钥值)。在一些实例中,长度从/0至/64的前缀使用哈希单元的桶(bucket)的单个单元格,而前缀长度从/65至/128的前缀使用哈希单元中的两个连续单元格,称为双单元格。在一些实例中,哈希单元的哈希表物理上支持64K单个单元格,每个桶两个单元格。在一些实例中,如果所有前缀都具有单个单元格,则每个哈希表可以支持大约80%至90%的负载(例如,51,000至57,600个条目)。在一些实例中,如果有所前缀都是双单元格,则哈希单元的每个哈希表可以支持大约40%至45%的负载(例如,28,800个条目)。哈希单元的物理哈希表可以称为密钥哈希表。在一些实例中,每个密钥哈希表都具有大约16K以及相关结果的容量。由Keen等于2011年9月22日提交的标题为“DYNAMICALLYADJUSTINGHASHTABLECAPACITY”的美国专利申请序列号13/239,774描述了哈希单元和对应哈希表的一个示例实现,其全部内容结合于此作为参考。
当向密钥哈希表添加值时,哈希单元在密钥值映射到的桶的一个单元格中存储密钥值和相关值。例如,对于路由器12A的过滤器,源或目标网络地址的不同长度前缀充当密钥值,而每个相关值都表示与特殊密钥值匹配的过滤器的特殊条目。因此,路由器12A在哈希函数映射目标地址的桶的单元格中存储目标地址和相关值。该相关值可以指定与目标地址匹配的过滤器的特殊条目或网络接口。通过在单元格中存储前缀,如果两个或多个前缀映射到同一桶,则路由器12A可以确定哪个单元格存储与特殊长度前缀相关的值。
在一些示例中,路由器12A包括多个哈希单元来实现布隆过滤器。布隆过滤器通常是用于存储是否存储了(或者先前处理了)特定值的指示的数据结构。在一个实例中,布隆过滤器是在阵列的每个条目存储一个1比特值的比特阵列。布隆过滤器数据结构通常设计为使得避免漏报(falsenegative),而仍然有误报(falsepositives)的可能性(虽然很小)。即,设计良好的布隆过滤器可以提供是否已经存储了特定值的指示,但是在一些情况下,可能提供已经存储了该值的错误指示(实际上,还没有存储该值)。
当路由器12A例如在密钥哈希表中存储密钥值时,路由器12A将密钥值添加到布隆过滤器。一般而言,当向布隆过滤器查询特定值时,布隆过滤器提供该值是否存储在该布隆过滤器中的指示。在一个实例中,如果特定值存储在布隆过滤器中,则查找返回值1,如果特定值没有存储在布隆过滤器中,则返回值0。虽然在使用布隆过滤器时可能有误报,但是由于布隆过滤器的设计,漏报通常是不可能的。因此,在接收到包括包的源或目标地址的密钥值时,路由器12A首先确定该密钥值是否存储在布隆过滤器中,并且如果是,则确定该密钥值是否实际存储在密钥哈希表中。
在一些实例中,布隆过滤器可以以硬件(例如,当比特阵列存储在多个存储体中时)或软件实现。当以硬件实现时,路由器12A可以并行执行多个密钥的查找,这可以减少查找密钥所需的时钟周期的总数。在布隆过滤器中实现的控制器、队列、或其他结构的数量可以限制布隆过滤器可以并行查找的密钥的数量。例如,如果布隆过滤器包括十六个控制器,则布隆过滤器可以并行处理高达十六个不同前缀。如果需要处理十六个以上的前缀,则额外的前缀需要等待,直到布隆过滤器处理了后续时钟周期。
不时地,不同前缀长度的数量可能多于布隆过滤器可以并行处理的不同前缀强度的数量。即,考虑匹配的地址前缀长度的数量可能多于硬件布隆过滤器支持的最大设置大小。为了处理所有不同的前缀长度,通过将一些较短前缀长度转换成较长前缀长度,可以减小不同前缀长度的数量,这里称为“前缀长度扩展”。例如,如果前缀/9至/24可以由硬件布隆过滤器并行处理,但是例如/8的额外前缀也包括在不同前缀长度的集合中,则/8前缀可以转换成长度为/9的两个前缀(例如,12.00.00.00/8可以转换成12.00.00.00/9和12.128.00.00/9)。然而,可以使用前缀长度扩展生成的前缀数量指数增长,使得当长度/N扩展成/N+k时,长度为/N的每个前缀产生2^k个前缀。此外,通常在软件中实现前缀长度扩展,相比于硬件实现这更复杂和繁琐。
本公开的技术提供了以下的机制,而不是执行前缀长度扩展:将地址前缀长度分成多个组,每个组都具有不多于布隆过滤器所支持的最大数前缀长度。当应用要求对于给定的网络地址处理大于布隆过滤器所支持的最大数前缀长度时,路由器12A的前缀查找模块将前缀长度分成多个组,并且保持指向将为网络地址处理的下一组前缀长度的指针。前缀长度可以分成任意数量的组,每个组都具有不多于布隆过滤器支持的最大数前缀长度。在一个实例中,基于每个前缀的长度来将不同前缀长度分组,并且按有每个组中包括的前缀长度决定的顺序来处理组,使得要处理的第一组包括最长前缀。通过这样将前缀长度分组并这样处理前缀长度组,当找到当前处理的组的最长前缀的匹配时,不需要处理其余的组,因为其余的组仅包括较短前缀。
虽然已经主要就路由器12A进行了描述,但是应当理解,本公开的技术可以由路由器12、客户端装置14、服务器装置16或可以实现哈希功能的任何其他计算装置来实现。此外,本公开的技术可以应用于其他环境并用于其他用途。例如,本公开的技术可以由路由器12A在执行包查找和转发时应用。当转发单个包以识别与包的目标地址最佳匹配的数据面的转发信息库(FIB)的条目时,路由器12A的数据面可以实现最长前缀匹配算法。在各种情况下,路由器12A在具有多个哈希表的哈希单元中存储FIB,并且结合哈希表实现一个或多个布隆过滤器。然后路由器12A可以应用本公开的技术来可编程地配置FIB的哈希单元,以动态地绕过一个或多个布隆过滤器。
图2是示出包括根据本公开的一个或多个技术配置的过滤器查找块40的示例路由器20的框图。为了说明的目的,在以下路由器12可以在图1的实例中示出的系统2的背景下描述,并且可以表示任意一个路由器12。在该示例实施方式中,路由器20包括控制单元22、接口卡(IFC)24A至24N(统称为“IFC24”)以及服务卡30。
路由器20通常包括具有用于接收一组卡(包括IFC24和服务卡30)的多个槽位的机壳(为了易于说明,在图2的实例中未示出)。每个卡都可以插入到机壳的对应槽位中,以经由总线、背板、或其他电通信机制将卡可通信地耦合到控制单元22。IFC24经由入站网络链路26A-26N(统称为“入站链路26”)和出站网络链路28A-28N(统称为“出站链路28”)来发送和接收包流和网络流量。入站链路26和出站链路28在一些实例中用于形成以全双工模式运行的IFC的共同物理通信媒介的共同IFC。即,在一些实例中,IFC24中的每个都耦合至可以基本上同时发送和接收数据的各自的通信媒介。在其他实例中,入站链路26和出站链路28为相应IFC24形成单独的物理媒介。
控制单元22可以包括执行软件指令(诸如用于定义软件或计算机程序的那些)的一个或多个处理器(图2中未示出),该软件指令存储在计算机可读存储介质(再次,图2中未示出)中,诸如存储装置(例如,磁盘驱动器或光盘驱动器)、或存储器(诸如闪存、随机存取存储器、或RAM)或存储指令以使可编程处理器执行这里描述的技术的任何其他类型的易失性或非易失性存储器。可选地,控制单元22可以包括专用硬件来执行这里描述的技术,诸如一个或多个集成电路、一个或多个应用专用集成电路(ASIC)、一个或多个应用专用的专用处理器(ASSP)、一个或多个场可编程门阵列(FPGA)、或者专用硬件的上述实例中的一个或多个的任意组合。
控制单元22还可以分成逻辑或物理“面”以包括第一控制或路由面32、以及第二数据或转发面34。在一些实例中,控制单元22可以进一步分成第三逻辑或物理“面”,服务面。即,控制单元22实现三个单独功能,例如,路由、转发和服务功能,例如,该实现可以是如同在同一组硬件组件上执行的独立软件情况那样逻辑地实现,或者如同以硬件静态地实现功能或动态地执行软件或计算机程序来实现功能的独立物理专用硬件组件那样物理地实现,或者是逻辑和物理实现的一些组合。
控制单元22的控制面32可以提供路由器20的路由功能。在这方面,控制面32可以表示硬件或者实现路由协议36的控制单元22的硬件或软件的组合。例如,路由协议36可以包括中间系统到中间系统(IS-IS)、开放最短路径优先(OSPF)、路由信息协议(RIP)、边界网关协议(BGP)、或其他路由协议。通过执行路由协议36,控制面32识别通过网络的现有路径,并且确定通过网络的新路径。控制面32在路由信息库(RIB)38中存储路由信息。路由信息可以包括定义了网络(诸如图1的网络10)拓扑的信息。控制面32可以解析由路由信息定义的拓扑,以选择或定义通过网络10的一个或多个路径。
然后控制面32可以根据这些路径更新数据面34,以用转发信息库(FIB)46中存储的转发信息来对数据面34编程。转发信息使密钥信息(例如,IP地址或IP前缀或标签)与下一跳(例如,相邻路由器)相关联,并最终与耦合至出站链路28的路由器20的输出接口相关联。当转发包时,数据面34处理从报头提取的密钥,以遍历FIB46中存储的转发信息,并且选择包转发至的下一跳。基于选择的下一跳,数据面34识别耦合至下一跳的一个或多个出站链路28的集合。
在经由一个或多个出站链路28转发包之前,数据面34可以对包应用一个或多个过滤器。如图2所示,数据面34包括过滤器查找块40、过滤器42、以及最长前缀匹配算法模块(LPMMODULE)44。过滤器42包括为一个或多个不同网络地址前缀定义的一个或多个过滤器。在一些实例中,过滤器指定一个或多个条件以及要对与网络地址前缀匹配的包执行的一组动作。这些动作可以包括以下中的一个或多个:向包添加标签、去除或调换包上的标签、检查包的病毒、对包执行深度包检测、对包执行服务处理的量化、拦截或丢弃包或其他服务。
一般地,最长前缀匹配算法模块44实施最长前缀匹配算法,并且由过滤器查找块40用来为网络地址的最长定义前缀识别与网络地址匹配的过滤器42的条目。根据最长前缀匹配算法,从网络地址生成特定数量的前缀。从网络地址生成的前缀数量可以由管理员配置,或者例如,可以基于用于算法的网络地址的类型而改变。在一个实例中,基于网络地址生成每个都具有不同长度的十六个或更少的前缀。最长前缀匹配算法的一个目标是找到匹配的最长前缀。根据该目标,实施最长前缀匹配算法的硬件或软件首先执行最长前缀(即,最特定的前缀)的搜索。如果没有找到匹配,则对下一个最长前缀执行搜索。该处理是迭代处理,直到找到匹配或者直到对所有可能前缀执行了搜索为止。
过滤器查找块40存储为其定义了至少一个过滤器的前缀。在一些实例中,在过滤器查找块40中存储的前缀可以与前缀长度连接在一起(例如,对于过滤器查找块40中的条目“10.1/16”,前缀10.1可以与前缀长度/16连接在一起)。过滤器查找块40还为由路由器20接收的每个包生成前缀集合,并使用最长前缀匹配算法为每个包搜索相关值。即,过滤器查找块40对所生成的每个前缀执行搜索,从最长前缀开始并按顺序移动到最短前缀,直到找到了匹配。在一个实例中,可以由过滤器查找块40对源地址(例如,源媒介访问控制地址、源IP地址或源标识符)或目标地址(例如,目的媒介访问控制地址、目的IP地址或目的标识符)执行最长前缀匹配。
路由器20的管理员可以配置由控制面32用于可编程地配置过滤器查找块40执行过滤器查找的方式的策略37。例如,控制面32可以从数据面34接收反映过滤器查找块40的性能的系统性能信息。基于策略37和系统性能信息,控制面32以在各种情况下可以增大过滤器查找块40的性能的方式来配置过滤器查找块40。即,控制面32可以选择一个策略37来配置过滤器查找块40。可以由控制面32配置的过滤器查找块40的一个方面包括:当用多于布隆过滤器支持的最大数前缀长度的不同前缀长度来配置应用时,过滤器查找块40对不同前缀长度分组的方式。过滤器查找块40的进一步细节参照图3至图6进行了描述。
图3是更详细地示出路由器20的示例过滤器查找块40的框图。为了说明目的,以下在图2的实例示出的路由器20的背景下对过滤器查找块40进行了描述。在该示例性实施方式中,过滤器查找块40包括密钥管理器50、前缀查找模块52、布隆过滤器54A和54B(统称为“布隆过滤器54”)、哈希控制器56、密钥哈希表58以及流缓存60。
可以基于从与路由器20交互的管理员接收的输入来配置前缀查找模块52、布隆过滤器54、密钥哈希表58以及流缓存60的条目。例如,如果管理员在路由器20上配置了新过滤器,则过滤器查找块40在密钥哈希表58中存储与过滤器相关联的一个或多个前缀,并且在每个布隆过滤器54中添加条目,以指示在密钥哈希表58中有该前缀的对应匹配条目。
当配置新的过滤器时,路由器20的控制面32对过滤器查找块40和过滤器42进行编程。在各情况下,用过滤器查找块40支持的最大数量的不同前缀长度来配置控制面32。如果为新过滤器配置的不同前缀长度的数量多于过滤器查找块40支持的不同前缀长度的最大数量,则控制面32使用新过滤器的两个或多个不同组的不同前缀长度作为链表对前缀查找模块52进行编程,其中,该链表包括从一个组到下一组的指针。优选地,控制面32从最长前缀长度到最短前缀长度对不同前缀长度进行排序。即,第一组前缀长度包括可以返回匹配的最长前缀,第二组前缀长度包括可以返回匹配的第二最长前缀,等等,直到没有要分组的额外前缀长度。通过这样将不同前缀长度排序和分组,如果找到了特定前缀长度的匹配,则其必须是最长可能前缀匹配,并且无需再搜索该网络地址的任何其余前缀长度组,这是因为,其余前缀长度组仅包括较短前缀。由Mackie等在2011年7月29日提交的标题为“PACKETFORWARDINGPATHPROGRAMMINGUSINGAHIGH-LEVELDESCRIPTIONLANGAUGE”的美国专利申请序列号为13/194,571描述了其中控制面对数据面编程的路由器的一个示例性实现,其全部内容结合于此作为参考。
一般而言,当路由器20接收包时,该信息中包括的至少一部分被发送到过滤器查找块40。在一个实例中,包中包括的源或目标网络地址被发送到过滤器查找块40。密钥管理器50接收该信息,基于该信息生成查找密钥,并为查找密钥分配唯一标记。查找密钥可以与前缀长度的多个组相关联。由于前缀长度的每个组都被过滤器查找块40处理,因此,与查找密钥相关联的标记将前缀长度的每个组标记为与查找密钥相关联。在一些实例中,查找密钥包括包中包括的目标网络地址。在其他实例中,查找密钥可以包括包的头信息中包括的源网络地址、目标网络地址以及端口号的任意组合。
密钥管理器50向流缓存60发送命令和查找密钥,使得流缓存60对查找密钥执行查找。在一些实例中,密钥管理器50与向流缓存60发送查找密钥并行地形向前缀查找模块52发送查找密钥。一般而言,流缓存60存储先前在过滤器查找块40中查找的查找密钥的结果。如果流缓存60在流缓存60的哈希表中找到了查找密钥的匹配,则流缓存60检索存储的与查找密钥相关联的结果信息,并将结果信息发送到前缀查找模块52。如果流缓存60没有找到密钥的匹配,则流缓存60向前缀查找模块52发送指示没有找到匹配的消息。
前缀查找模块52至少部分地基于从流缓存60接收的结果来处理查找密钥。例如,当流缓存60找到匹配并将存储的结果信息发送到前缀查找模块52作为结果时,前缀查找模块52不会基于查找密钥生成前缀集合。相反,前缀查找模块52将从流缓存60接收的结果信息发送到哈希控制器56。
当流缓存60没有找到匹配时,前缀查找模块52向哈希控制器56发送消息,指示哈希控制器56将查找密钥的至少一个时钟周期计数器初始化为0,并且使用查找密钥生成前缀集合。在前缀查找模块52中指定了从查找密钥生成的前缀数量和长度。对于在时钟周期计数器开始和在密钥哈希表58中找到匹配时或者确定在密钥哈希表58中没有查找密钥的匹配时(例如,因为在密钥哈希表58中没有找到从查找密钥生成的前缀)之间经过的每个时钟周期,时钟计数器递增。在一些实例中,当前缀查找模块52向布隆过滤器54发送所生成的前缀的集合时,时钟周期计数器开始。
前缀查找模块52确定是否存在查找密钥的多于一组的不同前缀长度。确定是否存在多于一组的不同前缀长度的处理以下参照图4进行了更详细的描述。如果存在一组不同前缀长度,则前缀查找模块52基于该一组不同前缀长度和查找密钥生成一组前缀。如果存在两组或以上的不同前缀长度,则前缀查找模块52基于第一组不同前缀长度和查找密钥生成第一组前缀。一般而言,由前缀查找模块52生成的每个前缀都包括与查找密钥相关联的标记以及是否存在查找密钥的额外组的不同前缀长度的指示。
在生成了前缀查找模块52中指定的前缀集合之后,过滤器块40在每个布隆过滤器54中执行所生成的一个或多个前缀的查找。即,在布隆过滤器54A和布隆过滤器54B中查找所生成的完整的前缀集合。对于在每个布隆过滤器54中查找的每个前缀,返回指示是否在相应布隆过滤器54中找到了前缀的值。在一个实例中,值1指示找到了前缀,并且值0指示没有找到前缀。虽然图3示出为包括两个布隆过滤器54A和54B,但是过滤器查找块40的其他实例可以包括一个布隆过滤器或多于两个的布隆过滤器。
哈希控制器56确定是否在密钥哈希表58中执行每个前缀的查找。哈希控制器56为每个前缀检查从布隆过滤器查找返回的值,并且识别可能包括在密钥哈希表58中的最长前缀。如果从布隆过滤器54A和54B中执行的查找返回的值都指示前缀可以包括在密钥哈希表58中,则哈希控制器56确定该前缀可能包括在密钥哈希表58中。如果从布隆过滤器54A和54B中执行的查找返回的值指示前缀不包括在密钥哈希表58中,则哈希控制器56确定前缀不包括在密钥哈希表58中。相比于仅使用一个布隆过滤器,从两个布隆过滤器得到单个前缀的误报结果的可能性较低。由于哈希控制器56仅在从布隆过滤器54返回的值指示前缀可能在集合中时才考虑执行密钥哈希表58中的前缀的查找,因此相比于使用一个布隆过滤器,在使用两个布隆过滤器时,可以减少对密钥哈希表58执行的非必要或失败查找的数量。
当哈希控制器56识别出可能包括在密钥哈希表58中的至少一个前缀时,哈希控制器56将对密钥哈希表58中执行的查找进行技术的计数器初始化,直到确定了结果。哈希控制器56识别可能在密钥哈希表58中的最长前缀,使用所识别的前缀在密钥哈希表58中执行查找,并且递增密钥哈希表查找计数器。当哈希控制器56执行查找时,哈希控制器56对前缀应用哈希哈数,以识别前缀存储在密钥哈希表58中时前缀在密钥哈希表58中应当处于的位置。如果在密钥哈希表58中没有找到前缀(例如,由于从布隆过滤器接收到了误报指示),则哈希控制器56识别可能在密钥哈希表58中的第二最长前缀,使用第二最长前缀在密钥哈希表58中执行查找,并且递增密钥哈希表查找计数器。该处理持续,直到在密钥哈希表58中找到了前缀,或者在密钥哈希表58中没有更多前缀。
当在密钥哈希表58中没有找到匹配并且前缀包括查找密钥的额外组的不同前缀长度可用于查找的指示时,哈希控制器56向前缀查找模块52发送消息,该消息包括为下一组不同前缀长度读取信息的存储器地址和查找密钥的标签。前缀查找模块52读取下一组不同前缀长度,并基于查找密钥和下一组不同前缀长度来生成下一个集合的前缀。所生成的下一个集合的前缀包括与所生成的上一个集合的前缀中包括的相同的标签,该标签与查找密钥相关,所生成的下一个集合的前缀是使用查找密钥来生成的。
前缀查找模块52将所生成的下一个集合的前缀发送到布隆过滤器54用于查找。布隆过滤器54向哈希控制器56返回所生成的下一个集合的前缀中包括的每个不同前缀长度的结果。哈希控制器56对布隆过滤器54指示可能匹配的最长前缀在密钥哈希表58中执行查找。如果在密钥哈希表58中没有找到前缀(例如,因为从布隆过滤器接收的误报指示),则哈希控制器56识别可能包括在密钥哈希表58中的第二最长前缀,使用第二最长前缀在密钥哈希表58中执行查找,并且递增密钥哈希表查找计数器等,直到在密钥哈希表58中找到了前缀,或者在密钥哈希表58中没有更多前缀。基于前缀长度的组和查找密钥生成前缀集合并对所生成的前缀集合执行查找的处理持续,直到在密钥哈希表58中找到了前缀,或者在密钥哈希表58中没有更多前缀要查找并且没有前缀查找模块52可以从其生成额外前缀集合的不同前缀长度组。在一些实例中,哈希控制器56持有粘性标签,该粘性标签用于追踪前缀查找模块52为特殊查找密钥生成了多少组前缀(即,基于前缀中包括的标签)。如果为特定查找密钥生成了大于可配置最大数的前缀集合,则哈希控制器56确定发生了错误(例如,无限循环)并且返回错误指示。
当找到了匹配或者在密钥哈希表58中没有更多前缀要查找时,哈希控制器56停止时钟周期计数器。哈希控制器56向流缓存60发送时钟周期计数器的值、密钥哈希表查找计数器的值、查找密钥、以及与查找密钥相关联的结果,并且向密钥管理器50发送标签释放消息。与查找密钥相关联的结果包括:找到匹配时,从密钥哈希表58中的查找返回的信息,或者,没有找到匹配时,对在密钥哈希表58中没有找到查找密钥的指示。标签释放消息使得密钥管理器50将标签重新用于各查找密钥。在密钥被过滤器查找模块40处理时,同一标签不用于两个以上的密钥。相反,每个标签都与单个查找密钥相关联,并且保持与该单个查找密钥相关联,直到过滤器查找模块40完成了对查找密钥的处理。
流缓存60确定时钟周期计数器的值是否大于可配置阈值,或者密钥哈希表查找计数器的值是否大于另一可配置阈值。在时钟周期计数器的值大于可配置阈值的实例中或者密钥哈希表查找计数器的值大于其他可配置阈值的实例中,流缓存60将查找密钥识别为具备在流缓存60中存储的资格。
对于有资格在流缓存60中存储的包流,流缓存60至少通过对查找密钥应用哈希函数来确定在哪里存储查找密钥和结果。哈希结果对应于流缓存60的哈希表中的位置(例如,桶)。在一个实例中,将流缓存60实施为具有512个桶(每个桶有2个单元格)的哈希表。查找密钥和相关结果的组合占用一个单元格。因此,在该实例中,每个桶可以存储官员两个包流的信息,并且流缓存60可以存储关于1024个包流的信息。
在一些实例中,查找密钥和相关结果可能已经存储在对应于由哈希结果标识的桶的一个或两个单元格中。流缓存60可以可编程地配置为使用任何数量的不同算法(包括随机踢除和最少最近使用)来选择哪个单元格存储查找密钥和相关结果。在流缓存60被变成为使用随机踢除的实例中,流缓存60可以包括生成对应于桶的两个单元格中的一个的随机数(例如,零或一)的移位寄存器。流缓存60在对应于所生成的随机数的单元格中存储查找密钥和对应结果。在流缓存60被编程为使用最少最近使用算法来选择存储查找密钥和相关结果的实例中,流缓存60持有访问信息并基于单元格最后访问的时间将单元格标记为有资格被替换。流缓存60识别包括流缓存60最少最近访问或使用的信息的桶的单元格,并且在所识别的单元格中存储新的查找密钥和相关结果。
图4是更详细地示出路由器的示例前缀查找模块的框图。为了说明的目的,以下可以在图3的实例中示出的过滤器查找块40和图2的实例中示出的路由器20的背景下描述前缀查找模块52。前缀查找模块52是路由器20的前缀查找模块的一个实例。在其他实例中,路由器20可以包括具有不同配置的前缀查找模块。前缀查找模块52包括队列62A-62B(统称为“队列62”)、调度器64、前缀长度66、下一前缀指针67、信用计数器68AA–68AN(统称为“信用计数器68A”)、和信用计数器68BA–68BN(统称为“信用计数器68B”)。
一般而言,前缀查找模块52为最长前缀匹配密钥在前缀66中存储一组前缀长度。至少部分地通过在控制面32中执行的软件处理来确定前缀长度66中存储的前缀长度。前缀长度指示了相比于密钥哈希表前缀应当使用的可屏蔽密钥的高比特的数量。例如,/128的前缀长度指示相比于密钥哈希表前缀应当使用可屏蔽密钥的全部128个比特。另一实例是,/64的前缀长度指示相比于密钥哈希表前缀应当使用可屏蔽密钥的64个高比特。因此,最长前缀是当将前缀与密钥哈希表前缀相比较时对其使用了大部分比特的前缀(即,/128的前缀长度长于/64的前缀长度)。
当在控制面32中执行的软件处理对前缀长度66编程时,软件处理确定是否需要对两个以上的不同前缀长度组进行编程。在一些实例中,用布隆过滤器54支持的最大数量的不同前缀长度(例如,可以由相应布隆过滤器54在单个时钟周期中查找的最大数量的不同前缀长度)来配置软件处理。如果特定应用需要最大数以上的不同前缀长度,则软件处理可以将不同前缀长度分成两个或多个组。一般而言,软件处理使不同前缀长度的组数最小化。如果多个不同前缀长度在最大数量的不同前缀长度的一倍至两倍之间,则软件处理将不同前缀长度分成两组。如果多个不同前缀长度在最大数量的不同前缀长度的两倍至三倍之间,则软件处理将不同前缀长度分成三组,等等。
软件处理用特定应用所需的全部前缀长度对前缀长度66编程,并且用被编程为前缀长度66的前缀长度的每个相应组的内存地址的指示,对下一个前缀指针67编程。前缀长度66和下一前缀指针67形成了前缀长度组的链表。当特定应用仅需要一组不同前缀长度时,软件处理用指示不存在其他前缀长度组的值(即,空值)对特定应用的下一前缀指针67的条目进行编程。当特定应用需要两组或多组不同前缀长度时,软件处理用特定应用的下一组前缀长度在前缀长度66中所处的位置的指示(例如,下一组前缀长度的内存地址)对下一前缀指针67的每个条目进行编程。对于特定应用的最后一组不同前缀长度,软件处理用指示对于特定应用不存在其他前缀长度组的值对下一前缀指针67的条目进行编程。
每组不同前缀长度可以包括不同数量的前缀长度。在一个实例中,最大数量的不同前缀长度是十六,并且应用需要二十个不同前缀长度。在该实例中,软件处理可以配置为将不同前缀长度分成十六个前缀长度的组和四个前缀长度的组。可选地,软件处理可以配置为将不同前缀长度分成两组十个前缀长度。每个前缀长度组中包括的前缀大小的数量可以基于每个组的点击率而自动配置。即,软件处理可以从过滤器查找模块40接收指示在第一组前缀长度中找到前缀的频率的统计信息。软件处理可以调整每个组中包括的前缀的数量,以使前缀查找模块52对于每个成功查找所生成的前缀数量最小化。例如,软件处理最初可以将一组二十个不同前缀长度分成两组十个前缀长度。然而,如果从第一组前缀长度得到的成功查找的数量不足(例如,低于阈值),则软件处理可以重新配置前缀查找模块52,以在第一组前缀中包括更多前缀长度,可以多达所支持的最大数前缀长度。
当前缀查找模块52接收到网络地址时,将网络地址放在队列62A中。队列62A为一个或多个进入的网络地址提供临时存储库。例如,如果前缀查找模块52停用(stall),使得没有查找请求被发送到布隆过滤器54,则队列62A为进入的地址提供缓冲区,这可以使前缀查找模块52停用时丢失或丢弃的网络地址数最小化。当特定应用需要两组或多组不同前缀长度时,网络地址的第二以及后续查找请求放在队列62B中。在一个实施方式中,队列62B中的条目具有比队列62A严格的优先级,使得只要队列62B中有至少一个值,就在队列62A中存储的任何网络地址之前检索并处理该值。例如,62B中存储的值可以包括特定应用的下一组不同前缀长度的网络地址或内存地址。
调度器64为前缀查找模块52提供了调度功能。即,调度器64管理从接收到的网络地址以及布隆过滤器54的查找请求来生成前缀。调度器64从队列62检索网络地址(例如,基于严格优先级,其中,队列62B对于队列62A有严格优先级),并基于在前缀长度66中指定的前缀长度控制信息和下一前缀指针67中的对应条目,从网络地址生成一组前缀。例如,从网络地址生成的前缀集合中的至少一个前缀包括是否有额外组的不同前缀长度可用于生成额外前缀的指示。该指示可以是空值(例如,当不存在额外组的不同网络前缀时)或者是下一步的不同前缀长度的起点在前缀长度66中的位置(例如,内存地址)。
在一个实例中,根据前缀长度66中存储的信息,调度器64从一个网络地址生成十六个或更少的不同前缀。所生成的前缀每个都具有不同长度,其非限制性的实例有,例如/32、/24、/16或/8。调度器64通过如前缀长度所指示的那样从网络地址屏蔽比特数来生成前缀。例如,如果网络地址是10.1.1.7,并且前缀长度是/16,则所生成的前缀是10.1/16,如果前缀长度是/24,则所生成的前缀是10.1.1/24。
一旦生成了前缀,则调度器64确定是否发布所生成的前缀集合的查找请求。调度器64从信用计数器68A和68B检索值。信用计数器68A和68B保持追踪已经向布隆过滤器54的每个队列发送了多少前缀。在图2至图5示出的实例中,信用计数器68A对应于布隆过滤器54A,并且信用计数器68B对应于布隆过滤器54B。特别地,信用计数器68A的每个信用计数器对应于布隆过滤器54A的队列(即,信用计数器68AA对应于图5中示出的队列过滤器54A的队列70A)。在其他实例中,前缀查找模块52可以用用于每个布隆过滤器的单个信用计数器来配置,而不是用用于每个布隆过滤器的每个队列的信用计数器来配置。一般地,当前缀查找模块52向队列发送前缀时,对应的信用计数器递减。当完成了布隆过滤器表中的查找时,对应的信用计数器递增。每个信用计数器的起始值是布隆过滤器中的对应队列的大小。参照图5描述了布隆过滤器54的细节。
一个实例是,信用计数器68AA对应于具有八个槽位的布隆过滤器54A的第一队列。布隆过滤器54A配置为存储特定前缀长度的查找请求。在该实例中,信用计数器68AA初始设置为值八,对应于队列的八个槽位。当调度器64发布与队列相关联的前缀长度的查找请求时,将信用计数器68AA中存储的值递减为值7。一旦布隆过滤器54A执行查找,则信用计数器68AA中存储的值递增到值8。如果队列满了(例如,为前缀长度发布了8个查找请求而没有任何正在执行),则信用计数器68AA中存储的值是零。当信用计数器68AA中存储的值是零时,这表明与信用计数器68AA相关联的布隆过滤器54A的队列满了。
如果调度器64确定信用计数器68AA的值是零,则调度器64可以配置为绕过布隆过滤器54A或者停用,直到信用计数器68AA的值大于零。当调度64“绕过”布隆过滤器时,调度器64向哈希控制器56发送指示在具有满队列的布隆过滤器中找到了与已满队列相关联的前缀的消息,并且不向布隆过滤器发布对前缀的查找请求。该消息可以称为布隆过滤器查找结果。通常,调度器64仅对于与已满队列相关联的前缀绕过布隆过滤器。即,调度器64发布与未满的布隆过滤器的队列相关联的每个前缀的查找请求。如果前缀的布隆过滤器54A的队列满了并且该前缀的布隆过滤器54B的队列未满,则在一些实例中,调度器64向布隆过滤器54B发布该前缀的查找请求,但是不向过滤器54A发布。
调度器64可以由路由器20上执行的软件(例如,在控制面32上运行的操作系统)或者由管理员动态配置。例如,软件或管理员可以通过设置控制寄存器的值来配置调度器64。在一个实例中,路由器20的控制面32用选择的一个策略37对数据面34的硬件编程,以使得调度器64可以可编程地配置为实施所选择的一个策略37。前缀查找模块52存储控制调度器64是否动态地绕过多个布隆过滤器54中的一个的策略配置信息。即,前缀查找模块53存储对应于当布隆过滤器的队列满时调度器64进行响应的方式的策略配置信息。当控制面32对数据面34的硬件编程以实现不同的策略37时,前缀查找模块52中存储的策略配置信息改变。在存在一个布隆过滤器的实例中,调度器64可以配置为在布隆过滤器的队列满时(例如,当队列的信用计数器为零时)停用或者绕过布隆过滤器。在有两个布隆过滤器的实例中,调度器64可以配置为在任一个布隆过滤器的队列满时停用、仅在每个布隆过滤器中的至少一个队列满时停用、或者绕过具有已满队列的任何布隆过滤器(即,从不停用)。
在控制面32动态地配置调度器64的实例中,控制面32可以监控系统性能,并基于路由器20的系统性能和策略37用策略配置信息来配置前缀查找模块52。例如,控制面32可以接收关于过滤器查找块40执行了多少动作的实时信息、关于当前配置发生了多少误报的实时信息、以及关于其他系统性能测量的信息。在如下情况下,发生误报:哈希控制器56确定前缀是具有从两个布隆过滤器54返回的指示前缀存储在密钥哈希表58中的值的最长前缀,但是当哈希控制器56在密钥哈希表58中执行前缀查找时,并没有找到该前缀。
在一个实例中,如果调度器64配置为从不停用并且软件检测到大量误报,则在各情况下,控制面32可以通过对数据面34的硬件编程,从而前缀查找模块52使调度器64仅在每个布隆过滤器的至少一个队列满时停用或者在任何布隆过滤器的任何队列满时停用,来改变调度器64的配置。如果调度器64配置为在任何布隆过滤器的任何队列满时停用,但是软件确定系统性能是次优的,则在各情况下,软件可以将调度器64重新配置为从不停用,或者仅在每个布隆过滤器中的至少一个队列满时停用。这样,控制面32可以可编程地配置调度器64在布隆过滤器54的一个或多个队列满时如何处理布隆过滤器查找。
图5是更详细地示出路由器20的示例布隆过滤器54A的框图。为了说明的目的,可以在图3的实例中示出的过滤器查找块40和图2的实例中示出的路由器20的背景下描述布隆过滤器54A。布隆过滤器54A是路由器20的布隆过滤器的一个实例。在其他实例中,路由器20可以包括具有不同配置的布隆过滤器。布隆过滤器54A包括队列70A–70N(统称为“队列70”)、哈希函数72A–72N(统称为“哈希函数72”)、控制器74A–74N(统称为“控制器74”)、内存库(MEMBANK)76A–76N(统称为“内存库76”)。
内存库76中的每个都是可以与其他内存库76并行访问的单独内存硬件库。布隆过滤器54A的数据结构存储在内存库76中,使得基于对于过滤器相关联的每个前缀应用哈希函数的结果,在内存库76之间存储了指示前缀是否可能存储在密钥哈希表58中或者肯定不存储在密钥哈希表58中的值。在一个实例中,内存库76的数量与队列70的数量相同。在其他实例中,内存库76的数量大于队列70的数量(例如,当有16个队列时,有32个内存库)。通过具有比队列70多的内存库76,这些值可以分散在更多的内存库中,从而降低两个不同前缀会要求从同一个内存库76进行查找的可能性。减少需要从同一个内存库76进行查找的前缀数可以增大查找操作的并行性,并且可以减少在一个或多个队列70中的前缀累积。
布隆过滤器54A从前缀查找模块52接收前缀集合,并且将前缀临时存储在队列70中。每个队列70都被配置为存储一定长度的前缀。在一个实例中,队列70包括十六个队列,而每个队列都被配置为存储包括在从前缀查找模块52接收的前缀集合中的十六个不同长度前缀之一。例如,队列70A可以配置为存储来自十六个前缀长度集合的最长前缀长度(例如,长度为/32的前缀),队列70B可以配置为存储来自十六个前缀长度集合的第二最长前缀长度(例如,长度为/24的前缀),队列70N可以配置为存储来自十六个前缀长度集合的最短前缀长度(例如,长度为/2的前缀)。虽然说明了每个队列70都具有用于存储像素的五个“槽位”,但是队列70可以用能够具有用于存储前缀的任意数量“槽位”的任意存储量(例如,任意字节数)来配置。在各情况下,槽位数量等于前缀查找模块52的对应信用计数器的初始值。
当布隆过滤器54A执行查找时,布隆过滤器54A从队列70去除一组前缀。在一个实例中,队列70配置为先进先出队列,使得当布隆过滤器54从一个队列70去除前缀时,布隆过滤器去除首先添加到队列的前缀(即,在队列中时间最长的前缀)。在从每个队列70去除前缀时,布隆过滤器54A对前缀应用相应的一个哈希函数72,以生成查找前缀的内存库76中的位置(例如,内存地址)。哈希函数72可以以硬件实现,使得哈希函数72包括同一哈希函数的N个不同硬件实现。在一些实例中,硬件实现的哈希函数72的数量等于队列70的数量。
每个哈希函数72都是单个布隆过滤器中的相同哈希函数,但是也可以在布隆过滤器之间所有不同。例如,在布隆过滤器54A中实施的哈希函数可以不同于在布隆过滤器54B中实施的哈希函数。通过在不同布隆过滤器中实施不同哈希函数,相比于在多个布隆过滤器中实施一个哈希函数,降低了所有布隆过滤器都会返回误报的可能性。通过为每个队列70以硬件实施一个哈希函数72,哈希函数72可以并行地对一组前缀中的每个进行哈希运算。
通过对前缀进行哈希运算得到的值是布隆过滤器的索引。该索引被传送到各自的一个控制器74。该索引用作内存地址。控制器74基于该索引从内存库76执行读取。在一个实例中,控制器74检查索引的前五个比特,以确定使用哪个内存库76进行查找。控制器74还可以以硬件实现,并且控制器74的数量可以与队列70的数量相同。通过以硬件实现控制器74,并且实现与队列70的数量相同的控制器74,控制器74可以确定在其中并行执行从内存库76读取一组前缀中的每个的索引值的适当内存库76。
在一些情况下,单组前缀的两个或多个前缀可能要求在同一个内存库76中进行查找。在这些情况下,通常在一个时钟周期对一个内存库76执行一个查找,并且在下一个时钟周期对一个内存库76执行第二查找。例如,如果从队列70A检索了第一前缀并且从队列70B检索了第二前缀,并且两个前缀要求在内存库76B中进行查找。在该实例中,控制器74A可以在第一时钟周期在内存库76B中对第一前缀执行查找,并且控制器74B可以在第二时钟周期在内存库76B中对第二前缀执行查找。
由于对先前检索的前缀进行了查找,因此在第二时钟周期内,布隆过滤器54A可以从队列70A检索另一前缀。这样,每个队列70的长度可以不同。在第二时钟周期内,前缀查找模块52可以向布隆过滤器54A发送另外一组前缀,然后其存储在队列70中。如果多个前缀要求从同一个内存库进行查找,则一个或多个队列70可以填满(即,热门(hotbanking))。
在每个控制器74都执行了查找之后,控制器74将查找结果发送到过滤器查找块40的哈希控制器56。例如,当控制器74A完成了从队列70A的检索的前缀的查找时,控制器74A将查找结果发送到哈希控制器56。查找结果表明了前缀是否有可能存储在密钥哈希表58中或者肯定不存储在密钥哈希表58中。
图6A和图6B是示出用于根据本公开的一个或多个技术执行查找的示例操作的流程图。为了清楚起见,将相对于图1的系统2、图2的路由器20、图3的过滤器查找块40、图4的前缀查找模块52以及图5的布隆过滤器54A来描述图6A和图6B中示出的方法。路由器20经由IFC24和入站链接26接收来自装置(例如,图1的客户端装置14)的包(90)。数据面34从包提取信息作为密钥信息(92)。在一些实例中,信息从包的报头提取,并且可以包括源或目标网络地址、源或目标端口、或协议。
路由器20的过滤器查找块40的密钥管理器50接收信息,基于信息生成查找密钥,并将查找密钥发送到流缓存60,以确定查找密钥是否位于流缓存60中(94)。流缓存60执行查找,以确定由查找密钥指示的包流的信息是否存储在流缓存60中。如果在流缓存60中找到了查找密钥的匹配(94的分支“是”),则流缓存60将查找密钥和相关结果输出到前缀查找模块52,前缀查找模块52再将信息输出到哈希控制器56用于输出到控制面32或数据面34(96)。即,当找到匹配时,过滤器查找块40向路由器20的适当硬件或软件元件返回缓存的结果信息。
如果在流缓存60中没有找到查找密钥的匹配(94的分支“否”),则前缀查找模块52至少部分地基于由密钥管理器50生成的查找密钥和由前缀长度66存储的一组不同前缀长度来生成一组前缀(98)。从查找密钥生成的前缀数量和长度在前缀查找模块52中指定。在一个实例中,前缀查找模块52中存储的前缀信息指示对于32位IP地址应当生成十六个前缀,并且前缀长度应当是/2、/4、/6、/8,/10,一直到/32。当从密钥信息生成前缀时,前缀查找模块52基于前缀长度将密钥信息的较后部分的比特数屏蔽。例如,如果前缀长度是/8并且密钥信息是32位IP地址192.168.1.43,则前缀是192/8,IP地址的后24位用0屏蔽。如果前缀长度是/24,则前缀是192.168.1/24。该前缀包括将前缀标识为从查找密钥生成的标签和对于查找密钥是否存在额外组的不同前缀长度的指示。
前缀查找模块52向哈希控制器56发送消息以初始化查找密钥的时钟周期计数器(100)并且将生成的一组前缀发送到用于查找的每个布隆过滤器54(102)。对于在时钟周期计数器初始化和获得密钥哈希表查找结果之间经过的每个时钟周期,递增时钟周期计数器。布隆过滤器54在各自的队列中存储每个前缀,并且在执行查找时,从每个队列去除前缀并且对该前缀应用一个哈希函数72,以生成布隆过滤器54的数据结构的索引(102)。在一个实例中,索引是布隆过滤器的内存库中的位置的内存地址。每个布隆过滤器54都实施独立于在另一布隆过滤器54中实施的哈希函数的不同哈希函数。使用不同哈希函数可以降低对应于同一前缀长度的队列在两个布隆过滤器54中都满的可能性。在内存库76中查找前缀之后,布隆过滤器54将查找结果发送到哈希控制器56。
一旦哈希控制器56接收到从密钥信息生成的每个前缀的查找结果以及每个布隆过滤器54的查找结果,哈希控制器56确定被指示为在两个布隆过滤器54中都找到的前缀的最长前缀。如果前缀的任一个布隆过滤器查找结果指示在布隆过滤器中没有找到前缀,则前缀不在哈希表58中,并且哈希控制器56放弃考虑该前缀。然后哈希控制器56在密钥哈希表58中执行最长前缀的查找(104)并且确定在密钥哈希表58中是否找到了最长前缀(106)。哈希控制器56持有密钥哈希表查找计数器,其对在获得结果之前对特殊查找密钥在密钥哈希表58中执行的查找进行计数。如果在密钥哈希表58中没有找到最长前缀(166的分支“否”),则哈希控制器56递增密钥哈希表查找计数器,并且确定在密钥哈希表58中是否还有任何另外的前缀要查找。如果有另外的前缀要查找(108的分支“是”),则哈希控制器56确定指示为在两个布隆过滤器中都找到的下一最长前缀(110),并使用下一最长前缀在密钥哈希表58中执行查找(104),以确定在密钥哈希表58中是否找到了下一最长前缀(106)。哈希控制器56继续确定下一最长前缀(110),增大密钥哈希表查找计数器,并且在密钥哈希表58中执行查找(104),直到在密钥哈希表58中找到了前缀(106的分支“是”),或者直到在密钥哈希表58中查找了所生成的前缀集合的所有可能前缀(108的分支“否”)。
哈希控制器56确定在前缀长度66中是否存在查找密钥的额外组的不同前缀长度(112)。在一个实例中,哈希控制器56检查前缀中包括的额外组的不同前缀长度是否存在的指示。如果指示是空值,则控制器56确定对于该查找密钥没有额外前缀长度(112的分支“否”)。在一些实例中,哈希控制器56例如还通过检查前缀中包括的循环计数器的值,确定过滤器查找模块40是否已经处理了最大数的前缀组。在处理了每个前缀组织后,哈希控制器56递减循环计数器,使得一旦循环计数器到零,哈希控制器56就停止查找处理(112的分支“否”)。
如果指示不是空值(例如,有效的内存地址)并且循环计数器不为零,则哈希控制器56确定对于查找密钥存在额外的前缀长度(112的分支“是”)并且将标签和指示发送到前缀查找模块52。前缀查找模块52使用指示中指定的内存地址,从前缀长度66检索下一组前缀长度,从下一前缀指针67检索另一组不同前缀长度的可能下一内存地址,并且基于检索的信息和从哈希控制器56接收的标签生成另一组前缀(98)。当前生成的一组前缀与先前为查找密钥生成的一组前缀包括相同的标签,这是因为,这两组前缀都被生成用于同一查找密钥。当前生成的一组前缀还包括从下一前缀指针67检索的信息,作为对于查找密钥是否存在额外组的不同前缀长度的指示。
在一些实施方式中,前缀查找模块52向哈希控制器56发送消息,以将查找密钥的时钟周期计数器重新初始化(100)。在其他实例中,时钟周期计数器继续查找密钥的计数。在其他实例中,哈希控制器56将当前生成的前缀集合发送到用于查找的每个布隆过滤器5(102)。哈希控制器56如上所述在密钥哈希表58中查找前缀(104、106、108、110),并且如果在密钥哈希表58中没有找到前缀(106的分支“否”)并且在密钥哈希表58中没有下一组前缀的额外前缀要查找(108的分支“否”),则确定是否存在查找密钥的额外组的前缀长度(112)。只要哈希控制器56确定对于查找密钥存在额外前缀长度(即,循环计数器的值大于0并且指示是否存在额外组的前缀长度的指示为非空)(112的分支“是”),哈希控制器56将标签和指示发送到前缀查找模块52,并重复该处理。
如果哈希控制器56确定没有额外组的不同前缀长度组可用于查找密钥(12的分支“否”),则哈希控制器56基于时钟周期计数器和密钥哈希表查找计数器确定是否存储查找结果(114)。哈希控制器56从时钟周期计数器和密钥哈希表查找计数器检索值,以确定自前缀查找模块52开始处理密钥信息开始经过了多少时钟周期,并且确定在密钥哈希表58中执行了多少查找。哈希控制器56将查找密钥、从密钥哈希表58获得的相关结果、时钟周期计数器的值、以及密钥哈希表计数器的值发送到流缓存60。流缓存60基于时钟周期计数器的值和密钥哈希表查找计数器的值,确定包流是否有资格存储在流缓存60中。如果时钟周期计数器的值大于对应阈值或者如果密钥哈希表查找计数器的值大于对应于值,则流缓存60将包流识别为有资格存储在流缓存60中(114的分支“是”)并且存储查找密钥和相关结果(116)。如果时钟周期计数器的值不大于对应阈值并且如果密钥哈希表查找计数器的值不大于对应阈值,则流缓存60将包流识别为不具备存储在流缓存60中的资格(114的分支“否”)。在哪种情况下,哈希控制器56都将密钥哈希表查找结果输出到数据面34(118)。
这样,网络装置的一个实例包括:包括布隆过滤器的过滤器查找模块,其中,布隆过滤器支持最大数的不同前缀长度的并行查找,并且其中,过滤器查找模块访问布隆过滤器,以确定与一组前缀中的条目匹配的最长前缀。网络装置进一步包括控制面,其被配置为接收前缀长度集合,该前缀长度集合包括比布隆过滤器支持的最大数量的不同前缀长度还多的多个不同前缀长度,其中,该前缀长度集合与一个应用相关联,基于接收到的该前缀长度集合,生成两组或多组不同前缀长度(其中,该两组或多组不同前缀长度中的每个都包括不多于最大数量的不同前缀长度),并且用与该一个应用相关联的两组或多组不同前缀长度对过滤器查找模块编程。当两组或多组不同前缀长度中的第一组包括少于最大数量的不同前缀长度时,控制面可以配置为接收统计信息,该统计信息包括通过网络装置的前缀查找模块使用两组或多组不同前缀长度的第一组生成的前缀的哈希表的多个正搜索结果,其中,正结果表明在网络装置的哈希表中找到了使用第一组不同前缀长度生成的前缀的至少一个前缀,并且确定正结果的数量是否小于阈值数,并且,响应于确定正结果数小于阈值数,则生成两组或多组新的不同前缀长度,其中,这两组或多组新的不同前缀长度中的每组都包括不多于最大数量的不同前缀长度,并且其中,这两个或多个新组中的第一个新组包括比两组或多组不同前缀长度的第一组更多的不同前缀长度。
网络装置的过滤器查找模块可以包括前缀查找模块。控制面可以配置为在前缀查找模块中存储两组或多组不同前缀长度中的每组,并且在前缀查找模块中存储两组或多组不同前缀长度中的每组的各自的下一前缀指针值。该两组或多组不同前缀长度以及两组或多组不同前缀长度中的每组的各自的下一指针值可以形成链表。控制面可以配置为将不同前缀长度分成两组或多组,使得在两组或多组的一组中包括的每个各自的前缀的长度大于在两组或多组的后续组中包括的每个各自的前缀的长度。
网络装置的过滤器查找模块可以包括前缀查找模块、控制器和哈希表。前缀查找模块可以配置为接收查找密钥,检索两组或多组不同前缀长度中的第一组和与该第一组不同前缀长度相关联的第一下一前缀指针,并使用第一组不同前缀长度生成第一前缀集合,其中,第一前缀集合包括第一下一前缀指针作为在两组或多组不同前缀长度中是否存在第二组不同前缀长度的指示。布隆过滤器可以配置为处理第一前缀集合的每个前缀,以识别在搜索哈希表时使用的第一前缀集合的一部分。控制器可以配置为使用第一前缀集合的识别部分来搜索哈希表,从哈希表接收第一搜索结果,并且如果第一结果指示第一前缀集合的最少一个前缀存储在哈希表中,则输出结果。如果第一结果指示不是第一前缀集合的所有前缀存储在哈希表中,则控制器可以配置为基于第二组不同前缀长度是否存在于两组或两组不同前缀长度中的指示,确定两组或多组前缀包括第二组不同前缀长度。前缀查找模块可以进一步配置为检索第二组不同前缀长度和与第二组不同前缀长度相关联的第二下一前缀指针,并且使用第二组不同前缀长度生成第二前缀集合,其中,第二前缀集合包括第二下一前缀指针作为第三组不同前缀长度是否存在于两组或多组不同前缀长度中的指示。布隆过滤器可以配置为处理第二前缀集合的每个前缀,以识别用于搜索哈希表的第二前缀集合的部分,并且控制器可以配置为使用第二组前缀的识别部分来搜索哈希表,从哈希表接收第二搜索结果,并且如果第二结果指示第二前缀集合的至少一个前缀存储在哈希表中,则输出结果。如果第二结果指示不是第二前缀集合的所有前缀存储在哈希表中,则控制器可以配置为基于第三组不同前缀长度是否存在于两组或多组不同前缀长度中的指示,确定两组或多组前缀包括第三组不同前缀长度。前缀查找模块可以配置为检索第三组不同前缀长度和与第三组不同前缀长度相关联的第三下一前缀指针,使用第三组不同前缀长度生成第三前缀集合,其中,第三前缀集合包括第三下一前缀指针作为第四组不同前缀长度是否存在于两组或多组不同前缀长度中的指示。布隆过滤器可以配置为处理第三前缀集合的每个前缀,以识别用于搜索哈希表的第三前缀集合的一部分,并且控制器可以配置为使用第三前缀集合的一个或多个识别部分来搜索哈希表,如果第三结果指示第三前缀集合的至少一个前缀存储在哈希表中,则输出第三结果。如果第二结果指示不是第二前缀集合的所有前缀存储在哈希表中,则控制器可以配置为基于第三组不同前缀长度是否存在于两组或多组不同前缀长度中的指示,确定两组或多组前缀不包括第三组,并且输出第二结果。
本公开中描述的技术可以至少部分地以硬件、软件、固件或其任意组合实现。例如,所描述的技术的各方面可以在一个或多个处理器中实现,包括一个或多个微处理器、数字信号处理器(DSP)、应用专用集成电路(ASIC)、现场可编程门阵列(FPGA)、或任何其他等效集成或离散逻辑电路,以及这些部件的任意组合。一般而言,术语“处理器”或“处理电路”可以指任意上述逻辑电路、单独地或与其他逻辑电路组合、或任何其他等效电路。包括硬件的控制单元也可以执行本公开的一个或多个技术。
这种硬件、软件和固件可以在同一装置中或者在单独装置中实现,以支持本公开中描述的各种操作和功能。另外,任意所描述的单元、模块、或部件可以一起实现或作为离散但可互操作的逻辑器件单独实现。将不同特征描述为模块或单元旨在突出不同功能方面,并不一定意味着这种模块或单元必须用单独的硬件或软件部件来实现。相反,与一个或多个模块或单元相关联的功能可以通过单独的硬件或软件部件来实现,或者集成在共同或单独的硬件或软件部件中。
在本公开中描述的技术还可以体现或编码在包含指令的计算机可读介质中,诸如计算机可读存储介质。例如,当执行体现或编码在计算机可读介质中的指令时,该指令可以使可编程处理器或其他处理器执行本发明的方法。计算机可读存储介质可以包括随机存取存储器(RAM)、只读存储器(ROM)、可编程只读存储器(PROM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、闪存、硬盘、CD-ROM、软盘、盒式磁带、磁性介质、光学介质或其他计算机可读存储介质。应当理解,术语“计算机可读存储介质”是指物理存储介质(例如,非临时性介质)而不是信号、载波或其他瞬态介质。
已经描述了本发明的各实施方式。这些或其他实施方式也在所附权利要求的范围内。

Claims (12)

1.一种用于操作网络装置的方法,包括:
通过所述网络装置接收前缀长度集合,所述前缀长度集合包括多于所述网络装置的布隆过滤器能够并行查找的最大数量的不同前缀长度的多个不同前缀长度,其中,所述前缀长度集合与一个应用相关联;
基于接收的所述前缀长度集合,生成两组或多组不同前缀长度,其中,所述两组或多组不同前缀长度中的每组都包括不多于所述最大数量的不同前缀长度;
利用与所述一个应用相关联的所述两组或多组不同前缀长度,通过所述网络装置的控制面对所述网络装置的过滤器查找模块编程;以及
在对所述过滤器查找模块编程之后,利用所述过滤器查找模块继续处理均使用所述两组或多组不同前缀长度中对应的一组而生成的相应的前缀集合直至:1)在哈希表中查找到来自不同组中的一组的前缀的匹配,或者2)所述过滤器查找模块已处理了由所述两组或多组不同前缀长度中的每组生成的所述相应的前缀集合。
2.根据权利要求1所述的方法,其中,对所述过滤器查找模块编程包括:
将所述两组或多组不同前缀长度中的每组存储在所述过滤器查找模块的前缀查找模块中;以及
将所述两组或多组不同前缀长度中的每组的各自的下一前缀指针值存储在所述前缀查找模块中。
3.根据权利要求2所述的方法,其中,所述两组或多组不同前缀长度和所述两组或多组不同前缀长度的各自的下一前缀指针值形成链表。
4.根据权利要求1至3中的任一项所述的方法,其中,生成所述两组或多组不同前缀长度包括:将所述不同前缀长度分组成所述两组或多组,使得在所述两组或多组的一组中包括的每个各自的前缀的长度大于在所述两组或多组的后续组中包括的每个各自的前缀的长度。
5.根据权利要求1至3中的任一项所述的方法,在对所述过滤器查找模块编程之后,继续处理所述相应的前缀集合包括:
通过所述网络装置的前缀查找模块,接收查找密钥;
检索所述两组或多组不同前缀长度的第一组以及与所述第一组不同前缀长度相关联的第一下一前缀指针;
通过所述前缀查找模块,使用所述第一组不同前缀长度生成第一前缀集合,其中,所述第一前缀集合包括第一下一前缀指针作为第二组不同前缀长度是否存在于所述两组或多组不同前缀长度中的指示;
通过所述布隆过滤器处理所述第一前缀集合中的每个前缀,以识别用于搜索所述网络装置的哈希表的所述第一前缀集合的部分;
通过所述网络装置的控制器,利用所述第一前缀集合的一个或多个识别部分,来搜索所述哈希表;
通过所述控制器从所述哈希表接收所述搜索的第一结果;以及
如果所述第一结果指示所述第一前缀集合的至少一个前缀存储在所述哈希表中,则输出该结果。
6.根据权利要求5所述的方法,进一步包括:
对于由所述前缀查找模块生成的每个前缀集合,通过所述控制器调整循环计数器的值;以及
如果所述循环计数器的值等于预定值,则输出错误作为所述结果。
7.根据权利要求5所述的方法,进一步包括:
如果所述第一结果指示不是所述第一前缀集合的所有前缀存储在所述哈希表中,则基于所述第二组不同前缀长度是否存在于所述两组或多组不同前缀长度中的指示,确定所述两组或多组前缀包括所述第二组不同前缀长度;
检索所述第二组不同前缀长度和与所述第二组不同前缀长度相关联的第二下一前缀指针;
通过所述网络装置的所述前缀查找模块,使用所述第二组不同前缀长度,生成第二前缀集合,其中,所述第二前缀集合包括所述第二下一指针前缀作为第三组不同前缀长度是否存在于所述两组或多组不同前缀长度中的指示;
通过所述布隆过滤器处理所述第二前缀集合的每个前缀,以识别用于搜索所述网络装置的所述哈希表的所述第二前缀集合的部分;
通过所述网络装置的控制器,使用所述第二前缀集合的一个或多个识别部分来搜索所述哈希表,
通过所述控制器从所述哈希表接收所述搜索的第二结果;以及
如果所述第二结果指示所述第二前缀集合的至少一个前缀存储在所述哈希表中,则输出所述第二结果。
8.根据权利要求7所述的方法,进一步包括:
如果所述第二结果指示不是所述第二前缀集合的所有前缀存储在所述哈希表中,则基于所述第三组不同前缀长度是否存在于所述两组或多组不同前缀长度中的指示,确定所述两组或多组前缀包括所述第三组不同前缀长度;
检索所述第三组不同前缀长度和与所述第三组不同前缀长度相关联的第三下一前缀指针;
通过所述网络装置的所述前缀查找模块,使用所述第三组不同前缀长度来生成第三前缀集合,其中,所述第三前缀集合包括所述第三下一前缀指针作为第四组不同前缀长度是否存在于所述两组或多组不同前缀长度中的指示;
通过所述布隆过滤器处理所述第三前缀集合中的每个前缀,以识别用于搜索所述网络装置的所述哈希表的所述第三前缀集合的部分;
通过所述网络装置的控制器,使用所述第三前缀集合的一个或多个识别部分来搜索所述哈希表;
通过所述控制器从所述哈希表接收所述搜索的第三结果;以及
如果所述第三结果指示所述第三前缀集合的至少一个前缀存储在所述哈希表中,则输出所述第三结果。
9.根据权利要求7所述的方法,进一步包括:
如果所述第二结果指示不是所述第二前缀集合的所有前缀存储在所述哈希表中,则基于所述第三组不同前缀长度是否存在于所述两组或多组不同前缀长度中的指示,确定所述两组或多组前缀不包括所述第三组不同前缀长度;以及
输出所述第二结果。
10.根据权利要求1至3中的任一项所述的方法,其中,所述两组或多组不同前缀长度中的第一组包括少于所述最大数量的不同前缀长度,所述方法进一步包括:
通过所述控制面接收统计信息,所述统计信息包括通过所述网络装置的前缀查找模块使用所述两组或多组不同前缀长度中的第一组生成的前缀的所述哈希表的搜索的多个正结果,其中,正结果表明在所述网络装置的哈希表中找到了使用所述第一组不同前缀长度生成的前缀中的至少一个;
确定所述正结果的数量是否小于阈值数;以及
响应于确定所述正结果的数量小于阈值数,生成新的两组或多组不同前缀长度,其中,所述新的两组或多组不同前缀长度中的每组都包括不多于所述最大数量的不同前缀长度,并且其中,所述新的两组或多组中的第一个新组包括比所述两组或多组不同前缀长度的第一组更多的不同前缀长度。
11.一种网络装置,包括:
过滤器查找模块,包括布隆过滤器,其中,所述布隆过滤器支持最大数量的不同前缀长度的并行查找,并且其中,所述过滤器查找模块访问所述布隆过滤器,以确定与前缀集合中的条目匹配的最长长度前缀;以及
控制面,被配置为接收前缀长度集合,所述前缀长度集合包括多于所述布隆过滤器支持的最大数量的不同前缀长度的多个不同前缀长度,其中,所述前缀长度集合与一个应用相关联,基于接收到的所述前缀长度集合生成两组或多组不同前缀长度,其中,所述两组或多组不同前缀长度中的每组都包括不多于所述最大数量的不同前缀长度,并且用与所述一个应用相关联的所述两组或多组不同前缀长度对所述过滤器查找模块编程,
其中,在对所述过滤器查找模块编程之后,所述过滤器查找模块继续处理使用所述两组或多组不同前缀长度中对应的一组生成的相应的前缀集合直至:1)在哈希表中查找到来自不同的前缀组中的一组的前缀的匹配,或者2)所述过滤器查找模块已处理了由所述两组或多组不同前缀长度中的每组生成的所述相应的前缀集合。
12.根据权利要求11所述的网络装置,包括用于执行根据权利要求1至10中的任一项所述的方法的装置。
CN201310080611.7A 2012-03-13 2013-03-13 使用可变数量前缀的最长前缀匹配搜索 Active CN103312615B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/418,907 US8799507B2 (en) 2012-03-13 2012-03-13 Longest prefix match searches with variable numbers of prefixes
US13/418,907 2012-03-13

Publications (2)

Publication Number Publication Date
CN103312615A CN103312615A (zh) 2013-09-18
CN103312615B true CN103312615B (zh) 2016-07-13

Family

ID=47844129

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310080611.7A Active CN103312615B (zh) 2012-03-13 2013-03-13 使用可变数量前缀的最长前缀匹配搜索

Country Status (3)

Country Link
US (1) US8799507B2 (zh)
EP (1) EP2640021B1 (zh)
CN (1) CN103312615B (zh)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8948177B2 (en) * 2012-07-30 2015-02-03 Hewlett-Packard Development Company, L.P. Policy based routing
US9143449B2 (en) * 2012-07-31 2015-09-22 Cisco Technology, Inc. Methods and apparatuses for improving database search performance
US9172743B2 (en) * 2012-12-31 2015-10-27 Futurewei Technologies, Inc. Scalable storage systems with longest prefix matching switches
WO2014132136A2 (en) * 2013-02-27 2014-09-04 Marvell World Trade Ltd. Efficient longest prefix matching techniques for network devices
US9652511B2 (en) * 2013-03-13 2017-05-16 International Business Machines Corporation Secure matching supporting fuzzy data
US9967187B2 (en) 2013-04-11 2018-05-08 Marvell Israel (M.I.S.L) Ltd. Exact match lookup with variable key sizes
CN104584492B (zh) * 2013-08-28 2018-03-13 华为技术有限公司 报文处理方法、设备及系统
US9647941B2 (en) * 2013-10-04 2017-05-09 Avago Technologies General Ip (Singapore) Pte. Ltd. Hierarchical hashing for longest prefix matching
US10338972B1 (en) * 2014-05-28 2019-07-02 Amazon Technologies, Inc. Prefix based partitioned data storage
IL233776B (en) * 2014-07-24 2019-02-28 Verint Systems Ltd A system and method for adjusting domains
WO2016051578A1 (ja) * 2014-10-02 2016-04-07 富士通株式会社 中継装置および基地局システム
US9917776B2 (en) * 2014-10-16 2018-03-13 Cisco Technology, Inc. Hash-based address matching
US9596181B1 (en) * 2014-10-20 2017-03-14 Juniper Networks, Inc. Two stage bloom filter for longest prefix match
US10516613B1 (en) 2015-10-14 2019-12-24 Innovium, Inc. Network device storage of incremental prefix trees
US9979648B1 (en) * 2015-12-28 2018-05-22 Amazon Technologies, Inc. Increasing entropy across routing table segments
US10171419B2 (en) * 2016-06-19 2019-01-01 Mellanox Technologies TLC Ltd. IP route caching with two search stages on prefix length
US10313240B2 (en) * 2017-06-26 2019-06-04 Intel Corporation Technologies for efficient network flow classification with vector bloom filters
US10783153B2 (en) * 2017-06-30 2020-09-22 Cisco Technology, Inc. Efficient internet protocol prefix match support on No-SQL and/or non-relational databases
CN109495525B (zh) * 2017-09-12 2020-09-18 华为技术有限公司 网络组件、解析内容标识的方法和计算机可读存储介质
CN107896194B (zh) * 2018-01-02 2021-04-09 盛科网络(苏州)有限公司 一种路由查找方法、装置和存储介质
US10397115B1 (en) 2018-04-09 2019-08-27 Cisco Technology, Inc. Longest prefix matching providing packet processing and/or memory efficiencies in processing of packets
US11140078B1 (en) * 2018-10-18 2021-10-05 Innovium, Inc. Multi-stage prefix matching enhancements
US10929337B2 (en) * 2019-05-24 2021-02-23 Intel Corporation Distributed error and anomaly communication architecture for analog and mixed-signal systems

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3199051B2 (ja) 1999-02-10 2001-08-13 日本電気株式会社 キャッシュを有するルータの方路決定装置及びプログラムを記録した機械読み取り可能な記録媒体
US8112578B2 (en) * 2001-11-01 2012-02-07 Micron Technology, Inc. Low power, hash-content addressable memory architecture
US7602785B2 (en) 2004-02-09 2009-10-13 Washington University Method and system for performing longest prefix matching for network address lookup using bloom filters
US8849838B2 (en) 2008-01-15 2014-09-30 Google Inc. Bloom filter for storing file access history
US8005868B2 (en) 2008-03-07 2011-08-23 International Business Machines Corporation System and method for multiple distinct aggregate queries
US8018940B2 (en) * 2008-08-13 2011-09-13 Alcatel Lucent Network address lookup based on bloom filters
US7738454B1 (en) * 2008-09-30 2010-06-15 Juniper Networks, Inc. Methods and apparatus related to packet classification based on range values
KR101028470B1 (ko) 2009-05-07 2011-04-14 이화여자대학교 산학협력단 Ip주소 검색을 위한 장치 및 방법
US8676951B2 (en) * 2011-07-27 2014-03-18 Hitachi, Ltd. Traffic reduction method for distributed key-value store

Also Published As

Publication number Publication date
US20130246651A1 (en) 2013-09-19
US8799507B2 (en) 2014-08-05
CN103312615A (zh) 2013-09-18
EP2640021B1 (en) 2019-06-19
EP2640021A1 (en) 2013-09-18

Similar Documents

Publication Publication Date Title
CN103312615B (zh) 使用可变数量前缀的最长前缀匹配搜索
US11824796B2 (en) Protocol independent programmable switch (PIPS) for software defined data center networks
US7623455B2 (en) Method and apparatus for dynamic load balancing over a network link bundle
US8630294B1 (en) Dynamic bypass mechanism to alleviate bloom filter bank contention
CN103248582B (zh) 用于在网络装置中执行包流查找的流缓存器机制
US6950434B1 (en) Arrangement for searching packet policies using multi-key hash searches in a network switch
US8228908B2 (en) Apparatus for hardware-software classification of data packet flows
CN108833299B (zh) 一种基于可重构交换芯片架构的大规模网络数据处理方法
US9602428B2 (en) Method and apparatus for locality sensitive hash-based load balancing
CN106664251A (zh) 网络环境中的双向流粘性
US8555374B2 (en) High performance packet processing using a general purpose processor
CN101789949B (zh) 一种实现负荷分担的方法和路由设备
EP1836808A2 (en) Fibre channel forwarding information base
US20180367431A1 (en) Heavy network flow detection method and software-defined networking switch
EP2880550B1 (en) Connection mesh in mirroring asymmetric clustered multiprocessor systems
CN115917520A (zh) 用于通过分布式算法为可编程数据平面提供lpm实现的系统
CN111385228B (zh) 一种基于openflow交换机端口混淆的移动目标防御方法
US8837474B2 (en) Apparatus and methods for efficient network address translation and application level gateway processing
KR102001487B1 (ko) 소프트웨어 정의 네트워킹 제어 방법 및 이를 수행하는 컴퓨팅 장치
EP4258614A1 (en) Minimizing deviation from average latency of table lookups
JP2015053673A (ja) パケット中継装置及びパケット中継方法
CN102739551A (zh) 多存储器流水路由体系结构
KR102280343B1 (ko) 복수의 이더넷 포트를 가지는 사물인터넷 디바이스
US11895005B1 (en) Network devices with hardware accelerated table updates
US9444731B2 (en) Methods and systems for data packet routing

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
CP01 Change in the name or title of a patent holder
CP01 Change in the name or title of a patent holder

Address after: California, USA

Patentee after: Juniper Networks, Inc.

Address before: California, USA

Patentee before: Jungle network