一种报文处理方法和装置与流程

文档序号:17488745发布日期:2019-04-23 20:13阅读:215来源:国知局
一种报文处理方法和装置与流程

本发明涉及计算机技术领域,尤其涉及一种报文处理方法和装置。



背景技术:

随着网络用户群不断的增长以及应用业务的多元化,网络流量持续增长,单位时间到达路由器的数据包变多,为了保证网络的性能,数据包必须被及时处理和转发。影响报文转发速度的因素主要体现在对数据包的快速处理能力和报文的查找速度。

为了提高报文的处理能力,目前广泛使用cavium(凯为)多核处理器来接收和处理报文,但是cavium多核处理器的运行必须基于特定的服务器,并且需要在电脑上安装cavium芯片,成本和代价较高;报文的查找速度主要取决于报文分类技术,目前广泛使用三元内容寻址存储器算法、hash表查找算法等包分类算法,但这些算法也都有各自的缺点。例如,三元内容寻址存储器算法对规则数量、维数、维宽度的扩展能力较差,而hash算法的对内存的占用较大,只能用于小规模的包分类。所以,目前需要一种能支持大规模数据流量且能实现高效查表的报文处理方法。



技术实现要素:

有鉴于此,本发明实施例提出一种报文处理方法和装置,以解决现有的报文处理技术成本和代价较高,且占用内存较大的问题。

本发明实施例提供一种报文处理方法,所述方法包括:

调用数据面开发套件,并对其进行初始化配置;包括:配置接收网卡和发送网卡,配置cpu的收包核、处理核和转发核;

在所述数据面开发套件中配置路由器的数据包过滤规则;包括:设置规则id、源ip地址区段、目的ip地址区段、源端口范围、目的端口范围、协议范围和每个规则id对应的包处理动作;

将所述数据包的包头拆分成七个块,根据所述数据包过滤规则中的内容确定每个块对应的规则id,设置每个块对应的等价类标识号和规则掩码;使用七个cell数组存储所述七个块中的等价类标识号、规则掩码并记录所述七个块中不重复的等价类标识号的数目;其中,每个cell数组的索引为所述等价类标识号,对应的值为所述规则掩码;同时,建立七个node数组,每个node数组的索引为0-65535,值为所述等价类标识号;

以每个cell数组中的不重复的等价类标识号为界限,分阶段进行有限次遍历,根据每一阶段生成的规则掩码确定最后一个阶段的规则掩码;根据所述最后一个阶段的规则掩码确定对应的规则id;并将遍历过程中每一阶段产生的数据组合起来,得到预处理表;

通过所述接收网卡接收目标报文;

在所述收包核中将所述目标报文的包头分块,并将每一个块作为并行查找的索引,对所述预处理表中的字段进行分阶段查找,且每一阶段查找内存的索引值由上一阶段的查找结果合并而成;根据最后一个阶段得到的索引值,确定所述目标报文命中的规则id;

根据所述规则id在所述数据包过滤规则中对应的处理动作处理该目标报文。

优选地,以每个cell数组中的不重复的等价类标识号为界限,分阶段进行有限次遍历,根据每一阶段生成的规则掩码确定最后一个阶段的规则掩码;根据所述最后一个阶段的规则掩码确定对应的规则id;并将遍历过程中每一阶段产生的数据组合起来,得到预处理表,包括:

将所述七个cell数组分成两类,分别为第一类cell数组和第二类cell数组,其中,所述第一类cell数组中共四个数组,所述第二类cell数组中共三个数组;

在第一阶段,以所述第一类cell数组中的四个数组各自的不重复的等价类标识号数目为界限,进行四层遍历,计算出第一阶段数组的索引,并建立第一节点数组;所述第一节点数组中的索引对应的规则掩码为所述第一类中的四个数组对应的规则掩码进行与操作得到的结果;如果所述规则掩码在所述第一节点数组中不存在,将该规则掩码记录在所述第一节点数组中,所述规则掩码对应的索引,为所述第一节点数组的非0成员的数目,即等价类标识号,对应的值为该掩码;如果所述规则掩码在所述第一节点数组中存在,那么,所述规则掩码对应的索引,即等价类标识号,即为第一阶段数组的索引对应的值;记录第一阶段不重复的等价类标识号的数目;

