掌桥专利:专业的专利平台
掌桥专利
首页

一种包分类方法、装置、转发芯片及电子设备

文献发布时间:2023-06-19 18:37:28


一种包分类方法、装置、转发芯片及电子设备

技术领域

本申请涉及计算机技术领域,特别是涉及一种包分类方法、装置、转发芯片及电子设备。

背景技术

在交换机、路由器、防火墙等具有包分类功能的电子设备中,需要通过表项查找对数据包进行分类和转发。包分类是根据预先定义的一个规则集,为每一个到达的数据包在规则集找到所匹配的最佳规则的方法。以TCAM(Ternary Content Addressable Memory,三态内容寻址存储器)存储规则集,基于内容进行规则匹配,可提高规则匹配效率,提高包分类效率,但TCAM成本较高,且功耗较大,这使得包分类的成本较高,且功耗较大。

发明内容

本申请实施例的目的在于提供一种包分类方法、装置、转发芯片及电子设备,用以解决包分类成本较高,且功耗较大的问题。具体技术方案如下:

第一方面,本申请实施例提供了一种包分类方法,应用于具有包分类功能的电子设备,所述电子设备中设置有TCAM和RAM(Random-Access Memory,随机存取存储器),所述TCAM内存储有公共规则表,所述RAM内存储有主规则表和块规则表;

所述块规则表中存储有具有相同公共规则的多个规则;

所述主规则表至少包括分裂位置集和基地址两个字段,所述块规则表中的规则归属于由分裂位置集所确定的一个子树,所述分裂位置集用于定位查找关键值在块规则表中对应的规则的位置,所述基地址用于定位所述块规则表,所述公共规则中的非通配符位的值与所述基地址指向的块规则表中所有规则的相同位的值相同;

所述公共规则表中存储有公共规则,所述公共规则表与所述主规则表中对应同一个块规则表的索引相同;

所述方法包括:

从待分类数据包中抽取目标查找关键值;

使用所述目标查找关键值在所述公共规则表中进行匹配,获得所述主规则表中目标表项的主索引;

基于所述主索引指向的目标表项包括的基地址,定位块规则表;

基于所述目标查找关键值和所述主索引指向的所述目标表项包括的分裂位置集,确定第一规则在所定位的块规则表中的次索引;

基于所述次索引指向的第一规则,对所述待分类数据包进行包分类处理。

在一些实施例中,所述TCAM内还存储有物理表,所述物理表中存储有至少一条规则;所述方法还包括:

使用所述目标查找关键值在所述物理表中进行匹配,获得第二规则;

所述基于所述次索引指向的第一规则,对所述待分类数据包进行包分类处理的步骤,包括:

从所述次索引指向的第一规则和所述第二规则中,选择优先级最高的一条规则;

按照所选择的规则,对所述待分类数据包进行包分类处理。

在一些实施例中,所述从所述次索引指向的第一规则和所述第二规则中,选择优先级最高的一条规则的步骤,包括:

基于所述目标查找关键值,分别对所述次索引指向的第一规则和所述第二规则进行校验;

从校验确定的与所述目标查找关键值匹配的规则中,选择优先级最高的一条规则。

在一些实施例中,所述公共规则表、主规则表和块规则表通过以下方式生成:

基于全局规则集中各规则的平衡位构建规则决策树,所述平衡位为各位中取值为0的规则数量与取值为1的规则数量差值最小的一位;

分别从所述规则决策树的每个叶子节点开始向上按广度优先遍历,得到每个叶子节点对应的最深规则子树,所述最深规则子树为包括的平衡位小于或等于预设分裂位深的规则子树中最深的规则子树;

基于每个最深规则子树,生成所述公共规则表、所述主规则表和所述块规则表。

在一些实施例中,所述基于每个最深规则子树,生成所述公共规则表、所述主规则表和所述块规则表的步骤,包括:

基于每个最深规则子树包括的规则集,分别生成一个块规则表;

基于每个最深规则子树包括的平衡位,分别生成一个分裂位置集;

基于每个最深规则子树对应的分裂位置集和块规则表的基地址,生成所述主规则表;

基于每个最深规则子树对应的所述主规则表中的表项索引和每个最深规则子树包括的规则集的公共规则,生成所述公共规则表。

在一些实施例中,所述基于全局规则集中各规则的平衡位构建规则决策树的步骤,包括:

将全局规则集作为待分裂规则集,所述全局规则集包含于规则决策树的根节点中;

确定所述待分裂规则集中各规则的平衡位;

将所述待分裂规则集中所述平衡位的值为0的规则添加在第一侧子节点中,并将所述待分裂规则集中所述平衡位的值为1的规则添加在第二侧子节点中;

针对分裂得到的每个子节点,若该子节点包括多条规则,则将该子节点包括的规则集作为待分裂规则集,重新执行所述确定所述待分裂规则集中个规则的平衡位的步骤,直至分裂得到的每个子节点包括一条规则为止,得到所述规则决策树。

在一些实施例中,所述方法还包括:

将所述全局规则集中所述平衡位的值为通配符的规则划分为丢弃规则集;

若已构建规则决策树的数量小于N,则将所述丢弃规则集作为全局规则集,重新执行所述基于全局规则集中各规则的平衡位构建规则决策树的步骤,直至已构建规则决策树的数量等于N,N小于所述TCAM的最大并发数。

在一些实施例中,所述TCAM内还存储有物理表,所述方法还包括:

在构建N个规则决策树后,将当前丢弃规则集中的规则添加至所述物理表中。

在一些实施例中,所述规则包括前缀类字段、范围类字段、精确类字段以及通配类字段中的至少一种;

在所述基于全局规则集中各规则的平衡位构建规则决策树之前,所述方法还包括:

对所述全局规则集中的每条规则进行以下处理:

对于该规则包括的前缀类字段,将前缀长度的最高位的值设置为前缀值,将其他位的值设置为通配符;

对于该规则包括的范围类字段,将该范围类字段拆分为多个子范围,将每个子范围对应的位的取值设置为该子范围对应的等价前缀值;

对于该规则包括的精确类字段,将各位的值设置为精确值;

对于该规则包括的通配类字段,将各位的值设置为通配符。

在一些实施例中,所述公共规则的生成方式为:

若所述块规则表存储的所有规则的一位的值均为1,则将所述块规则表对应的公共规则的该位的值设置为1;

若所述块规则表存储的所有规则的一位的值均为0,则将所述块规则表对应的公共规则的该位的值设置为0;

若所述块规则表存储的所有类规则的一位的值不全为1,和/或所述块规则表存储的所有规则的一位的值不全为0,则将所述块规则表对应的公共规则的该位的值设置为通配符。

第二方面,本申请实施例提供了一种包分类装置,应用于具有包分类功能的电子设备,所述电子设备中设置有TCAM和RAM,所述TCAM内存储有公共规则表,所述RAM内存储有主规则表和块规则表;

所述块规则表中存储有具有相同公共规则的多个规则;

所述主规则表至少包括分裂位置集和基地址两个字段,所述块规则表中的规则归属于由分裂位置集所确定的一个子树,所述分裂位置集用于定位查找关键值在块规则表中对应的规则的位置,所述基地址用于定位所述块规则表,所述公共规则中的非通配符位的值与所述基地址指向的块规则表中所有规则的相同位的值相同;

