一种基于报文零拷贝方式的高性能报文捕获发送平台制造技术

技术编号:20750967 阅读:20 留言:0更新日期:2019-04-03 11:25
本发明专利技术公开了一种基于报文零拷贝方式的高性能报文捕获发送平台,它包括网卡驱动模块,内核报文处理栈模块与用户态接口动态库模块,网卡驱动模块使得指定网卡的数据流程指向内核报文处理栈;内核报文处理栈,采用队列的方式在内核态、用户态之间传递网络数据报文;用户态的接口动态库,使用统一接口实现报文的捕获、发送。本发明专利技术能运行在多种软、硬件平台上、多种硬件平台、多种linux发行版本、多种型号网卡,兼容性好。本发明专利技术能在不同流量、无出错丢包要求下,提供报文给上层应用进行分析处理,稳定性好。本发明专利技术能使报文数据到达网卡驱动的缓冲后,后续的数据报文流程不再需要拷贝,效率高,适用于网络安全领域对网络流量进行应用识别、协议分析。

【技术实现步骤摘要】
一种基于报文零拷贝方式的高性能报文捕获发送平台
本专利技术涉及网络安全
,尤其涉及一种基于报文零拷贝方式的高性能报文捕获发送平台。
技术介绍
在网络安全领域,需要在实时或事后的方式下,对网络流量进行应用识别、协议分析。流量分析的前提,是需要一个稳定、高性能、兼容多种软硬件的报文捕获发送平台。传统的报文捕获是利用libpcap开发出捕报文发送平台,但libpcap的报文捕获方式是:当报文到达网卡时,网卡通过DMA方式将其传送到网卡驱动的缓冲环中,并在完成DMA传送时产生一个硬件中断。中断处理程序将接收到的报文封装成sk_buff结构,然后由netif_rx传递给网络协议栈进行进一步处理。在内核网络协议栈和Socket层处理后,用户进程通过系统调用read或recvfrom从内核空间读取报文。由于内核缓冲了绝大多数I/O操作,内核空缓冲区在一定程度上分割了用户空间和物理设备,有利于应用层程序的设计实现。但是,内核缓冲区的使用却增加了数据拷贝、中断和CPU参与等系统开销,从而影响报文捕获的性能。
技术实现思路
本专利技术的目的是针对现有的报文捕获发送中内核缓冲区增加系统开销,影响报文捕获性能的问题,专利技术一种基于报文零拷贝方式的高性能报文捕获发送平台。一种基于报文零拷贝方式的高性能报文捕获发送平台,包括用户态接口动态库模块,包含报文捕获接口、报文释放接口、申请skbuf接口、报文发送接口、初始化/注销接口、日志调试统计接口;内核报文处理栈模块,包含发送线程,负责取出带有发送网卡信息的报文,并将报文发送至网卡;填充线程,负责监控skbuf队列,如队列中可用skbuf小于50%,就申请skbuf并将其投入到skbuf队列中,skbuf队列给用户态进程使用,用于拼接IP分片报文,或用户态进程模拟大流量发送报文时填充报文数据;释放线程,负责从释放队列里取报文skbuf,释放归还到skbuf缓存中;检测线程,负责检测每个进程的捕包队列,如果队列上无操作超过一定时间则认为进程异常,关闭该队列;捕获队列,由用户态进程初始化平台控制结构实例时创建,用于接收网卡驱动中断;发送队列用于接收用户态进程将要发生的报文,报文指针在接口内部被转为物理地址,发送线程从发送队列取报文,转成线性地址后,发送到指定发送网卡;skbuf队列,用于存放填充线程填充的skbuf,skbuf地址均为物理地址,用户态进程通过接口从skbuf队列中取skbuf使用,接口内部转为用户态地址;释放队列,用于接收用户态进程将处理后需要释放的报文,接口内部将报文地址转为物理地址,释放线程从释放队列中取报文释放到skbuf缓存;skbuf缓存,用于网卡收报文中断后,拷贝存储报文,也用于用户态进程发送报文时填充构造的报文;平台控制结构实例,由用户态进程调用初始化接口时创建,存放内核态和用户态都要访问的全局变量,用于控制模块功能,用户态的接口使用控制结构实例中的信息,和内核报文处理栈交互报文数据、控制信息;统计信息,由用户态进程调用初始化接口时创建,在用户态进程和内核报文处理栈之间传递统计信息;网卡驱动模块,用于控制指定网卡数据流向。在本专利技术的优选中,所述用户态接口动态库模块中所有的接口都内部实现了用户态和内核态的地址转换,包含数据报文物理地址转换、平台控制实例中队列地址转换和统计信息的物理地址转换。在本专利技术的优选中,所述网卡驱动模块在加载网卡设备init处理中,设置网卡工作在PROMISC模式,向内核报文处理栈模块注册网卡设备信息,当报文到达时,申请skbuf并拷贝报文,使用__pa(*pPacketSkbuf)将报文指针由线性地址转为物理地址,然后将报文地址投递到捕获队列中,应用进程通过接口获取到报文指针,接口内部将线性地址转为用户态空间的地址,用户态进程就可进行后续的报文分析处理。本专利技术通过/proc/iomem文件获取到当前物理地址的最大值,并将当前进程空间使用的内存大小设置为无限制,同时根据获取到的最大物理地址使用mmap将整个物理内存映射到用户进程空间。映射的起始地址为start,则用户态代码可通过公式:物理地址+start=虚拟地址,用户态进程可通过访问该虚拟地址访问所有对象。本专利技术中用户态进程设置好初始化参数,参数包括:流量、捕报文网卡、发送报文网卡等信息。初始化接口在/proc下建立用户态进程对应项目录,并在目录下创建参数信息。内核报文处理栈读到用户态进程参数后,分配平台控制结构实例,内核报文处理栈将平台控制结构实例的地址写到对应用户态进程在/proc的项目录下,用户态进程通过读其在/proc的项目录下的控制结构实例指针,将其转为用户态的虚拟地址,后续调用平台各种接口时,将该控制结构指针作为参数传入,就能实现捕获、发送、统计等各种操作。用户态进程得到控制结构实例的指针后,用户态进程使用控制结构实例指针作为参数调用平台的捕获、发送接口,就可从内核报文处理栈接收报文将报文发送到内核处理栈。控制结构中的队列用上述内存共享的方式,一端在内核态,另一端在用户态,任意一端只执行入队列或者出队列,同时在内核态使用自旋锁进行并发同步,在用户态使用互斥量进行并发同步。本专利技术的有益效果在于:本专利技术可应用于多种硬件平台,包括HPDL系列的2U架式服务器;IBMM4、M5、X5、X6系列的架式服务器;IBMBlade-HS22*系列的刀片服务器;ATCA标准的刀片服务器。本专利技术可在多种类型的网卡上进行报文捕获、报文发送:IntelGE网卡、Intel10GE网卡、BroadcomGE网卡、Broadcom10GE网卡。本专利技术支持多种网卡的使用模式:1个10GE网卡报文捕获和4个GE网卡报文发送;1个10GE网卡报文捕获和1个10GE网卡报文发送;1-8个GE网卡报文捕获和1-8个GE网卡报文发送。本平台可以运行在多种linux发行版本中:SUSELinuxEnterprise12、Centos-7x86_64和RedHatEnterpriseLinux6。本专利技术提供向导式的安装卸载工具,将平台安装在服务器上,可以在该服务器上实现大流量的报文捕获、报文发送。本专利技术能在不同流量、无出错丢包要求下,提供报文给上层应用进行分析处理,支持流量范围达1Gbps-10Gbps,特别适用于流量恶意行为识别领域。附图说明图1为本专利技术的结构框图;图2为本专利技术的模块设计图;图3为本专利技术的报文捕获流程示意图;图4为本专利技术的报文发送过程示意图;图5为本专利技术的报文转发过程示意图。具体实施方式下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。如图1所示,一种基于报文零拷贝方式的高性能报文捕获发送平台,其由用户态的接口动态库,内核报文处理栈和网卡驱动组成。如图2所示,在进行模块化设计时,本专利技术可划分为以下模块:用户态接口动态库模块,包含报文捕获接口、报文释放接口、申请skbuf接口、报文发送接口、初始化/注销接口、日志调试统计接口。需要说明的是,用户态接口动态库模块中所有的接口都内部实现了用户态和内核态的地址转换,包含数据报文物理地址转换、平台控制实例中队列地址转换和统计信息的物理地址转换。内核报文处理栈本文档来自技高网...