在第二阶段,以所述第二类中的三个数组各自的不重复的等价类标识号数目为界限,进行三层遍历,计算出第二阶段数组的索引,并建立第二节点数组;所述第二节点数组中的索引对应的规则掩码为所述第二类中的三个数组对应的规则掩码进行与操作得到的结果;如果所述规则掩码在所述第二节点数组中不存在,将该规则掩码记录在所述第二节点数组中,索引值为所述第二节点数组的非0数组的数目,对应的值为该掩码;如果所述规则掩码在所述第二节点数组中存在,那么,所述规则掩码对应的索引,即等价类标识号,即为第二阶段数组的索引对应的值;记录第二阶段不重复的等价类标识号的数目;

在第三阶段,以所述第一阶段数组与所述第二阶段数组中的不重复的等价类标识号的数目为界限,进行二层遍历,计算出第三阶段的索引;并将所述第一阶段数组与所述第二阶段数组对应的规则掩码进行与操作,得到所述第三阶段的索引对应的规则掩码;获取所述规则掩码对应的二进制数,取所述二进制数中位数最小的1对应的规则id作为所述规则命中的规则id;

将遍历过程中每一阶段产生的数组、索引、等价类标识号、规则掩码及规则id组合起来,得到预处理表。

优选地,在所述收包核中将所述目标报文的包头分块,并将每一个块作为并行查找的索引,对所述预处理表中的字段进行分阶段查找,且每一阶段查找内存的索引值由上一阶段的查找结果合并而成;根据最后一个阶段得到的索引值,确定所述目标报文命中的规则id,包括:

将所述目标报文的包头分为七个块,并为每个块标明序号;

以所述每个块的序号作为索引,在所述七个node数组中计算出第0阶段的等价类标识号;以所述第一类cell数组中的四个数组对应的不重复的等价类标识号,计算出所述目标报文第一阶段的索引,进而得到所述目标报文第一阶段的等价类标识号;以所述第二类cell数组中的三个数组对应的不重复的等价类标识号,计算出所述目标报文第二阶段的索引,进而得到所述目标报文第二阶段的等价类标识号;使用所述目标报文第一阶段的不重复的等价类标识号和所述目标报文第二阶段的不重复的等价类标识号,计算出第三阶段的等价类标识号,将其作为所述目标报文命中的规则id。

优选地,所述根据所述规则id在所述数据包过滤规则中对应的处理动作处理该目标报文,包括:

检测所述处理动作是否是丢弃,如果是,则对所述报文进行释放;

检测所述处理动作是否是分析处理,如果是,则将所述报文进行解码分析,完成分析后将所述报文写入所述转发核中;

检测所述处理动作是否是转发,如果是,则将所述报文写入所述转发核中。

本发明实施例还提供一种报文处理装置,所述装置包括:

初始化配置模块,用于调用数据面开发套件,并对其进行初始化配置;包括:配置接收网卡和发送网卡,配置cpu的收包核、处理核和转发核;

过滤规则配置模块,用于在所述数据面开发套件中配置路由器的数据包过滤规则;包括:设置规则id、源ip地址区段、目的ip地址区段、源端口范围、目的端口范围、协议范围每个规则id对应的包处理动作;

拆分存储模块,用于将所述数据包的包头拆分成七个块,根据所述数据包过滤规则中的内容确定每个块对应的规则id,设置每个块对应的等价类标识号和规则掩码;使用七个cell数组存储所述七个块中的等价类标识号、规则掩码并记录所述七个块中不重复的等价类标识号的数目;其中,每个cell数组的索引为所述等价类标识号,对应的值为所述规则掩码;同时,建立七个node数组,每个node数组的索引为0-65535,值为所述等价类标识号;

预处理表确定模块,用于以每个cell数组中的不重复的等价类标识号为界限,分阶段进行有限次遍历,根据每一阶段生成的规则掩码确定最后一个阶段的规则掩码;根据所述最后一个阶段的规则掩码确定对应的规则id;并将遍历过程中每一阶段产生的数据组合起来,得到预处理表;

接收模块,用于通过所述接收网卡接收目标报文;

查找模块,用于在所述收包核中将所述目标报文的包头分块,并将每一个块作为并行查找的索引,对所述预处理表中的字段进行分阶段查找,且每一阶段查找内存的索引值由上一阶段的查找结果合并而成;根据最后一个阶段得到的索引值,确定所述目标报文命中的规则id;

处理模块,用于根据所述规则id在所述数据包过滤规则中对应的处理动作处理该目标报文。

优选地,所述遍历模块包括:

分组子模块,用于将所述七个cell数组分成两类,分别为第一类cell数组和第二类cell数组,其中,所述第一类cell数组中共四个数组,所述第二类cell数组中共三个数组;