所述公共规则表中存储有公共规则,所述公共规则表与所述主规则表中对应同一个块规则表的索引相同;

所述装置包括:

抽取模块,用于从待分类数据包中抽取目标查找关键值;

第一匹配模块,用于使用所述目标查找关键值在所述公共规则表中进行匹配,获得所述主规则表中目标表项的主索引;

定位模块,用于基于所述主索引指向的目标表项包括的基地址,定位块规则表;

确定模块,用于基于所述目标查找关键值和所述主索引指向的所述目标表项包括的分裂位置集,确定第一规则在所定位的块规则表中的次索引;

处理模块,用于基于所述次索引指向的第一规则,对所述待分类数据包进行包分类处理。

在一些实施例中,所述TCAM内还存储有物理表,所述物理表中存储有至少一条规则;所述装置还包括第二匹配模块;

所述第二匹配模块,用于使用所述目标查找关键值在所述物理表中进行匹配,获得第二规则;

所述处理模块,具体用于从所述次索引指向的第一规则和所述第二规则中,选择优先级最高的一条规则;按照所选择的规则,对所述待分类数据包进行包分类处理。

在一些实施例中,所述处理模块,具体用于基于所述目标查找关键值,分别对所述次索引指向的第一规则和所述第二规则进行校验;从校验确定的与所述目标查找关键值匹配的规则中,选择优先级最高的一条规则。

在一些实施例中,所述装置还包括第一生成模块,用于生成所述公共规则表、主规则表和块规则表,包括:

构建子模块,用于基于全局规则集中各规则的平衡位构建规则决策树,所述平衡位为各位中取值为0的规则数量与取值为1的规则数量差值最小的一位;

遍历子模块,用于分别从所述规则决策树的每个叶子节点开始向上按广度优先遍历,得到每个叶子节点对应的最深规则子树,所述最深规则子树为包括的平衡位小于或等于预设分裂位深的规则子树中最深的规则子树;

生成子模块,用于基于每个最深规则子树,生成所述公共规则表、所述主规则表和所述块规则表。

在一些实施例中,所述生成子模块,具体用于:

基于每个最深规则子树包括的规则集,分别生成一个块规则表;

基于每个最深规则子树包括的平衡位,分别生成一个分裂位置集;

基于每个最深规则子树对应的分裂位置集和块规则表的基地址,生成所述主规则表;

基于每个最深规则子树对应的所述主规则表中的表项索引和每个最深规则子树包括的规则集的公共规则,生成所述公共规则表。

在一些实施例中,所述构建子模块,具体用于:

将全局规则集作为待分裂规则集,所述全局规则集包含于规则决策树的根节点中;

确定所述待分裂规则集中各规则的平衡位;

将所述待分裂规则集中所述平衡位的值为0的规则添加在第一侧子节点中,并将所述待分裂规则集中所述平衡位的值为1的规则添加在第二侧子节点中;

针对分裂得到的每个子节点,若该子节点包括多条规则,则将该子节点包括的规则集作为待分裂规则集,重新执行所述确定所述待分裂规则集中个规则的平衡位的步骤,直至分裂得到的每个子节点包括一条规则为止,得到所述规则决策树。

在一些实施例中,所述第一生成模块还包括划分子模块;

所述划分子模块,用于将所述全局规则集中所述平衡位的值为通配符的规则划分为丢弃规则集;

所述构建子模块,还用于若已构建规则决策树的数量小于N,则将所述丢弃规则集作为全局规则集,重新执行所述基于全局规则集中各规则的平衡位构建规则决策树的步骤,直至已构建规则决策树的数量等于N,N小于所述TCAM的最大并发数。

在一些实施例中,所述TCAM内还存储有物理表,所述第一生成模块还包括添加子模块;

所述添加子模块,用于在构建N个规则决策树后,将当前丢弃规则集中的规则添加至所述物理表中。

在一些实施例中,所述规则包括前缀类字段、范围类字段、精确类字段以及通配类字段中的至少一种;

所述装置还包括:设置模块,用于在所述基于全局规则集中各规则的平衡位构建规则决策树之前,对所述全局规则集中的每条规则进行以下处理:

对于该规则包括的前缀类字段,将前缀长度的最高位的值设置为前缀值,将其他位的值设置为通配符;

对于该规则包括的范围类字段,将该范围类字段拆分为多个子范围,将每个子范围对应的位的取值设置为该子范围对应的等价前缀值;

对于该规则包括的精确类字段,将各位的值设置为精确值;

对于该规则包括的通配类字段,将各位的值设置为通配符。

在一些实施例中,所述装置还包括第二生成模块,用于生成所述公共规则,具体用于:

若所述块规则表存储的所有规则的一位的值均为1,则将所述块规则表对应的公共规则的该位的值设置为1;

若所述块规则表存储的所有规则的一位的值均为0,则将所述块规则表对应的公共规则的该位的值设置为0;

若所述块规则表存储的所有类规则的一位的值不全为1,和/或所述块规则表存储的所有规则的一位的值不全为0,则将所述块规则表对应的公共规则的该位的值设置为通配符。

第三方面,本申请实施例还提供了一种转发芯片,所述转发芯片用于执行上述任一所述的包分类方法步骤。

第四方面,本申请实施例还提供了一种具有包分类功能的电子设备,包括处理器和第三方面提供的转发芯片;所述处理器基于全局规则集,构建TCAM内的公共规则表以及RAM内的主规则表和块规则表;所述转发芯片基于所述公共规则表、所述主规则表和所述块规则表,执行上述任一所述的包分类方法步骤。

本申请实施例有益效果:

本申请实施例提供的技术方案中,具有包分类功能的电子设备中设置有TCAM和RAM,电子设备将多个规则的公共规则存储在TCAM,将具体的规则存储在RAM,这可以减小对TCAM容量的需求。电子设备利用查找性能较高的TCAM中存储的公共规则,排除大部分的规则;后续利用RAM中排除后剩余的规则,对待分类数据包进行包分类处理。相比于纯利用TCAM的包分类方法,本申请实施例提供的技术方案结合TCAM和RAM完成包分类处理,可以使用更小容量的TCAM实现更大规模的规则查找,节约了包分类的成本和功耗。

当然,实施本申请的任一产品或方法并不一定需要同时达到以上所述的所有优点。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的实施例。

图1为相关技术中电子设备的一种结构示意图;

图2为相关技术中规则查找方法的一种流程示意图;

图3为本申请实施例提供的包分类方法的第一种流程示意图;

图4为本申请实施例提供的公共规则表、主规则表和块规则表的对应关系的一种示意图;

图5a为本申请实施例提供的校验块的数据结构的第一种示意图;

图5b为本申请实施例提供的校验块的数据结构的第二种示意图;

图5c为本申请实施例提供的校验块的数据结构的第三种示意图;

图6为本申请实施例提供的校验块内有效数据和不关心的数据的一种示意图;

图7为本申请实施例提供的包分类方法的第二种流程示意图;

图8为本申请实施例提供的规则查找的一种流程示意图;

图9为本申请实施例提供的公共规则生成的一种示意图;

图10为本申请实施例提供的公共规则表、主规则表和块规则表生成方法的第一种流程示意图;

图11为本申请实施例提供的规则集的一种示意图;

图12为本申请实施例提供的规则决策树的一种示意图;

图13为步骤S1001的一种细化示意图;