【技术保护点】
1.一种基于报文零拷贝方式的高性能报文捕获发送平台,其特征是,包括用户态接口动态库模块,包含报文捕获接口、报文释放接口、申请skbuf接口、报文发送接口、初始化/注销接口、日志调试统计接口;内核报文处理栈模块,包含发送线程,负责取出带有发送网卡信息的报文,并将报文发送至网卡;填充线程,负责监控skbuf队列,如队列中可用skbuf小于50%,就申请skbuf并将其投入到skbuf队列中,skbuf队列给用户态进程使用,用于拼接IP分片报文,或用户态进程模拟大流量发送报文时填充报文数据;释放线程,负责从释放队列里取报文 skbuf,释放归还到skbuf缓存中;检测线程,负责检测每个进程的捕包队列,如果队列上无操作超过一定时间则认为进程异常,关闭该队列;捕获队列,由用户态进程初始化平台控制结构实例时创建,用于接收网卡驱动中断;发送队列用于接收用户态进程将要发生的报文,报文指针在接口内部被转为物理地址,发送线程从发送队列取报文,转成线性地址后,发送到指定发送网卡;skbuf队列,用于存放填充线程填充的skbuf,skbuf地址均为物理地址,用户态进程通过接口从skbuf队列中取skbuf使用,接口内部转为用户态地址;释放队列,用于接收用户态进程将处理后需要释放的报文,接口内部将报文地址转为物理地址,释放线程从释放队列中取报文释放到skbuf缓存;skbuf缓存,用于网卡收报文中断后,拷贝存储报文,也用于用户态进程发送报文时填充构造的报文;平台控制结构实例,由用户态进程调用初始化接口时创建,存放内核态和用户态都要访问的全局变量,用于控制模块功能,用户态的接口使用控制结构实例中的信息,和内核报文处理栈交互报文数据、控制信息;统计信息,由用户态进程调用初始化接口时创建,在用户态进程和内核报文处理栈之间传递统计信息;网卡驱动模块,用于控制指定网卡数据流向。...