第一遍历子模块,用于在第一阶段,以所述第一类cell数组中的四个数组各自的不重复的等价类标识号数目为界限,进行四层遍历,计算出第一阶段数组的索引,并建立第一节点数组;所述第一节点数组中的索引对应的规则掩码为所述第一类中的四个数组对应的规则掩码进行与操作得到的结果;如果所述规则掩码在所述第一节点数组中不存在,将该规则掩码记录在所述第一节点数组中,所述规则掩码对应的索引,为所述第一节点数组的非0成员的数目,即等价类标识号,对应的值为该掩码;如果所述规则掩码在所述第一节点数组中存在,那么,所述规则掩码对应的索引,即等价类标识号,即为第一阶段数组的索引对应的值;记录第一阶段不重复的等价类标识号的数目;

第二遍历子模块,用于在第二阶段,以所述第二类中的三个数组各自的不重复的等价类标识号数目为界限,进行三层遍历,计算出第二阶段数组的索引,并建立第二节点数组;所述第二节点数组中的索引对应的规则掩码为所述第二类中的三个数组对应的规则掩码进行与操作得到的结果;如果所述规则掩码在所述第二节点数组中不存在,将该规则掩码记录在所述第二节点数组中,索引值为所述第二节点数组的非0数组的数目,对应的值为该掩码;如果所述规则掩码在所述第二节点数组中存在,那么,所述规则掩码对应的索引,即等价类标识号,即为第二阶段数组的索引对应的值;记录第二阶段不重复的等价类标识号的数目;

第三遍历子模块,用于在第三阶段,以所述第一阶段数组与所述第二阶段数组中的不重复的等价类标识号的数目为界限,进行二层遍历,计算出第三阶段的索引;并将所述第一阶段数组与所述第二阶段数组对应的规则掩码进行与操作,得到所述第三阶段的索引对应的规则掩码;获取所述规则掩码对应的二进制数,取所述二进制数中位数最小的1对应的规则id作为所述规则命中的规则id;

预处理表确定子模块,用于将遍历过程中每一阶段产生的数组、索引、等价类标识号、规则掩码及规则id组合起来,得到预处理表。

优选地,所述查找模块包括:

分块子模块,用于将所述目标报文的包头分为七个块,并为每个块标明序号;

查找子模块,用于以所述每个块的序号作为索引,在所述七个node数组中计算出第0阶段的等价类标识号;以所述第一类cell数组中的四个数组对应的不重复的等价类标识号,计算出所述目标报文第一阶段的索引,进而得到所述目标报文第一阶段的等价类标识号;以所述第二类cell数组中的三个数组对应的不重复的等价类标识号,计算出所述目标报文第二阶段的索引,进而得到所述目标报文第二阶段的等价类标识号;使用所述目标报文第一阶段的不重复的等价类标识号和所述目标报文第二阶段的不重复的等价类标识号,计算出第三阶段的等价类标识号,将其作为所述目标报文命中的规则id。

优选地,所述处理模块包括:

第一处理子模块,用于检测所述处理动作是否是丢弃,如果是,则对所述报文进行释放;

第二处理子模块,用于检测所述处理动作是否是分析处理,如果是,则将所述报文进行解码分析,完成分析后将所述报文写入所述转发核中;

第三处理子模块,用于检测所述处理动作是否是转发,如果是,则将所述报文写入所述转发核中。

相比于现有技术,本发明实施例具有以下优点:

本发明实施例通过调用数据面开发套件来接收和处理报文,可以让设备驱动运行在用户空间,这样报文就不需要进行内核与用户层之间的数据拷贝,节约了大量时间;并且应用所述数据面开发套件无中断的轮询处理驱动、大页内存机制,提高了报文的处理速度;在报文的处理过程中使用的包分类算法,基于多层映射、逐层缩减的原理,大大减少了查表的次数,节省了内存,提高了查表速度。使用上述方法,使报文的处理速度显著提升,并使处理报文所需占用的内存大大减少。

附图说明

图1示出了本发明实施例中的一种报文处理方法的流程图;

图2示出了本发明实施例中的一种报文处理方法的数据流图;

图3示出了本发明实施例中的一种报文处理装置的结构框图;

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

参照图1,示出了本发明实施例中的一种报文处理方法的流程图,具体可以包括如下步骤:

步骤101,调用数据面开发套件,并对其进行初始化配置;包括:配置接收网卡和发送网卡,配置cpu的收包核和转发核。

在本发明实施例中,所述数据面开发套件(dpdk,dataplanedevelopmentkit)是由6wind,intel等多家公司开发,主要基于linux系统运行,用于快速报文处理的函数库与驱动集合,可以极大提高数据处理性能和吞吐量,提高数据平面应用程序的工作效率。

