一种快速查找定位和匹配访问控制列表的方法

文档序号:7646262阅读:231来源:国知局

专利名称::一种快速查找定位和匹配访问控制列表的方法
技术领域
:本发明提供一种快速查找定位和匹配访问控制列表的方法,属于计算机通讯
技术领域

背景技术
:利用报文的一些特定域组成的规则(Rule),将报文区分成不同的流。比如我们可以将来自某一个网络的报文(源IP地址)、并去往某一网络的报文(以目的IP地址来标识)划分成一个流。分成流之后,可以针对流进行处理,比如提高优先级,保证带宽,限制带宽,丢弃等,这种处理称为动作。通常将一个规则加上对应动作称为一个访问控制列表(ACL:AccessControlList,下面统称为A(X)。一般业界标准的组成规则的域有5个,通常也称5元组,这5个域是IP报文的源地址、IP报文的目的地址、IP报文的承载协议类型、TCP(或UDP)的源端口号、TCP(或UDP)的目的端口号。在具体实现中,使用的域还有许多扩展C0S、T0S、DSCP、虚拟局域网索引(VLANID)、分段标记、TCP同步标记、源和目的MAC地址等,以上各个域可以任意组合,并且可以有范围,比如一个规则可以是TCP端口10002000+IP地址1.1.1.*(*代表不关心的位)。目前数通领域的许多接入层设备以及核心设备,由于安全性、服务质量和带宽保证的需要,往往通过配置大量的ACL规则来实现业务要求。面对如此多的ACL规则,如何高效地进行查找定位、添加和删除操作以及对ACL规则的比较和匹配操作,都是影响这些设备性能的重要因素。ACL规则组在实际使用中,人们更希望使用一些有意义的字符串助记符来表示,而代替以往使用数字表示的方式。这样就带来了一些问题,给ACL规则组的查找定位、添加和删除操作增加了工作量。以往对于基于数字表示的ACL,通常采用指针数组的方式来索引各个数值所对应的ACL规则组,但对于基于名字方式表示的ACL,目前通常采用循环比对名字字符串的方式来实现ACL规则组的査找定位、添加和删除操作。这样要长时间占用CPU和内存资源,显然效率是非常低下的,势必要影响设备的使用性能。另外在配置ACL规则时,通常需要进行ACL规则的有效性和是否重复性的比较检査,然而组成ACL规则的域除了业界标准的5元组还有许多扩展的域,并且以上各个域可以任意组合,某些值域还可以表示为一个范围。通常ACL规则的匹配和比较都是每个域进行逐一比较匹配的,这样对于对性能要求比较高的设备,这种方法显然是不能满足需求的。目前实现的快速ACL规则的匹配和比较方法,主要是通过构建一个基于源和目的ip地址和地址掩码的二叉树,然后通过对这个二叉树进行搜索遍历操作来提高ACL规则组的匹配效率。然而这种方法并不能很好地支持ACL规则中其他扩展域的快速匹配,并且构建这个二叉树也需要不少时间。
发明内容本发明所要解决的技术问题是提供一种实现快速査找定位和匹配访问控制列表的方法,以通过对一个访问控制列表的名字字符串的hash函数映射来实现快速查找定位。为了解决上述技术问题,本发明采用了下述技术方案本发明的一种快速査找定位和匹配访问控制列表的方法,包括如下步骤步骤1、将要配置的ACL规则的所有匹配域信息字符串序列化,初始化hash—table[MAX—LEN]表;步骤2、将ACL规则字符串序列作为hash函数的键值key,将相应字符串key和hash桶大小值prime带入函数计算,得到此hash的函数散列值index;步骤3、根据计算结果index来索引本ACL规则在hash—table表中对应表项。进一步地,所述的hash一table表桶大小prime要满足关系式1<^^"^,,目^且为素数。—2prime4进一步地,所述的prime值为ACL规则表项大小所对应的数字区间中的素数值。进一步地,所述的函数计算具体为累加输入关键字符串key中每个字符对应的ascall码和每个字符在字符串中的相对位置的乘积项,对上述累加和对prime值进行取模。进一步地,还包括步骤给hash表维护一个链表,保存所有冲突的表项。本专利中的hash算法实现简单,效率较高,hash分布性比较好,另外通过给HASH表维护一个链表,保存所有冲突的表项的方法可以很好的平衡实际应用中空间和时间的矛盾问题,在不必浪费巨大空间的情况下很好地提高系统效率。但对于hash分布要求更高的情况可以参考Jenkinshash等其他hash算法,但缺点是相比本hash算法更耗时。采用本方案可以很大的提高系统的性能,快速査找定位和匹配访问控制列表,理论上最坏的情况是所有的hash运算结果都相同,即冲突率为100%,这时本方法的执行效率仅仅是多增加了一个hash运算的时间,其他的时间仍然为传统査找定位和匹配访问控制列表的时间,相当于查找一个线性链表或二叉树,但这种情况出现的概率几乎为0。通过本专利所介绍的方法合理的选择参数实现hash函数的设计,可以使hash表分布比较均匀,减小hash表的冲突率,使hash表的查找复杂度可以近似0(1),同时摒弃了传统线性查找方法效率低以及构造二叉树无法实现ACL扩展域加速査找匹配的缺点。采用本专利方法可以在不升级硬件的条件下,仅仅通过软件算法的改进充分满足高端数通产品在大量配置ACL后不会对系统效率和系统性能产生较大影响,降低产品成本,提高经济效益。图1是本发明的方法的流程图具体实施例方式根据hash原理,避免hash冲突的方法有三种第一,使hash表的桶容量比实际需要容纳的表项大的多;第二,给hash表维护一个链表,保存所有冲突的表项;第三,设计一种能够一一对应的hash函数。通常对于上述方法一,我们这样选择参数,如果hash表键值空间为k,而实际键值的取值空间为a(^g《),hash表的桶大小空间为t,那么hash应该满足MH;ciri的关系,c表示比例因子。在实际应用中,取比例因子c满足关系式1/2〈c〈3/4并且尽量使hash表的桶大小T取素数值,这样可以使hash表均匀分布,较好地避免hash表冲突。对于ACL规则的匹配比对问题,由于ACL规则的匹配域非常多,而且可以任意组合,面对这么大的hash表键值空间K,尽管受实际应用要求的限希ij(比如系统ACL规则数目的限制),但实际键值的取值空间A仍然是非常大的,我们仅仅通过增加hash表的桶大小空间T的值在实际应用中是不现实的,这就势必造成在一定的hash表桶大小空间T下可能发生冲突的概率是比较大的,简单的应用避免hash冲突的方法一是不够的,而方法三在理论上可行,但在实际构造时构造出这样的hash函数是非常困难的,而采用方法二就可以比较有效的满足需求。通过以上分析,本发明提供一个较佳实施例,具体方法如图l所示首先,步骤1、将要配置的ACL规则的所有匹配域信息字符串序列化,初始化hash—table[MAX—LEN]表(根据实际需要可以在设计的时候,将hash表项大小MAX—LEN设置为大于等于桶的大小值prime,但设置差值不要太大了,否则会浪费系统的内存资源),每一个hash_table表项为一个结构体(包括一个hash—table型单向链表指针list、一个布尔型标识位status和一个字符型关键描述字符串指针descrip)。prime表示hash表的桶大小,prime值的选择是非常重要的,这样可以尽可能地降低Hash1最大ACL规则数目£表的冲突率。本具体实施例中hash表桶大小prime要满足关系式2<MAX-LEN<4且为素数或可以根据表1选择相对应的数字区间中的素数值(比如ACL规则大小为100(100属于区间段[27-28]),对应的prime素数值为193)。上述hash函数的桶大小可以依据下表1取值(其中[lwr,upr]表示实际表项大小所在的区间,prime是要选择的hash表桶的大小,%err表示冲突的百分比)<table>complextableseeoriginaldocumentpage7</column></row><table>表1hash函数参数取值对照表该hash函数参数取值对照表可以非常直接、方便地满足实际使用需要,并且通过测试统计出相应的hash函数冲突率的百分比值以供参考。当然在设计hash表时,也可以通过关系式Ml〈ciri且cc[l/2<c<3/4],来计算得到相应hash表桶大小prime的值。步骤2、然后将ACL规则字符串序列作为hash函数的键值key带入函数计算,其中key表示hash函数的键值,对应着ACL规则组名字字符串;具体的函数计算方法如下通过累加输入关键字符串中每个字符对应的ascall码和每个字符在字符串中的相对位置的乘积项,然后再将累加和对hash表桶大小prime进行取模就可得到此hash函数的散列值index。这样设计的hash函数可以较均匀地将关键字符串key映射到以桶大小为prime的hash表中。例如假设关键字符串为"hashkey",以上述情况为例取prime素数值为193,那么计算过程就是字符'h'的ascall码104乘以'h'在字符串中的相对位置7,然后加上字符'a'的ascall码97乘以'a'在字符串中的相对位置6,依此类推得到累加和sum就等于2945(即104*7+97*6+115*5+104*4+107*3+101*2+121*1)。最后将累加和sum对prime取模得50,即得到关键字符串"hashkey"对应桶大小为193的hash表的散列值index为50。步骤3、根据计算结果index来索引本ACL规则在hash一table表中对应表项,由hash—table[index]所指向的结构体中整型标识位status的状态(默认初始值为FALSE)可以判断当前ACL规则是否存在。当status为FALSE表明现存的ACL中没有重复规则即当前配置ACL规则有效,同时将status置TRUE,生成的ACL规则字符串序列(或能唯一确定此ACL规则关键字)记录到descrip中,标识返回结果为未匹配到相同的ACL规则然后直接结束。当status为TRUE时表明现存的ACL中可能存在有当前所配置的ACL规则,需进一步判断,这时通过list单向链表逐一比较hash—table桶中descrip字符串序列或者通过前面所述的传统ACL规则匹配比较方法进行比较,如果匹配到相同的ACL规则,则标识返回结果为匹配到相同的ACL规则然后结束;否则如果未匹配到,则将当前ACL规则按照hash—table结构构造好后添加到list单向链表末尾并标识返回结果为未匹配到相同的ACL规则后结束,表明当前ACL规则无重复并添加至系统ACL规则组中,这样就完成了访问控制列表的匹配和比较操作。权利要求1、一种快速查找定位和匹配访问控制列表的方法,其特征在于,包括如下步骤步骤1、将要配置的ACL规则的所有匹配域信息字符串序列化,初始化hash_table[MAX_LEN]表;步骤2、将ACL规则字符串序列作为hash函数的键值key,将相应字符串key和hash桶大小值prime带入函数计算,得到此hash的函数散列值index;步骤3、根据计算结果index来索引本ACL规则在hash_table表中对应表项。2、根据权利要求1所述的快速査找定位和匹配访问控制列表的方法,其特征在于,所述的hash—table表桶大小prime要满足关系式2<^^°",^目<^且为素数。2prime43、根据权利要求l所述的快速査找定位和匹配访问控制列表的方法,其特征在于,所述的prime值为ACL规则表项大小所对应的数字区间中的素数值。4、根据权利要求2或3所述的快速查找定位和匹配访问控制列表的方法,其特征在于,所述的函数计算具体为累加输入关键字符串key中每个字符对应的ascall码和每个字符在字符串中的相对位置的乘积项,对上述累加和对prime值进行取模。5、根据权利要求l所述的快速査找定位和匹配访问控制列表的方法,其特征在于,每一个hash—table表项为一个结构体,包括一个hash_table型单向链表指针list、一个布尔型标识位status和一个字符型关键描述字符串指针descrip。6、根据权利要求l所述的快速查找定位和匹配访问控制列表的方法,其特征在于,给hash表维护一个链表,保存所有冲突的表项。7、权利要求6所述的快速査找定位和匹配访问控制列表的方法,其特征在于,还包括如下步骤由hash—table[index]所指向的结构体中整型标识位status的状态,判断当前ACL规则是否存在。8、根据权利要求7所述的快速查找定位和匹配访问控制列表的方法,其特征在于,还包括如下步骤当status为FALSE表明现存的ACL中没有重复规则即当前配置ACL规则有效,同时将status置TRUE,生成的ACL规则字符串序列或能唯一确定此ACL规则关键字记录到descrip中,标识返回结果为未匹配到相同的ACL规则然后直接结束o9、根据权利要求8所述的快速査找定位和匹配访问控制列表的方法,其特征在于,还包括如下步骤当status为TRUE时表明现存的ACL中可能存在有当前所配置的ACL规则,需进一步判断,这时通过list单向链表逐一比较hash_table桶中descrip字符串序列或者通过前面所述的传统ACL规则匹配比较方法进行比较,如果匹配到相同的ACL规则,则标识返回结果为匹配到相同的ACL规则然后结束;否则如果未匹配到,则将当前ACL规则按照hash—table结构构造好后添加到list单向链表末尾并标识返回结果为未匹配到相同的ACL规则后结束。全文摘要本发明提供一种快速查找定位和匹配访问控制列表的方法,包括如下步骤步骤1,将要配置的ACL规则的所有匹配域信息字符串序列化,初始化hash_table[MAX_LEN]表;步骤2,将ACL规则字符串序列作为hash函数的键值key,将相应字符串key和hash桶大小值prime带入函数计算,得到此hash的函数散列值index;步骤3,根据计算结果index来索引本ACL规则在hash_table表中对应表项。本发明中的hash算法实现简单,效率较高,hash分布性比较好,另外通过给HASH表维护一个链表,保存所有冲突的表项的方法可以很好的平衡实际应用中空间和时间的矛盾问题,在不必浪费巨大空间的情况下很好地提高系统效率。文档编号H04L12/56GK101345694SQ200710043670公开日2009年1月14日申请日期2007年7月11日优先权日2007年7月11日发明者杰李,高守玮申请人:上海未来宽带技术及应用工程研究中心有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1