CN114327833A - 一种基于软件定义复杂规则的高效流量处理方法 - Google Patents

一种基于软件定义复杂规则的高效流量处理方法 Download PDF

Info

Publication number
CN114327833A
CN114327833A CN202111652353.6A CN202111652353A CN114327833A CN 114327833 A CN114327833 A CN 114327833A CN 202111652353 A CN202111652353 A CN 202111652353A CN 114327833 A CN114327833 A CN 114327833A
Authority
CN
China
Prior art keywords
data
rule
rules
session
layer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202111652353.6A
Other languages
English (en)
Inventor
贺辉
郑思文
杨娜
李春利
江会宗
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Yuewei Science And Technology Co ltd
Original Assignee
Shanghai Yuewei Science And Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shanghai Yuewei Science And Technology Co ltd filed Critical Shanghai Yuewei Science And Technology Co ltd
Priority to CN202111652353.6A priority Critical patent/CN114327833A/zh
Publication of CN114327833A publication Critical patent/CN114327833A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明公开了基于软件定义复杂规则的高效流量处理方法,包括以下步骤:步骤一:规则配置文件;步骤二:读取配置;步骤三:接收数据前准备;步骤四:开始正式工作;步骤五:消费线程收包;步骤六:数据解析;步骤七:会话管理;步骤八:规则校验;步骤九:输出阶段。该处理方法在程序运行前就准备好内存池,避免使用过程中申请、释放内存系统开销,多线程和无锁队列管理,每个线程对应一个无锁队列,每个线程对应一个网卡,收发包,数据包的入队出队操作避免了查找的时间开销和上下文切换开销,随着网络数据包的到来能够被快速消费,不堵塞,提高了处理效率和性能。

Description