dpdk提供了一套用户快速处理报文和优化的网络设备驱动。它不需要修改linux内核就可以让设备驱动运行在用户空间,从而消除了内核和用户空间之间的数据拷贝,实现了零拷贝。它提供了一套用户空间的api,开发者可以在用户空间使用这套api,这套api相对于传统的linux系统调用来说是低开销的,而且由于它运行在用户空间,并且它使用自己的数据平面库来收发报文,从而绕过了linux内核协议栈对报文的处理,大大的缩短了报文处理的延时。跟传统的linux应用程序相比,这种方式产生的用户空间应用程序有着更好的扩展性。

dpdk使用了一系列的技术来减小报文的处理时延,以提高报文的处理速度,这些技术主要包括用户空间的无中断的轮询模式驱动、大页内存机制、缓存对齐、cpu的亲和性、无锁队列等,这些技术为开发者提供了一个创建高性能的报文处理应用程序的直接的用户开发环境。

具体地,dpdk可以让设备驱动运行在用户空间,这样报文就不需要进行内核与用户层之间的数据拷贝,节约了大量时间;轮询无中断模式的驱动代替了中断模式的驱动,使得在网络流量较大时不会因为终端泛滥导致性能严重衰减;大页内存可以减少虚拟页地址到物理页地址的转换时间。

一般来说,影响报文转发的速度因素包括两个方面,一方面是对报文的快速处理能力,另一方面是报文的查找速度。使用dpdk数据面开发套件,可以直接在用户层处理报文,并且报文的接收、处理、转发在不同的cpu内核上多线程运行,从而提高了报文的处理速度。

在本发明实施例中,要使用dpdk数据面开发套件,首先要对其调用,并进行初始化配置。在初始化配置中,主要需要配置接收网卡和发送网卡,配置cpu的收包核和转发核。其中,接收网卡、发送网卡主要用于接收和发送报文,收包核即在cpu中负责处理报文的内核,转发核即在cpu中负责转发报文的内核。其中,cpu内核是cpu中间的核心芯片,由单晶硅制成,用来完成所有的计算、接受/存储命令、处理数据等,是数字处理核心。

具体地,对dpdk进行初始化配置的过程举例如下:

s1:配置port1作为接收网卡,port2作为发送网卡;cpu序列号1-2作为收包核,cpu序列号3作为转发核;内存通道数设置为4;

s2:每个核申请1个接收队列用来收包,申请1个ring(无锁队列)用来将报文发送到转发核,1个ring用来将报文发送到处理核;共申请2个接收队列,一个发包队列。其中,所述ring(无锁队列),指多个cpu在操作同一个队列时,若同时具有入队线程和出队线程时,两个线程可以并发操作,而不需要任何加锁行为,这可以保证线程的安全,并提高cpu的操作速度;

s3:调用rte_eth_dev_configure()对port1进行配置,调用rte_eth_rx_queue_setup()接口,将接收队列ring进行初始化;

s4:调用rte_eth_dev_start()建立mempool(内存池),队列,ring,dma(存储器直接访问)之间的映射关系,并启动port1;

s5:申请一个发送队列;

s6:调用rte_eth_dev_configure()对port2进行配置,调用rte_eth_rx_queue_setup(),将发送队列ring进行初始化;

s7:调用rte_eth_dev_start()建立mempool,队列,ring,dma(存储器直接访问)之间的映射关系,启动port2。

在本发明实施例中,上述配置过程仅作为举例,根据数据流的大小,收包核、处理核、转发核的序列号和数量可以对应更改,无锁队列ring的数量也可以更改。

步骤102,在所述数据面开发套件中配置路由器的数据包过滤规则;包括:设置规则id、源ip地址区段、目的ip地址区段、源端口范围、目的端口范围、协议范围每个规则id对应的包处理动作。

在本发明实施例中,配置路由器的数据包过滤规则,即配置访问控制列表(accesscontrollist,acl),其是路由器和交换机接口的指令列表,是一组数据包过滤规则的集合,以允许或阻止符合特定条件的报文通过。在配置acl后,可以限制网络流量,允许特定设备访问,指定转发特定端口报文等。acl是物联网中保障系统安全性的重要技术,在设备硬件层安全基础上,通过对在软件层面对设备间通信进行访问控制,使用可编程方法指定访问规则,防止非法设备破坏系统安全,非法获取系统数据。

要配置访问控制列表规则,需要设置规则id、源ip地址区段、目的ip地址区段、源端口范围、目的端口范围、协议范围和每个规则id对应的包处理动作。