图14为本申请实施例提供的公共规则表、主规则表和块规则表生成方法的第一种流程示意图;

图15为本申请实施例提供的包分类装置的第一种结构示意图;

图16为本申请实施例提供的包分类装置的第二种结构示意图;

图17为本申请实施例提供的具有包分类功能的电子设备的一种结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员基于本申请所获得的所有其他实施例,都属于本申请保护的范围。

在交换机、路由器、防火墙等具有包分类功能的电子设备中,需要通过表项查找对报文进行分类和转发。传统的线性查找法、哈希表查找性等表项查找方法,是通过将key(关键值)转换为地址,索引SRAM(Static Random-Access Memory,静态随机存取存储器)或DRAM(Dynamic Random Access Memory,动态随机存取存储器)中的内容完成查找,关键值为由匹配字段的值所组成的关键字的值。

针对MAC(Media Access Control,媒体访问控制)地址表的表项查找一般使用上述基于地址索引的表项查找方法实现。而对于ACL(Access Control Lists,访问控制列表)、流表、转发表、路由表这类表项,它们的规则中会指定某些字段是不关心的,key需要与规则逐条比对,筛选出关心的字段完全匹配且优先级最高的一条规则,基于上述地址索引的表项查找方法显然不能满足此类规则的匹配需求,于是引入了更复杂的包分类方法。

包分类是根据预先定义的一个规则集,为每一个到达的数据包在规则集找到所匹配的最佳规则的方法。其中,一个规则集是由多条规则所构成,每条规则由三个部分组成:第一部分是与数据包包头相对应的判断谓词表达式(Predicate),简称表达式,该表达式可以是前缀、范围、精确值以及通配符(*),该第一部分即为规则的匹配域,根据第一部分中值的类型,如前缀、范围、精确值以及通配符等,匹配域可以包括前缀域(又可以称为前缀类字段)、精确值域(又可以称为精确类字段)、范围域(又可以称为范围类字段)、通配符域(又可以称为通配类字段)等;第二部分是规则匹配后的执行动作(Action),即规则的动作域,用以指示对数据包的下一步操作,如转发数据包或者丢弃数据包等;第三部分是规则优先级(Priority),规则集中的规则按照优先级依次降序排列。

在具有包分类功能的电子设备中设置有包分类器,如图1所示,包分类器中集成了处理器和转发引擎所执行的包分类处理操作,以及包分类处理操作所需的规则集,处理器和转发引擎基于包分类器中存储的规则集,以及数据包包头中的信息进行包分类处理。图1中,规则集可以为ACL(Access Control Lists,访问控制列表)、流表、转发表、路由表等表中存储的包含匹配域和动作域的规则的集合。

TCAM是一种定制的存储器,传统的RAM存储器根据给定地址进行存储单元内容的查找,而TCAM则根据给定的内容来判断所有存储单元中是否含有匹配该内容的存储单元。TCAM是在CAM(Content Addressable Memory,内容寻址存储器)的基础上发展出来的。与CAM中的bit(位)单元只支持“0”或“1”两种状态不同,TCAM还有一个“不关心”状态,所以称为“三态”,它是通过掩码来实现“三态”,正是TCAM的这个第三种状态特征使其既能进行精确匹配查找,又能进行模糊匹配查找。TCAM表项中的规则按照优先级从高到底的顺序依次存储,整个表项空间的所有数据在同一时刻被查询,查找速度不受表项空间数据大小影响,每个时钟周期完成一次查找。

规则的匹配域中的前缀类字段、精确类字段、范围类字段和通配符类字段这些字段都能直接转换成关键值(key)和掩码(mask)的形式,键值(value)用于指示key具体的值,mask表示key中对应bit是否关心,1表示关心,0表示不关心。其中,范围类字段的转换比较复杂,需要将该范围类字段划分为若干个连续且不间断的子范围,使得每个子范围都可以等价表示为一个前缀,且所有子范围的取值集合与原来的范围类字段取值集合完全相同。这样,每个子范围可以单独构成一条完全由key和mask表示的规则,直接存储于TCAM中。例如,对于范围类字段[2,5],可以将该范围类字段划分为如下2个子范围:[2,3]、[4,5],子范围[2,3]可以用二进制的前缀001*进行等价表示,子范围[4,5]可以用二进制的前缀010*进行等价表示。其中,*为通配符,*的bit可以取0,也可以取1。

对于一个位宽为W的范围类字段,最多需要2W-2个编码前缀来进行等价表示,前缀的个数称为膨胀系数。如果规则中存在多个范围类字段,总的膨胀系数需要等于所有范围类字段的膨胀系数的乘积。若考虑两个16bit位的范围类字段,膨胀系数可能达到(2*16-2)*(2*16-2)=900。

Key和mask结合的规则匹配方式适合于TCAM的存储方式。每条规则的各个字段转换成key和mask的形式后,再按照约定的顺序组织成完整的key和mask,直接存储在TCAM中;查找规则时,将接收到的数据包的各个字段按照约定的顺序组织成一个查找key,将查找key输入TCAM中进行查找,便能够直接得到结果。如图2所示的查找流程,查找key的value与TCAM中存储的N条规则进行匹配,通过每个规则对应的匹配线输出相应的匹配结果给优先级编码器;优先级编码器从匹配的规则中选择优先级最高的规则,并进行编码输出索引,通过索引从RAM(Random Access Memory,随机存取存储器)中获得输出结果,即该规则对应的动作,并按照获得的动作对数据包进行处理,如转发数据包或者丢弃数据包等。

利用TCAM,电子设备能够快速查找到所需的规则,提高规则匹配效率,提高包分类效率,但TCAM作为一种定制的存储器,成本较高,且容量小、功耗高,这在一定程度上,增加了包分类的成本和功耗。

为解决上述包分类成本较高,且功耗较大的问题,本申请实施例提供了一种包分类方法,该方法应用于具有包分类功能的电子设备,该电子设备可以为交换机、路由器、防火墙等电子设备。为便于理解,下面将具有包分类功能的电子设备简称为电子设备。

本申请实施例提供的包分类方法中,电子设备中设置有TCAM和RAM,电子设备将多个规则的公共规则存储在TCAM,将具体的规则存储在RAM,这可以减小对TCAM容量的需求。实测中,应用本申请实施例提供的包分类方法,能够使用2K*40B(bit)的TCAM实现32K*40B的规则存储,而如果使用TCAM直接存储32K*40B的规则,则需要32K*40B的TCAM空间。另外,本申请实施例提供的包分类方法中,电子设备利用查找性能较高的TCAM中存储的公共规则,排除大部分的规则;后续利用RAM中排除后剩余的规则,对待分类数据包进行包分类处理。相比纯利用TCAM存储规则实现包分类的方法,本申请实施例提供的包分类方法,结合TCAM和RAM完成包分类处理,可以使用更小的TCAM容量实现更大规模的规则查找,节约了包分类的成本和功耗。

此外,电子设备在从TCAM内的公共规则表中查找到需要的公共规则后,才访问RAM中相应的主规则表,进而访问相应的块规则表。以公共规则表的数量为N为例,主规则表的数量也是N,电子设备访问RAM的次数为最差为2N次,也就是,内存访问次数最差为2N次,且内存访问次数不会随规则规格的变化而变化;而纯软件算法查找规则的内存访问次数往往随规则和匹配域的增加而增加。而在规则查找过程中,内存访问往往是最耗时的,因此相比纯软件算法,本申请实施例提供的技术方案能够提供更高的查找性能。