一种基于软件定义复杂规则的高效流量处理方法
技术领域
本发明涉及物理领域,尤其涉及网络流量数据的处理方法,具体是一种基于软件定义复杂规则的高效流量处理方法。
背景技术
随着计算机技术全面应用,互联网的兴起和网络技术的飞速发展,以及智能设备兴起,信息爆炸已经积累到引发变革的程度,世界每天产生巨量数据,速度也疯狂加快。互联网、移动互联网、物联网,车联网,GPS,医学影像,安全监控,金融,电信都在疯狂产生着数据。
据IDC(互联网数据中心)监测,人类产生的数据量正在呈指数级增长,大约每两年翻一番,这个速度在2020年之前会继续保持下去,这意味着人类在最近的两年产生的数据量相当于之前产生的全部数据。大量新数据的出现导致了非结构化,半结构化数据爆发式增长。
数据规模一般在10TB(1TB=1024GB)规模以上的数据量的大数据出现,大数据具有以下四种特点。
大体量:存储量大,增量大
多样化:来源多,搜索引擎,社交网络,通话记录,传感器等等;格式多,结构化数据和非结构化数据
快速化:高速数据,数据处理速度快实时分析。
价值密度低:大量的不相关信息,数据价值密度低
大数据计算常常需要面度存储和计算问题,而本软件解决的就是在存储和计算之前的流量过滤,本软件将大流量的数据根据需求提取有价值数据流量供后续软件设备分析计算或者存储。
在面对体量巨大,数据类型繁多,价值密度低,数据增长迅速的流量面前,需要快速高效的过滤出有价值的知识和情报,需要达到的性能要求包括:海量处理规模,多字段过滤,高效过滤。
分流过滤:大数据环境下数据量快速积累,想要分析出海量数据所蕴含的价值,需要在这些海量数据中提取有价值数据,剔除大量无用数据,使海量数据的流量和积累速度都大幅度降低,减小对后续解析存储方面的压力,提高解析研究等的效率。
五元组过滤:五元组是指源IP地址,目的IP地址,源端口,目的端口和传输层协议组成个一个组合。五元组过滤就是将原始流量中五元组信息相同的流量提取出来。
例如:192.168.1.1 1000 TCP 190.168.2.2 80就构成了一个五元组,其意义是一个IP地址是192.168.1.1的终端通过端口1000,利用TCP协议和IP协议地址为190.168.2.2端口为80的终端进行连接。
精确串匹配过滤:在原始数据流量中提取包含目标字符串的数据流。
例如:在原始数据流
“0BeiJing Baidu Netcom Science Technology Co., Ltd1&0$”
“0....*baiducontent.com..*.baidustatic.com...baidu.com..*.baifae.com..*.hao123.com..*.nuomi.com”
中查找 “baidu.com” 字符串,只有第二条数据中包含目标字符串,那就将第二条数据提取出来。
正则过滤:了解正则过滤之前需要先了解正则表达式,正则表达式是描述一种字符串匹配的模式,是对字符串操作的一种逻辑公式,是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则过滤就是用在原始流量中提取符合这个“规则字符串”的数据流。
例如:
原始数据流 “altk-mtalk.google.com..)...alth”
“e33a45c37f89471088539fd9acfb61fe.Zd+jG7B/dg5wLwCcib7exUNt5wX5yQiPKig9KrggaIqoWeYi2DlxhW”
正则表达式:[0-9],意思是“匹配0到9范围内的任意数字”
符合以上正则表达式的只有第二条数据,第一条因为没有0到9数字被丢弃。
Fpga:采用了逻辑单元阵列LCA(Logic Cell Array),内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输出模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。Fpga是通过向内部静态存储单元加载编程数据来实现的,存储在存储在存储单元中的值决定了逻辑单元的逻辑功能以及各个模块之间或者模块与I/O间的连接方式,并最终决定了FPGA锁能实现的功能。
网络处理器:是一种可以编程的器件,特定的用于通信领域的各种任务,其内部由若干个微码处理器和若干硬件协处理器组成,多个微码处理器在网络处理器内部进行并行处理,通过预先编制的微码来控制处理流程。对于一些复杂的标准操作(如内存操作,路由表查找算法,流量调度算法等)则采用硬件协处理器来进一步提高处理性能。
Tcpdump:即dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。Tcpdump主要作在linux操作系统上作为网络数据采集工具使用。
Tcpdump可以根据五元组或者五元组的逻辑组合(与或非等),包大小以及协议类型(协议类型有限), 负载部分固定位置偏移等采集来自网卡的数据流,采集结果可保存成文件或者试试分析。
例如:tcpdump –ni eth0 “src 10.0.2.4 and (dst port 338 or 22)”
采集来自eh0网口的源地址是10.0.2.4端口是338或者22的数据
tcpdump –ni less 64
采集数据包小于64个字节的数据
tcpdump –ni eth0 “tcp[20:2]=0x4745 or tcp[20:2]=0x4854”
抓取HTTP报文,0x4754是GET的前两个字符的值,0x4854是HTTP的前两个字符的值
tcpdump作为数据采集工具,只能采集有限类型的协议,ether,ip,ipv6,arp,tcp,udp等,不能根据精确串匹配以及正则表达式采集数据,不能以流会话为过滤条件抓包,以及间隔采集等等,这些只是采集功能上的缺陷,最主要在高速流量场景下,tcpdump抓包严重影响系统性能,丢包严重,不适合大数据流量过滤。
Wirshark:是一款流行的网络封包分析软件,同时也可以截取各种网络封包。Wireshark可以选取一个或几个网卡,跟tcpdump采集条件类似,但是比其多正则表达式抓包、根据精确串匹配抓包条件,都不能以流会话为单位抓包,间隔抓包等,同样,在高速流量下存在丢包严重的问题。
因此,包括Wireshark、tcpdump在内网络封包分析软件均智能支持小流量下协议抓包,IP,端口,HTTP和逻辑运算等简单规则的过滤,不能满足大流量数据条件下、支持复杂高级精细规则,能够高效,快速提取分析数据的要求。
发明内容
本发明的目的在于提供一种基于软件定义复杂规则的高效流量处理方法,可保证高速流量实时处理;在程序运行前就准备好内存池,避免使用过程中申请、释放内存系统开销,多线程和无锁队列管理,每个线程对应一个无锁队列,每个线程对应一个网卡,收发包,数据包的入队出队操作避免了查找的时间开销和上下文切换开销,随着网络数据包的到来能够被快速消费,不堵塞,提高了处理效率和性能,以解决上述背景技术中提出的问题。
为实现上述目的,本发明提供如下技术方案:一种基于软件定义复杂规则的高效流量处理方法,包括以下步骤:
步骤一:规则配置文件,配置对网络流量的过滤规则,这些规则分为多条,每条规则都有一个ID表示优先级,命中规则后的动作类型,规则的属性有多种,每种属性配置可选,其中包括源IP、目标IP、源端口、目标端口、协议类型等五元组规则、固定位置匹配规则、浮动匹配、锁流操作、间隔输出、正则规则、数据提取、单向流操作、剥离外部协议保留关键协议操作、给含有指定信息的数据尾部打标签、按指定报文长度提取数据其中的一种或多种;
步骤二:读取配置,先获取规则文件条数,如果配置的规则数目超过上限或者未配置规则发出告警并退出,如果配置的规则数目合格或者完成配置进行读取规则,当规则文件读取完成后,再对这些规则按照规则ID大小做优先级排序并去重;
步骤三:接收数据前准备,申请内存、队列等耗时操作前预先准备存放元数据的内存池和无锁队列,存放流数据的会话内存池及哈希表,为接收数据后的操作节省时间和避免一些异常情况,内存池、队列、哈希表申请完后开始数据处理;
步骤四:开始正式工作,从Fibre Optical Port、Electrical Port和pcap文件中开始接收数据,每个模块的运行参数都从配置中读取,收包模块收到数据后解析链路层和网络层数据得到网络层IP地址信息,将源IP和目标IP转成主机字节序后相加,计算结果作为无锁队列索引,再将此数据包存入计算后得到的队列中,这样能够保证同一个地址信息的数据包在同一个无锁队列中;
步骤五:数据存入无锁队列后,消费线程会检测无锁队列,只要其中有数据就会被取走,消费线程在收包线程之前已经开始工作,并且有多个消费线程从队列中取包;
步骤六:消费线程取出数据后交给数据解析模块,解析模块将数据包层层解析,以太层、网络层及传输层直到解析到数据包内层得到所有数据结果;
步骤七:会话管理,此时可得到数据包中全部五元组信息,五元组信息相同的数据包是一个会话,程序中超时监测模块定时检查会话流表,发现某个节点的会话数据没有及时更新,超时的会话数据就会被从会话链表中清理掉;
步骤八:规则校验,在拿到会话数据信息后,此时已经有了IP层,TCP/UDP以及负载部分信息和会话信息,开始规则校验,如果配置多条规则的,按照优先级从高到低逐一遍历,和解析的数据进行校验匹配;
步骤九:输出阶段:按照匹配成功的规则对应的动作输出到光口网卡、电口网卡或者pcap文件。
优选的,所述步骤一中动作类型包含命中规则后转发或者丢弃其中任意一种。
优选的,所述步骤二中规则按行读取,允许添加注释,对注释行跳过不读取的,每行则以指定字符串规则ID开始,读取每行内容后将一行规则按固定字符拆分得到一个规则ID的多个属性,再对这些属性进行分析。
优选的,所述步骤三中内存池在每个有效的逻物理心上申请N个M长大小的数据包内存池,N和M从配置文件中读取;所述步骤三中会话内存池为实时TCP/UDP等会话数据提供缓存;所述步骤三中哈希表以五元组作为键存放会话信息,数据从队列取出后, 经过会话Hash运算,找到对应的会话信息,每个线程都创建一个哈希表,每个哈希表元素个数从配置文件中读取。
优选的,所述步骤六中以太层、网络层及传输层按顺序解析,首先解析以太层,随后解析网络层,网络层协议中只解析IP协议类型,最后解析传输层。
优选的,所述步骤八中优先级按照规则ID越小的优先级越高。
与现有技术相比,本发明的有益效果是:
(1)本发明提出的一种基于软件定义复杂规则的高效流量处理方法,可保证高速流量实时处理;在程序运行前就准备好内存池,避免使用过程中申请、释放内存系统开销,多线程和无锁队列管理,每个线程对应一个无锁队列,每个线程对应一个网卡,收发包,数据包的入队出队操作避免了查找的时间开销和上下文切换开销,随着网络数据包的到来能够被快速消费,不堵塞,提高了处理效率和性能。
(2)规则种类多样目前规则配置支持五元组匹配,正则匹配,固定位置匹配,流采样间隔输出,锁流,掩码,关键字匹配,尾部打标签,支持加载外部库形式,比wireshark,tcpdump等其他流过滤软硬件采用的规则方法种类都多。
附图说明
图1为本发明的方法的流程示意图;
图2为本发明的拓扑示意图。
具体实施方式
下面将结合本发明的实施例和附图,对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围;
请参阅图1-2,本发明提供一种技术方案:一种基于软件定义复杂规则的高效流量处理方法,包括以下步骤:
步骤一:规则配置文件介绍:
系统使用时需要配置对网络流量的过滤规则,这些规则分为多条,每条规则都有一个ID表示优先级,命中规则后的动作类型,动作类型包含命中规则后转发或者丢弃。有多种规则属性,每种属性配置可选,包括源IP,目标IP,源端口,目标端口,协议类型等五元组规则,固定位置匹配规则,浮动匹配,锁流操作,间隔输出,正则规则,数据提取,单向流操作,剥离外部协议保留关键协议操作,给含有指定信息的数据尾部打标签,按指定报文长度提取数据。
步骤二:读取配置的规则;
先获取规则文件条数,如果配置的规则数目超过上限或者未配置规则发出告警并退出。接下来正式读取规则,按行读取规则,允许添加注释,对注释行跳过不读取,每行必须以指定字符串规则ID开始,读取每行内容后将一行规则按固定字符拆分得到一个规则ID的多个属性,再对这些属性进行分析。对不符合书写规范或者不支持的属性内容告警,再对每个支持的属性内容一一分析处理,对配置的地址信息校验掩码长度和地址格式转换是否正确以验证该项配置是否正确,对TCP/UDP等检验端口配置是否正确,设置规则标准协议类型,对十六进制数据配置检验格式是否配置正确,是否能转换成有效的十六进制数值,输出群组是否已配置,及其他规则检验。例如规则ID是否重复,配置的正则语法是否正确,协议名称是否正确,协议长度是否超过MTU(最大传输单元),规则是否配置重复或者冲突,是否配置了命中规则后的动作,缺省字段,缺省规则时做默认处理等一系列规则配置的校验,对所有属性解析校验无误后进入下一步处理。
当规则文件读取完成后,再对这些规则按照规则ID大小做优先级排序并去重。
步骤三:接收数据前的准备;
申请内存、队列等耗时操作需要预先准备存放元数据的内存池和无锁队列,存放流数据的会话内存池及哈希表,为接收数据后的操作节省时间和避免一些异常情况。
数据包内存池存放从网卡接收到的一个个还未解析的数据包,根据物理核数来申请数据包内存池,在每个有效的逻物理心上申请N个M长大小的数据包内存池,N和M从配置文件中读取,每个数据包内存池名称以该内核ID获得的套接字ID(SOCKET ID)为名。
会话表内存池为实时TCP/UDP等会话数据提供缓存,管理会话的建立,超时与删除. 正反五元组相同,即作为同一个会话,用于将会话的双向关联在一起。
从数据包内存池得到的Mbuf(用来封装数据报文帧)保存一个个接收到的数据报文,经过分发后, 送入各个解析线程的无锁队列,分发的计算规则, 将SrcIP, DstIP特定运算后, 再经过取模运算,选择一个无所队列的ID,根据配置的规则过滤的线程数来申请无锁队列的个数,每个规则过滤线程都申请一个无锁队列,无锁队列名称以线程ID命名,大小从配置文件中读取。
哈希表是以五元组作为键存放会话信息,数据从队列取出后, 需要经过会话Hash运算,便于找到对应的会话信息,每个线程都创建一个哈希表,每个哈希表元素个数从配置文件中读取。
一系列内存池、队列、哈希表等申请完后开始数据处理。
步骤四:开始正式工作;
从Fibre Optical Port (光纤线缆接口)、Electrical Port (双绞线电缆)和pcap文件(三种方式可选,在配置文件中选配)中开始接收数据,每个模块的运行参数都从配置中读取。
光纤端口模块:先加载配置信息,依次读取配置文件中收发包线程数,出入队列端口数,以及决定是否启用该模块的标识,读取输入端口掩码,将掩码转换十六进制后和输入端口相与计算,得到输入端口号,将输入端口号和期中一个输入线程绑定,这样一个线程只从一个输入端口收包,避免了上线文切换,提高收包效率。
输出端口设置类似,输出端口是一个输出组配一个掩码,每个输出组的掩码和输出端口相与得到该输出组的端口号。配置文件加载完成后再初始化活跃的网卡并检查网卡的链路状态是否正常,对异常网卡给出警告,启动发包线程前先启动收包线程,光口模块多个收包线程开始从收包端口收包,每个收包端口有多个队列,将每个队列中数据包一一取出发送给收包模块。
1000Mbps RJ45网口模块:从配置文件中读取是否启用该模块标志,读取收包网卡名称,每个收包网卡绑定一个线程收包,收包线程开始监视收包网卡状态,每有数据包到来就将拿到的数据包发个收包模块。1000Mbps RJ45网口模块根据配置决定是否启用,并根据配置的收发包网卡名称从中收发包,每个收包网卡都绑定一个收包线程,将从网卡收到的包转发给收包模块处理。
Pcap文件模块:pcap文件是一种常用的数据保存储存格式,即一种文件格式。Pcap文件模块配置了pcap文件的输入输出路径和输出保存每个文件的大小,以及写pcap文件超时关闭时间,配置多个目录时,每个目录都绑定一个读取线程,收包前检查pcap文件总数是否超过上限,并将pcap排序,按照次序依序读取,将读取的数据转给收包模块处理。
收包模块收到数据后解析链路层和网络层数据得到网络层IP地址信息,将源IP和目标IP转成主机字节序后相加,计算结果作为无锁队列索引,再将此数据包存入计算后得到的队列中,这样能够保证同一个地址信息的数据包在同一个无锁队列中。
步骤五:数据存入无锁队列后,消费线程会检测无锁队列,只要其中有数据就会被取走。消费线程在收包线程之前已经开始工作,并且有多个消费线程从队列中取包。一般在大数据流量下队列很容易存满堵塞,导致收包线程无法将新的数据包存入造成丢包。
步骤六:消费线程取出数据后交给数据解析模块;
解析模块将数据包层层解析,以太层,网络层,传输层直到解析到数据包内层得到所有数据结果。
首先解析以太层,应用层可以接收到的网络绝大多数是从以太层开始,以太层长度固定,包括六个字节的目标mac地址(MAC:Media Access Control,介质访问控制,也叫硬件地址,物理地址,是网络设备的全球唯一编号)和六个字节的源mac地址及以太网类型。这里需要校验以太网类型字段,因为根据DIX和IEEE标准对此字段的定义不同,校验后表示类型的数据继续解析。以太层后有VLAN(Virtual Local Area Network,虚拟局域网),MPLS(Multi-Protocol Label Switching,多协议标签交换技术,一种在通讯网络上的高性能数据传输技术),PPPOE(Point-to-Point Protocol Over Ethernet,以太网的点对点协议)和IP(Internet Protocol,网络之间的互联协议),这里只关心最后一种IP网络协议,对以太层后的这种类型数据块忽略,跳过解析直接进入网络层IP协议解析。
网络层协议中只解析IP协议类型,IP协议包括ipv和ipv6,IP层前四个bit位标识协议版本号,转换成十进制,4即标识IPV4,6即标识IPV6,据此标识就可以按照相应结构去解析。解析IP层协议即可得到五元组中源IP地址和目的IP地址、协议类型。
最后解析传输层,传输层中只关系TCP(Transmission Control Protocol,传输控制协议)和UDP(User Datagram Protocol,用户数据报协议),在这一层可以得到五元组中源端口、目的端口。大多数网络报文只有一个ip层和一个传输层,但是少数报文可能包含多个IP层和传输层,只解析最外层的IP协议和TCP/UDP协议,对内层协议丢弃。
步骤七:会话管理;
此时就可以得到数据包中全部五元组信息,五元组信息是作为会话管理的关键,五元组信息相同的数据包是一个会话。此时就在会话表内存池申请内存,创建一个流表(保存会话流的哈希表)节点,这个节点保存了五元组信息,节点创建时间和数据流向(源流向目的或者目的流向源)以及其他必要信息。当有新的数据到来时,就以当前解析到的五元组信息作为键在哈希表中查找与该五元组相关的会话信息,如果未找到就表示这是一个新的会话,就将该流表节点信息的五元组信息为键,流表节点信息为值加入流表中,并将新的流表节点传给下个处理过程。如果找到了的话表示这个会话已保存过了,就将已保存的会话节点取出传给下个处理过程。
程序中超时监测模块会定时检查会话流表,发现某个节点的会话数据没有及时更新,超时的会话数据就会被从会话链表中清理掉。
步骤八:规则校验;
在拿到会话数据信息后,此时已经有了IP层,TCP/UDP以及负载部分信息和会话信息,开始规则校验。如果配置多条规则的,按照优先级从高到低(规则ID越小的优先级越高)逐一遍历,和解析的数据进行校验匹配。以下以IPV4数据为例:
在这之前先解释一下配置标识位和命中标识位,规则配置分多种类型,将五元组分成IP配置规则和传输层配置规则,还有其他固定位置,正则匹配等多种类型,用一个整型变量做配置标识,每个固定的bit位表示每种配置类型,如果规则文件中配置了此类型的规则,该bit位置1。命中标识类似,每命中一种类型规则,该类型的bit位置1。命中标识变量和规则配置标识变量每个固定bit位表示的类型一致,即如果规则配置标识的第一个bit位表示IP配置规则,第三个bit位表示固定位置偏移规则,那么命中规则的第一个bit位也表示IP命中信息,第三个bit位表示固定位置偏移命中信息,这样只要比较规则配置标识和规则命中标识是否相等就可以判断数据包是否被该条规则命中。
空规则:(即只配置ruleId:规则ID,action:命中后的动作和out:输出组 字段),表示所有数据都命中,不再进行后续规则校验,进入下一步处理中。
五元组规则校验:配置五元组规则存在多种情况,只配置五元组中一种,或其中几种,或者全都配置,在规则校验阶段需要对这些情况排列组合一一验证。
配置了IP层规则,源IP地址的,只比较解析到的IP数据报文中源地址和规则信息中源IP地址,相同表示此条规则命中,在规则信息中IP规则命中标识位记录命中标记;只配置目的IP地址和源、目的IP地址都配置两种情况校验规则类似。没有配置IP地址信息的,此条数据表示命中。IP层比较完之后,如果IP层的命中标记为空(即表示没有命中IP规则),就进行下一条数据报文比较;如果IP层的配置标记和命中标记都为真(即标识已命中IP规则),增加命中次数,获取命中的信息给下一个阶段,跳出规则匹配环节。
配置传输层规则的,在协议类型相同情况下,即配置的规则类型和数据报文解析的规则类型都为TCP或者都为UDP的情况下,对于只配置源端口的,只比较解析到的数据报文中源端口和规则配置中源端口,相同表示命中规则,在规则信息中将协议类型信息命中标识位记录为命中状态;其他两种情况,只配置目的端口和源端口,目的端口都配置的比较方法类似;当源端口和目的端口都没有配置时,标识此条数据报文被命中。当传输层比较完后,如果传输层的命中标记为空(表示没有命中传输层规则),就进行下一条报文比较。比较配置标志和命中标志是否相同,相同的话(配置了传输层规则的话,传输层规则也被命中)增加此条规则的命中次数,获取命中信息传给下一阶段,跳出规则匹配环节。
固定位置匹配:是指对报文负载部分由规则文件指定,偏移固定长度,比较固定长度的数据块,这个长度也由规则文件指定。
首先要判断负载部分的长度是否满足需求,长度大于等于偏移长度和比较长度之和,只有先满足了此条件才能进行比较。再将负载部分从负载头部偏移规则文件中指定的长度后开始逐个字节比较,直到比较完规则文件指定的长度为止,在有掩码的情况下,还需要将每个字节与掩码计算后与规则配置的KEY关键值比较,如果有一个字节不相等,表示此条规则未命中,就进入下一条规则匹配中。同样的,也要进行规则配置标识和命中规则标识比较,相等的情况下增加命中计数,获取命中信息传给下一阶段,跳出规则配置环节。
高性能正则匹配:此阶段采用hyperscan(是一个高性能的多正则表达式匹配库,使用混合自动机技术允许跨数据流同时匹配大量正则表达式)进行正则匹配。Hyperscan工作流程主要分为编译期和运行期,在规则加载之初,接收数据之前先将正则编译,在规则匹配阶段即hyperscan运行期只接收网络数据包进行高性能匹配,将匹配结果返回。如果命中,标志位置1,否则进行下一条匹配中。最后也要进行规则配置标识和命中标识比较。
流采样:也就是间隔N个包输出M个包。将符合规则的数据包传给下一个处理过程是计数,当这个数值达到M(M由规则配置文件指定)后,开始停止输出包并将输出包计数清零,将数据报文丢弃,对丢弃值计数,当此数值达到N(N由规则配置文件指定)后,又开始向下一个处理过程输出包并将丢包计数清零,如此循环往复,达到采样效果。
打标签:对于符合规则的数据报文,其报文尾部添加固定格式标签字节,例如添加购物类,通讯类,交通类标签等。
扩展接口:允许调用用户自定义匹外部库,随后将解析后的数据报文传给用户自定义接口,由其返回对比结果,和前面操作类型,命中规则的话增加命中计数及进行规则配置标识和命中标识比较等。
锁流:对于同一条流只要一条报文命中规则做丢弃或者转发动作,对同一条流中其他报文做相同的动作。在规则匹配对比完后可以获得该条报文命中的规则信息,将该规则信息记录在流表中,当下一帧数据到来后,就可以找到其流表信息,也就该条流是否命中过规则,如果已命中规则且需要锁流的话,就不再进行规则匹配,直接将流表中已记录的命中规则信息传给下个处理阶段。
至此规则匹配阶段完成,将命中规则信息传给输出模块,输出模块会根据是否命中规则,以及命中规则中要求的动作来进行下一步动作。
步骤九:输出阶段;按照匹配成功的规则对应的动作输出到光口网卡、电口网卡或者pcap文件。
此阶段已获取规则匹配阶段的结果规则信息,和当前的数据报文,规则信息中有对此数据包的操作要求,丢弃,或者输出,以及此规则所属的规则组。对应需要输出到网卡的数据包,根据配置要求将数据包输出到光纤端口模块、1000Mbps RJ45网口模块、Pcap文件模块其中一只或者某几个模块。
光纤端口模块:先根据规则输出组信息找到对应的输出的光纤端口,和队列ID,再将数据包加入到该端口的发送队列中,有其他线程监控各个输出端口的发送队列,一旦队列中有数据,就会被取出发送到光纤端口。
1000Mbps RJ45网口模块:先根据规则输出组信息找到其对应的输出网卡信息,再将数据包发送到该网卡上。
Pcap文件模块:写文件前先找到规则输出组对应的文件句柄,如果该句柄未初始化的话先要初始化,创建输出组配置的文件名,在将数据包写入文件;如果文件大小达到上限,先关闭旧文件,重新打开新文件,将数据写入。
本发明提出的一种基于软件定义复杂规则的高效流量处理方法,一方面可保证高速流量实时处理;在程序运行前就准备好内存池,避免使用过程中申请、释放内存系统开销,多线程和无锁队列管理,每个线程对应一个无锁队列,每个线程对应一个网卡,收发包,数据包的入队出队操作避免了查找的时间开销和上下文切换开销,随着网络数据包的到来能够被快速消费,不堵塞,提高了处理效率和性能;另一方面规则种类多样目前规则配置支持五元组匹配,正则匹配,固定位置匹配,流采样间隔输出,锁流,掩码,关键字匹配,尾部打标签,支持加载外部库形式,比wireshark,tcpdump等其他流过滤软硬件采用的规则方法种类都多。
本发明未详述之处,均为本领域技术人员的公知技术。
最后所要说明的是:以上具体实施方式仅用以说明本发明的技术方案而非限制,尽管参照实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改和等同替换,而不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。