在本发明实施例中,以来自ip地址为192.168.10.9-192.168.10.30区段的报文为例,将所述报文包头中的报文五元组(即源ip地址、目的ip地址、源端口、目的端口、协议类型)进行拆分并为其配置不同的规则动作,配置好的访问控制列表规则如下:

setaccess-listtuplerule1sip192.168.10.9-192.168.10.11dipanysp6555-6556dp40-80protoany(设置访问列表元组的规则1为:源ip地址192.168.10.9-192.168.10.11,目的ip地址任意,源端口6555-6556,目的端口40-80,协议任意。意为满足上述规则1的数据流可以从路由器进入接收网卡。)

setaccess-listtuplerule2sip192.168.10.10-192.168.10.20dipanysp6555dp80protoany(设置访问列表元祖的规则2为:源ip地址192.168.10.10-192.168.10.20,目的ip地址任意,源端口6555,目的端口80,协议任意。意为满足上述规则2的数据流可以从路由器进入接收网卡。)

setaccess-listtuplerule3sip192.168.10.15-192.168.10.30dipanysp6555dp80protoany(设置访问列表元祖的规则3为:源ip地址192.168.10.15-192.168.10.30,目的ip地址任意,源端口6555,目的端口80,协议任意。意为满足上述规则3的数据流可以从路由器进入接收网卡。)可以看出,上述示例将报文包头中的字段,即报文五元组,划分为了三个域,设置了三个规则id(即rule1、rule1、rule3),每个规则id有其允许通过的报文类型。

接下来配置规则id对应的包处理动作。例如:

bindrule1actiondrop;

bindrule2actionforward;

bindrule3actionprocess;

步骤103,将所述数据包的包头拆分成七个块,根据所述数据包过滤规则中的内容确定每个块对应的规则id,设置每个块对应的等价类标识号和规则掩码;使用七个cell数组存储所述七个块中的等价类标识号、规则掩码并记录所述七个块中不重复的等价类标识号的数目;其中,每个cell数组的索引为所述等价类标识号,对应的值为所述规则掩码;同时,建立七个node数组,每个node数组的索引为0-65535,值为所述等价类标识号。

在本发明实施例中,影响报文转发的速度因素之二是报文的查表速度,为了提高报文的查表速度,我们采用以下算法对报文包头中的字段进行处理。该算法类似一个映射函数,将不同报文映射到不同种类,把一步映射化为多步来做,每步做类似的操作,完成一次空间压缩,把一个较大的类集合映射成较小的等价类集合。该算法共分为多个阶段,每个阶段由一系列并行的查找组成,每个查找的结果值比用于查找的索引值短。

在该算法的第0阶段,为数据映射的预备阶段,主要对字段进行拆分,将拆分的字段存入数组中,并将数组组合成两大类,以备后几个阶段的映射过程使用。

仍然以上述来自ip地址为192.168.10.9-192.168.10.3区段的报文为例,在步骤102中,已经对所述报文中的字段进行了划分,以下根据所划分的结果将所述字段进一步拆分,共拆分成七个块,包括:sip-high,sip-low,dip-high,dip-low,src-port,dst-port,proto。在每一个块中,以每十六个比特作为一个区段,如将rule1拆分如下:

在上述配置中,目的ip地址的高位以0开始,以255.255结束,目的ip地址的低位以0开始,以255.255结束,意为目的ip地址可以是任意的ip地址;同样,协议号以0开始,以255结束,意为协议号也可以是任意的。

以上述的配置方法对rule2和rule3也进行配置,并对3个域所拆分的字段sip-high,sip-low,dip-high,dip-low,src-port,dst-port,proto分别按值进行排序。例如将sip-low按值进行排序,如下所示:

根据所述数据包过滤规则中的内容确定每个块对应的规则id,设置每个块对应的等价类标识号和规则掩码。例如为上述sip-low设置对应的规则id、等价类标识号和规则掩码,如下所示:

当sip-low的值小于10.9,对应的ruleid为0,eqcid为0,mask为0;

当sip-low的值等于10.9,对应的ruleid为r1,eqcid为1,mask为1;

当sip-low的值等于10.10-10.11,对应的ruleid为r1,r2,eqcid为2,mask为3;

当sip-low的值等于10.12-10.14,对应的ruleid为r2,eqcid为3,mask为2;

当sip-low的值等于10.15-10-20,对应的ruleid为r2,r3,eqcid为4,mask为6;

当sip-low的值等于10.21-10.30,对应的ruleid为r3,eqcid为5,mask为4;

当sip-low的值大于10.30,对应的ruleid为0,eqcid为0,mask为0。