下面通过具体实施例,对本申请实施例提供包分类方法进行详细说明。

参见图3,图3为本申请实施例提供的包分类方法的第一种流程示意图,该方法应用于具有包分类功能的电子设备。该电子设备中设置有TCAM和RAM,TCAM内存储有公共规则表,RAM内存储有主规则表和块规则表;块规则表中存储有具有相同公共规则的多个规则;主规则表至少包括分裂位置集和基地址两个字段,块规则表中的规则归属于由分裂位置集所确定的一个子树,分裂位置集用于定位查找关键值在块规则表中对应的规则的位置,基地址用于定位块规则表,公共规则中的非通配符位的值与基地址指向的块规则表中所有规则的相同位的值相同;公共规则表中存储有公共规则,公共规则表与主规则表中对应同一个块规则表的索引相同。

本申请实施例中,电子设备中可以存储一个或多个公共规则表,一个或多个主规则表,一个或多个块规则表。公共规则表和主规则表一一对应,对于相同索引的公共规则表的表项和主规则表的表项,二者对应同一个块规则表,主规则表中一个表项对应一个块规则表,主规则表包括多个表项时,该主规则表与多个块规则表对应。以一个公共规则表和一个主规则表为例,公共规则表、主规则表和块规则表的对应关系如图4所示。其中,索引用于指示表项在表中的位置。

公共规则表建立在TCAM中,公共规则表又可以称为TCAM表,TCAM表中的一条表项为一个块规则表中多个规则的公共规则,如图4中的Head 0-n。本申请实施例中,一个块规则表中的多个规则构成一个规则块。

一个TCAM表有一个对应的主规则表存放在RAM中,如图4中的L0-Ln。该主规则表可以为线性表,或RAM支持的其他形式表,主规则表又可以称为主(main)表。main表中的一条表项存储一个规则块的分裂位置集(split bits)和下级表的基地址,这里,下级表即为存储该规则块的块规则表,每个规则块对应表项在main表中的偏移和该规则块对应表项在TCAM表中的偏移相同。这里的偏移即为索引,如图4中的主索引。

一个规则块包括的多条规则构成一个块规则表,并存储在RAM中,如图4中的规则0-3构成一个规则块,该规则块存储在RAM中的块规则表0中。块规则表可以为线性表,或RAM支持的其他形式表,块规则表又可以称为块(Block)表,如图4中的Block表0、Block表n。一个block表的基地址和分裂位置集存储在main表中的一个表项中。分裂位置集由多个bit位组成,假设,分裂位置集包括的bit位数量为S,则Block表的大小为2的S次方,即Block表包括2的S次方条规则。例如,S=2,2的2次方=4,则Block表包括4条规则。电子设备在获知一个规则块的分裂位置集的情况下,抽取该规则块中每条规则在这S个bit位的值,组成每条规则的偏移(offset),该偏移即为规则在block表中的索引,如图4中的次索引。

上述公共规则表、主规则表和块规则表可以统称为算法表。

本申请实施例中,规则可以包括前缀类字段、范围类字段、精确类字段以及通配类字段中的一种或多种,如表1所示的规则R

表1

表1中,10.0.8.3/24、10.1.6.20/16、10.1.0.0/16、10.1.8.15/24为前缀值,属于前缀类字段;0~1024、0~2048为范围类字段;22、80为精确值,属于精确类字段;*为通配符,属于通配类字段。

本申请实施例中,对于规则包括的前缀类字段,前缀长度的最高bit位的值设置为前缀值,将其他bit位的值设置为通配符。例如,表1所示的规则R

表2

对于规则包括的范围类字段,该范围类字段拆分为多个连续且不间断的子范围,每个子范围对应的bit位的取值设置为该子范围对应的等价前缀值,具体的等价表示方式可参见上述相关技术中的描述,此处不再赘述。

对于规则包括的精确类字段,精确类字段中的各bit位的值设置为精确值。例如,表1所示的规则R

对于规则包括的通配类字段,该通配类字段中的各bit位的值设置为通配符。例如,表1所示的规则R

本申请实施例中,电子设备可以直接按照上述规定,设置规则中的范围类字段、前缀类字段、精确类字段和通配类字段。

本申请实施例中,为便于TCAM存储,电子设备可以将规则转换为key和mask的形式,使用key和mask表示规则。

例如,电子设备可以按照如下转换方法,将规则转换为key和mask的形式:

对于前缀类字段,前缀长度为L,key为前缀值,mask的前L个bit位的值为1,剩余的bit位的值为0。例如,源IP为10.1.0.0/16,转换后的key为十六进制的0x0A010000,mask为十六进制0xFFFF0000;

对于范围类字段,将该范围类字段的范围切分为若干个连续且不间断的子范围,使得每个子范围都可以等价表示为一个前缀,且所有子范围的取值集合与原来的范围类字段取值集合完全相同;

对于精确值类字段,key为精确值,mask全为1;

对于通配符类字段,key和mask全为0。

对于规则R的任一bit位I的值,与key和mask的关系如下:

R[I]=0,表示mask[I]=1,key[I]=0;

R[I]=1,表示mask[I]=1,key[I]=1;

R[I]=*,表示mask[I]=0,key[I]=0或key[I]=1。

基于上述规则,以及TCAM中存储的公共规则表和RAM中存储的主规则表和块规则表,如图3所示,本申请实施例提供的包分类方法包括以下步骤:

步骤S301:从待分类数据包中抽取目标查找关键值。

本申请实施例中,电子设备接收用户输入的数据包或其他设备向该电子设备输入的数据包,该电子设备接收的数据包即为待分类数据包。电子设备在获取到待分类数据包后,可以从待分类数据包的包头中抽取构成key的关键信息,并利用抽取的关键信息,组成查找key,即目标查找key。

例如,关键信息为五元组,即源IP、目的IP、源端口、目的端口和传输协议等,查找key的组成为五元组;若电子设备抽取到源IP为10.1.0.0,目的IP为20.1.0.1,源端口为8080,目的端口为8081,传输协议为TCP(Transmission Control Protocol,传输控制协议),则电子设备组成查找key的示例可以为10.1.0.0-8080-20.1.0.1-8081-TCP。

本申请实施例中,对查找key中各个字段的顺序不进行限定,只要保证查找key中各个字段的顺序与规则中各个字段的顺序一致即可,例如,规则包括源IP、目的IP、源端口、目的端口这4个字段,这4个字段的顺序为:源IP→目的IP→源端口→目的端口;则查找key中各个字段的顺序也是:源IP→目的IP→源端口→目的端口。

步骤S302:使用目标查找关键值在公共规则表中进行匹配,获得主规则表中目标表项的主索引。

在获得目标查找key后,电子设备使用目标查找key在公共规则表中进行匹配,获得匹配的公共规则所在表项的索引,该索引即为主规则表中目标表项的索引,本申请实施例中,将主规则表中目标表项的索引称为主索引。本申请实施例中,目标查找key与公共规则匹配,可以理解为:目标查找key与公共规则在相同bit位的值相同,或公共规则在相同bit位的值为*。

步骤S303,基于主索引指向的目标表项包括的基地址,定位块规则表。

