一种数据包的规则匹配方法及装置
技术领域
本发明涉及通信技术领域,尤其涉及一种数据包的规则匹配方法及装置。
背景技术
随着网络设备新技术的不断发展及网络流量的快速增长,需要网络设备具有处理高速网络流量的能力。例如,对于运行在实际网络中的OpenFlow交换机,就需要具有处理高速网络流量的能力,在OpenFlow交换机的处理流程中,需要对到来的每一个数据包进行协议处理、流表查询等非常耗时的操作,目前,主要采用以下数据处理方式:
一种是软硬件结合的方式:基于硬件所具有的处理速度快的优点,利用FPGA、TCAM等硬件进行大部分的数据包处理,但在OpenFlow交换机中,由于流表中的规则条目多而复杂,一些复杂规则不能在硬件上实现,所以,部分的数据包处理还需要送入软件模块进行数据包的规则匹配。但是,这种方式有以下缺点:一是软硬件协作需要占用一定的网络资源;二是在硬件上完成流表查询的功能,规则定期更新不够灵活;三是硬件本身的价格较高。
为了克服上述软硬件结合的数据处理方式所带来的缺陷,采用数据并行这种全软件的工作方式,在数据并行方式中,利用多个OpenFlow进程同时运行多个OpenFlow实例,即利用多个OpenFlow进程同时处理多个数据包。具体地,由于任一个数据包都属于一个流,这些流分布于流空间中,把流空间划分为N份,每一份绑定一个OpenFlow的进程;当有数据包到来时,检查预先保存的一张用来记录流和进程间对应关系的表,如果该数据包是表中的已有流,则根据表中记录的对应关系,把数据包分配给相应的进程进行处理;如果是新来流,则查看这个流所属的流空间所对应的进程,再把当前流和进程的对应关系保存在表中,以后属于这个流的数据包都会由这个进程处理。
基于上述流空间的划分,根据划分是否可变,可分为静态划分和动态划分两种。对于静态的流空间划分方法,流空间的划分和进程之间的对应关系是不 变的,但互联网中的流量存在Zipf分布的特性,会导致某些进程分配的流量很大,负载很重,但是另一些进程的负载却很轻,由于这些局部性的存在,对流的划分很难使并行的进程达到负载均衡。而采用动态的流空间划分方法可缓解静态划分方法所带来的缺陷,采用动态的划分方法,需要系统实时的监测每一个进程的负载情况,如果某个进程的负载过大,新来的流就不会再分配给这个进程,已分配给这个进程的流也可以交给别的进程处理,但是,动态的划分方法也存在缺陷:一方面,对进程负载情况的监控,增加了系统的开销,另一方面,系统监测负载均衡情况和进行负载调整的过程是周期运行的,周期性的处理方式会出现突发流量的现象而造成严重的负载不均衡,此外,由于无法预测一个流所对应的负载情况,这种调整无法从根本上解决流量的不均衡问题。
发明内容
有鉴于此,本发明实施例的主要目的在于提供一种数据包的规则匹配方法及装置,以通过实现负载均衡来加强网络数据处理能力的目的。
为了解决以上技术问题,本发明采取的技术方案是:
第一方面,本发明提供了一种数据包的规则匹配方法,包括:
在接收到数据包后,利用确定的包获取线程捕获数据包,所述确定的包获取线程为根据第一负载均衡算法在至少两个包获取线程中确定的一个包获取线程;
利用确定的协议处理线程获取所述数据包的协议信息,所述确定的协议处理线程为根据第二负载均衡算法在所述确定的包获取线程绑定的至少两个协议处理线程中确定的一个协议处理线程;
将所述协议信息分别发送至所述确定的协议处理线程绑定的至少两个数据包处理线程中;
每个数据包处理线程分别利用所述协议信息与对应加载的至少一个规则条目进行匹配;
如果有数据包处理线程匹配出规则条目,则判断是否有至少两个数据包处理线程分别匹配出优先级最高的第一规则条目,如果是,则从至少两个第一规则条目中选取优先级最高的第二规则条目,以将所述第二规则条目作为与所述 数据包匹配的规则条目,如果否,则将所述第一规则条目作为与所述数据包匹配的规则条目。
在第一方面的第一种可能的实现方式中,所述方法还包括:
确定分配给每个数据包处理线程使用的至少一个规则条目,以使每个数据包处理线程分别加载分配给自己的至少一个规则条目;
所述确定分配给每个数据包处理线程使用的至少一个规则条目,具体包括:
从所有规则条目中提取至少一个规则子组,每个规则子组中包含了匹配信息均相同的所有规则条目,所述协议信息中包含有所述匹配信息;
将每个规则子组中的规则条目均衡分配给每个数据包处理线程。
结合第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述从所有规则条目中提取至少一个规则子组,具体包括:
确定对数据包进行规则匹配的匹配项,当所述匹配项有两个以上时,对所述两个以上的匹配项进行排序;
按照排序结果选取排序最前的匹配项,将所述排序最前的匹配项作为当前匹配项,并获取属于所述当前匹配项的各个第一匹配信息;
对于每个第一匹配信息,分别从所有规则条目中获取包含所述第一匹配信息的各个规则条目,并将分别获取的这些规则条目分别构成第一规则子组;
判断是否存在所述当前匹配项的下一匹配项,如果存在,则将所述下一匹配项作为当前匹配项;
获取属于所述当前匹配项的各个第二匹配信息,对于每个第二匹配信息,分别从每个第一规则子组中获取包含所述第二匹配信息的各个规则条目,并将分别获取的这些规则条目分别构成第二规则子组,并将所述第二规则子组作为第一规则子组,继续执行所述判断是否存在所述当前匹配项的下一匹配项的步骤,直到不存在所述下一匹配项为止。
在第一方面的第三种可能的实现方式中,所述第一负载均衡算法为哈希算法,在所述利用确定的包获取线程捕获数据包前,还包括:
利用哈希算法确定用于捕获所述数据包的包获取线程。
结合第一方面的第三种可能的实现方式,在第四种可能的实现方式中,所 述第二负载均衡算法为哈希算法,在所述利用确定的协议处理线程获取所述数据包的协议信息前,还包括:
利用哈希算法确定用于获取所述数据包的协议信息的协议处理线程。
结合第一方面的第四种可能的实现方式,在第五种可能的实现方式中,在利用哈希算法确定用于获取所述数据包的协议信息的协议处理线程后,还包括:
从MSG池中调取一个MSG数据结构,并利用所述MSG数据结构将所述数据包的指针信息发送至所述确定的协议处理线程;
所述利用确定的协议处理线程获取所述数据包的协议信息,具体为:
所述确定的协议处理线程根据所述指针信息获取所述数据包的协议信息。
结合第一方面的第五种可能的实现方式,在第六种可能的实现方式中,所述确定的协议处理线程根据所述指针信息获取所述数据包的协议信息后,还包括:
所述确定的协议处理线程将所述协议信息保存在所述MSG数据结构中;
所述将所述协议信息分别发送至所述确定的协议处理线程绑定的至少两个数据包处理线程中,具体为:
所述MSG数据结构将保存的协议信息分别发送至所述确定的协议处理线程绑定的至少两个数据包处理线程中。
结合第一方面的第五种或第六种可能的实现方式,在第七种可能的实现方式中,所述方法还包括:
当每个数据包处理线程的匹配操作结束后,在所述MSG数据结构中设置标识位,以标识所述数据包处理线程对所述数据包的规则匹配结束,并将匹配出的优先级最高的第一规则条目的规则标识保存在所述MSG数据结构中。
结合第一方面的第八种可能的实现方式,在第九种可能的实现方式中,所述判断是否有至少两个数据包处理线程分别匹配出优先级最高的第一规则条目,如果是,则从至少两个第一规则条目中选取优先级最高的第二规则条目,以将所述第二规则条目作为与所述数据包匹配的规则条目,如果否,则将所述第一规则条目作为与所述数据包匹配的规则条目,具体包括:
当所述MSG数据结构中存有与每个数据包处理线程分别对应的标识位时, 判断所述MSG数据结构中是否存储了至少两个规则标识;
如果是,则从所述至少两个规则标识对应的至少两个第一规则条目中选取优先级最高的第二规则条目,以将所述第二规则条目作为与所述数据包匹配的规则条目;
如果否,则当所述MSG数据结构中存储了一个规则标识时,将所述一个规则标识对应的第一规则条目作为与所述数据包匹配的规则条目;
将所述MSG数据结构放回所述MSG池中。
第二方面,本发明提供了一种数据包的规则匹配装置,包括:
数据包捕获模块,用于在接收到数据包后,利用确定的包获取线程捕获数据包,所述确定的包获取线程为根据第一负载均衡算法在至少两个包获取线程中确定的一个包获取线程;
协议信息获取模块,用于利用确定的协议处理线程获取所述数据包的协议信息,所述确定的协议处理线程为根据第二负载均衡算法在所述确定的包获取线程绑定的至少两个协议处理线程中确定的一个协议处理线程;
协议信息分发模块,用于将所述协议信息分别发送至所述确定的协议处理线程绑定的至少两个数据包处理线程中;
匹配进行模块,用于每个数据包处理线程分别利用所述协议信息与对应加载的至少一个规则条目进行匹配;
成功匹配模块,用于当有数据包处理线程匹配出规则条目时,判断是否有至少两个数据包处理线程分别匹配出优先级最高的第一规则条目,如果是,则从至少两个第一规则条目中选取优先级最高的第二规则条目,以将所述第二规则条目作为与所述数据包匹配的规则条目,如果否,则将所述第一规则条目作为与所述数据包匹配的规则条目。
在第二方面的第一种可能的实现方式中,所述装置还包括:
规则分配模块,用于确定分配给每个数据包处理线程使用的至少一个规则条目,以使每个数据包处理线程分别加载分配给自己的至少一个规则条目;
所述规则分配模块,具体包括:
规则子组提取单元,用于从所有规则条目中提取至少一个规则子组,每个 规则子组中包含了匹配信息均相同的所有规则条目,所述协议信息中包含有所述匹配信息;
规则条目分配单元,用于将每个规则子组中的规则条目均衡分配给每个数据包处理线程。
结合第二方面的第一种可能的实现方式,在第二种可能的实现方式中,所述规则子组提取单元,具体包括:
匹配项排序子单元,用于确定对数据包进行规则匹配的匹配项,当所述匹配项有两个以上时,对所述两个以上的匹配项进行排序;
第一规则子组形成子单元,用于按照排序结果选取排序最前的匹配项,将所述排序最前的匹配项作为当前匹配项,并获取属于所述当前匹配项的各个第一匹配信息,对于每个第一匹配信息,分别从所有规则条目中获取包含所述第一匹配信息的各个规则条目,并将分别获取的这些规则条目分别构成第一规则子组;
下一匹配项判断子单元,用于判断是否存在所述当前匹配项的下一匹配项;
当前匹配项替换子单元,用于在所述下一匹配项判断子单元判断得到的存在所述当前匹配项的下一匹配项时,将所述下一匹配项作为当前匹配项;
第二规则子组形成子单元,用于获取属于所述当前匹配项的各个第二匹配信息,对于每个第二匹配信息,分别从每个第一规则子组中获取包含所述第二匹配信息的各个规则条目,并将分别获取的这些规则条目分别构成第二规则子组,并将所述第二规则子组作为第一规则子组,继续利用所述下一匹配项判断子单元执行所述判断是否存在所述当前匹配项的下一匹配项的步骤,直到不存在所述下一匹配项为止。
在第二方面的第三种可能的实现方式中,所述第一负载均衡算法为哈希算法,所述装置还包括:
包获取线程确定模块,用于在利用确定的包获取线程捕获数据包前, 利用哈希算法确定用于捕获所述数据包的包获取线程。
结合第二方面的第三种可能的实现方式,在第四种可能的实现方式中,所述第二负载均衡算法为哈希算法,所述装置还包括:
协议处理线程确定模块,用于在利用确定的协议处理线程获取所述数据包的协议信息前, 利用哈希算法确定用于获取所述数据包的协议信息的协议处理线程。
结合第二方面的第四种可能的实现方式,在第五种可能的实现方式中,所述装置还包括:
协议信息发送模块,用于在利用哈希算法确定用于获取所述数据包的协议信息的协议处理线程后,从MSG池中调取一个MSG数据结构,并利用所述MSG数据结构将所述数据包的指针信息发送至所述确定的协议处理线程;
所述协议信息获取模块,具体用于利用所述确定的协议处理线程根据所述指针信息获取所述数据包的协议信息。
结合第二方面的第五种可能的实现方式,在第六种可能的实现方式中,所述装置还包括:
协议信息保存模块,用于在所述确定的协议处理线程根据所述指针信息获取所述数据包的协议信息后,将所述协议信息保存在所述MSG数据结构中;
所述协议信息分发模块,具体用于利用所述MSG数据结构将保存的协议信息分别发送至所述确定的协议处理线程绑定的至少两个数据包处理线程中。
结合第二方面的第五种或第六种可能的实现方式,在第七种可能的实现方式中,所述装置还包括:
匹配规则保存模块,用于当所述匹配进行模块利用每个数据包处理线程的匹配操作结束后,在所述MSG数据结构中设置标识位,以标识所述数据包处理线程对所述数据包的规则匹配结束,并将匹配出的优先级最高的第一规则条目的规则标识保存在所述MSG数据结构中;
结合第二方面的第八种可能的实现方式,在第九种可能的实现方式中,所述成功匹配模块,具体包括:
规则标识判断单元,用于当所述MSG数据结构中存有与每个数据包处理线程分别对应的标识位时,判断所述MSG数据结构中是否存储了至少两个规则标识;
第一规则匹配单元,用于当所述规则标识判断单元判断得到的所述MSG数据结构中存储了至少两个规则标识时,从所述至少两个规则标识对应的至少两 个第一规则条目中选取优先级最高的第二规则条目,以将所述第二规则条目作为与所述数据包匹配的规则条目;
第二规则匹配单元,用于当所述规则标识判断单元判断得到的所述MSG数据结构中未存储至少两个规则标识时,若所述MSG数据结构中存储了一个规则标识时,则将所述一个规则标识对应的第一规则条目作为与所述数据包匹配的规则条目;
数据结构回放单元,将所述MSG数据结构放回所述MSG池中。
本发明实施例提供的数据包的规则匹配方法及装置,首先将接收的各个数据包进行二次分流,以将数据包分担到不同的协议处理线程上进行分别处理,从而减少了数据包等待响应的时间,这在一定程度上实现了负载均衡;进一步地,在协议处理线程对一个数据包进行协议解析后,需要对该数据包进行规则匹配这种非常耗时的工作,通过利用加载了部分规则的多个数据包处理线程对数据包进行规则匹配,从而将该数据包的规则匹配任务分担到了多个数据包处理线程上做并行处理,这使得数据处理能力得到了大幅度提高,进一步实现了负载均衡。可见,由于本发明实施例没有采用现有技术中的基于流空间划分的负载均衡方式,克服了现有技术中负载均衡受流量的不均衡性和突发性的影响的缺陷,采用本发明技术方案,实现了各个同类线程间的负载均衡,加强了网络数据处理能力。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例数据包规则匹配的网络结构示意图;
图2为本发明实施例数据包的规则匹配方法的流程示意图之一;
图3为本发明实施例规则划分流程示意图;
图4为本发明实施例规则划分树状结构图;
图5为本发明实施例数据包的规则匹配方法的流程示意图之二;
图6为本发明实施例数据包的规则匹配方法的流程示意图之三;
图7为本发明实施例基于OpenFlow交换机的数据包规则匹配的网络结构示意图;
图8为本发明实施例基于IDS的数据包规则匹配的网络结构示意图;
图9为本发明实施例数据包的规则匹配装置的结构示意图之一;
图10为本发明实施例数据包的规则匹配装置的结构示意图之二;
图11为本发明实施例数据包的规则匹配装置的结构示意图之三;
图12为本发明实施例数据包的规则匹配装置的构成示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供的数据包的规则匹配方法及装置,适用于由OpenFlow交换机和OpenFlow控制器组成的OpenFlow网络,其主要适用于所述OpenFlow交换机的流表查询功能。为了更方便的了解本发明实施例,下面就OpenFlow交换机的流表查询功能进行简单介绍:由于OpenFlow交换机会在本地维护一个或多个转发表,转发表包括流表和群组表,每个流表中包括一个或多个流条目,每个流条目包括匹配域和操作域;当OpenFlow交换机接收到数据包后,OpenFlow交换机会将数据包与所述流条目的匹配域进行匹配,当流表内有与接收的数据包匹配的流条目时,则根据该流条目的操作域内容进行数据流的转发操作;若没有匹配的流条目,数据包会被丢弃,或被上传到OpenFlow控制器以由OpenFlow控制器对数据包做进一步处理。
本发明实施例除了适用于OpenFlow网络中的OpenFlow交换机外,本发明实施例还适用于入侵检测系统(IDS,Intrusion Detection Systems),在IDS中,IDS中的每一条规则中都描述了一个已知攻击的特征,在IDS接收到数据包后,会将到来的数据包和这些规则进行比对,以确定该数据包是否受到攻击以及受到哪类攻击等。现有的IDS的规则库中包含上万条规则条目,在这种情况下,将每一个数据包与每一规则条目进行比对是一个非常耗时的工作,与OpenFlow交换机类似,IDS也需要高速的数据处理能力。
此外,本发明实施例不仅适用于OpenFlow交换机和IDS,也适用于其它的根据大量的表项来处理数据的应用,比如病毒检测程序ClamAV,应用层程序检测模块L7 filter等。
参见图1,为本发明实施例提供的用于数据包规则匹配的网络结构示意图,该网络采用一个进程来运行多个包处理模块,所述包处理模块之间并行工作,相互之间没有信息交互;每个包处理模块包括一个包获取线程、与每个包获取线程分别绑定的至少两个协议处理线程、以及与每个协议处理线程分别绑定的至少两个数据包处理线程。其中,可按照所要处理的数据量适应性的增加或减少所述包处理模块的数量、以及所述包处理模块中协议处理线程和数据包处理线程的数量。此外,图1右下角显示了整个进程中共享的全局变量:
(1)MSG(massage)池:程序初始化时分配NMSG 个MSG数据结构并保存在MSG池中,其中,NMSG≥1。
(2)原数据包:用来保存接收到的原始数据包的内存;
(3)数据包处理引擎:用于对数据包进行规则匹配等处理。
下面基于图1所示的网络结构示意图,分别详细介绍本发明的各个实施例。
实施例一
参见图2,为本发明实施例一提供的数据包的规则匹配方法的流程示意图,具体包括以下步骤:
步骤101:在接收到数据包后,利用确定的包获取线程捕获数据包,所述确定的包获取线程为根据第一负载均衡算法在至少两个包获取线程中确定的一个包获取线程。
由于系统会不断的接收到待处理的数据包,为了实现负载均衡,首先要将这大量的数据流量进行一次分流,以将这些数据流分摊到多个包处理模块进行分别处理,对于每个数据包,在确定分配给哪个包处理模块处理后,利用该包处理模块的包获取线程捕获数据包。
步骤102:利用确定的协议处理线程获取所述数据包的协议信息,所述确定的协议处理线程为根据第二负载均衡算法在所述确定的包获取线程绑定的至少两个协议处理线程中确定的一个协议处理线程。
每个包获取线程会不断的捕获数据包,为了进一步实现负载均衡,需要将每个包获取线程捕获的这些数据包进行二次分流,以将这些数据流分摊到多个协议处理线程进行分别处理,对于每个数据包,在确定分配给哪个协议处理线程处理后,利用该协议处理线程的对数据包作进一步处理。
需要说明的是,所述第一负载均衡算法和所述第二负载均衡算法可以为相同的负载均衡算法,也可以是不同的负载均衡算法。
步骤103:将所述协议信息分别发送至所述确定的协议处理线程绑定的至少两个数据包处理线程中。
步骤104:每个数据包处理线程分别利用所述协议信息与对应加载的至少一个规则条目进行匹配。
步骤105:如果有数据包处理线程匹配出规则条目,则判断是否有至少两个数据包处理线程分别匹配出优先级最高的第一规则条目,如果是,则执行步骤106,如果否,则执行步骤107。
步骤106:从至少两个第一规则条目中选取优先级最高的第二规则条目,以将所述第二规则条目作为与所述数据包匹配的规则条目。
步骤107:将所述第一规则条目作为与所述数据包匹配的规则条目。
在步骤104至步骤107中,当协议处理线程对一个数据包进行协议解析后,需要对该数据包进行规则匹配这种非常耗时的工作,通过利用加载了部分规则的多个数据包处理线程同时对一个数据包进行规则匹配,从而将该数据包的规则匹配任务分担到了多个数据包处理线程上做并行处理,这使得数据处理能力得到了大幅度提高,进一步加强了负载均衡。
为了采用步骤104至步骤107进行规则匹配,需要预先确定分配给每个数据 包处理线程使用的至少一个规则条目,以使每个数据包处理线程分别加载分配给自己的至少一个规则条目。具体地,采用下述方式确定分配给每个数据包处理线程使用的至少一个规则条目:
首先,从所有规则条目中提取至少一个规则子组,所述规则子组中包含了匹配信息均相同的所有规则条目,其中,所述协议信息中包含有所述匹配信息;
然后,将每个规则子组中的规则条目均衡分配给每个数据包处理线程。
可见,为保证数据包处理线程间的负载均衡,将匹配信息均相同的多个规则条目均衡分配给每个数据包处理线程,使得各个线程在各自加载的多个规则内进行规则匹配的开销是均衡的,即,当利用每个数据包处理线程对数据包进行匹配时,利用数据包的全部或部分协议信息作为匹配信息,当匹配成功时,可从数据包处理线程加载的规则条目中同时获取到匹配信息相同的各个规则条目;进一步地,当利用多个数据包处理线程同时进行规则匹配时,可迅速的获取所有匹配信息相同的规则条目,以便从这些规则条目中选取优先级最高的规则条目作为当前数据包的匹配规则。与现有技术相比,不必通过一一匹配来获取数据包的匹配规则,加快了规则匹配的处理速率;此外,如果对规则进行随机的划分,会使得具有相同匹配信息的规则条目不能均衡的分配给不同的数据包处理线程,会在一定程度上影响系统的负载均衡。
参见图3,为本发明实施例提供的规则划分流程示意图,实现所述“从所有规则条目中提取至少一个规则子组,所述规则子组中包含了匹配信息均相同的所有规则条目”的具体步骤包括:
步骤201:确定对数据包进行规则匹配的匹配项,当所述匹配项有两个以上时,对所述两个以上的匹配项进行排序。
步骤202:按照排序结果选取排序最前的匹配项,将所述排序最前的匹配项作为当前匹配项,并获取属于所述当前匹配项的各个第一匹配信息。
步骤203:对于每个第一匹配信息,分别从所有规则条目中获取包含所述第一匹配信息的各个规则条目,并将分别获取的这些规则条目分别构成第一规则子组。
步骤204:判断是否存在所述当前匹配项的下一匹配项,如果存在,则将所 述下一匹配项作为当前匹配项,执行步骤205;如果不存在,则执行步骤206。
步骤205:获取属于所述当前匹配项的各个第二匹配信息,对于每个第二匹配信息,分别从每个第一规则子组中获取包含所述第二匹配信息的各个规则条目,并将分别获取的这些规则条目分别构成第二规则子组,并将所述第二规则子组作为第一规则子组,继续执行所述步骤204。
步骤206:结束流程。
为了更方便的了解图3所述的方法,下面举例说明:
例1:参见图4,为本发明实施例提供的规则划分树状结构图。以OpenFlow交换机维护的流表为例,每个流表中包含一组流表项(流表项即为规则条目),每个流表项包含用于匹配数据包的匹配域,其中,每个流表项的匹配域中包括N个域(这N个域分别为N个匹配项)。为了方便说明,假设每个流表项的匹配域包括N=5个域,这5个域分别为:域1:IP源地址、域2:IP目的地址、域3:源端口、域4:目的端口、域5:协议类型,域1至域5即为对数据包进行规则匹配的匹配项;每个域对应有多个域值,例如,域1的m个域值为m个不同的IP源地址,图3中每个方块中的数字代表域值编码,这些域值即为匹配信息。
在确定了各个域后,再对这些域进行排序,可以对匹配域中的各个域进行排序,也可以选择匹配域中的部分域进行排序,假设排序结果为域1、域2、域3、域4、域5,可见,域1为排序最前的域,假设域1包含有m+1个不同域值(譬如:IP1=0、IP1=1……IP1=m),对于域1中的每个域值,分别从所有流表项中获取包含该域值的各个流表项,此时将所有规则条目分割成了m+1个规则子组,并将这m+1个规则子组分别构成第一规则子组,即,第1个第一规则子组为:包含域1中域值为0的所有流表项,第2个第一规则子组为:包含域1中域值为1的所有流表项、……第m+1个第一规则子组为:包含域1中域值为m的所有流表项。
在将所有规则划分为m+1个第一规则子组后,继续根据下一匹配项(域2)进行规则划分,假设域2包含有n+1个域值(譬如:IP2=0、IP1=2……IP2=n), 分别对每个第一规则子组进行以下划分:对于域2中的每个域值,分别从第一规则子组中获取包含该域值的各个流表项,此时将第一规则子组分割成了n+1个规则子组,并将这n+1个规则子组分别构成第二规则子组,即,第1个第二规则子组为:包含域2中域值为0的所有流表项,第2个第二规则子组为:包含域2 中域值为1的所有流表项,……第n+1个第二规则子组为:包含域2中域值为n的所有流表项;由于存在m+1个第一规则子组,且每个第一规则子组被分割成了n+1个第二规则子组,则经过两级规则划分后,所有规则条目被分割成了(m+1)*(n+1)个规则子组。
继续根据下一匹配项(域3)进行规则划分,按照上述方法,继续对每个第二规则子组进行规则划分,直到根据最后一个匹配项(域5)进行规则划分完为止,最后得到的各个规则子组分别由具有相同域值(匹配信息)的各个流表项(规则条目)组成。
在IDS中,同样可以按照上述例1所述的方法对IDS规则库中的所有规则进行划分。需要说明的是,这种规则划分是离线操作的,从而不需考虑规则划分对系统资源的占用,减小了系统的负载均衡开销。
此外,在现有技术中的数据并行方式中,利用多个OpenFlow进程同时运行多个OpenFlow实例,但是,由于不同的进程采用了相同的数据结构,数据资源被重复分配给不同的数据结构(例如,OpenFlow中的流表被重复分配给每个数据结构使用),导致内存消耗很大。而本发明实施例只采用了一个进程,数据资源不必重复分配,节省了内存消耗。
实施例二
参见图5,为本发明实施例二提供的数据包的规则匹配方法的流程示意图,具体包括以下步骤:
步骤301:在接收到数据包后,利用哈希算法确定用于捕获所述数据包的包获取线程,并利用所述确定的包获取线程捕获所述数据包;
其中,所述确定的包获取线程为根据第一负载均衡算法在至少两个包获取线程中确定的一个包获取线程,所述第一负载均衡算法为哈希算法。
下面举例说明如何利用哈希算法确定用于捕获所述数据包的包获取线程:
例2:在现有的哈希算法中,IPSX具有很好的均衡性,故可采用IPSX(IP移位异或哈希函数,IP Shift-XOR)算法确定将数据包分配给哪个包获取线程进行处理。举例说明:
假设OpenFlow交换机接收到一个数据包,数据包的五元组信息为:IP协 议的源地址是192.168.0.1;目的地址是 192.168.0.2;TCP协议的源端口是80;目的端口是21;传输层协议号是6;在IPSX方法的hash函数中,不必考虑协议号。设:
f1 =IP源地址比特串,为 0xc0a80001;
f2 =IP目的地址比特串,为0xc0a80002;
f3为报文所含的源端口和目的端口组成的位串,为0x00500015;
h1、v1和v2是中间变量,均为32比特串;
通过以下运算得到h1和h1的后16 bit(Value值):
v1=f1^f2;
v2=f3;
h1=v1<<8;
h1^=v1>>4;
h1^=v1>>12;
h1^= v1>>16;
h1^=v2<<6;
h1^=v2<<10;
h1^=v2<<14;
h1^=v2>>7
Value = h1&0x00001111;
最后得到 h1 = 0x5405b270; Value的值为0xb270(对应的十进制数为45680)。
假设有N个包获取线程,且每个包获取线程具有对应的编码,当需要在N个包获取线程间负载均衡时,利用Value对N取模,得到的模值即为确定的包获取线程的编号。假设存在7个包获取线程,Value对7取模后得5,即第5个包获取线程即为确定的包获取线程。
步骤302:利用哈希算法确定用于获取所述数据包的协议信息的协议处理线程,并利用确定的协议处理线程获取所述数据包的协议信息。
其中,所述确定的协议处理线程为根据第二负载均衡算法在所述确定的包获取线程绑定的至少两个协议处理线程中确定的一个协议处理线程,所述第二负载均衡算法为哈希算法。
每个包获取线程会不断的捕获到数据包,为了进一步加强负载均衡,就要对捕获的数据包进行分流,同样可根据五元组信息(源IP、目的IP、源端口、目的端口、协议类型)并结合哈希算法确定将数据包分配给哪个协议处理线程。举例说明:
例3:假设与确定的包获取线程绑定的协议处理线程有M个,且每个协议处理线程具有对应的编码,当需要在M个协议处理线程间负载均衡时,对于同一个数据包,在利用例2中的方法得到Value值后,利用Value对M取模,得到的模值即为确定的协议处理线程对应的编号。假设与确定的包获取线程绑定的协议处理线程有6个,Value对6取模后得2,即第2个协议处理线程即为确定的协议处理线程。
步骤303:将所述协议信息分别发送至所述确定的协议处理线程绑定的至少两个数据包处理线程中。
步骤304:每个数据包处理线程分别利用所述协议信息与对应加载的至少一个规则条目进行匹配。
步骤305:如果有数据包处理线程匹配出规则条目,则判断是否有至少两个数据包处理线程分别匹配出优先级最高的第一规则条目,如果是,则执行步骤306,如果否,则执行步骤307。
步骤306:从至少两个第一规则条目中选取优先级最高的第二规则条目,以将所述第二规则条目作为与所述数据包匹配的规则条目。
步骤307:将所述第一规则条目作为与所述数据包匹配的规则条目。
实施例三
参见图6,为本发明实施例三提供的数据包的规则匹配方法的流程示意图,具体包括以下步骤:
步骤401:在接收到数据包后,利用哈希算法确定用于捕获所述数据包的包获取线程,并利用所述确定的包获取线程捕获所述数据包,所述确定的包获 取线程为至少两个包获取线程中的一个。
步骤402:利用哈希算法确定用于获取所述数据包的协议信息的协议处理线程,并利用确定的协议处理线程获取所述数据包的协议信息,所述确定的协议处理线程为所述确定的包获取线程绑定的至少两个协议处理线程中的一个。
步骤403:从MSG池中调取一个MSG数据结构,并利用所述MSG数据结构将所述数据包的指针信息发送至所述确定的协议处理线程。
系统每捕获一个数据包,从池中拿出一个MSG数据结构,每一个线程处理完这个数据包后,把处理结果保存在这个数据结构中,通过消息队列传递给下一线程,数据包处理完毕后,相应的MSG数据结构又被放入池中即可。
步骤404:所述确定的协议处理线程根据所述指针信息获取所述数据包的协议信息,之后,所述确定的协议处理线程将所述协议信息保存在所述MSG数据结构中。
步骤405:所述MSG数据结构将保存的协议信息分别发送至所述确定的协议处理线程绑定的至少两个数据包处理线程中。
步骤406:每个数据包处理线程分别利用所述协议信息与对应加载的至少一个规则条目进行匹配。
步骤407:当每个数据包处理线程的匹配操作结束后,在所述MSG数据结构中设置标识位,以标识所述数据包处理线程对所述数据包的规则匹配结束,并当匹配出规则条目时,将匹配出的优先级最高的第一规则条目的规则标识保存在所述MSG数据结构中。
步骤408:当所述MSG数据结构中存有与每个数据包处理线程分别对应的标识位时,判断所述MSG数据结构中是否存储了至少两个规则标识;如果是,则执行步骤409,如果否,则执行步骤410。
步骤409:从所述MSG数据结构中存储的至少两个规则标识对应的至少两个第一规则条目中选取优先级最高的第二规则条目,以将所述第二规则条目作为与所述数据包匹配的规则条目;执行步骤411。
步骤410:如果所述MSG数据结构中存储了一个规则标识,则将所述MSG数据结构中存储的一个规则标识对应的第一规则条目作为与所述数据包匹配的规则条目;执行步骤411。
步骤411:将所述MSG数据结构放回所述MSG池中。
需要说明的是,将图1所示的网络结构应用于不同的网络设备时,数据包处理线程可对应不同的线程。参见图7,为基于OpenFlow交换机的数据包规则匹配的网络结构示意图,数据包处理线程可以包括流表查找线程和动作执行线程,利用所述流表查找线程进行规则匹配,根据匹配出的规则条目中的操作域,利用动作执行线程根据操作域对数据包进行转发处理等。参见图8,为基于IDS的数据包规则匹配的网络结构示意图,数据包处理线程即为深度包检测线程,该线程用于通过规则对比对数据包是否受到攻击进行检测。
本发明实施例提供的数据包的规则匹配方法,首先将接收的各个数据包进行二次分流,以将数据包分担到不同的协议处理线程上进行分别处理,从而减少了数据包等待响应的时间,这在一定程度上实现了负载均衡;进一步地,在协议处理线程对一个数据包进行协议解析后,需要对该数据包进行规则匹配这种非常耗时的工作,通过利用加载了部分规则的多个数据包处理线程对数据包进行规则匹配,从而将该数据包的规则匹配任务分担到了多个数据包处理线程上做并行处理,这使得数据处理能力得到了大幅度提高,进一步实现了负载均衡。可见,由于本发明实施例没有采用现有技术中的基于流空间划分的负载均衡方式,克服了现有技术中负载均衡受流量的不均衡性和突发性的影响的缺陷,采用本发明技术方案,实现了各个同类线程间的负载均衡,加强了网络数据处理能力。此外,本发明实施例的规则划分处理使每一个数据包处理线程加载的规则数目少,适合众核处理器单个核内Cache(高速缓冲存储器)资源稀缺的特点。
实施例四
参见图9,为本发明实施例四提供的数据包的规则匹配装置的结构示意图,该装置包括:
数据包捕获模块1,用于在接收到数据包后,利用确定的包获取线程捕获数据包,所述确定的包获取线程为根据第一负载均衡算法在至少两个包获取线 程中确定的一个包获取线程;
协议信息获取模块2,用于利用确定的协议处理线程获取所述数据包的协议信息,所述确定的协议处理线程为根据第二负载均衡算法在所述确定的包获取线程绑定的至少两个协议处理线程中确定的一个协议处理线程;
协议信息分发模块3,用于将所述协议信息分别发送至所述确定的协议处理线程绑定的至少两个数据包处理线程中;
匹配进行模块4,用于每个数据包处理线程分别利用所述协议信息与对应加载的至少一个规则条目进行匹配;
成功匹配模块5,用于当有数据包处理线程匹配出规则条目时,判断是否有至少两个数据包处理线程分别匹配出优先级最高的第一规则条目,如果是,则从至少两个第一规则条目中选取优先级最高的第二规则条目,以将所述第二规则条目作为与所述数据包匹配的规则条目,如果否,则将所述第一规则条目作为与所述数据包匹配的规则条目。
所述装置还应包括:规则分配模块,用于确定分配给每个数据包处理线程使用的至少一个规则条目,以使每个数据包处理线程分别加载分配给自己的至少一个规则条目;
所述规则分配模块,具体包括:
规则子组提取单元,用于从所有规则条目中提取至少一个规则子组,每个规则子组中包含了匹配信息均相同的所有规则条目,所述协议信息中包含有所述匹配信息;
规则条目分配单元,用于将每个规则子组中的规则条目均衡分配给每个数据包处理线程。
其中,所述规则子组提取单元,具体包括:
匹配项排序子单元,用于确定对数据包进行规则匹配的匹配项,当所述匹配项有两个以上时,对所述两个以上的匹配项进行排序;
第一规则子组形成子单元,用于按照排序结果选取排序最前的匹配项,将所述排序最前的匹配项作为当前匹配项,并获取属于所述当前匹配项的各个第一匹配信息,对于每个第一匹配信息,分别从所有规则条目中获取包含所述第一匹配信息的各个规则条目,并将分别获取的这些规则条目分别构成第一规则 子组;
下一匹配项判断子单元,用于判断是否存在所述当前匹配项的下一匹配项;
当前匹配项替换子单元,用于在所述下一匹配项判断子单元判断得到的存在所述当前匹配项的下一匹配项时,将所述下一匹配项作为当前匹配项;
第二规则子组形成子单元,用于获取属于所述当前匹配项的各个第二匹配信息,对于每个第二匹配信息,分别从每个第一规则子组中获取包含所述第二匹配信息的各个规则条目,并将分别获取的这些规则条目分别构成第二规则子组,并将所述第二规则子组作为第一规则子组,继续利用所述下一匹配项判断子单元执行所述判断是否存在所述当前匹配项的下一匹配项的步骤,直到不存在所述下一匹配项为止。
需要说明的是,可以在利用匹配进行模块4执行相关操作前的任意时刻,利用规则分配模块实现上述操作;也可以离线利用规则分配模块实现上述操作。
实施例五
参见图10,为本发明实施例五提供的数据包的规则匹配装置的结构示意图。上述实施例四中的所述第一负载均衡算法为哈希算法,所述第二负载均衡算法也为哈希算法,本实施例五除了包括上述实施例四中的各个模块外,该装置还包括:
包获取线程确定模块6,用于在利用确定的包获取线程捕获数据包前, 利用哈希算法确定用于捕获所述数据包的包获取线程。
协议处理线程确定模块7,用于在利用确定的协议处理线程获取所述数据包的协议信息前,利用哈希算法确定用于获取所述数据包的协议信息的协议处理线程。
实施例六
参见图11,为本发明实施例六提供的数据包的规则匹配装置的结构示意图。本实施例六除了包括上述实施例五中的各个模块外,该装置还包括:
协议信息发送模块8,用于在所述协议处理线程确定模块7利用哈希算法确定用于获取所述数据包的协议信息的协议处理线程后,从MSG池中调取一个MSG数据结构,并利用所述MSG数据结构将所述数据包的指针信息发送至所述确定的协议处理线程;
所述协议信息获取模块2,具体用于利用所述确定的协议处理线程根据所述指针信息获取所述数据包的协议信息。
该装置还包括:
协议信息保存模块9,用于在所述协议信息获取模块2利用确定的协议处理线程根据所述指针信息获取所述数据包的协议信息后,将所述协议信息保存在所述MSG数据结构中;
所述协议信息分发模块3,具体用于利用所述MSG数据结构将保存的协议信息分别发送至所述确定的协议处理线程绑定的至少两个数据包处理线程中。
该装置还包括:
匹配规则保存模块10,用于当所述匹配进行模块4利用每个数据包处理线程的匹配操作结束后,在所述MSG数据结构中设置标识位,以标识所述数据包处理线程对所述数据包的规则匹配结束,并将匹配出的优先级最高的第一规则条目的规则标识保存在所述MSG数据结构中;
所述成功匹配模块5,具体包括:
规则标识判断单元,用于当所述MSG数据结构中存有与每个数据包处理线程分别对应的标识位时,判断所述MSG数据结构中是否存储了至少两个规则标识;
第一规则匹配单元,用于当所述规则标识判断单元判断得到的所述MSG数据结构中存储了至少两个规则标识时,从所述至少两个规则标识对应的至少两个第一规则条目中选取优先级最高的第二规则条目,以将所述第二规则条目作为与所述数据包匹配的规则条目;
第二规则匹配单元,用于当所述规则标识判断单元判断得到的所述MSG数据结构中未存储至少两个规则标识时,若所述MSG数据结构中存储了一个规则标识时,则将所述一个规则标识对应的第一规则条目作为与所述数据包匹配的规则条目;
数据结构回放单元,将所述MSG数据结构放回所述MSG池中。
在硬件实现上,以上模块可以以硬件形式内嵌于或独立于数据包的规则匹配装置的处理器中,也可以以软件形式存储于数据包的规则匹配装置中,如规则匹配装置的存储器中,以便于处理器调用执行以上各个模块对应的操作。该处理器可以为中央处理单元(CPU)、微处理器、单片机等。图9、10、11所示的装置能够执行上述实施例中的相应步骤,具体可参见上述实施例的描述。其所达到的效果也可参见上述实施例所述。
进一步地,本发明实施例还提供了数据包的规则匹配装置100的构成。可包括至少一个处理器(例如CPU),至少一个网络接口或者其他通信接口,存储器,和至少一个通信总线,用于实现这些装置之间的连接通信。处理器用于执行存储器中存储的可执行模块,例如计算机程序。存储器可能包含高速随机存取存储器(RAM:Random Access Memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个网络接口(可以是有线或者无线)实现该系统网关与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。
参见图7所示,在一些实施方式中,存储器中存储了程序指令,程序指令可以被处理器执行,其中,处理器调取程序指令,执行如下步骤:“在接收到数据包后,利用确定的包获取线程捕获数据包,所述确定的包获取线程为根据第一负载均衡算法在至少两个包获取线程中确定的一个包获取线程;利用确定的协议处理线程获取所述数据包的协议信息,所述确定的协议处理线程为根据第二负载均衡算法在所述确定的包获取线程绑定的至少两个协议处理线程中确定的一个协议处理线程;将所述协议信息分别发送至所述确定的协议处理线程绑定的至少两个数据包处理线程中;每个数据包处理线程分别利用所述协议信息与对应加载的至少一个规则条目进行匹配;如果有数据包处理线程匹配出规则条目,则判断是否有至少两个数据包处理线程分别匹配出优先级最高的第一规则条目,如果是,则从至少两个第一规则条目中选取优先级最高的第二规则条目,以将所述第二规则条目作为与所述数据包匹配的规则条目,如果否,则将所述第一规则条目作为与所述数据包匹配的规则条目”。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的模块和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。