其中,所述ruleid为规则id,eqcid为等价类标识号,mask为规则掩码。所述规则掩码则(rule掩码)是根据一定的规则将ruleid的值换算得出的代码,例如若ruleid为r1,r2,则其对应的掩码的计算方法为((1-0)<<1)|((2-1)<<1)=3。

在本发明实施例中,使用数组ce1101存储上述sip-low的各个eqcid,并将重复的eqcid去掉,即数组ce1101中存储的eqcid为0,1,2,3,4,5,则数组的索引(即数组元素的下标序号)为上述eqcid,数组每个元素对应的值为mask,记录数组ce1101中不重复的eqcid的数目n_ces为6。建立node01数组,因为ip区段00.00-255.255,取值范围是0-65535,所以建立的数组是65536长度,以该值65536作为数组node01的索引。同时在ip地址192.168.10.9-192.168.10.30对应的索引区段内,此时数组元素的值为上述eqcid。

类似的,使用cell00,cell02,cell03,cell04,cell05,cell06分别将sip-high,dip-high,dip-low,src-port,dst-port,proto对应的的mask、ruleid,eqcid,n_ces进行记录,并建立对应的node00,node01.node02,node03,node04,node05,node06数组。

步骤104、以每个cell数组中的不重复的等价类标识号为界限,进行有限次遍历,得到最终的规则掩码;根据所述最终的规则掩码确定命中的规则id。

在本发明实施例中,上述过程共分为多个阶段,每个阶段由一系列并行的查找组成,每个查找的结果值比用于查找的索引值短,以此达到查找次数的缩减。

优选地,以每个数组中的不重复的等价类标识号为界限,进行有限次遍历,得到最终的规则掩码;根据所述最终的规则掩码确定命中的规则id,包括:

将所述七个cell数组分成两类,分别为第一类cell数组和第二类cell数组,其中,所述第一类cell数组中共四个数组,所述第二类cell数组中共三个数组;

在第一阶段,以所述第一类cell数组中的四个数组各自的不重复的等价类标识号数目为界限,进行四层遍历,计算出第一阶段数组的索引,并建立第一节点数组;所述第一节点数组中的索引对应的规则掩码为所述第一类中的四个数组对应的规则掩码进行与操作得到的结果;如果所述规则掩码在所述第一节点数组中不存在,将该规则掩码记录在所述第一节点数组中,所述规则掩码对应的索引,为所述第一节点数组的非0成员的数目,即等价类标识号,对应的值为该掩码;如果所述规则掩码在所述第一节点数组中存在,那么,所述规则掩码对应的索引,即等价类标识号,即为第一阶段数组的索引对应的值;记录第一阶段不重复的等价类标识号的数目;

在第二阶段,以所述第二类中的三个数组各自的不重复的等价类标识号数目为界限,进行三层遍历,计算出第二阶段数组的索引,并建立第二节点数组;所述第二节点数组中的索引对应的规则掩码为所述第二类中的三个数组对应的规则掩码进行与操作得到的结果;如果所述规则掩码在所述第二节点数组中不存在,将该规则掩码记录在所述第二节点数组中,索引值为所述第二节点数组的非0数组的数目,对应的值为该掩码;如果所述规则掩码在所述第二节点数组中存在,那么,所述规则掩码对应的索引,即等价类标识号,即为第二阶段数组的索引对应的值;记录第二阶段不重复的等价类标识号的数目;

在第三阶段,以所述第一阶段数组与所述第二阶段数组中的不重复的等价类标识号的数目为界限,进行二层遍历,计算出第三阶段的索引;并将所述第一阶段数组与所述第二阶段数组对应的规则掩码进行与操作,得到所述第三阶段的索引对应的规则掩码;获取所述规则掩码对应的二进制数,取所述二进制数中位数最小的1对应的规则id作为所述规则命中的规则id;

将遍历过程中每一阶段产生的数组、索引、等价类标识号、规则掩码及规则id组合起来,得到预处理表。

具体的,在第一阶段(phase1.1),以cell00,cell01,cell04,cell06各自的n_ces数目为界限,进行4层遍历,计算出phase1.1数组的索引(index),建立node1.1。其中,cell00的长度是5,cell01的长度是6,cell04的长度是4,cell06的长度是3,存在的组合情况是6*5*4*3=360种。使用for循环,设置i,j,k,w4个变量,进行四次遍历,共循环360次。

例如:

每进行一次for循环的得出一个node1.1数组中的一个rule掩码。