公共规则表与主规则表一一对应,且公共规则表与主规则表中对应同一个块规则表的索引相同。电子设备在从TCAM中获得主索引后,读取主规则表中主索引对应的目标表项,获得块规则表的基地址和分裂位置集;进而定位所读取得到的基地址处的块规则表。

步骤S304,基于目标查找关键值和主索引指向的目标表项包括的分裂位置集,确定第一规则在所定位的块规则表中的次索引。

如步骤S303部分的描述,电子设备读取主规则表中主索引对应的目标表项,可以获得块规则表的基地址和分裂位置集。电子设备从目标查找key中,抽取读取得到的目标分裂位置集所指示的各bit位的值,由抽取的各bit位的值组成次索引,该次索引即为所定位的块规则表中匹配的规则的偏移。为便于区分和理解,将所定位的块规则表中匹配的规则称为第一规则,并不起限定作用。

本申请实施例中不限定步骤S303和步骤S304的执行顺序。

步骤S305,基于次索引指向的第一规则,对待分类数据包进行包分类处理。

电子设备读取步骤S303中所定位的块规则表中次索引对应的第一规则,按照该第一规则中的动作域,对待分类数据包进行包分类处理,如转发待分类数据包,或丢弃待分类数据包。

本申请实施例中,电子设备中可以存储N个TCAM表,N大于等于1。针对每个TCAM表,电子设备可以基于该TCAM表,该TCAM表对应的main表,该TCAM表对应的Block表,获取一条第一规则。这样,N个TCAM表,电子设备可以获取至多N条第一规则。

这种情况下,电子设备可以从获取的N条规则中,选择优先级最高的一条第一规则,对待分类数据包进行包分类处理。本申请实施例中,电子设备还可以通过其他方式从获取的N条规则中选择一条规则,进而对待分类数据包进行包分类处理,对此不进行限定。

在一些实施例中,为保证包分类处理的准确性,电子设备在从Block表中,获取一条第一规则后,对第一规则和目标查找key进行校验;若校验结果指示第一规则和目标查找key匹配,则根据从block表中获取的第一规则,对待分类数据包进行包分类处理。当获取到多条第一规则时,电子设备从校验结果指示与目标查找key匹配的N条第一规则中,选择优先级最高的一条规则,进而对待分类数据包进行包分类处理。若校验结果指示第一规则和目标查找key不匹配,则电子设备拒绝使用该第一规则,对待分类数据包进行包分类处理。

本申请实施例中,电子设备对第一规则和目标查找key进行完整性校验,或局部性校验。

在完整性校验时,块规则表中完整存储了每条规则的匹配域,即完整存储了每条规则的key和mask;电子设备比较目标查找key、第一规则的key和mask的每一bit位,基于比较结果确定第一规则和目标查找key是否匹配。这里,当第一规则和目标查找key的每个bit位满足如下任一一种情况时,第一规则和目标查找key匹配:

情况一,相同bit位,第一规则的mask=0;

情况二,相同bit位,第一规则的mask=1,第一规则的key=0,目标查找key=0;

情况三,相同bit位,第一规则的mask=1,第一规则的key=1,目标查找key=1。

否则,如任一bit位不满足上述任一情况,则第一规则和目标查找key不匹配。

在局部性校验时,块规则表中压缩存储了每条规则的匹配域,即压缩存储了每条规则的key和mask。例如,块规则表中的一个规则压缩为至少一个校验块,校验块的类型包括掩码类型和非掩码类型,掩码类型的校验块中包括key和mask,非掩码类型的校验块中包括生效位连续的key,生效位为mask为1的bit位。

对于不同类型的校验块的数据结构,可参见图5a-5c所示。图5a为掩码类型的校验块的数据结构,该校验块的长度为32bit,其中,2-0bit存储校验块的类型的编码,15-3bit存储mask,28-16bit存储key,31-29bit存储key的起始bit位在其所属规则的一个字节内部的偏移量。

图5b为非掩码类型的校验块的一种数据结构,该校验块的长度为32bit,其中,2-0bit存储校验块的类型的编码,31-3bit存储key,key为与目标查找key匹配的数据,key可以占满31-3bit,也可以仅占用部分,也就是,31-3bit中存储的key的最大长度为29bit,如图5b中的最长匹配数据。

为便于区分校验块中的有效数据和不关心的数据,key存储在校验块的高bit位,未被key占用的低bit位采用不关心的数据填充,不关心的数据中与有效数据相邻的一个bit的值设置为0,不关心的数据中的其他bit的值设置为1,如图6所示。

图5c为非掩码类型的校验块的另一种数据结构,该校验块的长度为32bit,其中,2-0bit存储校验块的类型的编码,28-3bit存储key,31-29bit存储key的起始bit位在其所属规则的一个字节内部的偏移量。其中,key为与目标查找key匹配的数据,key可以占满28-3bit,如图5c中的最长匹配数据,也可以仅占用部分,也就是,28-3bit中存储的key的最大长度为26bit。28-3bit中数据的存储方式可参见图6所示。

本申请实施例中,对于非掩码类型的校验块,其所有bit位也可以全部用于存储key,即32bit的校验块中存储32bit的key,对此不进行限定。

基于上述校验块,针对第一规则包括的每个校验块,电子设备按照该校验块的类型确定待匹配数据长度;按照该校验块包括的数据的起始bit位,从目标查找key中的相同起始bit位开始,按照待匹配数据长度提取待匹配数据,将待匹配数据与该校验块包括的数据进行匹配;若目标查找key与待匹配规则中的所有校验块均匹配成功,则确定目标查找key与第一规则匹配;否则,确定目标查找key与第一规则不匹配。其中,待匹配数据长度为校验块所存储的key的长度,不同类型的校验块,其存储key的长度是不同的,因此,电子设备按照该校验块的类型确定待匹配数据长度,以从目标查找key中正确提取待匹配数据,准确完成待匹配数据与该校验块包括的数据的匹配。

在局部性校验时,对于掩码类型的校验块,当该校验块和待匹配数据的每个bit位满足如下任一一种情况时,该校验块和待匹配数据匹配:

情况一,相同bit位,校验块的mask=0;

情况二,相同bit位,校验块的mask=1,校验块的key=0,待匹配数据的=0;

情况三,相同bit位,校验块的mask=1,校验块的key=1,待匹配数据的=1。

否则,如任一bit位不满足上述任一情况,则校验块和待匹配数据不匹配,目标查找key与第一规则不匹配。

对于非掩码类型的校验块,当该校验块和待匹配数据的每个bit位满足如下任一一种情况时,该校验块和待匹配数据匹配:

情况一,相同bit位,校验块的key=0,待匹配数据的key=0;

情况二,相同bit位,校验块的key=1,待匹配数据的key=1。

否则,如任一bit位不满足上述任一情况,则校验块和待匹配数据不匹配,目标查找key与第一规则不匹配。

本申请实施例中,电子设备中设置有TCAM和RAM,电子设备将多个规则的公共规则存储在TCAM,将具体的规则存储在RAM,这可以减小对TCAM容量的需求。电子设备利用查找性能较高的TCAM中存储的公共规则,排除大部分的规则;后续利用RAM中排除后剩余的规则,对待分类数据包进行包分类处理。相比于纯利用TCAM的包分类方法,本申请实施例提供的技术方案结合TCAM和RAM完成包分类处理,可以使用更小容量的TCAM实现更大规模的规则查找,节约了包分类的成本和功耗。

