使用最具体的过滤器匹配和传输层共享进行两级分组分类的装置和方法

文档序号:7947079阅读:217来源:国知局
专利名称:使用最具体的过滤器匹配和传输层共享进行两级分组分类的装置和方法
技术领域
本发明总地涉及计算机连网,并且更具体地,涉及分类分组的方法和装置。
背景技术
传统地,在计算机网络中的分组(packet)路由(route)仅仅基于分组该分组的目的地址。这种路由技术一般与“最好结果”的传递相关联,并且去往相同地址的所有流量被相同地对待。然而,单单基于目的地址的分组路由不足以满足对于更宽的带宽、提升的安全性以及增加的灵活性和服务区分(differentiation)的增长的需求。为了达到这些目标,装备供应商和服务提供商正在提供更多各异的路由形式,包括通过防火墙(firewall)的路由、基于服务质量(QoS)的转发(forward),以及带宽和/或资源预留(reservation)。
一般来说,防火墙包括任何能够阻挡某些流量类别(例如“不需要的”或“可疑的”流量)的组件或组件的组合。防火墙常常被用在公司网络或其他企业网络中,并且防火墙通常被实施在网络的入口点(entry point)和/或出口点(exit point)——即网络的“信任界线(trust boundary)”。典型的防火墙包括一系列被设计来执行期望的安全策略的规则(rule)或过滤器(filter)。
网络服务提供商可能具有广泛的客户群,各要求不同的服务、服务优先级和价格。为了向大量不同的客户提供不同的服务——或者更一般地,为了向某些网络流量类别提供优惠(preferential)的对待——装备供应商已经实现了多种机制,包括基于QoS的转发以及带宽和/或资源预留。基于QoS的转发的目标在于为大量不同的客户和/或流量类型提供服务区分。基于QoS的转发可以包括例如基于服务类别的转发、特别的排队程序(例如每流排队)和公平调度方法。与QoS转发固有联系的是带宽或资源预留。带宽预留一般包括为某些类型的流量预留指定的带宽。例如,带宽预留可以应用到两点之间的流量,或者带宽预留可以应用到与某种应用(例如多媒体、视频等)相关的流量上。
为了实现上面描述的提供更多各异的网络流量路由的路由方法论(例如防火墙、QoS转发、带宽预留),以及为了执行其他基于策略的分组转发技术,必须要对分组进行分类。一般来说,分组分类包括在属于不同流(flow)的分组之间,或是在于不同流量类别相关联的分组之间进行区别。使用在这里,“流”是一连串分组,这些分组共享至少一些公共的头部(header)特性(例如,在两个具体地址间流动的分组)。通常基于分组头部中的一个或更多个字段(field)对分组进行分类。向该头部信息应用一个或更多个规则来确定该分组与哪个流对应,或是该分组与哪种流量类型相关联。
分组分类规则一般包括几个字段以及相关联的优先级和动作(action),所述字段与接收的分组(received packet)的头部中对应字段进行比较。组成分类数据库的规则组可以被安排到一个按优先顺序的列表中,并且具有较高优先级的规则在具有较低优先级的规则之上被优选。当接收到分组时,将分组的内容(例如某些头部字段)与分类数据库中的每一条规则进行比较,以确定要应用于该分组的最高优先级的动作。
基于头部数据来执行分组分类的多种方法——硬件实现和软件实现——是本领域公知的,包括哈希(hashing)方案、位并行性(bit parallelism)技术和使用内容可寻址存储器(CAM)的实现。哈希方法根据在规则的每个字段中使用的位掩码(bit mask)创建规则组,每个规则组由一个哈希表(或多个哈希表)代表。识别与接收的分组匹配的规则需要在哈希表上进行一系列的查找。
位并行性把n维分类问题分割成多个级,每个级都为单维。每次在单维上的匹配都返回一个位向量。位向量具有与存储在系统中的规则的数目相等的长度,并且如果与一个位对应的规则指明值的范围匹配接收的分组的适当字段,则位向量中的该位被置位。使得在所有返回的位向量中的某规则的位被置位的规则匹配所接收的分组。对标准位并行性方案的一种改进是聚合位向量(ABV)方法。对于ABV方法来说,每个“完整”位向量被压缩,并且被表示为大小更小的位集(被称作“聚合位向量”)。聚合位向量中的每个位表示来自完整位向量的一个位组,并且如果相关联的位组(在完整位向量中)中至少一个位被置位,则聚合位向量中的位被置位。
对于CAM实现来说,CAM的每一项都与值以及位掩码相关联。所述值包括规则的一个或更多个字段,并且所述位掩码指明当搜索关键字(key)与所述值进行比较时所述关键字的哪些位被考虑。CAM单元——所述CAM单元能够同时将搜索关键字与多个项进行比较——返回与最高优先级匹配项相关联的索引,并且该索引被用于识别对分组的动作。
多种因素可能影响上述分类方案的性能,所述因素包括需要大量存储器访问、需要大的储存空间以及(至少对于CAM实现来说)大量功率消耗。由于带宽和存储器开销(overhead)以及其他因素,这些分组分类技术可能难以与链路速度进步以及分类数据库大小增长保持一致,并且分组分类可能是支持高速链路(例如吉比特容量)的路由器(router)的瓶颈。