具体计算rule掩码的方法为:每次循环时,四个数组分别取出一个值进行for循环,该四个数组取出的四个值对应的rule掩码进行与操作,得到node1.1数组中的一个rule掩码;如果循环中得到的rule掩码在node1.1数组中不存在,则将该rule掩码记录在node1.1数组中,该rule掩码对应的索引值为node1.1数组的非0数组的数目,即eqcid;如果循环中得到的rule掩码在node1.1数组中存在,那么,这个rule掩码对应的索引值,即为phase1.1数组的index对应的值,将该值作为eqcid。

因为存在的rule掩码将得不到记录,所以node1.1数组中的rule掩码相比cell00,cell01,cell04,cell06中的rule掩码的乘积到了缩减。

在第二阶段(phase1.2),类似地,以cell02,cell03,cell05各自的n_ces数目为界限,进行3层遍历,计算出phase1.2数组的index,建立node1.2数组。得出node1.2数组中的rule掩码的规则与上述过程相同,此处不再赘述。

在第三阶段(phase2),以node1.1数组与node1.2数组中的非0成员数目为界限,进行2层遍历,计算出phase2数组的index,该index对应的rule掩码为2个数组对应的rule掩码进行与操作后得到。取rule掩码中位数最小的值作为该条规则对应的规则id。例如,若rule掩码对应的二进制数为11,则两个1均命中ruleid(取1为命中,0为未命中),第一个1对应rule2,第二个1对应rule1,则取最小的值rule1作为对应的规则id;若rule掩码对应的二进制数为1100,则前两个1命中ruleid,第一个为rule4,第二个为rule3,则取最小的值rule3作为对应的规则id。

步骤105、通过所述接收网卡接收目标报文。

在本发明实施例中,通过数据面开发套件的接收网卡的内核1和内核2从无锁队列中接收目标报文。

步骤106、在所述收包核中将所述目标报文的包头分块,并将每一个块作为并行查找的索引,对所述预处理表中的字段进行分阶段查找,且每一阶段查找内存的索引值由上一阶段的查找结果合并而成;根据最后一个阶段得到的索引值,确定所述目标报文命中的规则id。

在本发明实施例中,例如所述目标报文的报文五元组为:源ip:192.168.10.10,目的ip:192.168.20.20,源端口:6555,目的端口80,协议:6。

优选地,将所述目标报文的包头分为七个块,并为每个块标明序号;

以所述每个块的序号作为索引,在所述七个node数组中计算出第0阶段的等价类标识号;以所述第一类cell数组中的四个数组对应的不重复的等价类标识号,计算出所述目标报文第一阶段的索引,进而得到所述目标报文第一阶段的等价类标识号;以所述第二类cell数组中的三个数组对应的不重复的等价类标识号,计算出所述目标报文第二阶段的索引,进而得到所述目标报文第二阶段的等价类标识号;使用所述目标报文第一阶段的不重复的等价类标识号和所述目标报文第二阶段的不重复的等价类标识号,计算出第三阶段的等价类标识号,将其作为所述目标报文命中的规则id。

具体地,将上述报文五元组分为下面7个块(chunks):

使用chunk1,chunk2,chunk3,chunk4,chunk5,chunk6,chunk7作为index,在node00,node01,node02,node03,node04,node05,node06中计算出phase0阶段的eqcid,将node00,node01,node04,node06的eqcid与对应phase0的n_ces数,计算出phase1.1阶段的index,进而得到phase1.1的eqid1.1,将cell02,cell03,cell05的eqcid与对应的phase0的n_ces,计算出phase1.2的index,进而得到phase1.2的eqid1.2。使用eqid1.1及phase1.1的n_ces,phase1.2的eqcid,计算出phase2的index,进而计算出phase2的eqcid,即确定出所述目标报文命中的规则id。

步骤107、根据所述规则id在所述数据包过滤规则中对应的处理动作处理该目标报文。

在本发明实施例中,根据步骤102中配置的数据包过滤规则,查找所述规则id对应的处理动作,进而处理该目标报文。

优选地,所述根据所述规则id在所述数据包过滤规则中对应的处理动作处理该目标报文,包括:

检测所述处理动作是否是丢弃,如果是,则对所述报文进行释放;

检测所述处理动作是否是分析处理,如果是,则将所述报文进行解码分析,完成分析后将所述报文写入所述转发核中;

检测所述处理动作是否是转发,如果是,则将所述报文写入所述转发核中。

在本发明实施例中,例如若所述规则id是rule1,则根据rule1对应的处理动作,例如为drop(丢弃),则对该报文进行释放;

若规则id是rule2,则根据rule2对应的处理动作,例如为forward(转发),则将所述报文写入所述转发核中;