在一些实施例中,TCAM内还存储有物理表,物理表中存储有至少一条规则。通过该物理表,电子设备可以将冗余的规则存储在物理表中,使得电子设备能够将目标查找key与电子设备中的所有规则进行匹配,获得真正与目标查找key匹配的规则。上述冗余的规则为除块规则表包括的规则外的规则,即与块规则表中的规则无法构成一个规则块的规则。

基于图3所示实施例,以及上述TCAM内存储的物理表,本申请实施例还提供了一种包分类方法,如图7所示,图7为本申请实施例提供的包分类方法的第二种流程示意图,该方法应用于电子设备,该包分类方法可以包括步骤S701-S707。

步骤S701,从待分类数据包中抽取目标查找关键值。步骤S701与步骤S301相同。

步骤S702,使用目标查找关键值在物理表中进行匹配,获得第二规则。

本申请实施例中,在获得目标查找key后,电子设备使用目标查找key在物理表进行匹配,获得匹配的规则。本申请实施例中,目标查找key与物理表中的一条规则匹配,可以理解为:目标查找key与该规则在相同bit位的值相同,或该规则在相同bit位的值为*。

步骤S703,使用目标查找关键值在公共规则表中进行匹配,获得主规则表中目标表项的主索引。步骤S703与步骤S302相同。

本申请实施例不限定步骤S702和步骤S703的执行顺序。

步骤S704,基于主索引指向的目标表项包括的基地址,定位块规则表。步骤S704与步骤S303相同。

步骤S705,基于目标查找关键值和主索引指向的目标表项包括的分裂位置集,确定第一规则在所定位的块规则表中的次索引。步骤S705与步骤S304相同。

步骤S706,从次索引指向的第一规则和第二规则中,选择优先级最高的一条规则。

本申请实施例中,电子设备在获得第一规则和第二规则后,从第一规则和第二规则中,选择优先级最高的一条规则。其中,第一规则的数量可以为一个或多个。

在一些实施例中,上述步骤S706可以为:基于目标查找关键值,分别对次索引指向的第一规则和第二规则进行校验;从校验确定的与目标查找关键值匹配的规则中,选择优先级最高的一条规则。这里的校验可以为完整性校验,也可以为局部性校验,具体的校验过程可参见上述步骤S305部分的相关描述。

本申请实施例中,电子设备在从公共规则表、主规则表和块规则表和物理表中,查找到与key匹配的规则后,对查找到的每条规则分别和目标查找key进行校验,保证了规则和目标查找key匹配,进而提高了对待分类数据包进行包分类处理的准确性。

步骤S707,按照所选择的规则,对待分类数据包进行包分类处理。

例如,所选择的规则的动作为转发,则电子设备转发待分类数据包;或者,所选择的规则的动作为丢弃,则电子设备丢弃待分类数据包;或者,所选择的规则的动作为深度包检测,则电子设备对待分类数据包进行深度包检测,基于检测结果,对待分类数据包进行处理,如转发或丢弃。

本申请实施例提供的技术方案中,电子设备将多个规则的公共规则存储在TCAM,将具体的规则存储在RAM,这可以减小对TCAM容量的需求。另外,电子设备将一部分规则直接存储在TCAM物理表中,电子设备利用公共规则表和物理表,完成从所有规则中查找匹配的规则,在节约了包分类的成本和功耗的同时,提高了包分类过程中规则查找的完整性。

下面结合图8所示的规则查找流程,对本申请实施例提供的包分类方法进行详细说明。

电子设备中的TCAM中存储了N个TCAM表,如图8所示的TCAM表1-N,TCAM中还存储了1个物理表;RAM中存储N个main表,如图8所示的main表1-N,这N个main表与N个TCAM表一一对应。RAM中还存储有多个Block表,如图8所示的Block表1-X,…,block表N-X,其中,x=1、2、…、n,1个main表对应n个Block表。

电子设备从获取的数据包中抽取查找key,使用查找key在TCAM表1-N进行匹配,获得相应的索引1-N;分别从main表1-N中查找索引1-N对应的表项,从索引1-N对应的表项获取Bock表的基地址和分裂位置集;基于分裂位置集,电子设备可以确定所需的规则在Block表中的偏移,Block表的基地址和偏移构成规则的地址,如图8中的地址1-N。电子设备利用地址1-N,分别从Block表1-X、…、Bock表N-X中获得规则,如图8所示的结果1-N。一个结果包括一个规则。

此外,电子设备使用查找key在物理表进行匹配,得到一个规则,如图8所示的结果N+1。

电子设备从N+1个结果中选择优先级最高的一个结果,如图8所示的最好结果。电子设备按照该最好结果,对数据包进行包分类处理。

在一些实施例中,针对每个块规则表,该块规则表对应的公共规则可以通过以下方式生成:

若该块规则表存储的所有规则的一位的值均为1,则将该块规则表对应的公共规则的该位的值设置为1;

若该块规则表存储的所有规则的一位的值均为0,则将该块规则表对应的公共规则的该位的值设置为0;

若该块规则表存储的所有类规则的一位的值不全为1,和/或该块规则表存储的所有规则的一位的值不全为0,则将该块规则表对应的公共规则的该位的值设置为通配符。

例如图9所示的公共规则生成的一种示意图。图9中示出一个块规则表包括的4条规则,即规则0-3。在图9中,bit位P

本申请实施例中,公共规则的bit位宽与规则的bit位宽相同,当公共规则的所有bit位均设置完成后,公共规则生成完成。生成完成的公共规则存储在TCAM中,并在RAM中建立相应的主规则表的表项和存储该公共规则对应的所有规则的块规则表。具体的存储规则,可以参见上述图3部分的相关描述。

本申请实施例提供的技术方案中,电子设备提取出每个块规则表中所有规则的公共规则,也就是,一条公共规则可以表示多条规则,将公共规则存储在TCAM中,减小对TCAM容量的需求,可以使用更小容量的TCAM实现更大规模的规则查找,节约了包分类的成本和功耗。

在一些实施例中,针对每个块规则表,电子设备可以确定该块规则表中所有规则中均为1或0的bit位;若均为1或0的bit位的数量大于预设值,则从均为1或0的bit位中,随机选取预设值的bit位;针对所选择的每个bit位,若所有规则中的该bit位均为1,则将该块规则表对应的公共规则的该bit位的值设置为1;若所有规则中的该bit位均为0,则将该块规则表对应的公共规则的该bit位的值设置为0;除所选择的bit位外,该块规则表对应的公共规则的其他bit位的值均设置为*。这种情况下,减少了公共规则中关心的bit位,有助于对TCAM进行压缩,进一步减低对TCAM容量的需要。预设值的大小可以根据实际需求进行设定。

在一些实施例中,本申请实施例还提供了一种公共规则表、主规则表和块规则表生成方法,如图10所示,图10为本申请实施例提供的公共规则表、主规则表和块规则表生成方法的第一种流程示意图,该方法可以包括如下步骤:

步骤S1001,基于全局规则集中各规则的平衡位构建规则决策树,平衡位为各位中取值为0的规则数量与取值为1的规则数量差值最小的一位。