Claims (6)

1.一种基于软件定义复杂规则的高效流量处理方法,其特征在于:包括以下步骤:
步骤一:规则配置文件,配置对网络流量的过滤规则,这些规则分为多条,每条规则都有一个ID表示优先级,命中规则后的动作类型,规则的属性有多种,每种属性配置可选,其中包括源IP、目标IP、源端口、目标端口、协议类型等五元组规则、固定位置匹配规则、浮动匹配、锁流操作、间隔输出、正则规则、数据提取、单向流操作、剥离外部协议保留关键协议操作、给含有指定信息的数据尾部打标签、按指定报文长度提取数据其中的一种或多种;
步骤二:读取配置,先获取规则文件条数,如果配置的规则数目超过上限或者未配置规则发出告警并退出,如果配置的规则数目合格或者完成配置进行读取规则,当规则文件读取完成后,再对这些规则按照规则ID大小做优先级排序并去重;
步骤三:接收数据前准备,申请内存、队列等耗时操作前预先准备存放元数据的内存池和无锁队列,存放流数据的会话内存池及哈希表,为接收数据后的操作节省时间和避免一些异常情况,内存池、队列、哈希表申请完后开始数据处理;
步骤四:开始正式工作,从Fibre Optical Port、Electrical Port和pcap文件中开始接收数据,每个模块的运行参数都从配置中读取,收包模块收到数据后解析链路层和网络层数据得到网络层IP地址信息,将源IP和目标IP转成主机字节序后相加,计算结果作为无锁队列索引,再将此数据包存入计算后得到的队列中,这样能够保证同一个地址信息的数据包在同一个无锁队列中;
步骤五:数据存入无锁队列后,消费线程会检测无锁队列,只要其中有数据就会被取走,消费线程在收包线程之前已经开始工作,并且有多个消费线程从队列中取包;
步骤六:消费线程取出数据后交给数据解析模块,解析模块将数据包层层解析,以太层、网络层及传输层直到解析到数据包内层得到所有数据结果;
步骤七:会话管理,此时可得到数据包中全部五元组信息,五元组信息相同的数据包是一个会话,程序中超时监测模块定时检查会话流表,发现某个节点的会话数据没有及时更新,超时的会话数据就会被从会话链表中清理掉;
步骤八:规则校验,在拿到会话数据信息后,此时已经有了IP层,TCP/UDP以及负载部分信息和会话信息,开始规则校验,如果配置多条规则的,按照优先级从高到低逐一遍历,和解析的数据进行校验匹配;
步骤九:输出阶段:按照匹配成功的规则对应的动作输出到光口网卡、电口网卡或者pcap文件。
2.根据权利要求1所述的一种基于软件定义复杂规则的高效流量处理方法,其特征在于:所述步骤一中动作类型包含命中规则后转发或者丢弃其中任意一种。
3.根据权利要求1所述的一种基于软件定义复杂规则的高效流量处理方法,其特征在于:所述步骤二中规则按行读取,允许添加注释,对注释行跳过的,每行则以指定字符串规则ID开始,读取每行内容后将一行规则按固定字符拆分得到一个规则ID的多个属性,再对这些属性进行分析。
4.根据权利要求1所述的一种基于软件定义复杂规则的高效流量处理方法,其特征在于:所述步骤三中内存池在每个有效的逻物理心上申请N个M长大小的数据包内存池,N和M从配置文件中读取;所述步骤三中会话内存池为实时TCP/UDP等会话数据提供缓存;所述步骤三中哈希表以五元组作为键存放会话信息,数据从队列取出后, 经过会话Hash运算,找到对应的会话信息,每个线程都创建一个哈希表,每个哈希表元素个数从配置文件中读取。
5.根据权利要求1所述的一种基于软件定义复杂规则的高效流量处理方法,其特征在于:所述步骤六中以太层、网络层及传输层按顺序解析,首先解析以太层,随后解析网络层,网络层协议中只解析IP协议类型,最后解析传输层。
6.根据权利要求1所述的一种基于软件定义复杂规则的高效流量处理方法,其特征在于:所述步骤八中优先级按照规则ID越小的优先级越高。
CN202111652353.6A 2021-12-31 2021-12-31 一种基于软件定义复杂规则的高效流量处理方法 Pending CN114327833A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111652353.6A CN114327833A (zh) 2021-12-31 2021-12-31 一种基于软件定义复杂规则的高效流量处理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111652353.6A CN114327833A (zh) 2021-12-31 2021-12-31 一种基于软件定义复杂规则的高效流量处理方法

