一种网络包分类的设备和方法

文档序号:7716537阅读:106来源:国知局
专利名称:一种网络包分类的设备和方法
技术领域
本发明 一般地涉及计算机网络通讯领域,更具体地涉及网络包的分类技术。
背景技术
包分类是计算机网络通讯和网络安全领域的一项基础技术。随着因特网的蓬勃发展,网络负载迅速增长,超过了路由器容量的增长速度,导致网络拥塞和报文丟失现象。传统路由器对每个网络包都"平等、尽力服务"的形式已经不再使所有网络用户满意,有的用户愿意花费更多的钱来获得更好的网络服务,这需要路由器提供差别服务、流量整形、流量计费等功能,这些要求直接促成了包分类技术的发展和应用。而随着多媒体业务,
P2P应用的日益普及,以及恶意攻击和扫描,病毒和蠕虫等在因特网上的泛滥,要求防火墙设备能够以很高的速度处理大量的网络连接,并跟踪这些连接状态。所有这些背景和应用都要求设备要能对网络包进行分类,根据网络包的源地址、目的地址、源端口号、目的端口号等域的内容,与既定的规则集合匹配,识别不同的网络包,并对其特殊处理。
目前^f艮多研究已经可以实现在OC-48(2.5Gbps)的情况下对网络包进行线速分类,但在更高的速度如OC-192(10Gbps), OC-384(20Gbps)以上,更多的规则数10k量级以上,实现线速包分类还是一个困难的事情。目前的实现主要是基于TCAM ( Ternary Content Addressable Memory,三进制内容可寻址存储器)。TCAM有如下缺点价格昂贵;功耗大;密度低。TCAM存在的种种问题促使人们探索新的包分类实现。
HiCuts算法(Packet Classification using Hierarchical Intelligent Cuttings )是Pankaj Gupta和Nick Mckeown提出的一种有效的树型结构包分类算法。它将d个域的规则看作d维空间的矩形,对d维空间按一定原则不断分割,直到分布在各子空间的规则数小于一定数目。分割的过程可以用树来表示,树的节点存储每次分割的信息,如选择哪一维来分割,分割多少次等。规则分布在树的叶子节点下。包头搜索时从树的根节点开始,沿着树的路径进行直到叶子节点,然后将IP包和叶子节点下的少量规则线性比较,即可完成包分类。
目前已经有一些基于HiCuts算法的包分类方法,例如在计算机系统的CPU或网络处理器中使用软件对HiCuts树进行搜索,但是受到设备运行效率和算法实现结构的影响,分类速度较低。