一条规则可以包括匹配域和动作域,如ACL(Access Control Lists,访问控制列表)、流表、转发表、路由表中的规则。本申请实施例中,电子设备将具有匹配域和动作域的所有规则作为全局规则集,考虑整条规则,电子设备确定全局规则集中规则的平衡bit位,平衡bit位处,值为0的规则数量与值为1的规则数量的差值最小。

例如,电子设备中的规则集包括如图11所示的5条规则R

电子设备基于全局规则集中各规则的平衡位,构建规则决策树。其中,规则决策树可以采用二叉树形式的决策树实现。采用二叉树形式的规则决策树管理规则集,使得本申请实施例提供的技术方案更为通用,与具体应用无关。本申请实施例中,电子设备还可以采用其他形式的规则决策树,对此不进行限定。

在执行步骤S1001之前,为了保证规则处理的准确性,电子设备可以对全局规则集中的每条规则进行以下处理:

对于该规则包括的前缀类字段,将前缀长度的最高位的值设置为前缀值,将其他位的值设置为通配符;

对于该规则包括的范围类字段,将该范围类字段拆分为多个子范围,将每个子范围对应的位的取值设置为该子范围对应的等价前缀值;

对于该规则包括的精确类字段,将各位的值设置为精确值;

对于该规则包括的通配类字段,将各位的值设置为通配符。

步骤S1002,分别从规则决策树的每个叶子节点开始向上按广度优先遍历,得到每个叶子节点对应的最深规则子树,最深规则子树为包括的平衡位小于或等于预设分裂位深的规则子树中最深的规则子树。

电子设备中预先设定了一个最大分裂bit数,即预设分裂位深,预设分裂位深为分裂位置集包括的bit位数量的最大值。预设数量的大小可以根据实际需求进行设定。

在一个规则决策树构建完成后,针对规则决策树的每个叶子节点,电子设备从该叶子节点向上按广度优先遍历,当遍历到规则决策树的某个节点时,以此节点为根节点,形成一个子树;电子设备若判定该子树为包括的平衡bit位的数量小于或等于预设分裂位深的最深的子树,则将该子树作为最深规则子树,停止向上遍历;否则,以此节点为起点,继续向上遍历。

当规则决策树的所有叶子节点分别属于一个最深规则子树时,电子设备停止执行上述步骤S1002。

步骤S1003,基于每个最深规则子树,生成公共规则表、主规则表和块规则表。

本申请实施例中,电子设备执行步骤S1002结束后,获得一个或多个最深规则子树,基于每个最深规则子树包括的规则集,分别生成一个块规则表;基于每个最深规则子树包括的平衡位,分别生成一个分裂位置集;基于每个最深规则子树对应的分裂位置集和块规则表的基地址,生成主规则表;基于每个最深规则子树对应的主规则表中的表项索引和每个最深规则子树包括的规则集的公共规则,生成公共规则表。

其中,一个最深规则子树包括的所有规则构成一个块规则表,即一个规则块。对于一个最深规则子树,电子设备由该最深规则子树包括的规则集,生成一个块规则表;由除该最深规则子树的根节点外的其他节点包括的平衡位,生成一个分裂位置集;由该最深规则子树对应的分裂位置集和块规则表的基地址,生成主规则表中的一个表项;由该最深规则子树包括的规则集的公共规则,生成公共规则表中的一个表项,且该最深规则子树对应的公共规则表中的该表项索引与最深规则子树对应的主规则表中的表项索引相同。由一个规则决策树包括的所有最深规则子树对应的主规则表中的表项,生成一个主规则表;由一个规则决策树包括的所有最深规则子树对应的公共规则表中的表项,生成一个公共规则表。

例如,预设分裂位深为3,如图12所示的规则决策树,其中,R

本申请实施例中,电子设备采用上述步骤S1001-S1003,生成确定公共规则表、主规则表和块规则表。为了避免规则重复存储的问题,一个平衡bit位在一个规则决策树的所有分裂位置集中只记录一次。这样,可以有效利用TCAM的容量和RAM的容量,节约成本。

本申请实施例提供的技术方案中,电子设备利用规则决策树可以提取出规则的更多的公共信息,在节约成本的同时,降低查找规则的难度,提高了查找效率。

在一些实施例中,如图13所示,上述步骤S1001可以细化为如下步骤:

步骤S1301,将全局规则集作为待分裂规则集,全局规则集包含于规则决策树的根节点中。

步骤S1302,确定待分裂规则集中各规则的平衡位。步骤S1302中确定平衡位的方式可参见步骤S1001部分的相关描述。

步骤S1303,将待分裂规则集中平衡位的值为0的规则添加在第一侧子节点中,并将待分裂规则集中平衡位的值为1的规则添加在第二侧子节点中。

以采用二叉树形式的规则决策树为例,上述第一侧子为左,第二侧为右,或者,第一侧为右树,第二侧为左。以第一侧为左,第二侧为右为例,结合图11为例进行说明。电子设备确定平衡bit位为P

本申请实施例中,存在平衡bit位的值为“*”的情况,如图11中,规则R

步骤S1304,针对分裂得到的每个子节点,若该子节点包括多条规则,则将该子节点包括的规则集作为待分裂规则集,重新执行步骤S1302,直至分裂得到的每个子节点包括一条规则为止,得到规则决策树。

本申请实施例中,电子设备循环执行步骤S1302-S1304,该循环结束的条件为:分裂得到的子节点中包括一条规则。采用二叉树形式的规则决策树管理规则集,该规则决策树的一个叶子节点包括一条规则。如图12所示的一个规则决策树的结构,该规则决策树的4个叶子节点R

本申请实施例中,电子设备采用上述步骤S1301-S1304,构建了一个规则决策树,进而由该规则决策树可以生成一个公共规则表、一个主规则表和多个块规则表。本申请实施例提供的技术方案中,电子设备利用规则决策树可以提取出规则的更多的公共信息,在节约成本的同时,降低查找规则的难度,提高了查找效率。

在一些实施例中,电子设备也可以将全局规则集均匀地划分为多个规则集,每个规则集包括的多条规则存储为一个块规则表,并提取这一个块规则表的公共规则,以及相应的分裂位置集,生成相应的公共规则表和主规则表。

在一些实施例中,为了提高包分类的准确性,基于上述图10所示实施例,本申请实施例还提供了一种公共规则表、主规则表和块规则表生成方法,如图14所示,图14为本申请实施例提供的公共规则表、主规则表和块规则表生成方法的第二种流程示意图,该方法可以包括如下步骤:

步骤S1401,基于全局规则集中各规则的平衡位构建规则决策树,平衡位为各位中取值为0的规则数量与取值为1的规则数量差值最小的一位。与上述步骤S1001相同。

步骤S1402,分别从规则决策树的每个叶子节点开始向上按广度优先遍历,得到每个叶子节点对应的最深规则子树,最深规则子树为包括的平衡位小于或等于预设分裂位深的规则子树中最深的规则子树。与上述步骤S1002相同。

步骤S1403,基于每个最深规则子树,生成公共规则表、主规则表和块规则表。与上述步骤S1003相同。

步骤S1404,将全局规则集中平衡位的值为通配符的规则划分为丢弃规则集。

步骤S1405,若已构建规则决策树的数量小于N,则将丢弃规则集作为全局规则集,重新执行步骤S1401,直至已构建规则决策树的数量等于N,N小于TCAM的最大并发数。