Publications (1)

Publication Number Publication Date
CN114327833A true CN114327833A (zh) 2022-04-12

Family

ID=81019365

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111652353.6A Pending CN114327833A (zh) 2021-12-31 2021-12-31 一种基于软件定义复杂规则的高效流量处理方法

Country Status (1)

Country Link
CN (1) CN114327833A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114785742A (zh) * 2022-06-21 2022-07-22 闪捷信息科技有限公司 访问地址信息加载方法、流量处理方法和电子设备
CN115208682A (zh) * 2022-07-26 2022-10-18 上海欣诺通信技术股份有限公司 一种基于snort的高性能网络攻击特征检测方法及装置

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114785742A (zh) * 2022-06-21 2022-07-22 闪捷信息科技有限公司 访问地址信息加载方法、流量处理方法和电子设备
CN115208682A (zh) * 2022-07-26 2022-10-18 上海欣诺通信技术股份有限公司 一种基于snort的高性能网络攻击特征检测方法及装置
CN115208682B (zh) * 2022-07-26 2023-12-12 上海欣诺通信技术股份有限公司 一种基于snort的高性能网络攻击特征检测方法及装置

Similar Documents

Publication Publication Date Title
CN111371779B (zh) 一种基于dpdk虚拟化管理系统的防火墙及其实现方法
US11824796B2 (en) Protocol independent programmable switch (PIPS) for software defined data center networks
CN108809854B (zh) 一种用于大流量网络处理的可重构芯片架构
CN108833299B (zh) 一种基于可重构交换芯片架构的大规模网络数据处理方法
CN112491901B (zh) 一种网络流量精细化筛选装置及方法
EP2215565B1 (en) Deterministic finite automata (dfa) graph compression
CN114327833A (zh) 一种基于软件定义复杂规则的高效流量处理方法
RU2608874C2 (ru) Способ и устройство для модификации и переадресации сообщения в сети передачи данных
CN112468365A (zh) 用于网络镜像流量的数据质量检测方法、系统及介质
US8782092B2 (en) Method and apparatus for streaming netflow data analysis
US10965600B2 (en) Metadata extraction
US20230269148A1 (en) High-Speed Packet Filtering
CN115225734A (zh) 一种报文处理方法和网络设备
CN110933001B (zh) 一种可扩展的可重构交换机包解析器基本处理单元结构
CN107528794A (zh) 一种数据处理方法和装置
CN115361191A (zh) 一种基于sflow的防火墙流量检测方法、系统、设备及介质
JP7131705B2 (ja) トラフィック監視装置、およびトラフィック監視方法
CN112769520B (zh) 一种基于ip分片的完整数据包留存方法及系统
Chen et al. IPzip: A stream-aware IP compression algorithm
Pan Efficient network packet signature matching on GPUs
CN115396363B (zh) 一种sdn网络环境下的流量分类方法及系统
US9152494B2 (en) Method and apparatus for data packet integrity checking in a processor
CN111949740B (zh) 基于多核处理器的并行网包分类方法、系统及网络设备
CN118101308A (zh) 一种加速机器学习特征工程的方法、系统及电子设备
CN114615231A (zh) 一种基于名字提取的网络包处置方法及系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination