linux五元组结构体,一种基于分类优先级的五元组查询方法与流程

1c4ea74687d53f9cc571c1f19bf72d22.gif

本发明涉及网络传输技术,特别涉及一种基于分类优先级的五元组查询方法。

背景技术:

近年来,随着网络的快速发展,网络数据包的转发效率显的尤为重要;目前,信息技术快速发展,其对应的数据量也迅速增长,在对大量数据量进行五元组信息查询时面临规则查询时间较长,现有的研究主要是通过改善规则存储算法的方式,从而来提高规则查询时间。五元组规则查找是网络数据转发过程中比较重要的一步,因而五元组规则查找成为一个值得研究的问题。

技术实现要素:

本发明的目的就是提出一种根据分类优先级进行五元组规则查询的方法。

本发明一种基于分类优先级的五元组查询方法,其中,包括:建立有效规则链表,该有效规则链表按照五元组分类的优先级进行排列,有效规则是指其对应的五元组分类存在对应的规则,当该系统不存在任何规则时,则该链表为空;建立有效规则链表和五元组分类对应的32个元素的数组,并对该两个部分进行初始化,有效规则链表为空;当系统框架初始化完毕后,进行规则的插入和删除,查询管理;从待处理数据包中提取所需的待处理五元组,随后利用优先级链表中高优先级元素所指向的规则,来进行五元组规则查询,若命中,则结束查找,若未命中,则遍历优先级链表继续进行查找。

根据本发明的基于分类优先级的五元组查询方法的一实施例,其中,在查找过程中,从数据包中提取五元组,如最高优先级属于某一类,则查找时忽略提取到的其余4类元素。

根据本发明的基于分类优先级的五元组查询方法的一实施例,其中,五元组分类对应的32个元素中的参数num设置为0;当进行规则插入操作时,首先根据五元组中的有效字段来创建五元组,同时根据有效字段计算五元组分类数组中对应的下标,用A表示,根据下标找到该分类对应的规则链表,进行规则的插入,当插入完成后,参数num值加1,之后遍历有效规则链表,若链表中某一元素的五元组分类数组对应下标的值与A相同,则此次插入完成,否则根据优先级向有效规则链表中插入对应元素。

根据本发明的基于分类优先级的五元组查询方法的一实施例,其中,当进行规则删除时,根据有效字段计算五元组分类数组中对应的下标,通过五元组分类数组中的指向规则实体部分的参数discipline找到规则实体链表删除对应规则,同时num成员变量减1,当num的值减小到0后,删除优先级链表对应的元素,否则优先级链表不做任何修改。

根据本发明的基于分类优先级的五元组查询方法的一实施例,其中,在五元组中,共有五个元素,对该五个元素采用排列组合的方式,共有32种可能性,采用具有32个元素的数组表示五元组不同的组合方式,数组中的每个成员有指向规则实体部分参数discipline和规则实体部分的个数num;五元组对每一个元素,1表示有效,0表示无效,组成的数正好对应数组的下标。

根据本发明的基于分类优先级的五元组查询方法的一实施例,其中,所有规则按照所属五元组分类进行存储,在规则中体现对于五元组分类关心的元素。

根据本发明的基于分类优先级的五元组查询方法的一实施例,其中,待处理数据包中包含待处理五元组,负载数据以及信息,通过编程从待处理数据包中提取待处理的五元组。

本发明缩小了每一种五元组分类方式对应的规则容量大小,致使插入,删除,查询时间缩短,且根据排列组合的方式包含了所有的可能性,使模糊查找和精确查找综合在一起,使其具有更广泛的适用性。

附图说明

图1所示是五元组查询的系统架构图;

图2所示是维护流程图;

图3所示是五元组查询流程图。

具体实施方式

为使本发明的目的、内容、和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。

图1所示的是五元组查询的系统架构图,如图1所示,该系统主要由三部分组成,分别在图1上方进行的标示,各部分说明如下:五元组分类,在五元组中,共有五个元素,对该五个元素采用排列组合的方式,共有32(因此NR_CATEGORY=32)种可能性,采用具有32个元素的数组表示五元组不同的组合方式,数组中的每个成员有两个参数,分别是参数discipline(指向规则实体部分)和uint32_t num(规则实体部分的个数);该部分是该系统的枢纽部分,前后连接了其余两部分;

五元组包含源IP地址,源端口,目的IP地址,目的端口,传输层协议,针对每一个元素,1表示有效,0表示无效,用此方法组成的数正好对应数组的下标。