图1是图示包括路由器的网络的实施方案的示意图。
图2是图示图1中所示的路由器的实施方案的示意图。
图3是图示图2中所示的处理设备的实施方案的示意图。
图4是图示示例性分组的组成的示意图。
图5A-C5是示意图,每一个图示分组分类规则的实施方案。
图6是图示两级分组分类器(classifier)的实施方案的示意图。
图7是图示用于两级分组分类的方法的实施方案的框图。
图8是图示示例性分类数据库的一部分的示意图。
图9是图示用于两级分组分类的方法的另一个实施方案的框图。
图10是图示由多条规则组成的分类数据库的实施方案的示意图。
图11A-11B是图示将分类数据库组织成多个规则集的实施方案的示意图。
图12A-12C是图示两个部分重叠的过滤器的实施方案的示意图。
图13A-13C是图示两个完全重叠的过滤器的实施方案的示意图。
图14是图示在源地址和目的地址空间中两个并行查找的实施方案的示意图。
图15是图示分类数据库的过滤器中不存在的过滤器(non-existent filter)的结构的示意图。
图16A是图示第一分类级数据结构的实施方案的示意图。
图16B是图示并行的最长前缀(prefix)匹配查找表的实施方案的示意图。
图16C是图示图16A的主查询表的实施方案的示意图。
图17是图示第二分类级数据结构的实施方案的示意图。
图18是图示用于两级分组分类的方法的实施方案的框图,所述两级分组分类使用最具体的过滤器匹配和传输层共享。
图19是图示包括宽过滤器(wide filter)的过滤器数据库的实施方案的示意图。
图20A是图示第一分类级数据结构的另一个实施方案的示意图。
图20B是图示并行的最长前缀匹配查找表的另一个实施方案的示意图。
图20C是图示用于两级分组分类的方法的另一个实施方案的框图,所述两级分组分类使用最具体的过滤器匹配和传输层共享。
图21是图示用于创建和/或更新两级分类数据结构的方法的实施方案的框图。
图22是图示用于进行两级分组分类的系统的实施方案的示意图。
图23是图示容器的项的实施方案的示意图。
图24是图示图16B的并行最长前缀匹配查找表的另一个实施方案的示意图。
图25是图示用于进行两级分组分类的系统的另一个实施方案的示意图。
图26是图示在图25中所示的处理设备的实施方案的示意图。
图27是图示分类引擎的实施方案的示意图。
图28是图示用于使用最具体的过滤器匹配和传输层共享进行两级分组分类的方法的再进一步的实施方案的框图。
具体实施例方式
本文中公开了分组分类器的实施方案。下面在实现分组转发器(forwarder)(例如防火墙、基于QoS的转发器等等)的路由器环境中描述所公开的分组分类器的实施方案。但是,应该理解,所公开的实施方案在应用中不受此限制,此外,下面文字以及附图中所描述的分组分类器的实施方案可以可应用于任何设备、系统和/或需要分组分类或其他通信分类的环境中。
图1中图示网络100的实施方案。网络100包括具有分组转发器201的路由器200。路由器200(和分组转发器201)可以实现指定的安全策略、QoS转发和/或资源预留,以及其他期望的基于策略的转发方案。为了区别属于不同流的分组和/或区别与不同流量类别相关联的分组,路由器200还包括分组分类器600,所述分组分类器600包括被设计为实现期望的转发策略的规则组。下面更详细地描述分组分类器600的实施方案。路由器200(以及分组转发器201和分组分类器600)可以被实现在任何合适的计算系统或设备(或设备的组合)上,并且下面参照图2和相关文字描述了路由器200的一个实施方案。应该理解,路由器200可以包括其他组件(例如调度器(scheduler)、流量控制器等等),为了明晰和易于理解,所述其他组件已经从图1中省略。
路由器200通过多条链路130(包括链路130a、130b…,130n)与多个节点(node)110和/或多个子网(subnet)120耦合。节点110包括任何可寻址设备。例如,节点110可以包括计算机系统或其他计算设备,例如服务器、桌面型计算机、膝上型计算机或手持式计算设备(例如个人数字助理或PDA)。子网120可以包括其他节点的集合,并且子网120还可以包括其他路由器和交换机。链路130a-n中的每一条都可以被建立在合适的介质上,例如无线、铜线、光纤或它们的组合,以支持通过任何合适的协议进行的信息交换,所述协议例如TCP/IP(传输控制协议/因特网协议)、HTTP(超文本传输协议)等等。
网络100可以包括任何类型的网络,例如局域网(LAN)、城域网(MAN)、广域网(WAN)、无线LAN(WLAN)或其他网络。路由器200还将网络100与其他网络(或其他多个网络)5耦合,所述其他网络例如因特网和/或其他LAN、MAN、LAN或WLAN。路由器200可以通过任何合适的介质使用任何合适的协议(例如TCP/IP、HTTP等)与所述其他网络5耦合,所述介质包括无线、铜线和/或光纤连接。
应该理解,图1中所示的网络100是要表示这样的系统的示例性实施方案,并且系统100可以具有任何合适的配置。例如,网络100可以包括额外的节点110、子网120和/或其他设备(例如交换机、路由器、网络中心(hub)等等),为了易于理解,所述额外的节点110、子网120和/或其他设备从图1中被省略。此外,应该理解,网络100可以不包括图1中所示的所有组件。
在一个实施方案中,路由器200包括任何合适的计算设备,在所述计算设备上可以(以硬件、软件、或硬件和软件的组合)实现分组分类器600。这样的计算系统的实施方案在图2中图示。
参照图2,路由器200包括总线205,各种组件耦合到所述总线205。总线205是要表示一种或更多种将路由器200的组件互连的总线的集合,所述一种或更多种总线例如系统总线、外设部件接口(PCI)总线、小型计算机系统接口(SCSI)总线等等。将这些总线作为单条总线205来表示是为了易于理解,并且应该理解路由器200不受此限制。本领域普通技术人员将意识到,路由器200可以包括任何合适的总线体系结构,并且可以包括数量的总线以及总线的组合。
与总线205耦合的是处理设备(或多个设备)300。处理设备300可以包括任何合适的处理设备或系统,包括微处理器、网络处理器、专用集成电路(ASIC)或现场可编程门阵列(FPGA),或类似设备。下面在图3和相关文字中图示了处理设备300的实施方案。应该理解,尽管图2示出单个处理设备300,但是路由器200可以包括两个或更多个处理设备。
路由器200还包括与总线205耦合的系统存储器210,所述系统存储器210包括例如任何合适类型和数量的随机访问存储器,例如静态随机访问存储器(SRAM)、动态随机访问存储器(DRAM)、同步DRAM(SDRAM)或双倍数据率DRAM(DDRDRAM)。在路由器200的操作期间,操作系统(或操作系统集)214、分组分类器600以及其他程序218可以驻留在系统存储器210中。在图2的实施方案中,如下面所描述的,分组分类器的一部分——即分组分类器的第一级600a(级1分组分类器)——包括可以驻留在系统存储器210中的软件例程(routine)集,而分组分类器的另一部分——即分组分类器的第二级600b(级2分组分类器)——以硬件实现。但是,应该理解,图2的实施方案仅仅表示所公开的分组分类器的一个实现,并且所公开的分组分类器可以以任何合适的软件和/或硬件配置实现。例如,在另一个实施方案中,第二分类级600b可以包括驻留在系统存储器210(并且可能存储在储存设备230中)中的软件例程集。
路由器200还可以包括与总线205耦合的只读存储器(ROM)220。在操作期间,ROM220可以存储用于处理设备的临时指令和变量。路由器200还可以包括与总线205耦合的储存设备(或多个储存设备)230。储存设备230包括任何合适的非易失性存储器,例如硬盘驱动器。分组分类器600(例如分组分类器600的第一级600a),以及操作系统214和其他程序218(例如分组转发器201的软件实现)可以被存储在储存设备230中。此外,用于访问可移除储存介质(例如软盘驱动器或CD ROM驱动器)的设备240可以与总线205耦合。
路由器200可以包括与总线205耦合的一个或更多个输入设备250。普通输入设备250包括键盘、诸如鼠标的定点设备,以及其他数据录入设备。一个或更多个输出设备260也可以与总线205耦合。通用输出设备包括视频显示器、打印设备、音频输出设备以及状态指示器(例如LED)。
路由器200还包括与总线205耦合的网络/链路接口270。网络/链路借款270包括任何合适的能够将路由器200与所述其他网络(或多个网络)5耦合并且能够将路由器200与链路130a-n中的每一条耦合的硬件、软件、或软件和硬件的组合。
应该理解,图2中图示的路由器200是要表示这样的设备的示例性实施方案,并且该系统可以包括很多额外的组件,为了清晰和易于理解,所述额外的组件被省略。作为实施例,路由器200可以包括DMA(直接存储器访问)控制器、与所述处理设备300相关联的芯片组、额外的存储器(例如缓存存储器),以及额外的信号线和总线。此外,应该理解,路由器200可以不包括图2中所示的所有组件。
在一个实施方案中,分组分类器600或分组分类器的一部分包括在计算设备上运行的指令集(即软件应用),所述计算设备例如图2的路由器200或其他合适的计算设备。指令集可以以本地的方式被存储在储存设备230(或其他合适的程序存储器)中。可替换地,所述指令可以被存储在远程储存设备(图中未示出),并且通过网络100(或通过另一网络5)来访问。在操作期间,指令集可以在处理设备300上被执行,其中所述指令(或其一部分)可以驻留在系统存储器210中。
在另一个实施方案中,分组分类器600(或分组分类器的一部分)包括存储在机器可访问介质上的指令集,所述机器可访问介质例如磁介质(例如软盘或磁带)、光可访问盘(例如CD-ROM盘)、闪存存储器设备等。为了在例如图2的路由器200上运行分组分类器600,用于访问可移除储存介质的设备240可以访问所述机器可访问介质上的指令,并且随后所述指令可以在处理设备300中被执行。在该实施方案中,指令(或其一部分)可以被再次下载到系统存储器210中。
在再一个实施方案中,分组分类器600或分组分类器的一部分以硬件实现。例如,分组分类器600(或其一部分)可以用内容可寻址存储器(CAM)来实现。在又一个实施方案中,分组分类器600可以用硬件和软件的组合来实现。
在一个下面将详细描述的特定实施方案中,分组分类器600包括两级分组分类系统,并且该两级分类方案既可以以硬件实现又可以以软件实现。两级分组分类器包括第一级600a和第二级600b(见图2)。在一个实施方案中,第一级600a以软件实现,并且第二级600b以硬件实现。
如之前注意到的,在图3和相关文字中图示处理器设备300的实施方案。但是,应该理解,图3中所示处理设备300仅仅是处理设备的一个实施方案,所公开的分组分类器600的实施方案可以被实现在所述处理设备上。本领域普通技术人员将意识到,所公开的分组分类器600的实施方案可以被实现在很多其他类型的处理系统和/或处理器体系结构上。
现在参照图3,处理设备300包括本地总线305,各种功能单元耦合到所述本地总线305。总线305是要表示一种或更多种将处理设备300的各种功能单元互连的芯片上(on-chip)总线的集合。将这些本地总线305表示为单条总线305是为了易于理解,并且应该理解,处理设备300不受此限制。本领域普通技术人员应该意识到,处理设备300可以包括任何合适的总线系统结构,并且可以包括任意数量的总线和总线的组合。
核心(core)310和多个处理引擎(engine)320(例如处理引擎320a、320b…320k)与本地总线305耦合。在一个实施方案中,核心310包括可以执行操作系统214的通用处理系统。核心310还可以控制处理设备300的操作,并且可以执行各种管理功能,例如向处理引擎320分发用于执行的指令。所述处理引擎320a-k中的每一个都可以包括任何合适的处理系统,并且每一个都可以包括算术逻辑单元(ALU)、控制器以及多个寄存器(用于在读/写操作中存储数据)。此外,在一个实施方案中,每个处理引擎320a-k提供多个执行线程(例如四个)。
同样与本地总线305耦合的是芯片上存储器子系统330。尽管芯片上存储器子系统300被示为单个单元,但是应该理解它可以——并且在实践中可能的确——包括多个不同的存储器单元和/或存储器类型。例如,这样的芯片上存储器可以包括SDRAM、SRAM和/或闪存存储器(例如FlashROM)。应该理解,除了芯片上存储器以外,处理设备300可以与芯片外(off-chip)存储器(例如ROM 220、芯片外缓存(cache)存储器等等)耦合。
处理设备300还包括与本地总线305耦合的总线接口340。总线接口340提供与路由器200的其他组件(包括总线205)的接口。为了简明,总线接口340被示为单个功能单元;但是应该理解,在实践中,处理设备300可以包括多个总线接口。例如处理设备300可以包括PCI总线接口、IX(因特网交换)总线接口等等,并且总线接口340是要表示一种或更多种这样的接口的集合。
应该理解,参照图3所图示和描述的处理设备300的实施方案仅仅是可能发现与所公开的分组分类器的实施方案一起使用的处理设备的一个实施例,并且处理设备300可以包括除图3所示组件之外的其他组件,为了明晰和易于理解,所述其他组件被省略。例如,处理设备300可以包括其他功能单元(例如指令解码单元、地址翻译单元等)、热管理系统、时钟电路、额外的存储器以及寄存器。此外,应该理解处理设备可以不包括图3中所示的所有部件(element)。
现在参照图4,所示为可以在路由器200处(从其他网络5)接收的分组400的实施例。分组400包括头部410和有效载荷(payload)(或数据)450。头部410可以具有任何合适的格式,并且图4中图示的分组400示出与TCP/IP协议相关联的头部的实施例。例如,参见因特网工程任务组请求评论(IETF RFC)791,Internet Protocol(因特网协议)(1981),以及IETF RFC 793,Transmission Control Protocol(传输控制协议)(1981)。在图4中,头部140包括多个字段,所述多个字段包括字段420a、420b…420x。通常,字段420a-x包括关于分组400的标识信息。以实施例的方式,头部410可以包括协议420i(例如TCP)、源地址420k、目的地址420j、源端口420m以及目的端口420n。每一个源地址和目的地址420k、420i可以包括三十二(32)个位(bit),每个源端口和目的端口420m、420n可以包括十六(16)个位,每个协议420i可以包括八(8)个位。本领域普通技术人员应该意识到,这些仅仅是可以被包括在分组的头部中的信息类型的一些实施例,并且分组头部410可以按照手边具体的硬件和/或应用的要求包括任何信息。此外,应该理解,分组的格式不限于结合图4所示和所描述的格式(例如头部字段的宽度可以变化、字段的类型和数量可以变化等等)。
在本文中通信被一般性地称作“分组”。但是,应该理解,所公开的实施方案可应用于任何类型的通信(例如分组、信元(cell)、帧(frame)等等),而与格式和内容无关。
参照图5A,图示分组分类规则500的实施方案。一般地,规则500指明支持特定流的准则组,满足所述准则的分组属于所述特定的流。规则500包括多个字段,包括字段510a(FIELD1)、510b(FIELD2)、…510n(FIELDN)。规则可以包括任何合适数量的字段510a-n,并且在本文中规则中字段的数量被称作维数(即规则500具有的维数为N)。在一个实施方案中,每个字段510a-n对应于分组的头部中的字段,例如源地址或目的地址。但是,在其他实施方案中,规则的组成部分(component)510a-n可以包括其他信息,例如应用头部字段、链路标识信息、日期时间(time-of-day)等等。一般地,如果对于每个字段510a-n来说,分组头部中的对应字段与规则的字段匹配,则该分组与规则500“匹配”(分类规则的字段通常被表示为值的范围,并且如果某个值被包括在对应此规则中某个字段的范围内,则该值与该字段匹配)。规则500还包括要被应用到每个匹配该规则的分组上的相关动作520(例如接受、阻挡等等)。规则500还与优先级530相关联。
参照图5B,图示分组分类规则的另一个实施方案501。规则510包括源地址字段510a和目的地址字段510b,以及多个传输层字段510c。作为实施例,传输层字段510c可以包括协议515a、源端口515b和目的端口515c。传输层字段510c不限于前面提到的字段,并且传输层字段510c可以包括其他字段515d-k(或者它可以包括更少的字段)。其他可能的传输层字段包括例如诸如TCP SYN标志(flag)和RSVP头部字段(参见例如IETF RFC2205,Resource Reservation Protocol(RSVP)-Version l Functional Specification(资源预留协议(RSVP)-版本1功能规范)(1997))的协议字段等等。规则510还包括相关动作520和优先级530。
图5C中图示的为图5B中示出的规则的实施例。图5C的规则502指明源IP(因特网协议)地址510a等于“128.128.*”,目的IP地址510b等于“128.67.120.84”,协议510c等于“TCP”,源端口510d等于“80”,目的端口510e等于“*”,其中字符“*”代表“通配符(wild card)”(即任何值都能够与通配符匹配)。动作540是“阻挡(block)”(即任何满足该规则的分组都不被允许),并且规则502具有等于“2”的优先级540。当然,应该理解,图5C仅仅呈现出规则的一个实施例,并且规则可以包括任何合适的头部字段数量和类型(即规则可以是任意维的)。
规则的每个字段都可以被表示为精确匹配(例如源端口等于“80”)、前缀(例如源地址为“128.128.*”)或范围说明(例如源端口“≤1023”)。但是,一些范围(例如“>1023”的源端口)不能用前缀来表示,并且这样的表达式可以被分解为一组前缀。例如范围“>1023”可以用下面一系列的前缀(二进制格式)来描绘“000001**********”;“00001***********”;“0001************”;“001*************”;“01**************”;以及“1***************”。因此,具有字段“>1023”的规则可以被扩展为六个不同的规则,每个规则对应这六个不同的前缀中的每一个,所述六个不同的前缀组成范围说明“>1023”。在此应该注意,一般来说,K位的范围可以被分解为最多(2K-2)个前缀。
图6中所示为分组分类器600的实施方案。分组分类器600将分类过程分裂成两个级。分组分类器600包括第一级600a(STAGE1)和第二级600b(STAGE2)。在第一级600a中,分组基于其网络路径被分类,并且在第二级600b中,分组基于一个或更多个其他字段(例如传输层字段)被分类。与第一级600a相关联的是逻辑610和数据结构1600,与第二级600b相关联的是逻辑620和数据结构1700。
第一级逻辑610包括任何合适的能够基于分组的网络路径对接收的分组进行分类的软件、硬件或软件和硬件的组合。在一个实施方案中,第一级逻辑610基于接收的分组的源地址和目的地址确定结果,并且该结果被提供给分类器的第二级600b。下面描述了基于分组的网络路径对分组进行分类的方法的各种实施方案。网络路径通常用源地址和目的地址(例如源IP地址和目的IP地址)来表示。但是,应该理解,网络路径的表示并不限于源-目的地址对,并且可以使用其他可替换的准则来标识网络路径,例如可以用多协议标签交换(MPLS)标签(参见例如IETF RFC 3031,Multiprotocol Label Switching Architecture(多协议标签交换)(2001))、源IP地址和目的多播组的组合等等来标识。第一级数据结构1600(在下面也将详细描述)可以被存储在任何合适的存储器中,包括SRAM、DRAM、SDRAM、DDRDRAM以及其他存储器类型。
第二级逻辑620包括任何合适的能够基于被包括在接收的分组的头部中的传输层字段(或其他字段)对接收的分组进行分类的软件、硬件或软件和硬件的组合。在一个实施方案中,第二级逻辑620从第一级接收分类的结果,并且基于该结果和接收的分组的其他字段(例如传输层字段)确定要应用于所述分组或要以其他方式执行的动作。下面描述了基于被包括在分组头部中的一个或更多个传输层字段(或其他字段)对分组进行分类的方法的各种实施方案。第二级数据结构1700可以被存储在任何合适类型的存储器中,例如CAM、SRAM、DRAM、SDRAM,或其他类型的存储器。第二级数据结构1700也在下面更详细地被描述。
如上面所提到的,在一个特定的实施方案中,分组分类器600以软件和硬件的组合实现。更具体地,第一分类级600a以软件实现,而第二分类级600b以硬件实现。在这个实施方案中,第一分类级600a可以包括指令集,所述指令集被存储在存储器(例如图2中图示的系统存储器210和/或图3中图示的芯片上存储器子系统330)中,并且在处理设备(例如图3的处理设备300)上被执行,而第二级600b可以用CAM(或其他硬件配置)来实现。
在图7中进一步图示前面提到的可以被实现在图6的两级分组分类器600上的两级分类方案,图7示出用于两级分组分类的方法700的实施方案。参照图7中的框710,接收到分组,并且如框720所阐述的,基于所述分组的网络路径来对所述分组进行分类。一般地,分组的网络路径被表示为包括在分组的头部中的源地址和目的地址。然后,基于被包括在接收的分组的头部中的一个或更多个其他字段对分组进行分类,这在框730中阐述。基于两级分类的结果(参见框720、730)识别出最高优先级动作,并且将该动作应用于所述分组,如框740中所阐述。
在因特网以及很多其他大的网络中,通常在整个网络中存在很多可能的路由,但是存在着相对少的应用。因此,遵循这样的规则,不同的网络路径的数量一般远远大于应用的数量。这些观察是通过对实际分类数据库的研究得出的,这表明在分类规则集中找到的源-目的地址对数量一般远远大于其他字段的数量(例如诸如端口数量和协议的传输层字段)。这些研究还表明很多不同的源-目的地址对使用相同的传输层字段(或其他)集,并且与所述集中每个成员(member)相关联的相对优先级和动作在所述的集的每次发生中一般都是相同的。此外,每个集中的项数一般较小。
图8中图示分类数据库中的源-地址对常规地使用相同的传输层字段集的事实。参照图8,示出示例性分类数据库800。分类数据库800包括多个分类规则,每个规则包括源IP地址810a、目的IP地址810b、协议810c、源端口810d和目的端口810e,以及相关联的动作820和绝对优先级830a。图8中示出两个规则组801、802,并且第一组的每条规则具有相同的网络路径,如源和目的IP地址810a-b所表示的,第二组的每条规这具有相同的网络路径(但是与第一组的网络路径不同)。在图8中还示出规则组(801或802)内的每条规则的相对优先级830b。尽管两个规则组801、802各自具有不同的源-目的地址对,但是这些规则组共享相同的传输层字段集、动作和相对优先级(即规则组801的协议、端口说明、动作和属性对于组802重复)。在本文中,(一个或更多个)传输层字段集、动作和相对优先级的组合被称为“三元组(triplet)”。
参照图6,在分组分类的第一级600a中,N维分类问题被降低到两维问题,因为第一级中的分类可以基于源地址和目的地址被执行,这大大地简化了分类的该级。尽管第二级600b可以包括基于任意数量字段(例如三个或更多个)的分类,但是通过利用前面提到的现实世界的分类数据库的特性可以相当地降低分类问题的复杂度。具体来说,通过利用很多源-目的地址对共享相同的三元组组成的组(即传输层字段集、动作和相对优先级),需要检查的项数的数量以及存储器访问次数可以被实质地减少。在本文中,将多个源-目的地址对与一组不同的传输层(或其他)字段集——即因为这些源-目的地址对中的每一个使用相同的三元组集——相关联的概念被称为“传输层共享”(“TLS”)。尽管传输层字段组潜在地可以被多个源-目的地址对共享,但是每个独特的传输层字段组可以被存储一次,由此降低分组分类系统的储存需求。
如上面注意到的,通过将多维分类问题降低到两维分类问题,简化了两级分类方案的第一级600a。但是,有可能——并且在实践中极有可能——分组与分类数据库中的多条规则匹配,并且因此第一级600a将返回多条匹配。多条匹配可能发生,至少部分是由于分类数据库中所有规则的源-目的对的重叠性质,其次是由于源-目的对可以与任意优先级相关联。寻找所有可能的匹配规则可能大大地增加第一分类级中所需的存储器访问次数。此外,当从第一分类级返回多条匹配时,合并分类的第一级600a和第二级600b之间的结果变得困难。因此,在另一个实施方案中,为了简化分组分类的第一级600a并增加其效率,从第一级返回单个、最具体的匹配。在一个实施方案中,“最具体的匹配”是指这样的匹配,它提供最大量的关于分组的网络路径的信息(例如,对于IP网络,最具体的匹配是覆盖分组的所有过滤器的交叉)。在本文中,确定并从第一分类级600a返回单个匹配过滤器的操作被称为“最具体的过滤器匹配”(“most specific filter”或“MSFM”)。
参照图9,图示用于两级分组分类的方法900的另一个实施方案。用于两级分组分类的方法900实现传输层共享和最具体的过滤器匹配。参照图9的框910,接收到分组。如框920所阐述的,在分类的第一级,基于所述分组的源和目的地址来对该分组进行分类,以寻找单个、最具体的匹配。在框930所阐述的分类的第二级中,基于一个或更多个使用传输层共享的传输层字段来对分组进行分类。如框940所阐述的,基于分类的两级的结果,确定最高优先级的动作,并将此动作应用于该分组。应该理解,在另一个实施方案中,在第一级使用最具体的过滤器匹配而在第二级不使用传输层共享,然而在进一步的实施方案中,在第二级使用传输层共享而在第一级不使用最具体的过滤器匹配。
现在将更详细地描述最具体的过滤器匹配(MSFM)和传输层共享(TLS)。描述将以对TLS的描述开始,随后描述MSFM。
典型的分类数据库包括规则列表。这在图10中图示,图10示出包括多条规则1005的分类数据库1000,所述多条规则1005包括规则1005a、1005b,…,1005y。规则1005a-y中的每一条包括例如源地址1010a、目的地址1010b和一个或更多个传输层字段1010c(或其他字段),以及相关联的动作1020和优先级1030。如之前注意到的,对于每条规则1005,传输层字段1010c、动作1020和优先级1030的组合可以被称为“三元组”1040。如上面讨论的,典型的分类数据库包括比之源-目的对来说相对少的独特的传输层字段集,并且多个源-目的对通常共享典型的分类数据库中的传输层字段集组成的相同的组(参见图8和相关文字)。为了利用分类数据库的该特性,数据库1000的规则1005被分组为规则集。规则集包括那些具有相同的源和目的地址对的数据库的规则。例如,参照图8,组801中的那些规则可以包括第一规则集(即它们共享源地址“128.128.10.5”和目的地址“172.128.*”),并且组802中的那些规则可以包括第二规则集(即它们共享源地址“128.128.10.7”和目的地址“172.128.*”)。
在图11A中图示将分类数据库分割成多个规则集的实施例。参照图10,分类数据库1100已经被组织成多个规则集1150,包括规则集1150a、1150b,…,1150q。每个规则集1150a-q包括一条或更多条规则,其中给定规则集1150中的每条规则共享与该规则集中的所有其他规则相同的源和目的地址对。如图11A中所示,在一个实施方案中,数据库1100的规则被排序,从而每个规则集1150a-q的规则占用数据库中连续的空间。同样,规则集1150内的规则可以占用连贯的(consecutive)优先级级别;然而,在另一个实施方案中,规则集可以由不占用连贯的优先级级别的规则组成。可以认为规则集1150a-q各自与过滤器1160相关联(即规则集1150a与过滤器1160a相关联,规则集1150b与过滤器1160b相关联,等等),其中用于规则集1150的过滤器1160包括用于该规则集的源-目的对。应该理解,图11A的实施方案仅仅是分类数据库的规则可以采用来组成规则集的方式的一个实施例。
图11A中的每个规则集1150(以及每个对应的过滤器1160)将包括相关联的三元组组成的组,每个三元组包括多个传输层(或其他)字段、动作和相对优先级。再次回到图8,每个规则集801、802包括三个与它相关联的三元组组成的组,并且在图8的实施例中,正巧每个规则集801、802包括相同的三元组组成的组(即规则集801、802的源-目的对分别共享相同的三元组)。在本文中,与任何规则集相关联的三元组和过滤器组成组,所述组被称为“容器(bin)”,并且在这种情况下是“小容器”(区别于下面描述的“大容器”)。因此,如图11A所示,每个规则集1150和对应的过滤器1160与三元组的小容器1170相关联(即规则组1150a和过滤器1160a与小容器1170a相关联,等等)。在被包括在规则集中的多条规则间共享由各种传输层字段集组成的组(即小容器)导致传输层共享的概念。
与图11A的数据库1100相关联的小容器1170在图11B中进一步图示。参照图11B,数据库1100包括一批与之相关联的小容器1170。每个小容器1170包括一个或更多项1172,每个项1172包括一个或更多个传输层(或其他)字段集1174、相对优先级1175和动作1176(即三元组)。如图11B中所示,小容器1170可以进一步从逻辑上组织成“大容器”1180,每个大容器1180包括一批两个或更多个小容器1170。下面将描述大容器1180的创建。
下面将描述用于基于传输层字段分类分组的第二级数据结构1170。现在我们将注意力转向对最具体的过滤器匹配的讨论。
如之前提示的,当基于分组的网络路径分类分组时,极有可能分组会与分类数据库中的多条规则匹配。为了增加第一分类级600a的效率——例如为了降低所需要的存储器访问次数——并且为了简化将第一级的结果与第二分类级600b合并的操作,需要从第一级返回单个、最具体的匹配。
应该注意到在我们的讨论当中,在这一点上使用术语“过滤器”而不使用“规则”,因为使用在这里,术语“过滤器”是指与规则集相关联的源-目的地址对(参见图11A-11B和上面的相关文字)。但是,应该理解,术语“过滤器”和“规则”通常是可互换使用的。
基于分组的源和目的地址被分类的分组可以匹配多个过滤器,至少部分是由于分类数据库中的过滤器的重叠性质。这在图12A到12C以及图13A到13C中示意性地图示。首先参照图12A,可以认为规则的源和目的地址是两维空间中的一个区域(即矩形、线或点中的任意一种)。在图12A中,分类数据库的第一过滤器1210占用被标记为F1的矩形所示的两维空间。过滤器F1与三元组组成的小容器1215(B1)相关联。参照图12B,数据库的第二过滤器1220(F2)也占用源和目的地址空间中的一个区域,并且该过滤器F2与由传输层字段组成的小容器1225(B2)。
在图12C中图示过滤器F1和F2两者,并且可以观察到由这两个过滤器重叠或交叉所定义的区域,F1和F2的交叉由标号1290指示。图12A-12C中图示的过滤器F1和F2被称为“部分重叠”。如果分组(P)1205具有的源-目的地址对落入过滤器F1和F2的交叉1290中,则该分组与两个过滤器匹配(即过滤器F1和F2至少包括由分组P定义的共同点)。同样的,分组P以及其他落入过滤器F1和F2的交叉中的分组与小容器B1和B2的并集相关联,所述小容器B1和B2分别与F1和F2相关联。在本文中,与两个或更多个过滤器的交叉相关联的小容器的并集被称为“大容器”。在图12C中,包括容器B1和B2的并集的大容器由标号1295指示。
过滤器还可以“完全重叠”,该场景在图13A到13C中图示。第一过滤器1310(F1)占用图13A中图示的两维空间中的区域,第二过滤器1320(F2)占用图13B中图示的空间中的区域。过滤器F1包括相关联的小容器1315(B1),并且过滤器F2包括相关联的小容器1325(B2)。接下来参照图13C,图示了过滤器F1和F2,并且这些过滤器在交叉1390处重叠(在该实例中交叉1390等于F2定义的区域)。因为F2定义的区域(以及交叉1390)被完全包括在过滤器F1的两维空间中,所以过滤器F1和F2被称为“完全重叠”。落入交叉1390的分组(P)1350与过滤器F1和F2两者匹配,并且该分组P(以及任何落入该交叉1390的分组)与大容器1395相关联,所述大容器1395由小容器B1和B2的并集组成。
从图12A-12C以及13A-13C中可以观察到,具有位于两个(或更多个)过滤器的交叉的源地址和目的地址的分组与两个过滤器匹配。为了达到从分类的第一级仅返回单个匹配的目标,所有过滤器的交叉都被包括在过滤器数据库(即第一级数据结构1600)中。此外,每个过滤器交叉都与构成该交叉的各个过滤器的传输层字段的并集相关联。换言之,如上所述,每个过滤器交叉都与包括两个或更多个小容器的并集的大容器相关联。理论上,将所有过滤器交叉添加到查找表中可能需要大的储存容量。但是,对实际分类数据库的研究表明,在实践中,存储过滤器交叉所需的额外容量远远小于理论上限。
为了基于分组的源和目的地址分类分组,问题变成查找分组所在的最小过滤器交叉的问题(或者如果分组不落在交叉,则简化为分组所在的过滤器)。为了找到这个最小的过滤器交叉,分类的第一级(两维分类问题)被分裂成两个一维的查找。这在图14中示意性地图示,图14图示第一维1410和第二维1420。在第一维1410中,将接收的分组的源地址与源地址查找数据结构1412的项进行比较,并且如果找到匹配,则返回索引1414(I1)。类似地,在第二维1420中,将分组的目的地址与目的地址查找数据结构1422的项进行比较,并且如果找到匹配,则返回第二索引1424(I2)。然后,两个索引1414、1424(I1和I2)被组合以形成关键字1430,所述关键字1430可以被用来查询另一个查找数据结构(例如希哈表)。在一个实施方案中,在第一维和第二维1410、1420的查找数据结构1412、1422上分别执行的查找是通过使用最长前缀匹配(LPM)来完成的。在再一个实施方案中,两个维1410、1420中的查找是并行执行的。人们相信,在源和目的维上使用并行和独立的查找会要求相对少的存储器访问次数,并且会提出合理的储存要求。
图14中图示的并行LPM查找方案将返回分组所在的最小的过滤器交叉,或是该方案将返回“不存在的”过滤器。不存在的过滤器包括一个过滤器的源地址和不同的过滤器的目的地址。不存在的过滤器是由于独立地执行对源和目的地址的查找而导致的(尽管对于一个实施方案来说,这些查找是并行执行的)。
参照实施例可以最好地理解不存在的过滤器的概念。参照图15,数据库包括由字母A、B、C、D和E指示的五个过滤器,并且这些过滤器在两维地址空间1500中图示。过滤器A覆盖整个源和目的地址空间,并且该过滤器可以用“*,*”来指示(即它在源和目的地址中都包括通配符“*”)。过滤器B的形式为“*,Y*”,并且这种形式(即“*,Y*”或“X*,*”)的过滤器被称为“部分指明的过滤器(partially specified filter)”。过滤器C、D和E被称为“完全指明的过滤器(fully specified filter)”,并且这些过滤器的形式为“X*,Y*”。以实施例的形式,过滤器“SRC ADD 128.172.*/DST ADD*”是部分指明的过滤器,而过滤器“SRC ADD 128.172.*/DST ADD 128.128.*”是完全指明的过滤器。过滤器A、B、C、D和E的源和目的地址的组合形成二维空间中的十二个不同的区域。第一组五个区域与过滤器A、B、C、D和E对应。由R1到R7指示的其他七个区域(用虚线图示)与不存在的过滤器对应。区域R1到R7是由一个过滤器的目的地址和另一个过滤器的源地址形成的,并且如上面注意到的,这些区域是由于独立地执行对源和目的地址的查找而创建的。例如,区域R4是通过组合过滤器E的源地址和过滤器D的目的地址创建的,这就产生了不存在的过滤器。图15中图示的图被通称为交叉组合(cross-producting)表。
为了确保图14的并行查找方案返回结果,看起来所有不存在的过滤器R1到R7都需要被录入到过滤器数据库中。多项现有技术(例如交叉组合表方案)建议将所有不存在的过滤器添加到过滤器数据库中。但是,对实际分类数据库的观察表明,不存在的过滤器的数量可能非常大,并且因此需要最小化被添加到过滤器数据库中的不存在的过滤器的数量。因此,在一个实施方案中,仅仅在分类数据结构中包括所有可能的不存在的过滤器的子集。下面更详细地描述了避免将所有可能的不存在的过滤器添加到分类数据结构中(以及不存在的过滤器的子集代替所有可能的不存在的过滤器被放置到数据结构中)的方式。
参照图15,可以观察到区域R1到R7中的很多可以被聚合成少量的其他过滤器。具体来说,可以完全覆盖区域R1、R3和R4的最小的过滤器是过滤器A,也即整个两维空间。对于任何分组的源或目的地址落入区域中的一个的搜索将返回被包括在区域A中的过滤器的源或目的地址。因此,不存在的过滤器R1、R3和R4可以被聚合到过滤器A中,并且可以从过滤器数据库中移除针对R1、R3和R4的各个项,假设存在针对过滤器“*,*”的单独的项。类似地,过滤器B完全覆盖区域R5、R6和R7,并且这些不存在的过滤器可以与针对过滤器B的项聚合。对于任何位于区域R5、R6和R7中的一个的分组来说,对于该分组的目的地址的搜索将返回过滤器B的目的地址。因此,不需要针对R5、R6和R7的单独的数据库项,因为在分类数据库中提供了针对部分指明的过滤器B的单独的项。
但是,区域R2不能被合并到任何其他过滤器中。由过滤器D的源地址和过滤器E的目的地址形成的区域R2被完全指明的过滤器——即过滤器C——完全覆盖。不存在的过滤器R2与其他不存在的过滤器的区别在于,它是唯一一个被完全包括在完全指明的过滤器中的区域。不存在的过滤器R2不能与过滤C或任何其他项聚合,并且针对该过滤器的项必须被放置到过滤器数据库中。在本文中,诸如R2的不存在的过滤器也被称为“指示器过滤器”。指示器过滤器与这样的传输层字段相关联,所述传输层字段对应于完全覆盖该指示器过滤器的最小可能过滤器交叉。以实施例的方式,对于图15中图示的过滤器集来说,完全覆盖区域R2的过滤器是过滤器A和C,并且这两个过滤器的交叉简单地为过滤器C。因此,指示器过滤器R2所关联的传输层字段集与过滤器C所关联的传输层字段集相同。
一些额外的观察帮助了第一级数据结构1600的发展。一般来说,在分类数据库的过滤器之间存在三种部分重叠的来源,包括(1)在部分指明的过滤器(即形式为“X*,*”或“*,Y*”的过滤器)之间创建的部分重叠;(2)在完全指明的过滤器(即形式为“X*,Y*”的过滤器)之间创建的部分重叠;以及(3)在部分指明的过滤器和完全指明的过滤器之间创建的部分重叠。注意到,每个在源维(source dimension)中具有通配符的部分指明的过滤器与所有在目的维中具有通配符的部分指明的过滤器创建部分重叠,并且由这样的部分指明的过滤器的交叉创建的部分重叠的数量等于分别在每个源和目的维中的部分指明的过滤器的数量的积。理论上,由部分指明的过滤器的交叉引起的部分重叠的数量可能很大。另一方面,完全指明的过滤器相互之间创建数量不多的部分重叠,这是由于在实践中大多数完全指明的过滤器是两维地址空间中的直线段或点。
如之前的段落所提出的,部分指明的过滤器通常是典型分类数据库中的过滤器中部分重叠的主要来源。但是,部分指明的过滤器常常代表分类数据库中所有过滤器的总数量的小部分,因为网络管理员常常指明应用于特定地址域间交换的流量的规则。因此,在实践中,由部分指明的过滤器引起的部分过滤器重叠的数量比理论上最坏的情况显著地少。此外,如上面所注意到的,完全指明的过滤器在过滤器间创建少量部分重叠。因此,在实际分类数据库中出现的部分重叠的数量一般比理论上预期发生的数量少得多。
在这一点上,应该注意到我们没有关注在图13A-13C中图示的完全重叠过滤器。如上面所阐述的,在一个实施方案中,最长前缀匹配(LPM)被用于在MSFM中执行的两个一维搜索中的每一个。如果过滤器完全重叠,这些过滤器的交叉等于这些过滤器中的一个,并且LPM搜索将识别此过滤器。因此,在一个实施方案中,第一级数据结构1600不需要考虑完全重叠过滤器。
上面的观察和讨论(例如见图6-15和相关文字)介绍了可以用于构建第一级数据结构1600以及第二级数据结构1700的“建构模块(building block)”,现在描述这两种数据结构的实施方案。下面还要介绍搜索第一和第二级数据结构1600、1700以对分组进行分类(即识别要应用于所述分组的动作)的方法的实施方案。
现在参见图16A,图示第一级数据结构1600的实施方案。第一级数据结构1600包括并行LPM数据结构1601和转发表1602。如上面所注意到的,MSFM方案采用分别在源和目的地址上执行的两个一维查找,如上面关于图14所图示和描述的。因此,并行LPM数据结构包括源地址查找数据结构1610和目的地址查找数据结构1620。在一个实施方案中,源和目的地址查找数据结构1610、1620被实现为特里数据结构(trie data structure)。但是,本领域普通技术人员将意识到可以使用其他替换的数据结构来实现源和目的地址查找数据结构1610、1620。
在图16B中进一步示意性地图示并行LPM数据结构1601的实施方案。源地址查找数据结构1610包括多个项1612,每个项1612指明源前缀1614a、过滤器类型1614b以及索引值1614c(或其他标识符)。类似地,目的地址查找数据结构1620包括多个项1622,每个项1622指明目的前缀1624a、过滤器类型1624b以及索引值1624c(或其他标识符)。对于查找数据结构1610、1620来说,过滤器类型1614b、1624b指示项1612、1622是与完全指明的过滤器相关联还是与部分指明的过滤器相关联。当在并行LPM数据结构1601上执行搜索时,返回四个索引(或其他标识符),所述四个索引包括源地址查找数据结构1610中的与匹配完全指明的过滤器相关联的第一索引1691(I1)、目的地址查找数据结构1620中的与匹配完全指明的过滤器相关联的第二索引1692(I2)、源地址查找数据结构中的与匹配部分指明的过滤器相关联的第三索引1693(I3)以及目的地址查找数据结构中的与匹配部分指明的过滤器相关联的第四索引1694(I4)。如上面所注意到的,在一个实施方案中,在源和目的地址维中的查找以并行的方式执行。
与完全指明的过滤器相关联的头两个索引1691和1692(I1和I2)被组合以创建关键字1690。如下面将要描述的,与完全指明的过滤器相关联的关键字1690以及与部分指明的过滤器相关联的第三和第四索引1693、1694被用来搜索转发表1602。在此交界点(juncture)区分完全指明和部分指明的过滤器的理由是,匹配过滤器应该是部分指明的过滤器并且最长前缀匹配应该被用在分类的第一级中,正在找寻的部分指明的过滤器可能不被识别(即,识别的匹配源或目的前缀可以比实际匹配过滤器对应的前缀“长”)。
在一个实施方案中,如图16A中所图示,转发表1620包括主表1630和两个次表1640a、1640b。主表1630包括针对完全指明的过滤器、完全指明的过滤器的交叉以及指示器过滤器的项。再一次,指示器过滤器是由不同源-目的对的源和目的前缀形成的区域,并且所述区域不能和完全指明的过滤器或过滤器交叉聚合(例如参见图15,上面讨论的区域R2)。次表1640a-b中的一个包括针对在源维中具有通配符的部分指明的过滤器的项,而次表1640a-b中的另一个包括针对在目的维中具有通配符的部分指明的过滤器的项。次表1640a、1640b不包括指示器过滤器。如上面所注意到的,由一个过滤器的源(或目的)前缀和另一个过滤器的目的(或源)前缀创建一些区域可以与部分指明的过滤器聚合(参见图15,区域R5、R6和R7),并且针对这样的区域的项不需要被添加到主表中。
在图16C中图示主表1630的实施方案。参照此图,主表1630包括多个项1632,每个项包括关键字1637a以及一个或更多个容器指针1637b。由在并行LPM搜索(见图16B)中识别的第一和第二索引1691、1692(I1和I2)创建的关键字1690被用来搜索主表1630。如果关键字1690匹配主表的任意项1632的关键字1637a,则访问由此项中的容器指针1637b标识的容器,以寻找要应用于接收的分组的动作(例如最高优先级动作),下面将更详细的描述该过程。项1632可以指向一个小容器1670,或者可替换地,指向小容器组成的组——即包括对应于过滤器交叉的小容器的并集的“大容器”1680。注意到,在一些实施方案中,不是必须储存大容器1680,因为主表的对应项包括指向被包括在大容器中的所有小容器的指针,这发生在例如规则集是由占用连贯优先级级别的规则组成的情况下。但是,在其他实施方案中,可以储存大容器,如图16C中所描绘的,多个项1632可以指向或共享相同的小容器(或多个小容器)1670,这是传输层共享的结果。
次表1640a、1640b的每一个都与主表1630类似。但是,用于访问次表中的一个的关键字包括第三索引1693(I3),并且用于访问另一个次表的关键字包括第四索引1694(I4)。如果对主表1630的查询返回匹配则忽略次表1640a-b,并且主表的匹配项与最具体的匹配过滤器对应。但是,如果在主表中未找到匹配,则对次表1640a-b中的一个的查询可以返回匹配,并且该匹配项与最具体的匹配过滤器对应。如果对主表和次表1630、1640a-b的查询没有返回匹配,则将与整个两维过滤器空间对应的默认过滤器(即“*,*”)用作最具体的过滤器。
在一个实施方案中,主表1630和次表1640a、1640b被实现为哈希表。在该实施方案中,可以向关键字(即关键字1690,或第三和第四索引1693、1694)应用哈希函数来创建用于搜索主和次哈希表的搜索关键字。当然,应该理解,哈希表只代表可以实现主和次表1630、1640a-b的方式的一种实施例,并且可以使用其他替代的数据结构。
我们现在将注意力转向下一级数据结构1700,在图17中图示第二级数据结构1700的实施方案。第二级数据结构1700的构建是由下面讨论的多个概念指导的,首先,并且最重要的传输层共享允许第一级数据结构中多个项共享各种传输层字段集组成的组,并且更确切地,共享三元组组成的组,其中每个三元组包括一个或更多个传输层字段、动作、以及相对优先级(即与规则的绝对优先级相区别的规则集中的相对优先级)。因此,每个三元组成的组——即每个小容器——只需要被存储一次。其次,尽管与过滤器交叉相关联的两个或更多个小容器的并集在逻辑上被认为是大容器,但是大容器不需要被存储,因为第一级数据结构1600的主表和次表1630、1640a-b包括指向与一个项相关联的所有小容器的指针。再一次,在另一个实施方案中,可以存储大容器。通过传输层共享,第二级数据结构1700简化为被组织成小容器的三元组列表,并且由于传输层共享所提供的项数减少,相比于其他分类技术,第二级数据结构1700的存储器储存要求小。
参照图17,第二级数据结构1700包括多个三元组1710,每个三元组1710包括一个或更多个传输层(或其他)字段1719a、动作1719b以及相对优先级1719c。每个三元组1710与小容器1720相关联(即小容器1720a、1720b、…、1720k中的一个)。小容器1720a-k包括三元组1710组成的组,并且小容器存储所在的存储器位置可以通过对应的指针1725来识别(即通过对应的指针1725a来识别小容器1720a,通过对应的指针1725b来识别小容器1720b,等等)。如之前所述,容器指针1725a-k被存储在转发表1602中(参见图16A)。当在对第一级数据结构1600查询中识别出与小容器1720(或如果存储了大容器,则为大容器)相关联的指针1725时,将对应的小容器1720中的所有三元组与接收的分组进行比较。如果查找到至少一个匹配,则将与匹配三元组相关联的动作应用于接收的分组。在一个实施方案中,该动作具有的优先级为已经经历过的最高优先级。
在一个实施方案中,第二级数据结构1700以内容可寻址存储器(CAM)实现,例如三重CAM。在实施方案中,CAM可以包括多个项,每个项与第二级数据结构1700的三元组1710中的一个相关联。在进一步的第二级数据结构1700以CAM实现的实施方案中,可以并行的搜索CAM的多个项(例如与一个或更多个小容器1720相关联的三元组1730)。
下面参照图18,图示分类分组的方法的实施方案,所述方法可以通过使用上面图1-17以及相关文字所图示的两级分组分类器来执行。参照图中的框1805,接收到分组。如框1810a和1810b所阐述的,可以在源地址和目的地址上执行查找(参见图14的条目1410、1412以及图16A的条目1610、1620)。在一个实施方案中,如图18所示,可以并行的执行对源地址和目的地址的查询。但是应该理解,这些查询可以不被并行地执行。基于源地址查询识别出与完全指明的过滤器相关联的最长前缀匹配(LPM)以及与部分指明的过滤器相关联的LPM,如框1815a所示。返回与匹配完全指明的过滤器相关联的索引I1以及与匹配部分指明的过滤器相关联的索引I3(参见图16B条目1691、1693)。类似地,基于对目的地址的查询识别出与完全指明的过滤器相关联的LPM以及与部分指明的过滤器相关联的LPM——参见框1815b——并且返回与匹配完全指明的过滤器相关联的索引I2以及与匹配部分指明的过滤器相关联的索引I4(参见图16B条目1692、1694)。
然后组合(例如级联)与匹配完全指明的过滤器相关联的两个索引I1和I2,以形成关键字(参见图16B条目1690),并且该关键字用于搜索主表(参见图16A和16C条目1630),如框1820a所阐述。参照框1820b和1820c,索引I3被用于搜索次表中的一个,而索引I4被用于搜索另一个次表(参见图16A条目1640a、1640b)。再一次,主表1630包括所有完全指明的过滤器和完全指明的过滤器交叉,以及不能与其他过滤器聚合的所有不存在的过滤器(即指示器过滤器)。次表1640a、1640b中的一个包括在源地址中具有通配符的部分指明的过滤器,并且另一个次表包括在目的地址中具有通配符的部分指明的过滤器,但是在次表中不包括指示器过滤器。在一个实施方案中,并行地执行对主表和次表1630、1640a-b的搜索,如图18所示。但是,在其他实施方案中,可以不并行地执行这些搜索。
参照框1825,将关键字(由I1和I2形成)与主表1630的每个项1632中的关键字1637a(参见图16C)进行比较。如果找到匹配,则访问匹配项中的容器指针1637b,如框1830中所阐述。可以以多种方式使用由I1和I2形成的关键字搜索主表。例如,在一个实施方案中,向关键字应用哈希函数并且使用被实现为哈希表的哈希来搜索主表1630。
当在主表1630中找到匹配时,忽略次表1640a-b。如果在主表中未找到匹配,则在次表中的一个中寻找匹配——参见框1835——访问该次表的匹配项中的容器指针,这在框1840中图示。注意到次表中只有一个具有匹配项(如果在次表中的确找到匹配)。但是如果在主表和次表中任一个中都未找到匹配,则使用于整个两维地址空间对应的默认项,并且访问该项的相关联的容器指针,如框1845所阐述。在此交界点已经基于分组的网络地址对接收的分组进行了分类,并且过程转移到分类的第二级。
现在参照框1850,访问由容器指针中的一个标识的小容器(或者在一些实施方案中大容器)。将接收的分组的传输层字段与所访问的容器(参见图17)的每个项进行比较,以确定在所访问的容器中是否存在匹配项,如框1855中所阐述。如果所访问的容器包括匹配项——参见框1860——返回与该匹配项相关联的动作,如框1865中所阐述。参照框1870,随后可以将所返回的动作应用于所述分组。
如上所述,主表或次表中的一个中的项可以包括多个指针,每个指针标识小容器(换言之即该项与大容器相关联)。因此,在考虑了所访问的容器中的所有项之后(参见框1855),如果还没有识别匹配项(参见框1860),则过程将考虑其他还没有被考虑过的容器指针(或容器)(参见框1850)。如果存在要查询的额外的容器,则重复上述用于访问小容器的过程(即框1850、1855和1860)。因此,只要剩余有还没有被访问过的容器指针,则重复用于访问和搜索小容器的过程直到找到匹配。
现在返回图15,如之前所描述的,诸如R2的不能与其他过滤器聚合的区域——即“指示器过滤器”——被添加到主表1630(尽管没有一个被放置在次表1640a-b中)。完全指明的过滤器或过滤器交叉可以包括多个指示器过滤器。这在图19中图示,图19图示完全指明的过滤器(或过滤器交叉)1910以及多个其他的“较窄的”完全指明的过滤器(或过滤器交叉)1920。将一个完全指明的窄过滤器1920的源地址与另一个窄过滤器1920的目的地址组合——再一次,如上所述,由于对目的地址和源地址查找表的查询是独立执行而导致的结果——生成多个被完全包括在过滤器1910中并且因此不能与其他过滤器聚合的不存在的过滤器1930。因此,在一个实施方案中,将这些指示器过滤器1930放置在主表1630中。但是,在另一个实施方案中,对与任何给定的完全指明的过滤器相关联的指示器过滤器的数量设置上限。对于任何超过指示器过滤器的该指定上限的完全指明的过滤器或过滤器交叉来说,不将该过滤器或其相关联的指示器过滤器放置在主表1630中。超过指定上限的过滤器,例如图19中的完全指明的过滤器1910(包括相对多的指示器过滤器),可以被称为“宽”过滤器,因为这样的过滤器通常跨越宽的源地址和目的地址范围。
在图20A-20C中,进一步图示上述的实施方案。应该注意到图20A、20B和20C分别类似于图16A、16B和18,在图20A-20C的每一个中类似的部件具有相同的数字指示。上面对部件的描述在以下文字中对于某些部件不再重复。
首先参照图20A,超过指定的指示过滤器界限的那些过滤器——即宽过滤器被放置在单独的数据结构中,在本文中所述单独的数据结构被称为宽过滤器表1650。宽过滤器表包括针对每个宽过滤器的项。在一个实施方案中,宽过滤器表1650包括类似于交叉组合表(参见图15和19)的数据结构。对于大多数实际的分类数据库来说,希望宽过滤器的数量小。但是,因为宽过滤器可以潜在地在主表1630中创建大量项,所以将这些宽过滤器移动到单独的数据结构(可以用主表或次表并行的搜索)可以显著地提高分类过程的效率。
接下来参照图20B,在分类的第一级中,如之前所描述的,从对源和目的地址表1610、1620的查询分别返回四个不同的索引1691、1692、1693、1694(I1到I4)。第一和第二索引1691、1692对应于与完全指明的过滤器相关联的匹配源和目的前缀,而第三和第四索引1693、1694对应于与部分指明的过滤器相关联的匹配源和目的前缀,如上面也描述过的,在考虑宽过滤器的本实施方案中,对源和目的地址表1610、1620的查询还返回第五索引1695(I5)和第六索引1696(I6)。第五索引1695对应于与宽过滤器相关联的匹配源前缀,并且第六索引1696对应于与宽过滤器相关联的匹配目的前缀。注意,在源地址表1610和目的地址表1620的每一个中过滤器类型指示1614b、1624b现在表示该项是否与完全指明的过滤器、部分指明的过滤器、宽过滤器相关联。然后,组合第五索引1695和第六索引1696(I5和I6),已形成用于查询宽过滤器表1650的关键字2090,如下面所描述的。
图20C中图示用于两级分组分类的方法1800的另一个实施方案。图20C中所示的实施方案以大部分与之前参照图18描述的实施方案相同的方式进行,但是,图20C中所示的方法考虑了宽过滤器并且该实施方案使用宽过滤器表1650和以及第五和第六宽过滤器索引1695、1696,如上所述。
参照图20C,接收到分组(参见框1805),并且如框1810a、1810b阐述的,在源地址和目的地址上执行查找。基于源地址查询返回与完全指明的过滤器相关联的最长前缀匹配(LPM)、与部分指明的过滤器相关联的LPM、与宽过滤器相关联的LPM(参见图20B条目1691、1693、1695),如框1815a所示。再一次,I1与匹配完全指明的过滤器相关联,I3与匹配部分指明的过滤器相关联、I5与匹配宽过滤器相关联。类似地,根据对目的地址的查询,识别出与完全指明的过滤器相关联的最长LPM、与部分指明的过滤器相关联的LPM、与宽过滤器相关联的LPM-参见框1815b——并返回与匹配完全指明的过滤器相关联的索引I2、与匹配部分指明的过滤器相关联的索引I4以及与匹配宽过滤器相关联的索引I6(参照图20B条目1692、1694、1696)。
如之前所描述的,随后组合与匹配完全指明的过滤器相关联的两个索引I1和I2,以形成用于搜索主表的关键字,并且索引I3和I4被用于搜索次表,如框1820a、1820b和1820c所阐述的。此外,组合索引I5和I6,以形成关键字(参见图20B条目2090),并且该关键字被用于对宽过滤器表1650的查询,这在框1820d中阐述。在一个实施方案中,可以并行地执行对主表1630、次表1640a-b、以及宽过滤器表1650的搜索,如图20B中所示。但是在其他实施方案中,可以不并行地执行这些搜索。
参照框1825,将关键字(由I1和I2形成)与主表1630的每个项1632中的关键字1637a(参见图16C)进行比较,并且如果找到匹配,则访问匹配上中的容器指针1637b,如框1830中所阐述的。但是,在该实施方案中,如果在主表中未找到匹配,则过程转向宽过滤器表——参见框1885——并且将关键字(由I5和I6形成)与宽过滤器表中的每个项进行比较。如果在宽过滤器表中找到匹配,则访问宽过滤器表的匹配项中的容器指针,如框1890中所示。如果在主表和宽表中的任一个中都未找到匹配,并且在次表中的一个中找到匹配——参见框1835——则访问该次表的匹配项中的容器指针,如框1840中所阐述的。如果在主表、宽过滤器表或任意次表中未找到匹配,则使用对应于整个二维地址空间的默认项,并且访问该项的相关联的容器指针,如框1845中所阐述的。如果在主表1630中找到匹配,则忽略其他表,并且在主表中没有发生匹配,且在宽过滤器表1650中找到匹配的情况下,忽略次表1640a-b。基于被接收的分组的网络路径的分类完成,并且过程转移到分类的第二级。注意在图20C中未图示分组分类的第二级,因为第二级将以之前所描述的方式进行。
现在我们将注意力转向用于创建和/或更新第一和第二级数据结构的方法的实施方案。图21图示创建和/或更新用于上面所描述的二级分组分类过程的数据结构的方法2100的实施方案。应该注意到,图21中所描述的过程包括在分组分类之前(或者在一个实施方案中,在分组分类过程中)执行的预处理操作集。但是,相比于分组分类的处理,所公开的两级分组分类方案所需的创建和/或更新数据结构(例如第一和第二级数据结构1600、1700)将不那么频繁的被执行。因此,进行所公开的分类技术所需要的大量处理被沉重地提前加载(front-loaded)到一系列预处理操作,所述预处理操作需要被相对不频繁地执行。
现在参照图21中框2110,分类数据库中的规则(参见图10)被分组为规则集,其中每个规则集中的规则具有相同的源和目的地址(参见图11A和11B)。在一个实施方案中,规则集的规则占用连贯的优先级级别,而在另一个实施方案中,规则集的规则不占用相邻的优先级级别,如上面所注意到的。与每个规则集相关联的源-目的对被称为过滤器,如上面所注意到的。如框2120中所阐述的,与每个过滤器相关联的传输层(或其他)字段集,以及对应的动作和相对优先级被组织成小容器。
参照框2130,创建要用于对接收的分组的源和目的地址的并行LPM查询的源地址查找数据结构和目的地址查找数据结构(参见图16A和16B条目1601)。源地址查找数据结构包括针对数据库中每个过滤器的项,针对每个过滤器的项包括源前缀、过滤器类型指示(例如是否是完全指明的、部分指明的或宽的),和索引。类似地,目的地址查找数据结构包括针对每个数据库过滤器的项,其中每个项包括针对该过滤器的目的前缀、过滤器类型指示和索引。
为了使第一级数据结构完整,构建转发表(参见图16A条目1602)。确定过滤器交叉(参见图12A-12C),并且寻找与每个过滤器交叉相关联的小容器的并集——即大容器(参见图11B),如框2140中所阐述。还确定指示器过滤器,如框2150中所阐述。如上面所注意到的,指示器过滤器是那些不能与另一个过滤器聚合的不存在的过滤器(参见图15和相关文字)。然后,完全指明的过滤器、完全指明的过滤器的交叉和指示器过滤器被放置在主表中(参见图16A和16C),这在框2160中阐述。再一次,在一个实施方案中,完全重叠的过滤器交叉(参见图13A-13C)不被放置在主表中。参照框2170,创建次表,一个次表包括形式为“X*,*”的部分指明的过滤器,并且另一个次表包括形式为“*,Y*”的部分指明的过滤器。在可替换的实施方案中,宽过滤器——例如那些包括多个超过指定阈值的指示器过滤器的过滤器(参见图19)——被放置到另一个表中——即宽过滤器表(参见图20A条目1650)——这由框2190图示。
参照框2180,创建第二级数据结构,如之前所描述的。在一个实施方案中,第二级数据结构包括与每个小容器相关联的三元组集(参见图17)。小容器由被包括在主表和次表中的指针所标识。在该实施方案中,大容器不被储存在第二级数据结构中,而是大容器简单地由指向两个或更多个小容器的指针列表(在主表或次表的项中)所标识。在可替换的实施方案中(其中,例如,规则集包括具有非连贯的优先级级别的规则),与大容器相关联的三元组组成的组被存储在存储器中。
如上面提示的,在一个实施方案中,分组分类的第一级可以使用软件实现而第二分类级用硬件实现。在图22到28中图示的是两级分类系统的一个实施方案,其中第一级以软件实现而第二级以硬件实现。该实施方案利用分组头部各个字段之间匹配方式的差异。例如,源和目的地址通常被表示为前缀,或者是完全指明的值,而端口号可以被表示为范围。基于前缀或完全指明值的匹配易于适用基于软件的解决方案,而硬件解决方案可以适合于范围匹配,并且在图22到28的实施方案中,分类问题是按这些线分支的。在该点,应该注意协议一般是完全指明的值,并且如在下面将更消息地描述的,在一个实施方案中,基于协议的分类是在第一级中进行的,而不是在第二级中基于该协议对分组进行分类(如之前所描述的)。
现在参照图22,图示的是分组分类系统2200的实施方案。分类系统2200包括用于第一级代码执行的处理系统2210和用于进行分类的第二级的分类电路2220。与分类电路2220耦合的是用于储存容器(例如,如之前所描述的小容器和/或大容器)的存储器2230。存储器2230可以包括能够储存多个容器的任何合适的存储器,所述多个容器包括容器2240a、2240b,…,2240i,其中容器2240a-i中的每一个包括一个或更多个项2300(例如,容器2240a包括项2300a-b,容器2240b包括项2300c-g,等等)。例如,存储器2230可以包括SRAM、DRAM、DDRDRAM、SDRAM和/或闪存存储器,无论是本地的还是芯片外的。在一个实施方案中,存储器2230包括本地或芯片上的SRAM(例如“暂时(scratch)”存储器)。
第一分类级被实现为一系列软件指令(例如,如图22中图示的第一级代码2250),并且处理系统2210包括任何合适的能够执行这些指令的处理系统或设备。在一个实施方案中,处理系统2210包括处理设备(例如网络处理器)的处理引擎(例如微引擎),并且所述处理引擎可以包括在所述处理设备上多个这样的处理引擎中的一个。在另一个实施方案中,处理系统包括微处理器或其他处理设备。如上面也曾提示过的,第二分类级可以以硬件实现,并且分类电路2220包括任何合适的能够进行分类的第二级的硬件或电路。在下面描述处理系统2210和分类电路2220以及存储器2230的各种实施方案(例如,参见图25到27,以及下面的相关文字)。
如图22中所示,存储器2230储存多个容器2240a-i,每一个容器包括一个或更多个项2300。项2300中的一个的实施方案在图23中图示。参照该附图,项2300包括多个传输层字段2310、相关联的动作2320和相对优先级2330(例如,如之前所描述的三元组)。在一个实施方案中,传输层字段2310包括用于源端口的下限(“SRCPRTLB”)2311、用于源端口的上限(“SRCPRTUB”)2312、用于目的端口的下限(“DSTPRTLB”)2313和用于目的端口的上限(“DSTPRTUB”)2314。为了确定接收的分组是否匹配容器的项2300,将分组的源端口(“SRCPRTPCKT”)与源端口下限和上限2311、2312比较,并且将分组的目的端口(“DSTPRTPCKT”)与目的端口下限和上限2313、2314比较。如果分组的源端口大于或等于源端口下限2311且小于或等于源端口上限2312,并且如果分组的目的端口大于或等于目的端口下限2313且小于或等于目的端口上限2314,则该分组匹配该项2300。注意,如上面所描述的,这种形式的范围匹配消除了将范围扩展到多前缀的需要。
在这里,项2300中的每一个——包括SRCPRTLB、SRCPRTUP、DSTPRTLB、DSTPRTUB、动作和优先级——将被称为“规则”。因此,如在这里结合图22到28的实施方案所使用的,术语“规则”不同于术语“过滤器”,如上面所阐述的,术语“过滤器”指与规则组相关联的源-目的地址对。然而,应该理解,在其他环境中,术语“规则”和“过滤器”可以可交换地使用。
在一个实施方案中,第二级中的分类不考虑在第一级中被考虑的协议。因此,例如,在图23的实施方案中,规则2300不包括传输层字段2310之间的协议。然而,在其他实施方案中,如之前所描述的,基于协议的分类发生在第二级中(在这种情况下每个容器的规则2300可以包括协议作为传输层字段2310中的一个)。
为了在第一级中基于协议分类分组,协议(同样地,所述协议通常为完全指明的值)可以与用于搜索主表和次表的搜索关键字级联。这在图24中图示,图24示出并行LPM表1601(参见图16A)的实施方案。在图24中,形成自第一和第二索引I1和I2的关键字1690与协议(“PRTCL”)2450组合(例如级联),以形成用于搜索转发表1602(参见图16A)的新的搜索关键字2490。类似地,第三索引I3与协议2450组合以形成搜索关键字2491,并且第四索引I4与协议2450组合以形成搜索关键字2492。如果使用宽过滤器表(参见图20A),形成自第五和第六索引I5和I6(参见图20B)的搜索关键字2090将以类似的方式与协议组合。注意,被包括在各种转发表(例如主表、次表,并且可能宽过滤器表)的每一项中的关键字也将包括协议(参见图16C,条目1637a)。
现在参照图25,图示的是系统2500的实施方案,上面在图22到24中描述的两级分组分类方案可以在所述系统2500上实现。在一个实施方案中,系统2500包括类似于上面结合图2和相关文字所描述的路由器,并且在这里不再重复对相同部件的描述。然而,对于图25的实施方案来说,第二级硬件包括处理设备2600的部分。同样地,第一级代码2250可以被储存在系统存储器210和/或储存设备230中(或者在另一个实施方案中,被储存在处理设备2600的存储器中)。
接下来参照图26,示出处理设备2600的实施方案。处理设备2600包括本地总线2605,各种功能单元耦合到所述本地总线。总线2605想要表示互连处理设备2600的各种功能单元的一条或更多条芯片上总线的集合。将这些本地总线表示为单条总线2605是为了易于理解,并且应该理解处理设备2600并不受此限制。本领域普通技术人员将意识到,处理设备2600可以包括任何合适的总线体系结构,并且可以包括任何数量的总线和总线的组合。
核心2610和多个处理引擎2620(例如,处理引擎2620a、2620b,…,2620k)与本地总线2605耦合。在一个实施方案中,核心2610包括可以执行操作系统214的通用处理系统。核心2610还可以控制处理设备2600的操作,并且执行各种管理功能,例如向处理引擎2620分发用于执行的指令。所述处理引擎2620a-k中的每一个包括任何合适的处理系统,并且每一个都可以包括算术逻辑单元(ALU)、控制器以及多个寄存器(用于在读/写操作期间储存数据)。此外,在一个实施方案中,每个处理引擎2620a-k提供多个执行线程(例如四个)。
同样与本地总线2605耦合的是用于储存多个容器的存储器2630。存储器2630可以包括能够储存多个容器(例如小容器和/或大容器)的任何类型的存储器或存储器的组合。在一个实施方案中,存储器2630包括SRAM(例如“暂时”存储器)。在其他实施方案中,存储器2630包括SDRAM、DDRDRAM和/或闪存存储器(例如FlashROM)。
处理设备2600还包括与本地总线2605耦合的总线接口2640。总线接口2640提供与系统2500的其他组件(包括总线205)的接口。为了简明,总线接口2640被描绘为单个功能单元;但是应该理解,在实践中,处理设备2600可以包括多个总线接口。例如处理设备2600可以包括PCI总线接口、IX(因特网交换)总线接口等等,并且总线接口2640是要表示一种或更多种这样的接口的集合。
在一个实施方案中,在其上第一级代码可以执行的处理系统包括处理引擎2620a-k中的一个(例如处理引擎2620b)。如上面所注意到的,在一个实施方案中,第一级代码(或者这些指令中的部分)可以被储存在芯片上存储器(例如存储器2630或与总线2605耦合的另一个存储器)中。在另一个实施方案中,第一级代码或该代码的部分可以被储存在所述处理引擎中的一个的存储器(例如处理引擎2620b的存储器2625)中。
为了进行分组分类的第二级,处理设备2600包括与总线2605耦合的分类电路2700。分类电路2700包括能够在一个或更多个传输层字段(或其他字段)的基础上对分组进行分类的任何合适的电路或逻辑。下面结合图27示出并描述分类电路的实施方案。
应该理解,结合图26图示并描述的处理设备2600的实施方案仅仅是可能发现与所公开的分组分类器的实施方案一起使用的处理设备的一个实施例,并且处理设备2600可以包括除图26所示组件之外的其他组件,为了清晰和易于理解,所述其他组件被省略。例如,处理设备2600可以包括其他功能单元(例如指令解码单元、地址翻译单元等)、热管理系统、时钟电路、额外的存储器以及寄存器。此外,应该理解处理设备可以不包括图26中所示的所有部件。
现在参照图27,示出如上面所注意到的分类电路2700的实施方案。然而,应该理解,图27中所图示的分类电路2700的实施方案仅仅是在其上可以实现第二分类级的硬件的一个实施例。参照该附图,分类电路2700包括第一比较器电路2710、第二比较器电路2720以及输出电路2730。第一比较器电路2710包括能够进行接收的分组的源端口与容器的规则的源端口下限和上限之间的比较的任何电路。第二比较器电路2720包括能够进行接收的分组的目的端口与所述规则的目的端口下限和上限之间的比较的任何电路。
第一比较器电路2710确定接收的分组的源端口是否大于或等于规则的源端口下限且小于或等于所述规则的源端口上限。如果该条件为真,则第一比较器电路将信号2713(例如逻辑“高”信号)提供给输出电路2730。类似地,第二比较器电路2720确定接收的分组的目的端口是否大于或等于所述规则的目的端口下限且小于或等于目的端口上限,并且如果该条件为真,则第二比较器电路将信号2723(例如逻辑高信号)提供给输出电路2730。注意,如果在比较器电路2710、2720的任一个中进行的比较为假,则比较器电路也可以提供指示该假条件的信号(例如逻辑“低”信号)。
如果对于任何规则,输出电路2730从比较器电路2710、2720中的每一个接收指示它们分别的比较为真的信号,则输出电路2730将提供匹配信号2737(例如逻辑高信号)。相反地,如果第一和第二比较器电路2710、2720中任一个未能提供指示它们的比较为真的信号,则输出电路2730将提供匹配失败信号2739(例如逻辑低信号)。匹配信号和匹配失败信号2737、2739可以被提供给正在执行第一级代码的处理引擎。因此,输出电路2730在实质上对第一和第二比较器电路2710、2720的输出进行“AND(与)”操作。
参照图28,图示如可以使用在图22到27中所图示的两级分组分类系统进行的分组分类的方法的实施方案。如在框2605中所阐述的,接收到分组。接着对源地址和目的地址进行查找,这在框2610a和2610b中阐述。在一个实施方案中,如图26中所示,对源地址和目的地址的查询是并行进行的。然而,应该理解,在其他实施方案中,这些查询可以不并行进行。
如在框2615a处所示,基于源地址查询,与完全指明的过滤器相关联的最长前缀匹配(LPM)和与部分指明的过滤器相关联的LPM被识别。与匹配完全指明的过滤器相关联的索引I1和与匹配部分指明的过滤器相关联的索引I3被返回(参见图24,条目1691、1693)。基于对目的地址的查询,与完全指明的过滤器相关联的最长LPM和与部分指明的过滤器相关联的LPM被识别——参见框2615b——并且与匹配完全指明的过滤器相关联的索引I2以及与匹配部分指明的过滤器相关联的索引I4被返回(参见图24,条目1692、1694)。
在一个实施方案中,如在框2620a中所阐述的,接着第一索引I1、第二索引I2和协议被组合(例如级联)以形成关键字(参见图24,条目2490),并且该关键字用于搜索主表。参照框2620b,第三索引I3与协议组合以创建搜索关键字(参见图24,条目2491),并且该关键字用于搜索次表中的一个。类似地,如框2620c中所阐述的,第四索引I4与协议组合以形成关键字(参见图24,条目2492),并且该关键字用于搜索另一个次表。在一个实施方案中,如图26所示,对主表和次表的搜索是并行进行的;然而,在其他实施方案中,这些搜索可以不并行进行。
尽管对于在图26中所示的实施方案来说,基于协议的分类发生在第一级,但是应该理解,在其他实施方案中,协议可以在第二分类级期间被考虑(例如协议可以被包括作为被包括在每条规则中的字段中的一个,所述规则被包括容器中)。此外,尽管图26的实施方案假设转发表不包括宽过滤器表,但是应该理解,在其他实施方案中,转发表可以包括宽过滤器表(参见图20A到20C)。如果转发表包括宽过滤器表,则从并行LPM表返回的索引I5和I6可以以如上面所描述的类似方式被处理(例如,与协议组合以形成用于搜索宽过滤器表的关键字,其中宽过滤器表中的匹配(如果存在的话)优先于次表中的匹配)。
参照框2625,形成自I1、I2和协议的关键字与主表的项进行比较。形成自I1、I2和协议的关键字可以用于以各种方式搜索主表。例如,在一个实施方案中,向所述关键字应用哈希函数,并且所述哈希被用来搜索被实现为哈希表的主表。如果在主表中未找到匹配,则如框2630中所阐述的,针对主表的匹配项发出命令到分类电路。主表的匹配项将标识需要被搜索的一个或更多个容器。
参照框2635,以类似的方式,形成自I3和协议的关键字以及形成自I4和协议的关键字的每一个与次表中适当一个的项进行比较。同样地,这些关键字可以用于根据任何合适的技术(例如通过向关键字应用哈希函数并使用结果来搜索被实现为哈希表的次表)来搜索次表。如果在次表之一中找到匹配(同样地,仅仅次表中的一个(如果有的话)提供匹配),如框2640中所阐述的,针对包括该匹配项的次表的匹配项发出命令到分类电路。该次表的匹配项将标识一个或更多个需要被搜索的容器。注意,如果在主表中找到匹配,该次表将被忽略。
参照框2645,如果在主表中未找到匹配,并且进一步地在任何一个次表中未找到匹配(参见框2625和2635),则针对默认项(例如对应于整个二维地址空间“*,*”的项)发出命令到分类电路。该默认项将包括一个或更多个需要被搜索的相关联的容器。
在一个实施方案中,发出到分类电路的命令将包括该容器(或容器中的一个)的起始的基地址,以及被包括在该容器中的项或规则的数量。例如,回头参照图22,该命令可以指明容器2440a-i中一个的起始的基地址,以及被包括在该容器中的项2300的数量。注意,如下面更详细地描述的,在一些实施方案中,在命令中可以被引用的项的最大数量可能受限(例如被限制为16),并且可能需要发出多个命令以搜索所有的规则和/或容器。被发出到分类电路的命令还可以包括要被用来搜索所识别的容器的值。在一个实施方案中,所述搜索值包括接收的分组的源端口和该分组的目的端口。
现在,对接收的分组的分类前进到第二分类级。参照框2650,在被发出到分类电路的命令中标识的规则——例如与转发表的匹配项相关联的容器或多个容器的规则——从容器存储器被拷贝到分类电路。如框2655中所阐述的,分类电路进行这些规则和所述搜索值(例如接收的分组的源和目的端口)之间的比较。在一个实施方案中,如图23和27中所示,每条规则指明源端口下限和上限以及目的端口下限和上限。接收的分组的源端口(SRCPRTPCKT)与源端口下限(SRCPRTLB)和源端口上限(SRCPRTUB)进行比较,以确定SRCPRTPCKT是否落入SRCPRTLB和SRCPRTUB所限定的范围(例如是否SRCPRTLB≤SRCPRTPCKT≤SRCPRTUB)。类似地,接收的分组的目的端口(DSTPRTPCKT)与目的端口下限(DSTPRTLB)和目的端口上限(DSTPRTUB)进行比较,以确定DSTPRTPCKT是否落入DSTPRTLB和DSTPRTUB所限定的范围(例如是否DSTPRTLB≤DSTPRTPCKT≤DSTPRTUB)。
参照框2660,如果在所述规则中的一个中找到匹配,则由分类电路返回与该匹配规则相关联的动作(如框2665中所阐述的)。在一个实施方案中,所述匹配规则包括所识别的第一匹配规则。在该点,分类的第二级完成,并且所述动作可以被应用于所述接收的分组,这在框2670中阐述。
如上面所注意到的,来自转发表(例如主表、从表中的一个、默认项,以及,可能的话,宽过滤器表)的匹配项可能标识这样的容器(或多个容器),所述容器包括任何被发出到分类电路的给定命令可以处理的最大规则数更多的规则。因此,回头参照框2660,如果存在额外的规则还未曾被搜索,并且如果在曾被拷贝到分类电路的规则中未找到匹配(参见框2650),则如框2675中所阐述的,可以针对其他容器和/或规则发出额外的命令到分类电路。接着,这些额外的规则被拷贝到分类电路(参见框2655),并且针对这些额外的规则组重复上面描述的过程。必要多的命令可以被发出到分类电路,以搜索由转发表的匹配项所标识的所有容器和/或规则。
前面的详细描述和附图仅仅是说明性而不是限制性的。提供它们主要是为了清楚和全面地理解公开的实施方案,并且从中不用理解不必要的限制。本领域技术人员可以设计对本文中描述的实施方案的很多增加、删除和修改,以及替换的结构,而不偏离所公开的实施方案的精神和所附权利要求书的范围。
权利要求
1.一种方法,包括提供多个储存在存储器中的容器,所述容器中的每一个包括多条规则,每条规则指明源端口范围和目的端口范围;从所述多个容器中识别与接收的分组的网络路径和协议对应的容器;将所述接收的分组的源端口和目的端口与所述对应的容器的所述规则进行比较;以及如果所述接收的分组的所述源端口在规则的所述源端口范围内并且所述接收的分组的所述目的端口在所述规则的所述目的端口范围内,将与所述规则相关联的动作应用于所述接收的分组。
2.如权利要求1所述的方法,其中匹配所述接收的分组的所述源端口和目的端口的所述规则包括最高优先级匹配规则。
3.如权利要求1所述的方法,其中每条规则的所述源端口范围由源端口下限和源端口上限指明;并且每条规则的所述目的端口范围由目的端口下限和目的端口上限指明。
4.如权利要求3所述的方法,其中如果所述接收的分组的源端口大于或等于规则的所述源端口下限并且小于或等于所述规则的所述源端口上限,则所述接收的分组的所述源端口在所述规则的所述源端口范围内;以及如果所述接收的分组的目的端口大于或等于所述规则的所述目的端口下限并且小于或等于所述规则的所述目的端口上限,则所述接收的分组的所述目的端口在所述规则的所述目的端口范围内。
5.如权利要求1所述的方法,其中,识别与接收的分组的网络路径和协议对应的容器的操作包括从数据结构中的多个项中识别具有与所述接收的分组的源地址匹配的源地址前缀的项,所述匹配项包括第一标识符;从另一个数据结构中的多个项中识别具有与所述接收的分组的目的地址匹配的目的地址前缀的项,所述匹配项包括第二标识符;以及从所述多个容器中识别对应于所述第一和第二标识符以及所述协议的容器。
6.如权利要求1所述的方法,其中,识别与接收的分组的网络路径和协议对应的容器的操作包括搜索源地址数据结构,以找到第一索引和第三索引,所述第一索引与完全指明的过滤器相关联,所述完全指明的过滤器具有与所述分组的所述源地址匹配的源前缀,所述第三索引与部分指明的过滤器相关联,所述部分指明的过滤器具有与所述分组的所述源地址匹配的源前缀;搜索目的地址数据结构,以找到第二索引和第四索引,所述第二索引与完全指明的过滤器相关联,所述完全指明的过滤器具有与所述分组的所述目的地址匹配的目的前缀,所述第四索引与部分指明的过滤器相关联,所述部分指明的过滤器具有与所述分组的所述目的地址匹配的目的前缀;从所述第一索引、所述第二索引和所述协议形成关键字;以及针对与所述关键字匹配的项搜索主表,所述主表包括多个项,每个项与完全指明的过滤器、完全指明的过滤器的交叉以及指示器过滤器中的一个对应;其中与所述关键字匹配的所述主表的项将标识所述对应的容器。
7.如权利要求6所述的方法,还包括针对与形成自所述第三索引和所述协议的关键字匹配的项搜索两个次表中的第一个,所述第一次表包括多个项,每个项与部分指明的过滤器对应;以及针对与形成自所述第四索引和所述协议的关键字匹配的项搜索所述两个次表中的第二个,所述第二次表包括多个项,每个项与部分指明的过滤器对应;其中,如果在所述主表中未找到匹配,则在所述两个次表中的一个中的匹配项将标识所述对应的容器。
8.如权利要求7所述的方法,其中,如果在所述主表或所述次表中的任一个中未找到匹配,则所述对应的容器包括与整个两维地址空间相关联的默认容器。
9.如权利要求6所述的方法,还包括搜索所述源地址数据结构,以找到与宽过滤器相关联的第五索引,所述宽过滤器具有与所述分组的所述源地址匹配的源前缀;搜索所述目的地址数据结构,以找到与宽过滤器相关联的第六索引,所述宽过滤器具有与所述分组的所述目的地址匹配的目的前缀;从所述第五索引、所述第六索引和所述协议形成第二关键字;以及针对与所述第二关键字匹配的项搜索宽过滤器表,所述宽过滤器表包括多个项,每个项与宽过滤器对应;其中,如果在所述主表中未找到匹配,则所述宽过滤器表的匹配项将标识所述对应的容器。
10.如权利要求9所述的方法,其中,被包括在所述宽过滤器表中的每个宽过滤器包括具有多个超过指定阈值的指示器过滤器的完全指明的过滤器。
11.一种方法,包括从储存在存储器中的多个容器识别与接收的分组的网络路径对应的容器,所述容器中的每一个包括多条规则;发出命令到分类电路,所述命令识别所述对应的容器;将所述对应的容器的所述规则从所述存储器拷贝到所述分类电路,其中所述分类电路将所述接收的分组的至少一个传输层字段与所述规则的每一条进行比较,并且如果规则与所述分组的所述至少一个传输层字段匹配,所述分类电路提供匹配信号;以及响应于所述匹配信号,将与所述匹配规则相关联的动作应用于所述接收的分组。
12.如权利要求11所述的方法,其中所述匹配规则包括最高优先级匹配规则。
13.如权利要求11所述的方法,其中所述接收的分组的所述至少一个传输层字段包括源端口和目的端口。
14.如权利要求13所述的方法,其中容器的每条规则包括源端口下限、源端口上限、目的端口下限和目的端口上限。
15.如权利要求14所述的方法,其中如果以下情况成立,规则与所述分组的所述至少一个传输层字段匹配所述接收的分组的所述源端口大于或等于所述规则的所述源端口下限并且小于或等于所述规则的所述源端口上限;并且所述接收的分组的所述目的端口大于或等于所述规则的所述目的端口下限并且小于或等于所述规则的所述目的端口上限。
16.如权利要求11所述的方法,其中所述对应的容器还对应于与所述接收的分组相关联的协议。
17.如权利要求16所述的方法,其中识别与接收的分组的网络路径对应的容器的操作包括从数据结构中的多个项中识别具有与所述接收的分组的所述源地址匹配的源地址前缀的项,所述匹配项包括第一标识符;从另一个数据结构中的多个项中识别具有与所述接收的分组的所述目的地址匹配的目的地址前缀的项,所述匹配项包括第二标识符;以及从所述多个容器中识别对应于所述第一和第二标识符以及所述协议的容器。
18.如权利要求16所述的方法,其中识别与接收的分组的网络路径对应的容器的操作包括搜索源地址数据结构,以找到第一索引和第三索引,所述第一索引与完全指明的过滤器相关联,所述完全指明的过滤器具有与所述分组的所述源地址匹配的源前缀,所述第三索引与部分指明的过滤器相关联,所述部分指明的过滤器具有与所述分组的所述源地址匹配的源前缀;搜索目的地址数据结构,以找到第二索引和第四索引,所述第二索引与完全指明的过滤器相关联,所述完全指明的过滤器具有与所述分组的所述目的地址匹配的目的前缀,所述第四索引与部分指明的过滤器相关联,所述部分指明的过滤器具有与所述分组的所述目的地址匹配的目的前缀;从所述第一索引、所述第二索引和所述协议形成关键字;以及针对与所述关键字匹配的项搜索主表,所述主表包括多个项,每个项与完全指明的过滤器、完全指明的过滤器的交叉以及指示器过滤器中的一个对应;其中与所述关键字匹配的所述主表的项将标识所述对应的容器。
19.如权利要求18所述的方法,还包括针对与形成自所述第三索引和所述协议的关键字匹配的项搜索两个次表中的第一个,所述第一次表包括多个项,每个项与部分指明的过滤器对应;以及针对与形成自所述第四索引和所述协议的关键字匹配的项搜索所述两个次表中的第二个,所述第二次表包括多个项,每个项与部分指明的过滤器对应;其中,如果在所述主表中未找到匹配,则在所述两个次表中的一个中的匹配项将标识所述对应的容器。
20.如权利要求19所述的方法,其中,如果在所述主表或所述次表中的任一个中未找到匹配,则所述对应的容器包括与整个两维地址空间相关联的默认容器。
21.如权利要求18所述的方法,还包括搜索所述源地址数据结构,以找到与宽过滤器相关联的第五索引,所述宽过滤器具有与所述分组的所述源地址匹配的源前缀;搜索所述目的地址数据结构,以找到与宽过滤器相关联的第六索引,所述宽过滤器具有与所述分组的所述目的地址匹配的目的前缀;从所述第五索引、所述第六索引和所述协议形成第二关键字;以及针对与所述第二关键字匹配的项搜索宽过滤器表,所述宽过滤器表包括多个项,每个项与宽过滤器对应;其中,如果在所述主表中未找到匹配,则所述宽过滤器表的匹配项将标识所述对应的容器。
22.如权利要求21所述的方法,其中,被包括在所述宽过滤器表中的每个宽过滤器包括具有多个超过指定阈值的指示器过滤器的完全指明的过滤器。
23.一种装置,包括存储器,所述存储器包括存储在其中的多个容器,每个容器包括多条规则;处理系统,所述处理系统被编程为从所述多个容器中识别与接收的分组的网络路径对应的容器;以及与所述存储器和所述处理系统耦合的分类电路,所述分类电路从所述对应的容器的所述规则识别与所述分组的至少一个传输层字段匹配的规则。
24.如权利要求23所述的装置,其中与所述至少一个传输层字段匹配的所述规则包括最高优先级匹配规则。
25.如权利要求23所述的装置,其中所述分组的所述至少一个传输层字段包括源端口和目的端口,并且其中容器的每条规则包括源端口下限、源端口上限、目的端口下限和目的端口上限。
26.如权利要求25所述的装置,其中所述分类电路包括第一比较电路,所述第一比较电路将所述接收的分组的所述源端口与所述规则中的一条规则的所述源端口下限和上限进行比较;第二比较电路,所述第二比较电路将所述接收的分组的所述目的端口与所述一条规则的所述目的端口下限和上限进行比较;以及输出电路,如果所述对应的容器的规则与所述接收的分组的所述源端口和目的端口匹配,则所述输出电路输出匹配信号。
27.如权利要求26所述的装置,其中如果以下情况成立,所述规则与所述接收的分组的所述源端口和目的端口匹配所述接收的分组的所述源端口大于或等于所述规则的所述源端口下限并且小于或等于所述规则的所述源端口上限;并且所述接收的分组的所述目的端口大于或等于所述规则的所述目的端口下限并且小于或等于所述规则的所述目的端口上限。
28.如权利要求23所述的装置,其中所述对应的容器还对应于与所述接收的分组相关联的协议。
29.如权利要求28所述的装置,其中,为了识别与接收的分组的网络路径对应的容器,所述处理系统被编程以进行操作,所述操作包括从数据结构中的多个项中识别具有与所述接收的分组的所述源地址匹配的源地址前缀的项,所述匹配项包括第一标识符;从另一个数据结构中的多个项中识别具有与所述接收的分组的所述目的地址匹配的目的地址前缀的项,所述匹配项包括第二标识符;以及从所述多个容器中识别对应于所述第一和第二标识符以及所述协议的容器。
30.如权利要求28所述的装置,其中,为了识别与接收的分组的网络路径对应的容器,所述处理系统被编程以进行操作,所述操作包括;搜索源地址数据结构,以找到第一索引和第三索引,所述第一索引与完全指明的过滤器相关联,所述完全指明的过滤器具有与所述分组的所述源地址匹配的源前缀,所述第三索引与部分指明的过滤器相关联,所述部分指明的过滤器具有与所述分组的所述源地址匹配的源前缀;搜索目的地址数据结构,以找到第二索引和第四索引,所述第二索引与完全指明的过滤器相关联,所述完全指明的过滤器具有与所述分组的所述目的地址匹配的目的前缀,所述第四索引与部分指明的过滤器相关联,所述部分指明的过滤器具有与所述分组的所述目的地址匹配的目的前缀;从所述第一索引、所述第二索引和所述协议形成关键字;以及针对与所述关键字匹配的项搜索主表,所述主表包括多个项,每个项与完全指明的过滤器、完全指明的过滤器的交叉以及指示器过滤器中的一个对应;其中与所述关键字匹配的所述主表的项将标识所述对应的容器。
31.如权利要求30所述的装置,其中,为了识别与接收的分组的网络路径对应的容器,所述处理系统被编程以进行操作,所述操作还包括针对与形成自所述第三索引和所述协议的关键字匹配的项搜索两个次表中的第一个,所述第一次表包括多个项,每个项与部分指明的过滤器对应;以及针对与形成自所述第四索引和所述协议的关键字匹配的项搜索所述两个次表中的第二个,所述第二次表包括多个项,每个项与部分指明的过滤器对应;其中,如果在所述主表中未找到匹配,则在所述两个次表中的一个中的匹配项将标识所述对应的容器。
32.如权利要求31所述的装置,其中,如果在所述主表或所述次表中的任一个中未找到匹配,则所述对应的容器包括与整个两维地址空间相关联的默认容器。
33.如权利要求30所述的装置,其中,为了识别与接收的分组的网络路径对应的容器,所述处理系统被编程以进行操作,所述操作还包括搜索所述源地址数据结构,以找到与宽过滤器相关联的第五索引,所述宽过滤器具有与所述分组的所述源地址匹配的源前缀;搜索所述目的地址数据结构,以找到与宽过滤器相关联的第六索引,所述宽过滤器具有与所述分组的所述目的地址匹配的目的前缀;从所述第五索引、所述第六索引和所述协议形成第二关键字;以及针对与所述第二关键字匹配的项搜索宽过滤器表,所述宽过滤器表包括多个项,每个项与宽过滤器对应;其中,如果在所述主表中未找到匹配,则所述宽过滤器表的匹配项将标识所述对应的容器。
34.如权利要求33所述的装置,其中,被包括在所述宽过滤器表中的每个宽过滤器包括具有多个超过指定阈值的指示器过滤器的完全指明的过滤器。
35.如权利要求23所述的装置,其中所述存储器、所述处理系统和所述分类电路构成单个处理设备。
36.一种系统,包括总线;与所述总线耦合的处理设备,所述处理设备包括存储器,所述存储器包括存储在其中的多个容器,每个容器包括多条规则;处理引擎,所述处理引擎被编程为从所述多个容器中识别与接收的分组的网络路径对应的容器;以及与所述存储器和所述处理引擎耦合的分类电路,所述分类电路从所述对应的容器的所述规则识别与所述分组的至少一个传输层字段匹配的规则,以及与所述总线耦合的网络接口,所述网络接口将所述系统与光学链路耦合。
37.如权利要求36所述的系统,其中与所述至少一个传输层字段匹配的所述规则包括最高优先级匹配规则。
38.如权利要求36所述的系统,其中所述分组的所述至少一个传输层字段包括源端口和目的端口,并且其中容器的每条规则包括源端口下限、源端口上限、目的端口下限和目的端口上限。
39.如权利要求38所述的系统,其中所述分类电路包括第一比较电路,所述第一比较电路将所述接收的分组的所述源端口与所述规则中的一条规则的所述源端口下限和上限进行比较;第二比较电路,所述第二比较电路将所述接收的分组的所述目的端口与所述一条规则的所述目的端口下限和上限进行比较;以及输出电路,如果所述对应的容器的规则与所述接收的分组的所述源端口和目的端口匹配,则所述输出电路输出匹配信号。
40.如权利要求39所述的系统,其中如果以下情况成立,所述规则与所述接收的分组的所述源端口和目的端口匹配所述接收的分组的所述源端口大于或等于所述规则的所述源端口下限并且小于或等于所述规则的所述源端口上限;并且所述接收的分组的所述目的端口大于或等于所述规则的所述目的端口下限并且小于或等于所述规则的所述目的端口上限。
41.如权利要求36所述的系统,其中所述对应的容器还对应于与所述接收的分组相关联的协议。
42.如权利要求41所述的系统,其中,为了识别与接收的分组的网络路径对应的容器,所述处理引擎被编程以进行操作,所述操作包括从数据结构中的多个项中识别具有与所述接收的分组的所述源地址匹配的源地址前缀的项,所述匹配项包括第一标识符;从另一个数据结构中的多个项中识别具有与所述接收的分组的所述目的地址匹配的目的地址前缀的项,所述匹配项包括第二标识符;以及从所述多个容器中识别对应于所述第一和第二标识符以及所述协议的容器。
43.如权利要求41所述的系统,其中,为了识别与接收的分组的网络路径对应的容器,所述处理引擎被编程以进行操作,所述操作包括搜索源地址数据结构,以找到第一索引和第三索引,所述第一索引与完全指明的过滤器相关联,所述完全指明的过滤器具有与所述分组的所述源地址匹配的源前缀,所述第三索引与部分指明的过滤器相关联,所述部分指明的过滤器具有与所述分组的所述源地址匹配的源前缀;搜索目的地址数据结构,以找到第二索引和第四索引,所述第二索引与完全指明的过滤器相关联,所述完全指明的过滤器具有与所述分组的所述目的地址匹配的目的前缀,所述第四索引与部分指明的过滤器相关联,所述部分指明的过滤器具有与所述分组的所述目的地址匹配的目的前缀;从所述第一索引、所述第二索引和所述协议形成关键字;以及针对与所述关键字匹配的项搜索主表,所述主表包括多个项,每个项与完全指明的过滤器、完全指明的过滤器的交叉以及指示器过滤器中的一个对应;其中与所述关键字匹配的所述主表的项将标识所述对应的容器。
44.如权利要求43所述的系统,其中,为了识别与接收的分组的网络路径对应的容器,所述处理引擎被编程以进行操作,所述操作还包括针对与形成自所述第三索引和所述协议的关键字匹配的项搜索两个次表中的第一个,所述第一次表包括多个项,每个项与部分指明的过滤器对应;以及针对与形成自所述第四索引和所述协议的关键字匹配的项搜索所述两个次表中的第二个,所述第二次表包括多个项,每个项与部分指明的过滤器对应;其中,如果在所述主表中未找到匹配,则在所述两个次表中的一个中的匹配项将标识所述对应的容器。
45.如权利要求44所述的系统,其中,如果在所述主表或所述次表中的任一个中未找到匹配,则所述对应的容器包括与整个两维地址空间相关联的默认容器。
46.如权利要求43所述的系统,其中,为了识别与接收的分组的网络路径对应的容器,所述处理引擎被编程以进行操作,所述操作还包括搜索所述源地址数据结构,以找到与宽过滤器相关联的第五索引,所述宽过滤器具有与所述分组的所述源地址匹配的源前缀;搜索所述目的地址数据结构,以找到与宽过滤器相关联的第六索引,所述宽过滤器具有与所述分组的所述目的地址匹配的目的前缀;从所述第五索引、所述第六索引和所述协议形成第二关键字;以及针对与所述第二关键字匹配的项搜索宽过滤器表,所述宽过滤器表包括多个项,每个项与宽过滤器对应;其中,如果在所述主表中未找到匹配,则所述宽过滤器表的匹配项将标识所述对应的容器。
47.如权利要求46所述的系统,其中,被包括在所述宽过滤器表中的每个宽过滤器包括具有多个超过指定阈值的指示器过滤器的完全指明的过滤器。
48.如权利要求36所述的系统,其中所述存储器包括静态随机访问存储器(SRAM)。
49.一种制品,包括提供内容的机器可访问介质,当所述内容被机器访问时,导致所述机器从储存在存储器中的多个容器识别与接收的分组的网络路径对应的容器,所述容器中的每一个包括多条规则;发出命令到分类电路,所述命令识别所述对应的容器;将所述对应的容器的所述规则从所述存储器拷贝到所述分类电路,其中所述分类电路将所述接收的分组的至少一个传输层字段与所述规则中的每一条进行比较,并且如果规则与所述分组的所述至少一个传输层字段匹配,所述分类电路提供匹配信号;以及响应于所述匹配信号,将与所述匹配规则相关联的动作应用于所述接收的分组。
50.如权利要求49所述的制品,其中所述匹配规则包括最高优先级匹配规则。
51.如权利要求49所述的制品,其中所述接收的分组的所述至少一个传输层字段包括源端口和目的端口,并且其中容器的每条规则包括源端口下限、源端口上限、目的端口下限和目的端口上限。
52.如权利要求51所述的制品,其中如果以下情况成立,规则与所述分组的所述至少一个传输层字段匹配所述接收的分组的所述源端口大于或等于所述规则的所述源端口下限并且小于或等于所述规则的所述源端口上限;并且所述接收的分组的所述目的端口大于或等于所述规则的所述目的端口下限并且小于或等于所述规则的所述目的端口上限。
53.如权利要求49所述的制品,其中所述对应的容器还对应于与所述接收的分组相关联的协议。
54.如权利要求53所述的制品,其中,当所述内容被访问时还导致所述机器在识别与接收的分组的网络路径对应的容器时从数据结构中的多个项中识别具有与所述接收的分组的所述源地址匹配的源地址前缀的项,所述匹配项包括第一标识符;从另一个数据结构中的多个项中识别具有与所述接收的分组的所述目的地址匹配的目的地址前缀的项,所述匹配项包括第二标识符;以及从所述多个容器中识别对应于所述第一和第二标识符以及所述协议的容器。
55.如权利要求53所述的制品,其中,当所述内容被访问时还导致所述机器在识别与接收的分组的网络路径对应的容器时搜索源地址数据结构,以找到第一索引和第三索引,所述第一索引与完全指明的过滤器相关联,所述完全指明的过滤器具有与所述分组的所述源地址匹配的源前缀,所述第三索引与部分指明的过滤器相关联,所述部分指明的过滤器具有与所述分组的所述源地址匹配的源前缀;搜索目的地址数据结构,以找到第二索引和第四索引,所述第二索引与完全指明的过滤器相关联,所述完全指明的过滤器具有与所述分组的所述目的地址匹配的目的前缀,所述第四索引与部分指明的过滤器相关联,所述部分指明的过滤器具有与所述分组的所述目的地址匹配的目的前缀;从所述第一索引、所述第二索引和所述协议形成关键字;以及针对与所述关键字匹配的项搜索主表,所述主表包括多个项,每个项与完全指明的过滤器、完全指明的过滤器的交叉以及指示器过滤器中的一个对应;其中与所述关键字匹配的所述主表的项将标识所述对应的容器。
56.如权利要求55所述的制品,其中,当所述内容被访问时还导致所述机器针对与形成自所述第三索引和所述协议的关键字匹配的项搜索两个次表中的第一个,所述第一次表包括多个项,每个项与部分指明的过滤器对应;以及针对与形成自所述第四索引和所述协议的关键字匹配的项搜索所述两个次表中的第二个,所述第二次表包括多个项,每个项与部分指明的过滤器对应;其中,如果在所述主表中未找到匹配,则在所述两个次表中的一个中的匹配项将标识所述对应的容器。
57.如权利要求56所述的制品,其中,如果在所述主表或所述次表中的任一个中未找到匹配,则所述对应的容器包括与整个两维地址空间相关联的默认容器。
58.如权利要求55所述的制品,其中,当所述内容被访问时还导致所述机器搜索所述源地址数据结构,以找到与宽过滤器相关联的第五索引,所述宽过滤器具有与所述分组的所述源地址匹配的源前缀;搜索所述目的地址数据结构,以找到与宽过滤器相关联的第六索引,所述宽过滤器具有与所述分组的所述目的地址匹配的目的前缀;从所述第五索引、所述第六索引和所述协议形成第二关键字;以及针对与所述第二关键字匹配的项搜索宽过滤器表,所述宽过滤器表包括多个项,每个项与宽过滤器对应;其中,如果在所述主表中未找到匹配,则所述宽过滤器表的匹配项将标识所述对应的容器。
59.如权利要求58所述的制品,其中,被包括在所述宽过滤器表中的每个宽过滤器包括具有多个超过指定阈值的指示器过滤器的完全指明的过滤器。
全文摘要
用于两级分组分类的方法和装置。在可以用软件实现的第一级中,基于分组的网络路径以及可能的话它的协议对分组进行分类。在可以用硬件实现的第二级中,基于所述分组的一个或更多个传输层字段对分组进行分类。两级分组分类的装置可以包括用于第一级代码执行的处理系统、用于进行分类的第二级的分类电路,以及用于储存多个容器的存储器,每个容器包括一条或更多条规则。
文档编号H04L29/06GK1957573SQ200580016984
公开日2007年5月2日 申请日期2005年3月31日 优先权日2004年4月8日
发明者阿洛克·库马, 迈克尔·库纳维斯, 拉吉·亚瓦特卡, 普拉香特·钱德拉, 斯里德哈·拉克舍玛纳默西, C-C·郭, 哈里克·维因 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1