发明内容
为了解决上述问题之一,本发明提出了一种网络包分类设备,包括流水线树搜索模块、分类核心、节点存储器和规则存储器。所述流水线树搜索模块用于接收网络包的关键字,对树结构的前K层进行搜索,将搜索得到的下一节点地址和线性比较信息以及所述关键字发送给所述分类核心和/或输出网络包标识符和流标识符,其中K为正整数;所述分类核心用于接收所述流水线树搜索模块输出的所述关键字、下一节点地址和线性比较信息,访问所述节点存储器和规则存储器,对所述树结构的K层以下的部分进行搜索并进行线性规则比较,输出所述网络包标识符和流标识符;所述节点存储器用于存储所述树结构的K层以后的节点信息;所述规则存储器用于存储线性比较规则。
根据本发明的实施例,所述流水线树搜索模块包括根节点寄存器、K-l个单层节点存储器模块、根节点搜索模块、K-l个节点搜索模块以及控制模块。其中,所述根节点寄存器用于存放所述树结构的根节点信息;所述K-l个单层节点存储器模块包括第二层单层节点存储器模块到第K层单层节点存储器模块,其中每个所述单层节点存储器模块用于存储所述树结构的前K层除根节点之外的其中 一层节点的节点信息;所述根节点搜索模块用于接收所述关键字,访问所述根节点寄存器,对根节点进行搜索,将所述关键字以及搜索得到的下一节点地址、线性比较信息和/或所述关键字的流标识符发送到所述第二层节点搜索模块;所述K-1个节点搜索模块包括
8相级联的第二层节点搜索模块到第K层节点搜索模块,每个所述节点搜索
模块用于接收所述根节点搜索模块或上一层节点搜索模块发送的所述关键 字以及下一节点地址、线性比较信息和/或所述关键字的流标识符,从相应 的所述单层节点存储器模块中取出相应的节点,对其进行搜索,并将搜索
结果发送到下一层节点搜索模块;其中所述第K层节点搜索模块用于将所 述关键字以及搜索得到的下一节点地址、线性比较信息和/或流标识符发送 给所述控制模块;所述控制模块用于接收所述第K层节点搜索模块发送的 所述关^:字以及下一节点地址、线性比较信息和/或流标识符,输出所述网 络包标识符和流标识符和/或将所述关键字、下一节点地址和线性比较信息 发送给所述分类核心。
根据本发明的实施例,所述分类核心包括标签分配模块、并行树搜索 模块、并行线性规则比较模块和核心分类结果池。其中,所述标签分配模 块用于接收所述流水线树搜索模块输出的所述关键字、下一节点地址和线 性比较信息,给每一个所述关键字分配一个标签,将所述标签、关键字和 下一节点地址发送给所述并行树搜索模块,并将所述标签、关键字和线性 比较信息发送给所述并行线性规则比较模块,以及接收所述核心分类结果 池送回的标签并循环使用;所述并行树搜索模块用于接收所述标签分配模 块发送的所述标签、关键字和下一节点地址,根据所述下一节点地址访问 所述节点存储器,进行树搜索,找到叶子节点,如果所述叶子节点为空节 点,则输出所述标签和默认流标识符,如果所述叶子节点为非空节点,则 将所述标签和线性比较信息发送到所述并行线性规则比较模块;所述并行 线性规则比较模块用于接收所述标签分配模块和所述并行树搜索模块发送 的标签,关键字和线性比较信息,访问所述规则存储器,生成与所述关键 字相匹配的流标识符,将所述标签、网络包标识符和流标识符发送到所述 核心分类结果池;所述核心分类结果池用于接收所述并行树搜索模块和所 述并行线性规则比较模块发送的所述标签、网络包标识符和流标识符,将 所述标签发送到所述标签分配模块,并输出所述网络包标识符和流标识符。
根据本发明的实施例,所述并行树搜索模块包括树搜索关键字緩存器、 标签和下一节点地址队列模块、树搜索引擎调度器和多个树搜索引擎。其中,所述树搜索关键字緩存器用于存储所述标签分配模块发送的所述关键
字;所述标签和下一节点地址队列模块用于存储所述标签分配模块发送的 所述标签和下一节点地址;所述树搜索引擎调度器用于控制所述多个树搜 索引擎,当存在空闲的树搜索引擎且所述标签和下一节点地址队列模块不 为空时,读出所述标签和下一节点地址队列模块中的一个标签和下一节点 地址发送到所述空闲的树搜索引擎,启动所述空闲的树搜索引擎;所述树 搜索引擎用于在所述树搜索引擎调度器的控制下启动,根据所述标签和下 一节点地址访问所述树搜索关键字緩存器和所述节点存储器,从所述树搜 索关键字緩存器中读出所述关键字的域,搜索所述树结构直到叶子节点, 如果所述叶子节点为空节点,则输出所述标签、网络包标识符和默认流标 识符,如果叶子节点为非空节点,则输出所述标签和线性比较信息。 根据本发明的实施例,所述树搜索关键字緩存器为双端口存储器。 根据本发明的实施例,所述并行线性规则比较模块包括线性比较关键 字緩存器、第一标签和线性比较信息队列模块、第二标签和线性比较信息 队列模块、规则比较器、线性比较引擎调度器和多个线性比较引擎。其中, 所述线性比较关键字緩存器用于接收所述并行树搜索模块发送的所述关键 字;所述第一标签和线性比较信息队列模块用于存放所述标签分配模块发 送的所述标签和线性比较信息;所述第二标签和线性比较信息队列模块用 于存放所述树搜索模块发送的所述标签和线性比较信息;所述线性比较引 擎调度器用于控制所述多个线性比较引擎,当存在空闲的线性比较引擎并 且所述第一标签和线性比较信息队列模块和所述第二标签和线性比较信息 队列模块中至少有一个非空时,将所述标签和线性比较信息发送到所述空 闲的线性比较引擎,启动所述空闲的线性比较引擎;所述线性比较引擎用 于在所述线性比较引擎调度器的控制下,根据所述标签访问所述线性比较 关键字緩存器,根据所述线性比较信息访问所述线性规则存储器,接收所 述规则比较器的比较结果,直到找到与所述关键字相匹配的规则或比较完 叶子节点下的所有规则,得到与所述关键字相匹配的流标识符或默认流标 识符,输出所述标签、网络包标识符和流标识符;所述规则比较器用于接 收所述线性比较关键字緩存器发送的所述关键字,与所述线性规则存储器
10输出的规则相比较,将比较结果发送到所述线性比较引擎。
根据本发明的实施例,所述线性比较关键字緩存器为双端口存储器。 根据本发明的实施例,所述节点存储器和规则存储器中至少 一 个为双
端口存储器。
根据本发明的实施例,所述设备还包括分类结果汇总模块,其与所 述流水线树搜索模块和所述分类核心连接,用于接收所述流水线树搜索模 块和所述分类核心产生的所述关键字标识符和所述流标识符,输出分类结 果。
根据本发明的实施例,所述分类核心包括至少两个分类核心,所述流 水线树搜索模块还用于将所述关键字、下一节点地址和线性比较信息发送 给空闲的分类核心。
根据本发明的实施例,所述网络包分类设备集成在单芯片中。
本发明还提出了一种网络包分类的方法,包括以下步骤流水线树搜 索模块接收网络包的关键字,对树结构的前K层进行搜索,将搜索得到的下 一节点地址和线性比较信息以及所述关键字发送给分类核心和/或输出网络包 标识符和流标识符,其中K为正整数;所述分类核心接收所述流水线树搜索 模块输出的所述关键字、下一节点地址和线性比较信息,访问所述节点存储器 和规则存储器,对所述树结构的K层以下的部分进行搜索并进行线性规则比 较,输出所述网络包标识符和流标识符,其中,所述节点存储器用于存储所 述树结构的K层以后的节点信息,所述规则存储器用于存储线性比较规则。
本发明所提出的网络包分类的设备和方法,避免了使用TCAM,提高 了存储器利用率和包分类速度。


