网络协议识别方法及装置
技术领域
本发明涉及计算机网络技术领域,更具体地,涉及一种网络协议识别方法及装置。
背景技术
随着计算机网络的发展,网络的速度越来越快,网络传输的数据量也越来越大,高速网络的应用更加广泛。
传统的网络协议识别方法基于深度包解析方式,需要对数据进行重组后才能识别。在网络传输的数据量越来越大的情况下,传统的网络协议识别方法的识别速度较慢、效率较低,无法适应海量数据环境。
发明内容
本发明实施例提供一种网络协议识别方法及装置,用以解决或者至少部分地解决现有技术存在的在海量数据环境下识别速度慢、效率低的缺陷。
第一方面,本发明实施例提供一种网络协议识别方法,包括:
基于数据平面开发套件,从网卡获取数据包;
判断所述数据包的传输层的协议类型,确定传输层的协议类型是TCP或UDP;
若是TCP,则基于Hyperscan引擎的流模式扫描所述数据包,识别所述数据包采用的运行于TCP协议之上的协议;若是UDP,则基于Hyperscan引擎的块模式扫描所述数据包,识别所述数据包采用的运行于UDP协议之上的协议。
优选地,所述确定传输层的协议类型是TCP或UDP,与所述若是TCP,则基于Hyperscan引擎的流模式扫描所述数据包,识别所述数据包采用的运行于TCP协议之上的协议之间,还包括:
将所述数据包重整为有序数据。
优选地,所述若是TCP,则基于Hyperscan引擎的流模式扫描所述数据包,识别所述数据包采用的运行于TCP协议之上的协议的具体步骤包括:
基于Hyperscan引擎的流模式和预先获取的流模式协议识别规则扫描重整后的所述数据包,获取所述数据包对应的识别规则;
确定所述识别规则对应的TCP协议,作为所述数据包采用的运行于TCP协议之上的协议。
优选地,所述若是UDP,则基于Hyperscan引擎的块模式扫描所述数据包,识别所述数据包采用的运行于UDP协议之上的协议的具体步骤包括:
基于Hyperscan引擎的块模式和预先获取的块模式协议识别规则扫描所述数据包,获取所述数据包对应的识别规则;
确定所述识别规则对应的UDP协议,作为所述数据包采用的运行于UDP协议之上的协议。
优选地,所述基于Hyperscan引擎的流模式和预先获取的流模式协议识别规则扫描重整后的所述数据包的具体步骤包括:
若判断获知数据包不是HTTP数据,则基于Hyperscan引擎的流模式和预先获取的流模式协议识别规则扫描重整后的所述数据包。
优选地,所述基于Hyperscan引擎的流模式和预先获取的流模式协议识别规则扫描重整后的所述数据包的具体步骤包括:
若判断获知数据包是HTTP数据,则对所述数据包进行HTTP解码后,基于Hyperscan引擎的流模式和预先获取的流模式协议识别规则扫描解码后的重整后的所述数据包。
优选地,所述基于数据平面开发套件,从网卡获取数据包,与判断所述数据包的传输层的协议类型之间,还包括:
对所述数据包的IP层进行预处理。
第二方面,本发明实施例提供一种网络协议识别装置,包括:
数据采集模块,用于基于数据平面开发套件,从网卡获取数据包;
会话管理模块,用于判断所述数据包的传输层的协议类型,确定传输层的协议类型是TCP或UDP;
数据扫描模块,用于若是TCP,则基于Hyperscan引擎的流模式扫描所述数据包,识别所述数据包采用的运行于TCP协议之上的协议;若是UDP,则基于Hyperscan引擎的块模式扫描所述数据包,识别所述数据包采用的运行于UDP协议之上的协议。
第三方面,本发明实施例提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,执行所述程序时实现如第一方面的各种可能的实现方式中任一种可能的实现方式所提供的网络协议识别方法的步骤。
第四方面,本发明实施例提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面的各种可能的实现方式中任一种可能的实现方式所提供的网络协议识别方法的步骤。
本发明实施例提供的网络协议识别方法及装置,基于数据平面开发套件获取数据包,基于Hyperscan引擎的两种模式扫描数据包,能在海量数据环境下,更高效、快速地获得网络协议的识别结果。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为根据本发明实施例提供的网络协议识别方法的流程示意图;
图2为根据本发明实施例提供的网络协议识别方法的初始化流程示意图;
图3为根据本发明实施例提供的网络协议识别方法中数据采集步骤的流程示意图;
图4为根据本发明实施例提供的网络协议识别方法中会话管理步骤的流程示意图;
图5为根据本发明实施例提供的网络协议识别方法中输出步骤的流程示意图;
图6为根据本发明实施例提供的网络协议识别方法中TCP流扫描步骤的流程示意图;
图7为根据本发明实施例提供的网络协议识别方法中UDP块扫描步骤的流程示意图;
图8为根据本发明实施例提供的网络协议识别方法中预处理步骤的流程示意图;
图9为根据本发明实施例提供的网络协议识别装置的结构示意图;
图10为根据本发明实施例提供的网络协议识别装置的结构示意图;
图11为根据本发明实施例提供的电子设备的实体结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了克服现有技术的上述问题,本发明实施例提供一种网络协议识别方法及装置,其发明构思是,基于数据平面开发套件和Hyperscan,实现海量数据环境下,高效、快速的自动化网络协议识别。
图1为根据本发明实施例提供的网络协议识别方法的流程示意图。如图1所示,该方法包括:步骤S101、基于数据平面开发套件,从网卡获取数据包。
步骤S101为数据采集步骤。数据采集步骤,具体可以通过数据采集线程实现。
需要说明的是,本发明实施例提供的网络协议识别方法的执行主体为网络协议识别装置。
步骤S101中获取的数据包,可以为批量数据表。
数据平面开发套件(DPDK,Data Plane Development Kit)用于快速数据包处理的函数库与驱动集合,可以极大提高数据处理性能和吞吐量,提高数据平面应用程序的工作效率。
需要说明的是,步骤S101之前,需要对网络协议识别装置进行初始化。图2为根据本发明实施例提供的网络协议识别方法的初始化流程示意图。如图2所示,初始化的流程包括:
步骤S200、开始。给定各个步骤需要的配置文件,并给定静态协议识别规则配置文件。
步骤S201、配置文件读取及分析。读取各个步骤需要的配置文件,以确定各个步骤需要的线程的数量和参数,以及各个线程间的具体交互关系,从而构建网络协议识别的整体流程;读取静态协议识别规则配置文件,生成协议规则表。
步骤S202、运行环境初始化。根据协议规则表,生成Hyperscan扫描引擎所需的流模式协议识别规则数据库以及块模式协议识别规则数据库;根据各个步骤需要的配置文件中的参数,生成DPDK平台所需的EAL(环境抽象层,Environment Abstraction Layer)参数,并进行EAL初始化;根据资源参数,初始化内存池、网卡、无锁消息队列等;在不同的CPU核心上启动对应的线程,构建网络协议识别的整体流程。
步骤S203、监听动态规则。通过预设的接口进行规则的动态增加或删除,始终保持监听状态;是否监听到动态规则:是则,接收新的动态规则,执行步骤S204,进行规则下发;否则,直接步骤S205,进行状态输出;再跳转至步骤S203。
步骤S204、规则下发。根据新的动态规则修改协议规则表,生成新的流模式协议识别规则数据库以及块模式协议识别规则数据库,分别用于步骤S103的具体协议识别。
步骤S205、状态输出。对网络协议识别装置的整体运行状态,以及网络协议识别装置的各功能模块的各类统计数据进行统一的终端显示输出,或日志文件输出。
图3为根据本发明实施例提供的网络协议识别方法中数据采集步骤的流程示意图。数据采集线程从高速网卡中采集数据,并均衡分发采集到的数据包。如图3所示,数据采集步骤具体包括:
步骤S300、开始。为所有的数据采集线程提供启动资源准备,并依次触发所有数据采集线程的启动。
步骤S301、初始化。根据预先指定的数据采集线程的逻辑核ID参数,在对应逻辑核上创建数据采集线程;初始化当前数据采集线程的所有输入端口,即绑定所有与当前数据采集线程关联的已初始化的网卡接收队列;初始化当前数据采集线程的所有输出端口,即绑定所有与当前数据采集线程关联的已初始化的数据包消息队列;初始化当前已初始化的其他参数,如批量收包的最大个数等。
步骤S302、网卡队列批量收包。数据采集线程依次循环的从各个输入端口中批量接收数据包并分发。
根据当前输入端口ID从对应的网卡队列批量收包,并确定下一次收包的输入端口ID,然后进行步骤S303数据分发;然后跳转至步骤S302,进入下一次循环。
步骤S303、数据分发。根据当前数据采集线程输出端口的个数,将数据包均衡分发至所有的输出端口。
均衡分发时保证同源同宿,即五元组相同的数据发送至唯一的输出端口。
五元组包括本地IP、远端IP、本地端口、远端端口和传输层协议。
步骤S102、判断数据包的传输层的协议类型,确定传输层的协议类型是TCP或UDP。
具体地,步骤S102为会话管理步骤。会话管理步骤,具体可以通过会话管理线程实现。
图4为根据本发明实施例提供的网络协议识别方法中会话管理步骤的流程示意图。会话管理线程对TCP流进行排序,将最大有序数据合并为巨型帧,并均衡转发至与之关联的所有TCP流扫描线程,并将UDP报文直接均衡转发至UDP块扫描线程。如图4所示,会话管理步骤具体包括:
步骤S400、开始。为所有的会话管理线程提供启动资源准备,并依次触发所有会话管理线程的启动。
步骤S401、初始化。根据预先指定的会话管理线程的逻辑核ID参数,在对应逻辑核上创建会话管理线程;初始化当前会话管理线程的所有输入输出端口,即绑定所有与当前会话管理线程关联的已初始化的消息队列;初始化当前会话管理线程的其他参数,如hash表、批量收包的最大个数等。
步骤S402、会话表节点超时处理。
会话管理线程使用hash表来实现对TCP流的会话管理。网络数据包存在各种不确定性,故对于TCP流会话节点,需要进行超时处理,即扫描hash表定位无效流节点并删除,同时生成该流的结束数据包,转发至后续线程。
超时处理使用分块扫描的机制,因hash表中节点数量非常大,每次扫描所有节点成本较高,故将hash表分解成若干块,通过维护待扫描的hash表的块ID,每次只扫描一个块中的所有节点。
步骤S403、消息队列批量收包。会话管理模块线程依次循环的从各个输入端口中批量接收数据包,并对数据包逐个进行处理转发,直到所有数据包处理完毕后,进入下一次循环。
根据当前输入端口ID从对应的消息队列批量收包,并确定下一次收包的输入端口ID,然后进入步骤S404,进行消息的处理。处理完毕之后,跳转至步骤S402。
步骤S404、判断消息是否处理完毕。
是则,跳转至步骤S402;
否则,依次执行:
步骤S405、四层协议识别,即判断传输层的协议类型。数据包的传输层的协议类型UDP,则执行步骤S406,将数据包转发至UDP块扫描线程,并跳转至步骤S404;TCP则,继续进行后续步骤的处理。
步骤S407、判断是否为结束包,即判断当前TCP数据包是否为流的结束包。若是,则执行步骤S408,删除节点并转发结束包,即查找到该结束包对应的流节点,删除节点并将该结束包转发至后续线程,然后跳转至步骤S404;若否,则继续进行后续步骤的处理。
步骤S409、查找会话节点。若找到,则执行步骤S411,进行直接数据挂载,即将当前数据有序***到当前节点的数据链表中;若未找到,则执行步骤S410,创建节点,创建节点之后执行步骤S411,进行数据挂载。
步骤S103、若是TCP,则基于Hyperscan引擎的流模式扫描数据包,识别数据包采用的运行于TCP协议之上的协议;若是UDP,则基于Hyperscan引擎的块模式扫描数据包,识别数据包采用的运行于UDP协议之上的协议。
具体地,Hyperscan是一种高性能的正则表达式匹配库。
数据包的传输层的协议类型为UDP(用户数据报协议,User Datagram Protocol),则由UDP块扫描线程基于Hyperscan引擎的块模式扫描数据包,识别数据包采用的运行于UDP协议之上的协议。
运行于UDP协议之上的协议包括:DHCP、NTP和BOOTP等。
数据包的传输层的协议类型为TCP(传输控制协议,Transmission ControlProtocol),则由TCP流扫描线程基于Hyperscan引擎的流模式扫描数据包,识别数据包采用的运行于TCP扫协议之上的协议。
运行于TCP协议之上的协议包括:HTTP、HTTPS、FTP、POP3、SMTP、Telnet和SSH等。
协议识别结果可以由输出步骤进行输出,使用网络接口将结果输出至外部用户。输出步骤,具体可以通过输出线程实现。
图5为根据本发明实施例提供的网络协议识别方法中输出步骤的流程示意图。如图5所示,输出步骤具体包括:
步骤S500、开始。为所有的输出线程提供启动资源准备,并依次触发所有输出线程的启动。
步骤S501、初始化。根据预先指定的输出线程的逻辑核ID参数,在对应逻辑核上创建输出线程;初始化当前输出线程的所有输入端口,即绑定所有与当前输出线程关联的已初始化的消息队列;初始化当前输出线程的网络输出接口;初始化当前输出线程的其他参数,如批量收包的最大个数等。
步骤S502、消息队列批量收包。输出模块线程依次循环的从各个输入端口中批量接收协议识别结果消息,并对消息逐条进行处理,直到所有消息处理完毕后,进入下一次循环。
根据当前输入端口ID从对应的消息队列批量收包,并确定下一次收包的输入端口ID,然后执行步骤S503,进行消息的处理。处理完毕之后,跳转至步骤S502。
步骤S503、判断消息是否处理完毕。
若是,则跳转至步骤S502;
若否,则调用网络输出接口,执行步骤S504,进行输出识别结果;跳转至步骤S503。
本发明实施例具有以下优点:一是低耦合性,基于DPDK的无锁消息队列实现模块之间的异步消息交互机制,具有更低的耦合性;二是高拓展性,合理的功能模块分割实现了模块化,以动态构建数据处理模型实例的方式实现高扩展性,即可根据实际的网络数据环境以及模块的负载情况,构建最合适的处理模型;三是灵活性,支持静态协议识别规则,也支持动态协议规则;四是高效性,基于DPDK和Hyperscan,在通用x86平台上实现了高速数据的自动化识别处理。
本发明实施例基于数据平面开发套件获取数据包,基于Hyperscan引擎的两种模式扫描数据包,识别数据包采用的运行于TCP协议之上的协议和运行于UDP协议之上的协议,能在海量数据环境下,更高效、快速地获得识别结果。
基于上述各实施例的内容,确定传输层的协议类型是TCP或UDP,与若是TCP,则基于Hyperscan引擎的流模式扫描数据包,识别数据包采用的运行于TCP协议之上的协议之间,还包括:将数据包重整为有序数据。
具体地,如图4所示,步骤S411之后还包括步骤S412、判断是否存在有序数据。
若否,则直接跳转至步骤S404;若是,则将该数据包进行重整获得最大有序数据,执行步骤S413将最大有序数据发送至TCP流扫描线程,然后直接跳转至S404。
本发明实施例通过将TCP数据包重整为有序数据,从而能基于Hyperscan引擎更高效、快速地识别出运行于TCP协议之上的协议。
基于上述各实施例的内容,若是TCP,则基于Hyperscan引擎的流模式扫描数据包,识别数据包采用的运行于TCP协议之上的协议的具体步骤包括:基于Hyperscan引擎的流模式和预先获取的流模式协议识别规则扫描重整后的数据包,获取数据包对应的识别规则。
具体地,本发明实施例执行的是TCP流扫描步骤。TCP流扫描步骤,可以通过TCP流扫描线程实现。
TCP流扫描步骤对TCP数据包的有效载荷进行跨包扫描,扫描完毕后将识别出的协议类型结果发送至输出线程。
图6为根据本发明实施例提供的网络协议识别方法中TCP流扫描步骤的流程示意图。如图6所示,TCP流扫描步骤具体包括:
步骤S600、开始。为所有的TCP流扫描线程提供启动资源准备,并依次触发所有TCP流扫描线程的启动。
步骤S601、初始化。根据预先指定的TCP流扫描线程的逻辑核ID参数,在对应逻辑核上创建TCP流扫描线程;初始化当前TCP流扫描线程的所有输入输出端口,即绑定所有与当前TCP流扫描线程关联的已初始化的消息队列;初始化当前TCP流扫描线程的其他参数,如hash表、批量收包的最大个数、Hyperscan扫描引擎的本地资源等。
步骤S602、流表节点超时处理。
本发明实施例使用hypsercan的流模式实现TCP数据的跨包扫描,即在未进行TCP流重组的情况下,实现协议的跨包识别。该扫描模式需要缓存上下文,通过hash表进行维护。网络数据环境复杂,故需要对失效的上下文进行超时处理。
超时处理使用分块扫描的机制,因hash表中节点数量非常大,每次扫描所有节点成本较高,故将hash表分解成若干块,通过维护待扫描的hash表的块ID,每次只扫描一个块中的所有节点。
步骤S603、消息队列批量收包。TCP流扫描模块线程依次循环的从各个输入端口中批量接收数据包,并对数据包逐个进行处理,直到所有数据包处理完毕后,进入下一次循环。
根据当前输入端口ID从对应的消息队列批量收包,并确定下一次收包的输入端口ID,然后进入步骤S604,进行消息的处理。处理完毕之后,跳转至步骤S602。
步骤S604、判断消息是否处理完毕。
是则,跳转至S602;
否则,使用最新下发的流模式协议识别规则库,对当前TCP数据包的有效载荷进行流模式扫描,确定命中的识别规则。
确定识别规则对应的TCP协议,作为数据包采用的运行于TCP协议之上的协议。
具体地,根据命中的识别规则的ID查找协议规则表,获得命中的识别规则对应的TCP协议的类型,识别出运行于TCP协议之上的协议,作为识别结果,将结果发送至输出线程。
本发明实施例基于Hyperscan引擎进行网络协议识别,能更高效、快速地识别出运行于TCP协议之上的协议。
基于上述各实施例的内容,若是UDP,则基于Hyperscan引擎的块模式扫描数据包,识别数据包采用的运行于UDP协议之上的协议的具体步骤包括:基于Hyperscan引擎的块模式和预先获取的块模式协议识别规则扫描数据包,获取数据包对应的识别规则。
具体地,本发明实施例执行的是UDP块扫描步骤。UDP块扫描步骤,可以通过UDP块扫描线程实现。
UDP块扫描步骤对直接对UDP报文的有效载荷进行块模式扫描,扫描完毕后将识别出的协议类型结果发送至输出线程。
图7为根据本发明实施例提供的网络协议识别方法中UDP块扫描步骤的流程示意图。如图7所示,UDP块扫描步骤具体包括:
步骤S700、开始。为所有的UDP块扫描线程提供启动资源准备,并依次触发所有UDP块扫描线程的启动。
步骤S701、初始化。根据预先指定的UDP块扫描线程的逻辑核ID参数,在对应逻辑核上创建UDP块扫描线程;初始化当前UDP块扫描线程的所有输入输出端口,即绑定所有与当前UDP块扫描线程关联的已初始化的消息队列;初始化当前UDP块扫描线程的其他参数,如批量收包的最大个数、Hyperscan扫描引擎的本地资源等。
步骤S702、消息队列批量收包。UDP块扫描模块线程依次循环的从各个输入端口中批量接收数据包,并对数据包逐个进行处理,直到所有数据包处理完毕后,进入下一次循环。
根据当前输入端口ID从对应的消息队列批量收包,并确定下一次收包的输入端口ID,然后进入步骤S703,进行消息的处理。处理完毕之后,跳转至步骤S702。
步骤S703、判断消息是否处理完毕。
若是,则跳转至步骤S702;
若否,则执行步骤S704,Hyperscan块模式扫描处理及命中结果发送,即使用最新下发的块模式协议识别规则库,对当前UDP数据包的有效载荷进行块模式扫描,确定命中的识别规则。
确定识别规则对应的UDP协议,作为数据包采用的运行于UDP协议之上的协议。
具体地,根据命中的识别规则的ID查找协议规则表,获得命中的识别规则对应的UDP协议的类型,识别出运行于UDP协议之上的协议,作为识别结果,将结果发送至输出线程;跳转至步骤S703。
本发明实施例基于Hyperscan引擎进行网络协议识别,能更高效、快速地识别出运行于UDP协议之上的协议。
基于上述各实施例的内容,基于Hyperscan引擎的流模式和预先获取的流模式协议识别规则扫描重整后的数据包的具体步骤包括:若判断获知数据包不是HTTP数据,则基于Hyperscan引擎的流模式和预先获取的流模式协议识别规则扫描重整后的数据包。
具体地,步骤S604之后还包括以下步骤:
步骤S605、判断是否为结束包,即判断当前TCP数据包是否为流的结束包。若是,则执行步骤S606,删除节点,然后跳转至步骤S604;若否,则继续进行后续步骤的处理。
步骤S607、查找会话节点。若未找到,则执行步骤S508,创建节点;若找到,则继续进行后续步骤的处理。
步骤S609、判断是否为HTTP数据。若否,继续进行后续步骤的处理。
步骤S611、Hyperscan流模式扫描处理及命中结果发送,即使用最新下发的流模式协议识别规则库,对当前TCP数据包的有效载荷进行流模式扫描,确定命中的识别规则,根据命中的识别规则的ID查找协议规则表,获得命中的识别规则对应的TCP协议的类型,识别出运行于TCP协议之上的协议,作为识别结果,将结果发送至输出线程;跳转至步骤S604。
本发明实施例基于Hyperscan引擎,能更高效、快速地识别出运行于TCP协议之上的协议。
基于上述各实施例的内容,基于Hyperscan引擎的流模式和预先获取的流模式协议识别规则扫描重整后的数据包的具体步骤包括:若判断获知数据包是HTTP数据,则对数据包进行HTTP解码后,基于Hyperscan引擎的流模式和预先获取的流模式协议识别规则扫描解码后的重整后的数据包。
具体地,若步骤S609的判断结果为是,则执行步骤S610,进行HTTP处理,即对HTTP数据的解码等操作。
解码完成之后,执行步骤S611,Hyperscan流模式扫描处理及命中结果发送。
本发明实施例对HTTP数据进行解码后,基于Hyperscan引擎进行网络协议识别,能更高效、快速地识别出运行于TCP协议之上的协议。
基于上述各实施例的内容,基于数据平面开发套件,从网卡获取数据包,与判断数据包的传输层的协议类型之间,还包括:对数据包的IP层进行预处理。
具体地,从网卡获取数据包之后,先通过预处理步骤对获取的批量数据包进行预处理,预处理之后再执行会话管理步骤。预处理步骤,具体可以通过预处理线程实现。
预处理线程对IP分片报文进行重组,将IP报文的IP协议头部进行剥离后均衡分发至与之关联的所有会话管理线程。
图8为根据本发明实施例提供的网络协议识别方法中预处理步骤的流程示意图。如图8所示,预处理步骤具体包括:
步骤S800、开始。为所有的预处理线程提供启动资源准备,并依次触发所有预处理线程的启动;
步骤S801、初始化。根据预先指定的预处理线程的逻辑核ID参数,在对应逻辑核上创建预处理线程;初始化当前预处理线程的所有输入输出端口,即绑定所有与当前预处理线程关联的已初始化的消息队列;初始化当前预处理线程的其他参数,如批量收包的最大个数等。
步骤S802、消息队列批量收包。预处理线程依次循环的从各个输入端口中批量接收数据包,并对数据包逐个进行预处理后转发,直到所有数据包处理完毕后,进入下一次循环。
根据当前输入端口ID从对应的消息队列批量收包,并确定下一次收包的输入端口ID,然后进入步骤S803,进行消息的预处理。处理完毕之后,跳转至步骤S802。
步骤S803、判断消息是否处理完毕。对于已批量接收的网络数据包,需要逐个进行预处理,即进行IP分片的重组以及IP头部的剥离。然后根据输出端口的数量进行同源同宿的均衡分发。
判断消息是否处理完毕:
若是,则跳转至步骤S802;
若否,则依次执行:
步骤S804、IP分片检查,检查数据包IP层头部协议字段以及分片标志位,确认是否为分片包;若是,则进行步骤S805;若否,则进行步骤S807。
步骤S805、IP分片包重组,即查找IP分片缓存表,并将分片包有序的***到对应位置。
步骤S806、检查是否重组完成;若是,则进行子步骤S807;否则跳转至步骤S803;
步骤S807、IP头部剥离并转发,将完整的IP报文的数据指针进行偏移,直接指向荷载部分。同时根据输出端口的数量进行均衡分发。跳转至步骤S803。
本发明实施例通过对IP分片报文进行重组,能更快速地判断传输层协议,从而能进行运行于TCP或UDP协议之上的协议的识别,能更高效、快速地获得识别结果。
图9为根据本发明实施例提供的网络协议识别装置的结构示意图。基于上述各实施例的内容,如图9所示,该装置包括数据采集模块901、会话管理模块902和数据扫描模块903,其中:
数据采集模块901,用于基于数据平面开发套件,从网卡获取数据包;
会话管理模块902,用于判断数据包的传输层的协议类型,确定传输层的协议类型是TCP或UDP;
数据扫描模块903,用于若是TCP,则基于Hyperscan引擎的流模式扫描数据包,识别数据包采用的运行于TCP协议之上的协议;若是UDP,则基于Hyperscan引擎的块模式扫描数据包,识别数据包采用的运行于UDP协议之上的协议。
具体地,数据采集模块901、会话管理模块902和数据扫描模块903依次电连接。
数据采集模块901从高速网卡中采集数据,并均衡分发采集到的数据包。
会话管理模块902对TCP流进行排序,将最大有序数据合并为巨型帧,并均衡转发至与之关联的所有TCP流扫描线程,并将UDP报文直接均衡转发至UDP块扫描线程。
数据扫描模块903包括两个子模块,分别用于基于Hyperscan引擎的流模式扫描数据包,识别数据包采用的运行于TCP协议之上的协议,和基于Hyperscan引擎的块模式扫描数据包,识别数据包采用的运行于UDP协议之上的协议。
本发明实施例提供的网络协议识别装置,用于执行本发明上述各实施例提供的网络协议识别方法,该网络协议识别装置包括的各模块实现相应功能的具体方法和流程详见上述网络协议识别方法的实施例,此处不再赘述。
该网络协议识别装置用于前述各实施例的网络协议识别方法。因此,在前述各实施例中的网络协议识别方法中的描述和定义,可以用于本发明实施例中各执行模块的理解。
本发明实施例基于数据平面开发套件获取数据包,基于Hyperscan引擎的两种模式扫描数据包,识别数据包采用的运行于TCP协议之上的协议和运行于UDP协议之上的协议,能在海量数据环境下,更高效、快速地获得识别结果。
图10为根据本发明实施例提供的网络协议识别装置的结构示意图。基于上述各实施例的内容,如图10所示,该装置包括:运维模块10、数据采集模块20、预处理模块30、会话管理模块40、TCP流扫描模块50、UDP块扫描模块60和输出模块70。
TCP流扫描模块50和UDP块扫描模块60共同实现执行步骤S103。
数据采集模块20、预处理模块30、会话管理模块40、TCP流扫描模块50或UDP块扫描模块60、输出模块70依次交互,整个数据处理过程采用流水线模型,前端功能模块生产消息,后端功能模块消费消息。数据采集模块20从高速网卡中采集数据,并均衡分发至与之关联的所有预处理模块30。预处理模块30对IP分片报文进行重组,将IP报文的IP协议头部进行剥离后均衡分发至与之关联的所有会话管理模块40。会话管理模块40对TCP流进行排序,将最大有序数据合并为巨型帧,并均衡转发至与之关联的所有TCP流扫描模块50。同时,会话管理模块40将UDP报文直接均衡转发至UDP块扫描模块60。TCP流扫描模块50则对TCP数据包的有效载荷进行跨包扫描,其中对于载荷为http协议的数据扫描前先进行http的解码处理。UDP块扫描模块60则直接对UDP报文的有效载荷进行块模式扫描。TCP流扫描模块50和UDP块扫描模块60将扫描识别出的协议类型转发至输出模块70。输出模块70使用网络接口将结果输出至外部用户。
运维模块10与TCP流扫描模块50交互,运维模块10接收动态规则,更新协议识别规则表,依次生成最新的流模式规则数据库并下发给TCP流扫描模块50。TCP流扫描模块50使用运维模块10下发的最新规则库更新Hyperscan扫描引擎的本地资源,开始使用最新的规则库进行数据扫描。
运维模块10与UDP块扫描模块60交互,运维模块10接收动态规则,更新协议识别规则表,并以此生成最新块模式规则数据库下发给UDP块扫描模块60。UDP块扫描模块60使用运维模块10下发的最新规则库更新Hyperscan扫描引擎的本地资源,开始使用最新的规则库进行数据扫描。
运维模块10,为最基础的模块。运维模块10在初始化阶段进行资源的初始化,为其他模块的启动做准备。同时根据数据处理模块配置文件生成处理模型实例图,并触发所有其他模块的启动。
本发明实施例中采用积木式动态构建方式生成数据处理模型实例,除运维模块以外,其他功能模块均可以同时存在多个。运维模块根据具体的模型配置文件在初始化时,构建数据处理模型实例图和初始化资源,并按照实例图构建具体的数据处理模型实例。
同时,运维模块还负责整个程序的状态及日志输出,以及接收用户的动态规则,并下发给TCP流扫描模块和UDP块扫描模块。
数据采集模块20,使用DPDK用户面驱动,在最大程度减少丢包的情况下,从高速网卡中采集数据,并均衡转发至与其关联的预处理模块20。
预处理模块30,主要负责网络数据包IP层的处理,即IP分片的重组以及IP头部的剥离,并将经过预处理后的数据均衡转发至与其关联的会话管理模块40。
会话管理模块40,负责TCP数据的排序和重组,使用hash表对TCP数据流进行维护,对陆续达到的TCP数据进行排序,并对最大有序数据进行重组,生成巨型数据帧转发至TCP流扫描模块50。
会话管理模块40,还负责UDP的转发,将接收到的UDP报文均衡转发至UDP块扫描模块60。
TCP流扫描模块60,基于Hyperscan技术,使用流模式对TCP数据进行跨包扫描,即每次扫描的对象非TCP完整重组后的应用层数据,而是会话管理模块发送的单块数据帧的有效载荷,以此达到更高的性能;对于TCP之上的HTTP数据,在扫描之前先对经过编码处理的HTTP数据进行解码处理;将扫描过程中命中的结果转发至输出模块70。
UDP块扫描模块60,基于Hyperscan技术,使用块模式对TCP数据进行扫描,即扫描的对象为会话管理模块转发的UDP报文的有效载荷;将扫描过程中命中的结果转发至输出模块70。
输出模块,70,通过网络通信接口将TCP流扫描模块50和UDP块扫描模块60扫描识别出的结果转发至外界其他业务.
例如,数据处理模型配置文件指定每个模块启动一个实例,则整体包含7个任务块,即1个运维模块,6个数据处理任务块:数据采集模块20、预处理模块30、会话管理模块40、TCP流扫描模块50、UDP块扫描模块60和输出模块70。在1号逻辑CPU核心上启动运维模块10,读取数据处理模型配置文件,生成实例图,并对6个数据处理任务块需要用到的网卡队列、内存池、消息队列等资源进行初始化。运维模块10触发6个数据处理任务块,分别在2~7号逻辑CPU核心上启动实例。启动完毕之后,以流水线的工作模式,前端模块作为生产者,后端模块作为消费者如,依次交互从而实现网络数据包的自动化协议识别。其中每个数据处理任务块既是生产者,也是消费者。对于用户下发的动态规则,运维模块实例将其进行处理之后分别转发至TCP流扫描模块50实例以及UDP块扫描模块60实例。
图11为根据本发明实施例提供的电子设备的实体结构示意图。基于上述实施例的内容,如图11所示,该电子设备可以包括:处理器(processor)1101、存储器(memory)1102和总线1103;其中,处理器1101和存储器1102通过总线1103完成相互间的通信;处理器1101用于调用存储在存储器1102中并可在处理器1101上运行的计算机程序指令,以执行上述各方法实施例所提供的网络协议识别方法,例如包括:基于数据平面开发套件,从网卡获取数据包;判断数据包的传输层的协议类型,确定传输层的协议类型是TCP或UDP;若是TCP,则基于Hyperscan引擎的流模式扫描数据包,识别数据包采用的运行于TCP协议之上的协议;若是UDP,则基于Hyperscan引擎的块模式扫描数据包,识别数据包采用的运行于UDP协议之上的协议。
本发明另一实施例公开一种计算机程序产品,计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,计算机程序包括程序指令,当程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的网络协议识别方法,例如包括:基于数据平面开发套件,从网卡获取数据包;判断数据包的传输层的协议类型,确定传输层的协议类型是TCP或UDP;若是TCP,则基于Hyperscan引擎的流模式扫描数据包,识别数据包采用的运行于TCP协议之上的协议;若是UDP,则基于Hyperscan引擎的块模式扫描数据包,识别数据包采用的运行于UDP协议之上的协议。
此外,上述的存储器1102中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本发明另一实施例提供一种非暂态计算机可读存储介质,非暂态计算机可读存储介质存储计算机指令,计算机指令使计算机执行上述各方法实施例所提供的网络协议识别方法,例如包括:基于数据平面开发套件,从网卡获取数据包;判断数据包的传输层的协议类型,确定传输层的协议类型是TCP或UDP;若是TCP,则基于Hyperscan引擎的流模式扫描数据包,识别数据包采用的运行于TCP协议之上的协议;若是UDP,则基于Hyperscan引擎的块模式扫描数据包,识别数据包采用的运行于UDP协议之上的协议。
以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行上述各个实施例或者实施例的某些部分的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。