【技术特征摘要】
1.一种基于报文零拷贝方式的高性能报文捕获发送平台,其特征是,包括用户态接口动态库模块,包含报文捕获接口、报文释放接口、申请skbuf接口、报文发送接口、初始化/注销接口、日志调试统计接口;内核报文处理栈模块,包含发送线程,负责取出带有发送网卡信息的报文,并将报文发送至网卡;填充线程,负责监控skbuf队列,如队列中可用skbuf小于50%,就申请skbuf并将其投入到skbuf队列中,skbuf队列给用户态进程使用,用于拼接IP分片报文,或用户态进程模拟大流量发送报文时填充报文数据;释放线程,负责从释放队列里取报文skbuf,释放归还到skbuf缓存中;检测线程,负责检测每个进程的捕包队列,如果队列上无操作超过一定时间则认为进程异常,关闭该队列;捕获队列,由用户态进程初始化平台控制结构实例时创建,用于接收网卡驱动中断;发送队列用于接收用户态进程将要发生的报文,报文指针在接口内部被转为物理地址,发送线程从发送队列取报文,转成线性地址后,发送到指定发送网卡;skbuf队列,用于存放填充线程填充的skbuf,skbuf地址均为物理地址,用户态进程通过接口从skbuf队列中取skbuf使用,接口内部转为用户态地址;释放队列,用于接收用户态进程将处理后需要释放的报文,接口内部将报文地址转为物理地址,释放线程从释放队列中取...

【专利技术属性】
技术研发人员:傅涛
申请(专利权)人:江苏博智软件科技股份有限公司
类型:发明
国别省市:江苏,32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1