本申请实施例中,每生成一个规则决策树,基于平衡bit位的值为*的规则就会产生一个丢弃规则集。电子设备将丢弃规则集重新进行分裂,构建新的规则决策树。这样,电子设备可以在TCAM中存储N个公共规则表,同时对N个规则决策树的规则进行查找,提高了规则查找的效率。

本申请实施例中,为了尽可能的提高查找效率,N=C-1,其中,C表示TCAM的最大并发数。

在一些实施例中,在构建N个规则决策树后,电子设备将当前丢弃规则集中的规则添加至物理表中。

这样,后续电子设备可以完成对所有规则的查找,保证了规则查找的完整性,进而提高了查找到的规则的准确性,提高了包分类处理的准确性。

与上述包分类方法对应,本申请实施例还提供了一种包分类装置,如图15所示,该装置应用于具有包分类功能的电子设备,电子设备中设置有TCAM和RAM,TCAM内存储有公共规则表,RAM内存储有主规则表和块规则表;

块规则表中存储有具有相同公共规则的多个规则;

主规则表至少包括分裂位置集和基地址两个字段,块规则表中的规则归属于由分裂位置集所确定的一个子树,分裂位置集用于定位查找关键值在块规则表中对应的规则的位置,基地址用于定位块规则表,公共规则中的非通配符位的值与基地址指向的块规则表中所有规则的相同位的值相同;

公共规则表中存储有公共规则,公共规则表与主规则表中对应同一个块规则表的索引相同;

上述包分类装置包括:

抽取模块151,用于从待分类数据包中抽取目标查找关键值;

第一匹配模块152,用于使用目标查找关键值在公共规则表中进行匹配,获得主规则表中目标表项的主索引;

定位模块153,用于基于主索引指向的目标表项包括的基地址,定位块规则表;

确定模块154,用于基于目标查找关键值和主索引指向的目标表项包括的分裂位置集,确定第一规则在所定位的块规则表中的次索引;

处理模块155,用于基于次索引指向的第一规则,对待分类数据包进行包分类处理。

在一些实施例中,TCAM内还存储有物理表,物理表中存储有至少一条规则;如图16所示,上述包分类装置还可以包括第二匹配模块156;

第二匹配模块156,用于使用目标查找关键值在物理表中进行匹配,获得第二规则;

处理模块155,具体可以用于从次索引指向的第一规则和第二规则中,选择优先级最高的一条规则;按照所选择的规则,对待分类数据包进行包分类处理。

在一些实施例中,处理模块155,具体可以用于基于目标查找关键值,分别对次索引指向的第一规则和第二规则进行校验;从校验确定的与目标查找关键值匹配的规则中,选择优先级最高的一条规则。

在一些实施例中,上述包分类装置还可以包括第一生成模块,用于生成公共规则表、主规则表和块规则表,包括:

构建子模块,用于基于全局规则集中各规则的平衡位构建规则决策树,平衡位为各位中取值为0的规则数量与取值为1的规则数量差值最小的一位;

遍历子模块,用于分别从规则决策树的每个叶子节点开始向上按广度优先遍历,得到每个叶子节点对应的最深规则子树,最深规则子树为包括的平衡位小于或等于预设分裂位深的规则子树中最深的规则子树;

生成子模块,用于基于每个最深规则子树,生成公共规则表、主规则表和块规则表。

在一些实施例中,生成子模块,具体可以用于:

基于每个最深规则子树包括的规则集,分别生成一个块规则表;

基于每个最深规则子树包括的平衡位,分别生成一个分裂位置集;

基于每个最深规则子树对应的分裂位置集和块规则表的基地址,生成主规则表;

基于每个最深规则子树对应的主规则表中的表项索引和每个最深规则子树包括的规则集的公共规则,生成公共规则表。

在一些实施例中,构建子模块,具体可以用于:

将全局规则集作为待分裂规则集,全局规则集包含于规则决策树的根节点中;

确定待分裂规则集中各规则的平衡位;

将待分裂规则集中平衡位的值为0的规则添加在第一侧子节点中,并将待分裂规则集中平衡位的值为1的规则添加在第二侧子节点中;

针对分裂得到的每个子节点,若该子节点包括多条规则,则将该子节点包括的规则集作为待分裂规则集,重新执行确定待分裂规则集中个规则的平衡位的步骤,直至分裂得到的每个子节点包括一条规则为止,得到规则决策树。

在一些实施例中,第一生成模块还可以包括划分子模块;

划分子模块,用于将全局规则集中平衡位的值为通配符的规则划分为丢弃规则集;

构建子模块,还用于若已构建规则决策树的数量小于N,则将丢弃规则集作为全局规则集,重新执行基于全局规则集中各规则的平衡位构建规则决策树的步骤,直至已构建规则决策树的数量等于N,N小于TCAM的最大并发数。

在一些实施例中,TCAM内还存储有物理表,第一生成模块还可以包括添加子模块;

添加子模块,用于在构建N个规则决策树后,将当前丢弃规则集中的规则添加至物理表中。

在一些实施例中,规则可以包括前缀类字段、范围类字段、精确类字段以及通配类字段中的至少一种;

上述包分类装置还可以包括:设置模块,用于在基于全局规则集中各规则的平衡位构建规则决策树之前,对全局规则集中的每条规则进行以下处理:

对于该规则包括的前缀类字段,将前缀长度的最高位的值设置为前缀值,将其他位的值设置为通配符;

对于该规则包括的范围类字段,将该范围类字段拆分为多个子范围,将每个子范围对应的位的取值设置为该子范围对应的等价前缀值;

对于该规则包括的精确类字段,将各位的值设置为精确值;

对于该规则包括的通配类字段,将各位的值设置为通配符。

在一些实施例中,上述包分类装置还可以包括第二生成模块,用于生成公共规则,具体可以用于:

若块规则表存储的所有规则的一位的值均为1,则将块规则表对应的公共规则的该位的值设置为1;

若块规则表存储的所有规则的一位的值均为0,则将块规则表对应的公共规则的该位的值设置为0;

若块规则表存储的所有类规则的一位的值不全为1,和/或块规则表存储的所有规则的一位的值不全为0,则将块规则表对应的公共规则的该位的值设置为通配符。

本申请实施例提供的技术方案中,电子设备中设置有TCAM和RAM,电子设备将多个规则的公共规则存储在TCAM,将具体的规则存储在RAM,这可以减小对TCAM容量的需求。电子设备利用查找性能较高的TCAM中存储的公共规则,排除大部分的规则;后续利用RAM中排除后剩余的规则,对待分类数据包进行包分类处理。相比于纯利用TCAM的包分类方法,本申请实施例提供的技术方案结合TCAM和RAM完成包分类处理,可以使用更小容量的TCAM实现更大规模的规则查找,节约了包分类的成本和功耗。

本申请实施例还提供了一种转发芯片,该转发芯片用于执行上述图3-14任一所述的包分类方法步骤。

本申请实施例还提供了一种具有包分类功能的电子设备,如图17所示,包括处理器171和转发芯片172;处理器171基于全局规则集,构建TCAM内的公共规则表以及RAM内的主规则表和块规则表;转发芯片172基于公共规则表、主规则表和块规则表,执行上述任一的包分类方法步骤。

处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。

在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、电子设备实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

以上所述仅为本申请的较佳实施例,并非用于限定本申请的保护范围。凡在本申请的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本申请的保护范围内。

技术分类

06120115629966