本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描 述中将变得明显和容易理解,其中
图1为根据本发明的一个实施例的树节点的数据结构示意图2为根据本发明的一个实施例的网络包分类设备的结构示意图3为根据本发明的一个实施例的流水线树搜索模块的结构示意图;图4为根据本发明的 一 个实施例的分类核心的结构示意图5为根据本发明的一个实施例的并行树搜索模块的结构示意图6为根据本发明的一个实施例的并行线性规则比较模块的结构示意
图7为根据本发明的一个实施例的占用空间随规则数的变化曲线示意
图8为根据本发明的一个实施例的分类速度随规则数的变化曲线示意图。
具体实施例方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出。下 面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能解 释为对本发明的限制。
本发明进行包分类前首先要对原始规则进行分割建立HiCuts树,分割 建树以后所有的原始规则被表示成范围形式,由规则上界和规则下界组成, 为简便起见,将规则上界和规则下界统称规则。
作为本发明的一个实施例,使用的关键字由源地址、目的地址、源端 口号、目的端口号、IP层协议、TOS (Type of Service,服务类型)和网络 包标识符组成。作为本发明的一个实施例,使用的规则由源地址、目的地 址、源端口号、目的端口号、IP层协议、TOS (Type of Service,服务类型) 和流标识符组成。网络包标识符用来在分类完成之后,找到网络包标识符 对应的网络包,按设备输出的流标识符对其进行处理。作为本发明的一个 实施例,如果没有找到与关键字相匹配的流标识符,则输出0XFFFF,在本 说明书中称为默认流标识符。
作为本发明的一个实施例,HiCuts树使用的节点结构如附图l所示, 包括中间节点和叶子节点。节点宽度选取32位。其中中间节点和叶子节点 用1位的标志F来区分,F为0则为中间节点,F为1则为叶子节点。除标 志F外,中间节点还有以下四部分分割域C、起始位S、掩码M、子节 点地址A。分割域占用3位,是在对该节点进行分割时选取的域的序号;起始位占用5位,是分割该域时涉及的最低位的位置;掩码占用8位,对 分割无关的位进行保护;子节点地址占用15位,是分割后产生的子节点在 存储时的基址。除标志外,子节点还有以下部分规则数RC和规则起始 地址RA。规则数RC占用3位,表明该叶子节点下规则的数目。规则起始 地址占用24位,是这些规则在规则存储器里存放的起始位置。当叶子节点 的规则数RC等于0时,则称该叶子节点为空节点。
作为本发明的 一 个实施例,对树节点的搜索包括以下步骤 (1 )根据下一节点地址从相应节点存储器中取出节点。如果是根节点 则无需下一节点地址,直接从根节点寄存器中取出根节点。
(2) 如果节点标志F为0,即该节点为中间节点,则跳转到第(3)步, 如果节点标志F为1,即该节点为叶子节点,则跳转到第(4)步。
(3) 根据节点的分割域C选取关键字中的相应域,将该域高位补0 扩展至32位后右移S位,取高8位和掩码M相与,然后和子节点地址A 相加输出下一节点地址,然后跳转至(1)执行。
(4) 如果叶子节点的规则数RC不等于0,即该节点为非空叶子节点, 则输出规则数RC和规则起始地址RA,下面将规则数RC和规则起始地址 RA合称为线性比较信息。如果叶子节点的规则数RC等于0,即该节点为 空节点,则输出网络包标识符和默认流标识符。
如图2所示为本发明的一个实施例的网络包分类设备的结构示意图, 该网络包分类设备包括流水线树搜索模块、节点存储器、规则存储器、2 个分类核心和分类结果汇总模块。
其中,流水线树搜索模块用于接收网络包的关键字,对树结构的前K 层进行搜索。作为本发明的一个实施例,K可根据树的特点来选取,如果 MAX—CUTS较小,而树深度较深,K可取稍大的值,如果MAX一CUTS较 大,而树深度较浅,K可取较小的值,其中MAX一CUTS为树节点的最大 等分数。
如图3所示为根据本发明的一个实施例的K=2时的流水线树搜索模块 的结构示意图,该实施包括第一层节点寄存器;第二层节点存储器;第
13一层节点搜索模块;第二层节点搜索模块;以及控制模块。
其中,第一层节点寄存器用于存储第一层节点,因为第一层节点为根 节点,只有一个节点,不需要地址,因此存放在寄存器中。
第 一层节点搜索模块用于接收网络包的关键字,访问第 一层节点寄存 器,对根节点进行搜索,将关键字、下一节点地址,线性比较信息和流标 识符输出到第 一层节点搜索模块。
第二层节点搜索模块用于接收根节点搜索模块输出,访问第二层节点 存储器模块,对第二层节点进行搜索,将关键字、下一节点地址和线性比 较信息和/流标识符输出到控制模块。
控制模块用于接收第二层节点搜索模块的输出,输出网络包的网络包 标识符和流标识符,或将关键字、下一节点地址和线性比较信息发送给空 闲的分类核心。
作为本发明的一个实施例,节点存储器是双端口的存储器,其用于存 储HiCuts树结构K层以后的节点信息。作为本发明的一个实施例,节点存 储器两个端口都可读,至少一个端口可写,每个端口连接一个分类核心, 其中一个可读可写的端口是复用的,在分类网络包时,与一个分类核心相
连,输出树节点信息,在树结构进行更新时,与外部总线相连,接收外部 输入的新的树结构信息。
作为本发明的一个实施例,规则存储器是双端口的存储器,其用于存 储线性规则。作为本发明的一个实施例,规则存储器需要两块存储器,包 括规则上界存储器和规则下界存储器。规则上界存储器用于存储线性规则 的上界。规则下界存储器用于存储线性规则的下界。每条规则上界的流标 识符和规则下界的流标识符相同。为简便起见,将规则上界和规则下界统 称线性规则。作为本发明的一个实施例,规则上界存储器和规则下界存储 器两个端口都可读,至少一个端口可写,每个端口连接一个分类核心,其 中一个可读可写的端口是复用的,在分类网络包时,与一个分类核心相连, 输出规则。作为本发明的一个实施例,规则存储时同一子节点下的所有规 则存储在线性规则存储器的一片连续的区域。规则存储器还可以包括规则
14更新模块,在添加或删除规则时,与外部总线相连,接收外部输入的新的 线性规则。
如图4所示为根据本发明的一个实施例的分类核心的结构示意图。该
分类核心包括标签分配模块、并行树搜索模块、并行线性规则比较模块 和核心分类结杲池。
其中,标签分配模块用于接收流水线树搜索输出的关键字、下一节点 地址和线性比较信息,给进入的每一个关键字分配一个标签,当关键字进 入并行树搜索模块和并行线性规则比较模块时,存放在以标签为地址的緩 存中,当需要读取关键字时,这个标签将作为緩存的地址。标签的总数是 固定的,因此本模块也起着緩存控制功能,当标签分配完,表明緩存已满, 不可再接收关键字。根据不同的输入,下一节点地址和相应的关键字及标 签被送入并行树搜索模块中,线性比较信息和相应关键字及标签被送入并 行线性比较模块中。作为本发明的一个示例,标签总数可以选取为16个, 即标签的宽度为4位。
并行树搜索模块用于接收标签分配模块输出的标签、关键字和下一节 点地址,根据下一节点地址访问节点存储器,进行树搜索,找到叶子节点, 如果所述叶子节点为空节点,则将标签和默认流标识符输出到核心分类结 果池,如果叶子节点为非空节点,则将标签和线性比较信息输出到并行线 性规则比较模块。
并行线性规则比较模块用于接收标签分配模块和并行树搜索模块输出 的标签、关键字和线性比较信息,访问规则存储器,生成与关键字相匹配 的流标识符,将标签、网络包标识符和流标识符输出到核心分类结果池。
核心分类结果池接收并行树搜索模块输出的标签、网络包标识符和流 标识符,将它们立即输出,接收并行线性规则比较模块输出的标签、网络 包标识符和流标识符。作为本发明的一个实施例,核心分类结果池将它们 暂存在一个FIFO (先入先出存储器)中,如可以为深度为16宽度为36位 的FIFO,当并行树搜索模块不输出时,将FIFO中内容输出。标签被输出 至标签分配才莫块,网络包标识符和流标识符:帔输出分类核心。在本发明的实施例中,并行树搜索模块和并行线性规则比较模块对存
储器的访问都是只读方式,并且可编程逻辑器件或ASIC实现单端口和双 端口存储器消耗的资源几乎相同。因此本发明的实施例将节点存储器和线 性规则存储器设计为双端口的方式,采用两个相同的分类核心,在不增加 存储器资源消耗的情况下提高了包处理能力一倍。当然,在其他的实施例 中,也可以根据具体情况选择分类核心的数目。
如图5所示为根据本发明的一个实施例的并行树搜索模块的结构示意 图。并行树搜索模块用于根据输入的下一节点地址,继续进行树搜索,直 到找到叶子节点,然后根据叶子节点的内容,输出流标识符或线性搜索信 息。该并行树搜索模块包括树搜索关键字緩存器、标签和下一节点地址队 列模块、树搜索引擎调度器和多个树搜索引擎。
其中,树搜索关键字緩存器用于接收并存储关键字。作为本发明的一 个实施例,这是一个双端口的存储器,写入端口宽度为关键字域的最大宽 度乘以关键字域的个数,读出端口宽度为关键字域的最大宽度,深度从写 入端口计算,为标签的总数,它接收输入的关键字,将其每个域高位补零 扩展为32位后存储在以标签为地址的位置。作为本发明的一个实施例,树 搜索关键字緩存器为双端口存储器,写入端口宽度为256位,深度为16和 标签总数相同,读出端口宽度为32位,深度为128。输入的关键字的域高 位补零扩展为32位,6个域得到192位,再高位补64位零,得到256位。 以标签为地址,写入树关键字緩存中。
标签和下一节点地址队列模块用于存储标签和下一节点地址。作为本 发明的一个实施例,标签和下一节点地址队列模块按先入先出的顺序存放 输入的标签和下一节点地址。作为本发明的一个实施例,标签和下一节点 地址队列才莫块为深度为16的FIFO,存^L标签、下一节点地址和网络包标 识符。
树搜索引擎调度器用于控制多个树搜索引擎,当存在空闲的树搜索引 擎且标签和下一节点地址队列模块不为空时,将标签和下一节点地址输入 至空闲的树搜索引擎,启动树搜索引擎。作为本发明的一个实施例,树搜索引擎调度器循环依次查询多个树搜索引擎的状态,如果引擎处于空闲状 态,则从标签和下一节点地址队列模块中读取一个标签、下一节点地址和 网络包标识符,送入该树搜索引擎中,并启动该树搜索引擎。
树搜索引擎用于在树搜索引擎调度器的控制下启动,根据输入的标签 和下 一 节点地址访问树搜索关键字緩存器和节点存储器,从树搜索关键字 緩存器中读出关键字的域,搜索树结构直到叶子节点,根据叶子节点的类 型,输出标签、网络包标识符、默认流标识符或线性比较信息。在树搜索 引擎调度器控制下,每个树搜索引擎错开访问树搜索关键字緩存和节点存 储器。
作为本发明的一个实施例,图5中示出了 6个树搜索引擎,但是这仅 仅是本发明的一个示例,在实际应用中,可以根据情况增减树搜索引擎的 数目。
以6个树搜索引擎作为示例进行说明,树搜索引擎1到树搜索引擎6 是结构相同的六个树搜索引擎。内部有一个6位的循环移位寄存器,引擎 停止时寄存器值为0x1,引擎被启动以后开始向高位循环移位,引擎在移 位寄存器的控制下依次完成树搜索的各步骤。引擎工作过程如下
(1) 寄存器为0x2时输出下一节点地址至节点存储器;
(2) 寄存器为0x4时输出标签。此时节点存储器输出节点。标签作为 高4位,节点的分割域组合作为低3位,送至关键字緩存器作为读地址。 节点同时也送至引擎,如果为非空叶子节点,则输出标签和线性比较信息, 如果为空叶子节点则输出标签和默认流标识符,树搜索结束,引擎进入空 闲状态,等待调度引擎的下一次启动。如果为中间节点,则继续(3)。
(3) 寄存器为0x10时,关键字緩存输出的域被送入引擎,经过计算, 得到下一节点地址,然后跳转到(l)执行。
由于对树的 一层搜索需要访问节点存储器一次,然后花费多个时钟计 算出下一节点地址,如果采用单个的树搜索引擎在计算下一节点地址时存 储器处于空闲状态,导致存储器利用效率较低。本发明的实施例采用多个 树搜索引擎,在各自的移位寄存器的控制下运行。引擎调度器启动它们的
17时刻不同,因此它们访问树存储器是错开的,在一个引擎计算下一节点地 址的等待过程中可以让其他引擎访问存储器,这种设计提高了节点存储器 的效率。
如图6所示为本发明的并行线性规则比较模块的一个实施例的结构示 意图。并行线性规则比较模块根据输入的线性比较信息,找到叶子节点下 规则在规则存储器存放位置,从中读出规则,和关键字——比较,如果找 到相匹配的规则,输出规则流标识符作为分类结果,否则输出默认的流标 识符。该并行线性规则比较模块包括线性比较关键字緩存器、第一标签和 线性比较信息队列模块、第二标签和线性比较信息队列模块、线性比较引 擎调度器、多个线性比较引擎和规则比较器。
其中,线性比较关键字緩存器用于接收输入的关键字,将其存储在以 标签为地址的位置。作为本发明的一个实施例,线性比较关键字緩存器是 一个双端口的存储器,写入端口和读出端口宽度相同,为关键字的宽度, 如128位,深度为标签总数,如16,它接收输入的关键字,将其存储在以 标签为地址的位置。
第一标签和线性比较信息队列模块用于存放标签分配模块输入的标签 和线性比较信息,按先入先出的顺序存放标签分配模块输入的标签和线性 比较信息。
第二标签和线性比较信息队列模块用于存放树搜索模块输入的标签和 线性比较信息,按先入先出的顺序存放树搜索模块输入的标签和线性比较 信息。
作为本发明的 一个实施例,第 一和第二标签和比较信息队列模块都是 深度为16的FIFO。
线性比较引擎调度器用于控制多个线性比较引擎,当存在空闲的线性 比较引擎并且第一标签和线性比较信息队列模块或第二标签和线性比较信 息队列模块中至少有 一 个非空时,将标签和线性比较信息输出至空闲的线 性比较引擎,启动该空闲的线性比较引擎。
作为本发明的 一 个实施例,线性比较引擎调度器循环依次查询多个线性比较引擎的状态,如果线性比较引擎处于空闲状态,且队列模块中至少 有一个不为空,则从队列模块中读取一个标签和线性比较信息送入该线性 比较引擎中,并启动该线性比较引擎。读取队列模块时,先读取第一队列 模块,如果第一队列模块为空才读取第二队列模块。
线性比较引擎用于在线性比较引擎调度器控制下,根据标签访问线性 比较关键字緩存器以及根据线性比较信息访问规则存储器,接收规则比较 器的线性规则比较结果,直到找到与关键字相匹配的线性规则或比较完叶 子节点下的所有规则,得到与关键字相匹配的流标识符,输出标签、网络 包标识符和流标识符。作为本发明的一个实施例,线性比较引擎输出接收 的标签作为线性比较关键字緩存器的读地址,根据线性比较信息输出线性 规则存储器的读地址,接收规则比较器的比较结果,如果结果为规则不匹 配关键字,则将线性规则存储器的读地址加1输出,直到找到匹配的规则 或比较完叶子节点下的所有规则,得到分类结果,输出标签、网络包标识 符和流标识符,在线性比较引擎调度器控制下每个引擎错开输出线性比较 关键字緩存和线性规则存储器的读地址。
规则比较器用于接收线性比较关键字緩存器输出的关键字,与规则存 储器输出的线性规则相比较,如果关键字的各个域小于等于规则上界的各 个域并且大于等于规则下界的各个域,则该关键字和该规则相匹配。将线 性规则比较结果输出到线性比较引擎。
下面以6个线性比较引擎作为示例进行说明。线性比较引擎1到线性
比较引擎6是结构相同的六个线性比较引擎。内部有一个6位的循环移位 寄存器,引擎停止时寄存器为Oxl,引擎被启动后开始向高位循环移位,引 擎在移位寄存器的控制下依次完成线性比较的各步骤。引擎内部还有一个 规则计数器记录已比较的规则个数,引擎停止时计数器值为0。引擎工作 过程如下
(1 )寄存器为0x2时输出规则地址至线性规则存储器,输出标签作为
关键字存储器的读端口地址,同时规则计数器加l。
(2)寄存器为0x8时规则从规则存储器中送出,关键字从关键字緩存
19器中送出。网络包标识符和流标识符被送入引擎中暂存。规则和关键字送 入规则比较器中比较。
(3) 寄存器为0x10时,规则比较器结果输出,送入至引擎。如果规 则匹配则执行4),否则将规则地址加1重复执行l)至3)。
(4) 寄存器为0x20时,如果规则相匹配则输出网络包标识符和规则 标识符,或则规则计数器等于叶子节点规则数,则输出网络包标识符和默 i/v流标识符,同时输出标签。
如并行树搜索模块使用多个个树搜索引擎原理一样,使用多个线性比 较引擎提高了规则上界存储器和规则下界存储器的效率。
本发明的一个实施例提出了一种网络包分类的方法,包括以下步骤
流水线树搜索模块接收网络包的关键字,对树结构的前K层进行搜索, 将搜索得到的下一节点地址和线性比较信息以及所述关键字发送给分类核心 和/或输出网络包标识符和流标识符,其中K为正整数;
分类核心接收流水线树搜索模块输出的关键字、下一节点地址和线性比 较信息,访问节点存储器和规则存储器,对树结构的K层以下的部分进行搜 索并进行线性规则比较,输出网络包标识符和流标识符,其中,节点存储器 用于存储树结构的K层以后的节点信息,规则存储器用于存储线性比较规 则。
本发明在分类时间和占用空间上有着很好的表现。如图7所示为根据 本发明的 一个实施例的占用空间随规则数增加而变化的曲线,该曲线呈线 性增长,说明本发明的实施例的设备在规则增加时占用空间增长较緩。如 图8所示为根据本发明的一个实施例的设备的分类速度随规则数增加而变 化的曲线,可以看出在大量规则情况下,设备仍然有很高的包分类速度, 如25K个规则时,达到了每秒90M个包头的分类速度,按平均包头长度 330字节计算,包处理能力为237Gbps,最小包头长度40字节计算,包处 理能力为28.8Gbps。
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员 而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例 进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等 同限定。
20
权利要求
1、一种网络包分类设备,其特征在于,包括流水线树搜索模块、分类核心、节点存储器和规则存储器,所述流水线树搜索模块用于接收网络包的关键字,对树结构的前K层进行搜索,将搜索得到的下一节点地址和线性比较信息以及所述关键字发送给所述分类核心和/或输出网络包标识符和流标识符,其中K为正整数;所述分类核心用于接收所述流水线树搜索模块输出的所述关键字、下一节点地址和线性比较信息,访问所述节点存储器和规则存储器,对所述树结构的K层以下的部分进行搜索并进行线性规则比较,输出所述网络包标识符和流标识符;所述节点存储器用于存储所述树结构的K层以后的节点信息;所述规则存储器用于存储线性比较规则。
2、 根据权利要求1所述的网络包分类设备,其特征在于,所述流水线树搜索模块包括根节点寄存器、K-l个单层节点存储器模块、根节点搜索模块、K-l个节点搜索模块以及控制模块,其中,所述根节点寄存器用于存放所述树结构的根节点信息;所述K-l个单层节点存储器模块包括第二层单层节点存储器模块到第K层单层节点存储器模块,其中每个所述单层节点存储器模块用于存储所述树结构的前K层除根节点之外的其中 一层节点的节点信息;所述根节点搜索模块用于接收所述关键字,访问所述根节点寄存器,对根节点进行搜索,将所述关键字以及搜索得到的下一节点地址、线性比较信息和/或所述关键字的流标识符发送到所述第二层节点搜索模块;所述K-1个节点搜索模块包括相级联的第二层节点搜索模块到第K层节点搜索模块,每个所述节点搜索模块用于接收所述根节点搜索模块或上一层节点搜索模块发送的所述关键字以及下一节点地址、线性比较信息和/或所述关键字的流标识符,从相应的所述单层节点存储器模块中取出相应的节点,对其进行搜索,并将搜索结果发送到下一层节点搜索模块;其中所述第K层节点搜索模块用于将所述关键字以及搜索得到的下一节点地址、线性比较信息和/或流标识符发送给所述控制模块;所述控制模块用于接收所述第K层节点搜索模块发送的所述关键字以及下一节点地址、线性比较信息和/或流标识符,输出所述网络包标识符和流标识符和/或将所述关键字、下一节点地址和线性比较信息发送给所述分类核心。
3、 根据权利要求1所述的网络包分类设备,其特征在于,所述分类核心包括标签分配模块、并行树搜索模块、并行线性规则比较模块和核心分类结果池,其中,所述标签分配模块用于接收所述流水线树搜索模块输出的所述关键字、下一节点地址和线性比较信息,给每一个所述关键字分配一个标签,将所述标签、关键字和下一节点地址发送给所述并行树搜索模块,并将所述标签、关键字和线性比较信息发送给所述并行线性规则比较模块,以及接收所述核心分类结果池送回的标签并循环使用;所述并行树搜索模块用于接收所述标签分配模块发送的所述标签、关键字和下一节点地址,根据所述下一节点地址访问所述节点存储器,进行树搜索,找到叶子节点,如果所述叶子节点为空节点,则输出所述标签和默认流标识符,如果所述叶子节点为非空节点,则将所述标签和线性比较信息发送到所述并行线性规则比较模块;所述并行线性规则比较模块用于接收所述标签分配模块和所述并行树搜索模块发送的标签,关键字和线性比较信息,访问所述规则存储器,生成与所述关键字相匹配的流标识符,将所述标签、网络包标识符和流标识符发送到所述核心分类结果池;所述核心分类结果池用于接收所述并行树搜索模块和所述并行线性规则比较模块发送的所述标签、网络包标识符和流标识符,将所述标签发送到所述标签分配模块,并输出所述网络包标识符和流标识符。
4、 根据权利要求3所述的网络包分类设备,其特征在于,所述并行树搜索模块包括树搜索关键字緩存器、标签和下一节点地址队列模块、树搜索引擎调度器和多个树搜索引擎,其中,所述树搜索关键字緩存器用于存储所述标签分配模块发送的所述关键字;所述标签和下一节点地址队列模块用于存储所述标签分配模块发送的所述标签和下一节点地址;所述树搜索引擎调度器用于控制所述多个树搜索引擎,当存在空闲的树搜索引擎且所述标签和下一节点地址队列模块不为空时,读出所述标签和下一节点地址队列沖莫块中的一个标签和下一节点地址发送到所述空闲的树搜索引擎,启动所述空闲的树搜索引擎;所述树搜索引擎用于在所述树搜索引擎调度器的控制下启动,根据所述标签和下一节点地址访问所述树搜索关键字緩存器和所述节点存储器,从所述树搜索关键字緩存器中读出所述关键字的域,搜索所述树结构直到叶子节点,如果所述叶子节点为空节点,则输出所述标签、网络包标识符和默认流标识符,如果叶子节点为非空节点,则输出所述标签和线性比较信息。
5、 根据权利要求4所述的网络包分类设备,其特征在于,所述树搜索关键字緩存器为双端口存储器。
6、 根据权利要求3所述的网络包分类设备,其特征在于,所述并行线性规则比较模块包括线性比较关键字緩存器、第一标签和线性比较信息队列模块、第二标签和线性比较信息队列模块、规则比较器、线性比较引擎调度器和多个线性比较引擎,其中,所述线性比较关键字緩存器用于接收所述并行树搜索模块发送的所述关键字;所述第一标签和线性比较信息队列模块用于存放所述标签分配模块发送的所述标签和线性比较信息;所述第二标签和线性比较信息队列模块用于存放所述树搜索模块发送的所述标签和线性比较信息;所述线性比较引擎调度器用于控制所述多个线性比较引擎,当存在空闲的线性比较引擎并且所述第一标签和线性比较信息队列模块和所述第二标签和线性比较信息队列模块中至少有一个非空时,将所述标签和线性比较信息发送到所述空闲的线性比较引擎,启动所迷空闲的线性比较引擎;所述线性比较引擎用于在所述线性比较引擎调度器的控制下,根据所述标签访问所述线性比较关键字緩存器,根据所述线性比较信息访问所述线性规则存储器,接收所述规则比较器的比较结果,直到找到与所述关键字相匹配的规则或比较完叶子节点下的所有规则,得到与所述关键字相匹配的流标识符或默认流标识符,输出所述标签、网络包标识符和流标识符;所述规则比较器用于接收所述线性比较关键字緩存器发送的所述关键字,与所述线性规则存储器输出的规则相比较,将比较结果发送到所述线性比较引擎。
7、 根据权利要求6所述的网络包分类设备,其特征在于,所述线性比较关键字緩存器为双端口存储器。
8、 根据权利要求1所述的网络包分类设备,其特征在于,所述节点存储器和规则存储器中至少 一个为双端口存储器。
9、 根据权利要求1所述的网络包分类设备,其特征在于,还包括分类结果汇总模块,其与所述流水线树搜索模块和所述分类核心连接,用于接收所述流水线树搜索模块和所述分类核心产生的所述关键字标识符和所述流标识符,输出分类结果。
10、 根据权利要求1所述的网络包分类设备,其特征在于,所述分类核心包4舌至少两个分类核心,所述流水线树搜索模块还用于将所述关键字、下一节点地址和线性比较信息发送给空闲的所述分类核心。
11、 根据权利要求l-10任一项所述的网络包分类设备,其特征在于,所述网络包分类设备集成在单芯片中。
12、 一种网络包分类的方法,其特征在于,包括以下步骤流水线树搜索模块接收网络包的关键字,对树结构的前K层进行搜索,将搜索得到的下一节点地址和线性比较信息以及所述关键字发送给分类核心和/或输出网络包标识符和流标识符,其中K为正整数;所述分类核心接收所述流水线树搜索模块输出的所述关键字、下一节点地址和线性比较信息,访问所述节点存储器和规则存储器,对所述树结构的K层以下的部分进行搜索并进行线性规则比较,输出所述网络包标识符和流标识符,其中,所述节点存储器用于存储所述树结构的K层以后的节点信息, 所述规则存储器用于存储线性比较规则。
全文摘要
本发明提出了一种网络包分类设备和方法。该设备包括流水线树搜索模块,其用于接收网络包的关键字,对树结构的前K层进行搜索,将搜索得到的下一节点地址和线性比较信息以及关键字发送给分类核心和/或输出网络包标识符和流标识符,其中K为正整数;分类核心,其用于接收流水线树搜索模块输出的关键字、下一节点地址和线性比较信息,访问节点存储器和规则存储器,对树结构的K层以下的部分进行搜索并进行线性规则比较,输出网络包标识符和流标识符;节点存储器,其用于存储树结构的K层以后的节点信息;规则存储器,其用于存储线性比较规则。本发明所提出的网络包分类的设备和方法提高了存储器利用率和包分类速度。
文档编号H04L12/56GK101645852SQ20091020366
公开日2010年2月10日 申请日期2009年6月9日 优先权日2009年6月9日
发明者王永纲, 涛 章 申请人:中国科学技术大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1