建立有效规则链表,该链表是按照五元组分类的优先级进行排列的,有效规则是指其对应的五元组分类存在对应的规则,当该系统不存在任何规则时,则该链表为空,当进行五元组查询时,依据链表优先顺序priority_order依次查找;

该有效规则链表中的每个成员有四个参数,分别是struct list_head *next,struct rules*category,uint8_t priority,uint8_t subscript,利用上述参数在进行规则插入和删除时做对应改动,查询时利用该链表按优先级从高到低进行遍历。数next指向链表中下一个元素,最后一个成员的next指针为NULL,参数priority_order指向链表的头结点;参数category指向五元组分类对应的位置处;参数priority是对应的五元组分类的优先级,数据越高,优先级越高,越靠近优先顺序priority_order,在进行链表元素插入时,遍历链表,寻找相邻的两个元素,其中一个元素的priority大于待插入元素的priority,一个元素的priority小于待插入元素的priority,待插入元素插入已找到的两个元素之间;subscript为图1中的中间部分数组的数组下标,该下标在规则的插入和删除中起关键作用。

对应分类规则,该部分是规则实体部分,所有规则按照所属五元组分类进行存储。为节约空间,不同的五元组分类对应的规则实体所采用的结构体存在差异。对于五元组分类中不关心的元素,不在规则中体现,因此共有32中不同的规则实体结构,比如对于类型的规则,规则实体中仅有一个成员。

图2是维护流程图,如图2所示,首先需要建立系统框架,首先建立有效规则链表和五元组分类对应的32个元素的数组,并对该两个部分进行初始化,有效规则链表为空,五元组分类对应的32个元素中的num设置为0,discipline设置为NULL,规则实体部分为空;

当系统框架初始化完毕后,就可以进行规则的插入和删除,查询管理。

当进行规则插入操作时,首先根据五元组中的有效字段来创建五元组,同时根据有效字段计算五元组分类数组中对应的下标,用A表示,根据下标可以找到该分类对应的规则链表,从而实现规则的插入,当插入完成后,结构体rules中的num字段值加1,之后遍历有效规则链表,若链表中某一元素的subscript的值与A相同,则此次插入完成,否则根据优先级(用户进行设置)向有效规则链表中插入对应元素,并设置参数category,参数priority和参数subscript。

参考图1,进行插入规则的过程,插入时,考虑图1中的三部分,规则插入到对应分类规则链表;struct rules中的成员num增加1,表示其对应分类规则成员增加1;遍历有效规则链表,若其中所有成员的结构体subsript均不等于A,则有效规则链表增加一个成员,否则不做处理。

当进行规则删除时,同插入操作相同,根据有效字段计算五元组分类数组中对应的下标,通过五元组分类数组中的discipline找到规则实体链表删除对应规则,同时结构体rules中的num成员变量减1,当num的值减小到0后,删除优先级链表对应的元素,否则优先级链表不做任何修改。

该方法采用的这种方式,控制了优先级链表的元素个数在可控范围内,元素个数少,致使插入和删除,查询操作很快完成。

图3所示是五元组查询流程图,如图3所示,五元组规则查询包括:

首先从待处理数据包中提取所需的待处理五元组,(其中待处理数据包中包含待处理五元组,负载数据等信息,通过编程从待处理数据包中提取待处理的五元组),随后利用优先级链表中高优先级元素所指向的规则(即找到对应规则库和查找规则节点,该节点相对于同一五元组分类位置固定),来进行五元组规则查询,若命中,则结束查找,若未命中,则遍历优先级链表继续进行查找。

在查找过程中,会从数据包中提取五元组,假如最高优先级属于类(属于该类的五元组分类共有五种),则查找时忽略提取到的其余4类元素,只关心有效元素,该特点使五元组精确查找和模糊查找综合在一起。

本发明是对五元组所包含的5种元素进行排列组合分类,其种类个数不超过32,因此在该方法中,实际的种类个数在0到32之间,每一类具有其相对应的规则,且对实际存在的种类进行优先级排列,进而确定五元组查找的顺序。

本发明利用排列组合方式,包含了五元组所有的分类方式,针对不同分类方式,设置其对应优先级,按照该优先级顺序进行五元组查询。

与现有技术相比,较多的分类方式,缩小了每一种五元组分类方式对应的规则容量大小,致使插入,删除,查询时间缩短,且根据排列组合的方式包含了所有的可能性,使模糊查找和精确查找综合在一起,使其具有更广泛的适用性。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值