一种并行的大容量访问控制列表的查找方法

文档序号:7819836阅读:465来源:国知局
一种并行的大容量访问控制列表的查找方法【专利摘要】一种并行的大容量访问控制列表的查找方法,涉及通信【
技术领域
】,其包括将访问控制列表的链表存储结构设成双向链表的方式,建立访问控制列表中各表项之间的结构关系;多核处理器对初次进入的数据流进行流的划分,建立流表,同时查找合适的访问控制列表表项,建立流表与访问控制列表表项的关联;后续进入的数据流直接从流表表项中获取访问控制列表的执行动作。本发明提高了访问控制列表匹配的效率,消除了多核处理器在访问控制列表功能项上的技术瓶颈;提高了资源的利用率和任务执行的效率。【专利说明】一种并行的大容量访问控制列表的查找方法【
技术领域
】[0001]本发明涉及通信【
技术领域
】,具体来讲是一种并行的大容量访问控制列表的查找方法。【
背景技术
】[0002]传统的单核处理器的处理能力受到主频和功耗等因素的制约,在性能上难以满足日益增长的网络数据处理任务要求。高性能的多核处理器在数据处理过程中能够实现并行处理,网络延时小,数据吞吐量大,在当前的路由器、防火墙等网络设备中有着广泛的应用。[0003]ACL(AccessControlList,访问控制列表)是解决和提高网络安全性的方法之一,多应用在路由器和防火墙等网络设备上。访问控制列表应用在网络设备的接口上,当条目达到一定数量后,如果单纯依靠软件算法将接口上通过的数据包逐个匹配ACL条目,导致处理器芯片工作量急剧增加,致使设备的吞吐量处理能力急剧降低。为了解决上述问题,多数网络设备厂商的ACL功能普遍米用TCAM(TernaryContentAddressableMemory,三态内容寻址存储器)硬件存储和TCAM硬件查找方式来实现,但是TCAM存储容量有限,在ACL条目达到百万条之多的情况下单片或少许几片TCAM的存储是难以胜任的,并且TCAM成本高昂,在一定程度上限制了其应用的广泛性。同时由于TCAM在并行查找方面支持的能力有限,对于网上设备上多达16核32核的多核处理器平台,提出的16路32路或更多路数的并行查找需求显得捉襟见肘。当前针对多核处理器平台,在现有访问控制列表查找算法基础上,为大容量路由器和防火墙等网络设备设计一种并行的大容量访问控制列表查找方法显得尤为必要。[0004]大型的路由器和防火墙等网络设备的存储都是SDRAM(synchronousdynamicrandomaccessmemory,步动态随机存储器)为主,其优点是大容量和低价格。当前国内外基于SDRAM的最新访问控制列表(ACL)查找算法主要有线性查找算法、树形查找算法、几何查找算法和递归查找算法等算法。[0005]线性查找算法基于线性链表的数据组织方式,访问控制列表ACL表项以链表的方式存储在SDRAM中,数据包进行ACL表项项查找时需要对链表上的表项逐个匹配,直到匹配一条合适的表项为止。该算法数据结构简单,容易实现,但是在表项存储量较大的情况下,链表的深度较大,每个数据包需要匹配的平均次数随之增加,最坏情况下需要匹配的次数就是表项的个数,在访问控制列表表项数目较多的情况下单纯依靠上述算法是不可取的,只适用于ACL表项较少的应用场合。[0006]树形查找算法、几何查找算法和递归查找算法都是在查找次数上进行优化和改进,通过数据结构的优化,将表项的存储分散成树形结构或图的数据结构,避免单纯的线性存储方式。算法从一定程度上降低了表项的存储深度和减少了平均查找的次数,优化了查找的性能。但是该算法相对于线性查找算法数据结构组织复杂、在掩码查找上支持的能力较弱,同时在并行查找和频繁表项更新等环境中算法的运行效率同样不高,这些算法一般只适用于单核处理器和表项结构较为稳定的设备环境中。[0007]上述查找算法分别适合不同的环境,每种算法适用不同的场合,需要结合具体的环境才能发挥其较好的性能优势,但是在当前网络设备所处网络环境复杂,要求对并行查找、大容量表项存储、频繁表项更新、高查找速度和支持掩码匹配等苛刻应用需求下,单纯的应用上述传统算法是难以满足实际应用的需求。同时网络设备的数据平面对算法查找过程中平均匹配次数极为敏感,匹配次数增加一倍可能导致设备性能直接降低50%,因此网络数据设备一般希望能够将匹配次数控制在I至3次以内,这是上述任何一种软件算法在大容量表项情况下都不可能能够完成和实现的。【
发明内容】[0008]针对现有技术中存在的缺陷,本发明的目的在于提供一种并行的大容量访问控制列表的查找方法,提高了访问控制列表匹配的效率,消除了多核处理器在访问控制列表功能项上的技术瓶颈;提高了资源的利用率和任务执行的效率。[0009]为达到以上目的,本发明采取的技术方案是:一种并行的大容量访问控制列表的查找方法,基于多核处理器实现,包括:将访问控制列表的链表存储结构设成双向链表的方式,建立访问控制列表中各表项之间的结构关系;多核处理器对初次进入的数据流进行流的划分,建立流表,同时查找合适的访问控制列表表项,建立流表与访问控制列表表项的关联;后续进入的数据流直接从流表表项中获取访问控制列表的执行动作。[0010]在上述技术方案的基础上,多核处理器将接收到的数据流中的数据包分发到各个空闲的核上,核抽取数据包中对应的条件字段进行哈希运算,根据哈希值的不同将数据包划分到不同的流表中。[0011]在上述技术方案的基础上,每一张流表中包含3条流表表项,每个流表表项均包括:第一有效位,用于表不该流表表项的有效性;第一条件字段,表TJV流表表项的条件字段,是该流表表项的特征值;第二有效位,用于表不访问列表动的执行动作的有效性;第一指针,用于指向动作结构体的指针。[0012]在上述技术方案的基础上,所述访问控制列表表项包括:第二条件字段,用于表示访问控制列表的表项中的条件字段,是该表项的特征值;条件掩码,表示访问控制列表的表项中的掩码,用于与数据流信息的条件字段进行与运算;链表指针,用于指向前一个或后一个访问控制列表的表项结构体的指针;第二指针,用于指向动作结构体的指针。[0013]在上述技术方案的基础上,所述动作结构体包括:引用计数,用于记录当前正在使用动作结构体的成员个数;结构体资源锁,用于多个核间并行执行时,对动作结构体资源的同步和互斥操作;第三有效位,用于表示该动作结构体的有效性;执行动作,执行访问控制列表定义的动作。[0014]在上述技术方案的基础上,所述访问控制列表定义的动作包括修改数据包头部信息、指定出端口、指定路由下一跳、丢弃或者通过。[0015]在上述技术方案的基础上,所述建立流表与访问控制列表表项的关联,具体包括以下步骤:步骤S101.多核处理器从数据包中提取该数据包中对应的条件字段进行哈希运算,获得第一哈希值;将该第一哈希值同流表表项总数进行取余运算,得到第二哈希值;步骤S102.找到与第二哈希值对应的流表表项,根据该流表表项的第一条件字段匹配对应的数据流;步骤S103.判断是否匹配成功,若否,则跳转至步骤S104;若是,则跳转至步骤S107;步骤S104.将数据包的条件字段填入到流表表项的第一条件字段中;步骤S105.将数据包的条件字段与对应的访问控制列表进行逐一匹配,匹配成功后,跳转至步骤S106;步骤S106.从访问控制列表的表项中获取第二指针指向的动作结构体;将流表表项中的第一指针指向该动作结构体,同时将动作结构体的引用计数增加1,将流表表项的第一有效位设置成有效;步骤S107.数据包根据流表表项中的第一指针,找到动作结构体;步骤S108.判断动作结构体中的第三有效位是否有效,若是,则直接执行访问控制列表定义的动作;若否,则将动作结构体中的引用计数减1,并且将流表表项中对应的信息全部清除。[0016]在上述技术方案的基础上,步骤S105中,匹配时,首先将数据包的条件字段同条件掩码进行与运算,再将运算的结果同第二条件字段进行与运算;如果结果为真则表明匹配上访问控制列表,进入步骤S106;否则继续下一条访问控制列表的匹配,直到匹配最后一条条件掩码为全O的默认访问控制列表表项为止。[0017]在上述技术方案的基础上,还包括访问控制列表的表项删除,具体包括以下步骤:步骤201.将待删除的访问控制列表的表项从双链表上删除下来;步骤202.根据第二指针找到动作结构体,将结构体中的第三有效位设置成无效,并将引用计数减I;步骤203.将访问控制列表的表项的内存直接释放;步骤204.数据包在流表表项中,由第一指针找到动作结构体;步骤205.将动作结构体中的引用计数减1,并且将流表表项中对应的信息全部清除。[0018]在上述技术方案的基础上,步骤202及步骤205中,引用计数减I后,如果引用计数不大于0,则直接释放动作结构体的内存。[0019]本发明的有益效果在于:[0020]1、本发明将流表与访问控制列表建立起关联逻辑关系,使得后续的数据流直接通过流的信息获取到访问控制列表的执行动作部分,避免了所有数据流都需要去匹配访问控制列表表项,让设计能在大容量表项情况下依旧能够取得快速匹配的效果,从而提高了访问控制列表匹配的效率,消除了多核处理器在访问控制列表功能项上的技术瓶颈。[0021]2、本发明中访问控制列表表项设计成访问控制列表结构体和动作结构体两级结构,流表与访问控制列表建立逻辑关系,其实质变成流表与动作结构体建立了逻辑关系,因此数据流通过流表直接执行动作结构体动作而不用去访问控制列表的其它信息;同时,在访问控制列表删除时,能够将访问控制列表结构体从链表中删除后直接释放内存,上述设计快捷灵活,节约了内存、提高了效率。[0022]3、发明将传统的从单一的链表上依次查找访问控制列表的方法,变更为通过数据包的条件字段哈希到不同的数据流上,寻求访问控制列表。即将传统的需要串行执行获取的资源方式,通过哈希操作变成并行执行的方式,减少了因资源获取过程中的同步互斥操作的等待时间,提闻了资源的利用率和任务执行的效率。【专利附图】【附图说明】[0023]图1为本发明实施例中多核处理器对数据处理的示意图;[0024]图2为本发明实施例中流表与访问控制列表之间的关系示意图。[0025]图3为本发明实施例中建立流表与访问控制列表表项的关联的流程图;[0026]图4为本发明实施例中访问控制列表的表项删除的流程图。【具体实施方式】[0027]以下结合附图及实施例对本发明作进一步详细说明。[0028]参见图1所示,一种并行的大容量访问控制列表的查找方法,基于多核处理器实现,包括:[0029]将访问控制列表的链表存储结构设成双向链表的方式,建立访问控制列表中各表项之间的结构关系。其中,访问控制列表的链表存储结构也可以设计成树形结构或图形结构。[0030]多核处理器(Cores)对初次进入的数据流(P1、P2…Pj)进行流的划分,建立流表(Flowtables),同时查找合适的访问控制列表表项,建立流表与访问控制列表表项的关联;其中,多核处理器将接收到的数据流中的数据包(P)分发到各个空闲的核上,核抽取数据包中对应的条件字段进行哈希(Hash)运算,根据哈希值的不同将数据包划分到不同的流表中。[0031]后续进入的数据流直接从流表表项中获取访问控制列表的执行动作。[0032]参见图2所示,每一张流表(Flowtables)中包含3条流表表项(Entry),每个流表表项均包括:第一有效位(Valid),用于表不该流表表项的有效性;第一条件字段(Key),表示流表表项的条件字段,是该流表表项的特征值;第二有效位(Flag),用于表示访问列表动的执行动作的有效性;第一指针(Act),用于指向动作结构体的指针。[0033]参见图2所示,所述访问控制列表表项(RUR2…R[j_2]、R[j_l])包括:第二条件字段(Key),用于表示访问控制列表的表项中的条件字段,是该表项的特征值;条件掩码(Mask),表示访问控制列表的表项中的掩码,用于与数据流信息的条件字段进行与运算;链表指针(Prev和Next),用于指向前一个(Prev)或后一个(Next)访问控制列表的表项结构体的指针;第二指针(Act),用于指向动作结构体的指针。[0034]参见图2所示,所述动作结构体(Act)包括:引用计数(Ref),用于记录当前正在使用动作结构体的成员个数;结构体资源锁(Lock),用于多个核间并行执行时,对动作结构体资源的同步和互斥操作;第三有效位(Valid),用于表示该动作结构体的有效性;执行动作(Act1n),执行访问控制列表定义的动作,其中,所述访问控制列表定义的动作包括修改数据包头部信息、指定出端口、指定路由下一跳、丢弃(Deny)或者通过(Permit)。[0035]参见图3所示,所述建立流表与访问控制列表表项的关联,具体包括以下步骤:[0036]步骤S101.多核处理器从数据包中提取该数据包中对应的条件字段进行哈希运算,获得第一哈希值;将该第一哈希值同流表表项总数(Flow_Table_MAX_NUM)进行取余运算,得到第二哈希值(Hash_Value)。[0037]步骤S102.找到与第二哈希值对应的流表表项(Flow_Table[Hash_Value]),根据该流表表项的第一条件字段匹配对应的数据流。[0038]步骤S103.判断是否匹配成功,若否,则跳转至步骤S104;若是,则跳转至步骤S107。[0039]步骤S104.将数据包的条件字段填入到流表表项的第一条件字段中。[0040]步骤S105.将数据包的条件字段与对应的访问控制列表进行逐一匹配,匹配成功后,跳转至步骤S106;匹配时,首先将数据包的条件字段同条件掩码进行与运算,再将运算的结果同第二条件字段进行与运算;如果结果为真则表明匹配上访问控制列表,否则继续下一条访问控制列表的匹配,直到匹配最后一条条件掩码为全O的默认访问控制列表表项为止。[0041]步骤S106.从访问控制列表的表项中获取第二指针指向的动作结构体;将流表表项中的第一指针指向该动作结构体,同时将动作结构体的引用计数增加1,将流表表项的第一有效位设置成有效。[0042]步骤S107.数据包根据流表表项中的第一指针,找到动作结构体。[0043]步骤S108.判断动作结构体中的第三有效位是否有效,若是,则直接执行访问控制列表定义的动作;若否,则将动作结构体中的引用计数减1,并且将流表表项中对应的信息全部清除。[0044]参见图4所示,还包括访问控制列表的表项删除,具体包括以下步骤:[0045]步骤201.将待删除的访问控制列表的表项从双链表上删除下来;[0046]步骤202.根据第二指针找到动作结构体,将结构体中的第三有效位设置成无效,并将引用计数减I;引用计数减I后,如果引用计数不大于0,则直接释放动作结构体的内存。[0047]步骤203.将访问控制列表的表项的内存直接释放。[0048]步骤204.数据包在流表表项中,由第一指针找到动作结构体。[0049]步骤205.将动作结构体中的引用计数减1,并且将流表表项中对应的信息全部清除。引用计数减I后,如果引用计数不大于0,则直接释放动作结构体的内存。[0050]本发明不局限于上述实施方式,对于本【
技术领域
】的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。【权利要求】1.一种并行的大容量访问控制列表的查找方法,基于多核处理器实现,其特征在于,包括:将访问控制列表的链表存储结构设成双向链表的方式,建立访问控制列表中各表项之间的结构关系;多核处理器对初次进入的数据流进行流的划分,建立流表,同时查找合适的访问控制列表表项,建立流表与访问控制列表表项的关联;后续进入的数据流直接从流表表项中获取访问控制列表的执行动作。2.如权利要求1所述的并行的大容量访问控制列表的查找方法,其特征在于:多核处理器将接收到的数据流中的数据包分发到各个空闲的核上,核抽取数据包中对应的条件字段进行哈希运算,根据哈希值的不同将数据包划分到不同的流表中。3.如权利要求1所述的并行的大容量访问控制列表的查找方法,其特征在于,每一张流表中包含3条流表表项,每个流表表项均包括:第一有效位,用于表不该流表表项的有效性;第一条件字段,表示流表表项的条件字段,是该流表表项的特征值;第二有效位,用于表不访问列表动的执行动作的有效性;第一指针,用于指向动作结构体的指针。4.如权利要求3所述的并行的大容量访问控制列表的查找方法,其特征在于,所述访问控制列表表项包括:第二条件字段,用于表示访问控制列表的表项中的条件字段,是该表项的特征值;条件掩码,表示访问控制列表的表项中的掩码,用于与数据流信息的条件字段进行与运算;链表指针,用于指向前一个或后一个访问控制列表的表项结构体的指针;第二指针,用于指向动作结构体的指针。5.如权利要求4所述的并行的大容量访问控制列表的查找方法,其特征在于,所述动作结构体包括:引用计数,用于记录当前正在使用动作结构体的成员个数;结构体资源锁,用于多个核间并行执行时,对动作结构体资源的同步和互斥操作;第三有效位,用于表示该动作结构体的有效性;执行动作,执行访问控制列表定义的动作。6.如权利要求5所述的并行的大容量访问控制列表的查找方法,其特征在于:所述访问控制列表定义的动作包括修改数据包头部信息、指定出端口、指定路由下一跳、丢弃或者通过。7.如权利要求5所述的并行的大容量访问控制列表的查找方法,其特征在于,所述建立流表与访问控制列表表项的关联,具体包括以下步骤:步骤S101.多核处理器从数据包中提取该数据包中对应的条件字段进行哈希运算,获得第一哈希值;将该第一哈希值同流表表项总数进行取余运算,得到第二哈希值;步骤S102.找到与第二哈希值对应的流表表项,根据该流表表项的第一条件字段匹配对应的数据流;步骤S103.判断是否匹配成功,若否,则跳转至步骤S104;若是,则跳转至步骤S107;步骤S104.将数据包的条件字段填入到流表表项的第一条件字段中;步骤S105.将数据包的条件字段与对应的访问控制列表进行逐一匹配,匹配成功后,跳转至步骤S106;步骤S106.从访问控制列表的表项中获取第二指针指向的动作结构体;将流表表项中的第一指针指向该动作结构体,同时将动作结构体的引用计数增加1,将流表表项的第一有效位设置成有效;步骤S107.数据包根据流表表项中的第一指针,找到动作结构体;步骤S108.判断动作结构体中的第三有效位是否有效,若是,则直接执行访问控制列表定义的动作;若否,则将动作结构体中的引用计数减1,并且将流表表项中对应的信息全部清除。8.如权利要求7所述的并行的大容量访问控制列表的查找方法,其特征在于:步骤S105中,匹配时,首先将数据包的条件字段同条件掩码进行与运算,再将运算的结果同第二条件字段进行与运算;如果结果为真则表明匹配上访问控制列表,进入步骤S106;否则继续下一条访问控制列表的匹配,直到匹配最后一条条件掩码为全O的默认访问控制列表表项为止。9.如权利要求7所述的并行的大容量访问控制列表的查找方法,其特征在于,还包括访问控制列表的表项删除,具体包括以下步骤:步骤201.将待删除的访问控制列表的表项从双链表上删除下来;步骤202.根据第二指针找到动作结构体,将结构体中的第三有效位设置成无效,并将引用计数减I;步骤203.将访问控制列表的表项的内存直接释放;步骤204.数据包在流表表项中,由第一指针找到动作结构体;步骤205.将动作结构体中的引用计数减1,并且将流表表项中对应的信息全部清除。10.如权利要求9所述的并行的大容量访问控制列表的查找方法,其特征在于,步骤202及步骤205中,引用计数减I后,如果引用计数不大于0,则直接释放动作结构体的内存。【文档编号】H04L29/06GK104361296SQ201410653173【公开日】2015年2月18日申请日期:2014年11月14日优先权日:2014年11月14日【发明者】范富明,李念军,黄杨琴,侯冬兰申请人:武汉烽火网络有限责任公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1