[发明专利]一种用于工业控制系统网络的数据包零拷贝获取方法有效
| 申请号: | 201410466615.3 | 申请日: | 2014-09-12 |
| 公开(公告)号: | CN104333533B | 公开(公告)日: | 2017-09-08 |
| 发明(设计)人: | 吴克河;安思成;丁雪伟;王晓翔;崔文超;李佳玮 | 申请(专利权)人: | 北京华电天益信息科技有限公司;华北电力大学 |
| 主分类号: | H04L29/06 | 分类号: | H04L29/06 |
| 代理公司: | 南京苏高专利商标事务所(普通合伙)32204 | 代理人: | 王云 |
| 地址: | 102200 北京市昌平*** | 国省代码: | 北京;11 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 用于 工业 控制系统 网络 数据包 拷贝 获取 方法 | ||
1.一种用于工业控制系统网络的数据包零拷贝获取方法,其特征在于:包括以下步骤:
步骤1,加载内核模块,指定需要获取数据包的网络接口;
步骤2,初始化内核模块,其中包括分配内核模块和用户程序的共享内存区域,所述共享的内存区域分配在用户态区;
步骤3,格式化和结构化共享内存区的数据模型,并将共享内存区的数据模型中各部分设置初始状态;
步骤4,创建用于用户态和内核模块之间通信交互的虚拟字符设备,并将虚拟字符设备返回给用户态以加载;
步骤5,用户程序通过虚拟字符设备通知内核模块,开始数据包零拷贝获取操作;
步骤6,内核模块经过准备工作后,开始获取网卡链路层数据包,并从网卡直接写到共享内存区域;
步骤7,内核模块把原始的链路层数据包进行TCP流表重组,这其中用到序列号和应答号信息;如果数据包在TCP流表内组织为顺序包,那么作为就绪包处理,设置一个定标志位;内核模块通知用户态就绪数据包已经到达,用户态取下数据包后,做应用处理;如果数据包在TCP流表内组织不为顺序包,由TCP流表重组功能暂时缓存,等待直到后面数据包到达后可以组成顺序包,再进行就绪处理;
步骤8,用户态处理完数据包后,通知内核模块数据包以处理完成,内核模块将处理完数据包从共享内存区中删除,将删除后的空间给后面的数据包获取过程使用。
2.根据权利要求1所述的用于工业控制系统网络的数据包零拷贝获取方法,其特征在于:所述步骤2中共享内存区域是通过内核模块与用户态之间映射形成,主要方法为:利用alloc_pages函数申请物理页,然后使用vmap函数将申请的物理页映射到内核模块,再通过vm_insert_page函数将申请的物理页插入到用户地址空间;其中,所述alloc_pages函数用于在内核模块中申请物理内存页框的函数;所述vmap函数用于把申请的物理页框的内容映射到内核模块虚拟地址的一段连续地址;所述vm_insert_page函数用于把物理页框映射到用户进程虚拟地址的一块连续地址。
3.根据权利要求1所述的用于工业控制系统网络的数据包零拷贝获取方法,其特征在于:所述步骤3中共享内存区的数据模型包括五部分,分别为内存管理结构体、哈希表、连接结点、数据存储管理单元和数据存放区块。
4.根据权利要求1所述的用于工业控制系统网络的数据包零拷贝获取方法,其特征在于:所述步骤6中内核模块进行的准备工作主要包括,首先通过虚拟字符设备的mmap函数申请映射一块设备空间用作内核模块与用户程序之间通信存储临时消息;然后判断网卡驱动是否运行,如运行则不进行操作,如果网卡驱动不运行则把网卡的数据缓冲区替换为所述共享内存区,最后,使网卡驱动继续运行。
5.根据权利要求3所述的用于工业控制系统网络的数据包零拷贝获取方法,其特征在于:所述数据存储管理单元被组织成一个双向循环链表,其中有三个控制结点:head、use和tail,所述head表示数据包管理链表的头节点;所述use表示数据包管理链表的中间节点;所述tail表示数据包管理链表的尾节点;其中,head和use节点之间是用户态使用中的节点,use和tail节点之间是内核态使用中的节点,tail和head节点之间是目前空闲中的节点,所述网卡得到数据包后,调用接口首先将head和use节点之间已经处理完成的结点放到ail和head节点之间的末端,然后从tail和head节点之间取第一个结点放到use和tail节点之间用于存放网卡直接内存存取过来的数据;use和tail节点之间的结点经过处理之后或被丢弃或移动到head和use节点之间供用户程序处理。
6.根据权利要求5所述的用于工业控制系统网络的数据包零拷贝获取方法,其特征在于:所述数据存储管理单元被组织成的双向循环链表中使用延时函数。
7.根据权利要求1所述的用于工业控制系统网络的数据包零拷贝获取方法,其特征在于:所述步骤7中内核模块把原始的链路层数据包进行TCP流表重组的方法为:通过数据包的IP头获得源IP和目的IP,从TCP头获得源端口和目的端口,通过源IP、目的IP、源端口和目的端口的四元组来存放到不同的连接中;然后通过TCP机制和ACK、SYN、FIN控制包,将数据包重组成为数据流。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京华电天益信息科技有限公司;华北电力大学,未经北京华电天益信息科技有限公司;华北电力大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410466615.3/1.html,转载请声明来源钻瓜专利网。