若规则id是rule3,则根据rule3对应的处理动作,例如为process(处理),则将所述报文进行解码分析,完成分析后将所述报文写入所述转发核中。

综上所述,在本发明实施例中,通过调用数据面开发套件来接收和处理报文,可以让设备驱动运行在用户空间,这样报文就不需要进行内核与用户层之间的数据拷贝,节约了大量时间;并且应用所述数据面开发套件无中断的轮询处理驱动、大页内存机制,提高了报文的处理速度;在报文的处理过程中使用的包分类算法,基于多层映射、逐层缩减的原理,大大减少了查表的次数,节省了内存,提高了查表速度。使用上述方法,使报文的处理速度显著提升,并使处理报文所需占用的内存大大减少。

图2示出了本发明实施例的一种报文处理方法的数据流图,所述方法包括:

在步骤201中,数据面开发套件进行初始配置。例如配置接收网卡、发送网卡、收包核、处理核、转发核等;在步骤202中,用户配置预处理表。即配置路由器的数据包过滤规则,通过分阶段进行有限次遍历,确定预处理表;在步骤203中,接收报文。即通过接收网卡接收报文;在步骤204中,查询预处理表。即对所述预处理表中的字段进行分阶段查找,并最终得到所述目标报文命中的规则id;进而,根据所述规则id查看数据包过滤规则中对应的处理动作,并处理该目标报文:首先判断处理动作是否为丢弃,若是,则进行步骤205,进行丢弃;若否,则判断是否将报文进行处理,若是,则进行步骤206,将报文进行分析处理,处理完成后进行步骤207,将报文发送到转发核,之后转到步骤208,转发核发送报文;若否,则直接进行步骤207,将报文发送到转发核,再转到步骤208,转发核发送报文。

图3示出了本发明实施例提供的一种报文处理装置的结构框图,所述报文处理装置300包括:

初始化配置模块301,用于调用数据面开发套件,并对其进行初始化配置;包括:配置接收网卡和发送网卡,配置cpu的收包核、处理核和转发核;

过滤规则配置模块302,用于在所述数据面开发套件中配置路由器的数据包过滤规则;包括:设置规则id、源ip地址区段、目的ip地址区段、源端口范围、目的端口范围、协议范围每个规则id对应的包处理动作;

拆分存储模块303,用于将所述数据包的包头拆分成七个块,根据所述数据包过滤规则中的内容确定每个块对应的规则id,设置每个块对应的等价类标识号和规则掩码;使用七个cell数组存储所述七个块中的等价类标识号、规则掩码并记录所述七个块中不重复的等价类标识号的数目;其中,每个cell数组的索引为所述等价类标识号,对应的值为所述规则掩码;同时,建立七个node数组,每个node数组的索引为0-65535,值为所述等价类标识号;

预处理表确定模块304,用于以每个cell数组中的不重复的等价类标识号为界限,分阶段进行有限次遍历,根据每一阶段生成的规则掩码确定最后一个阶段的规则掩码;根据所述最后一个阶段的规则掩码确定对应的规则id;并将遍历过程中每一阶段产生的数据组合起来,得到预处理表;接收模块305,用于通过所述接收网卡接收目标报文;

查找模块306,用于在所述收包核中将所述目标报文的包头分块,并将每一个块作为并行查找的索引,对所述预处理表中的字段进行分阶段查找,且每一阶段查找内存的索引值由上一阶段的查找结果合并而成;根据最后一个阶段得到的索引值,确定所述目标报文命中的规则id;

处理模块307,用于根据所述规则id在所述数据包过滤规则中对应的处理动作处理该目标报文。

综上所述,在本发明实施例中,通过调用数据面开发套件来接收和处理报文,可以让设备驱动运行在用户空间,这样报文就不需要进行内核与用户层之间的数据拷贝,节约了大量时间;并且应用所述数据面开发套件无中断的轮询处理驱动、大页内存机制,提高了报文的处理速度;在报文的处理过程中使用的包分类算法,基于多层映射、逐层缩减的原理,大大减少了查表的次数,节省了内存,提高了查表速度。使用上述方法,使报文的处理速度显著提升,并使处理报文所需占用的内存大大减少。

优选地,本发明实施例还提供一种终端设备,包括处理器,存储器,存储在存储器上并可在所述处理器上运行的计算机程序,该计算机程序被处理器执行时实现上述报文处理方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。

本发明实施例还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述报文处理方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。其中,所述的计算机可读存储介质,如只读存储器(read-onlymemory,简称rom)、随机存取存储器(randomaccessmemory,简称ram)、磁碟或者光盘等。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。

上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本发明的保护之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1