[发明专利]一种基于零拷贝技术的高速网络数据包捕获方法有效
申请号: | 200810097512.9 | 申请日: | 2008-05-09 |
公开(公告)号: | CN101267361A | 公开(公告)日: | 2008-09-17 |
发明(设计)人: | 范兵;薛鹏 | 申请(专利权)人: | 武汉飞思科技有限公司 |
主分类号: | H04L12/26 | 分类号: | H04L12/26;H04L12/56 |
代理公司: | 北京捷诚信通专利事务所 | 代理人: | 魏殿绅;庞炳良 |
地址: | 430000湖北省武汉市东湖开发区*** | 国省代码: | 湖北;42 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 拷贝 技术 高速 网络 数据包 捕获 方法 | ||
1.一种基于零拷贝技术的高速网络数据包捕获方法,包括以下步骤;1)网卡初始化,2)数据包捕获程序初始化,3)开始数据包捕获,其特征在于:所说的开始数据包捕获的步骤为:a.硬件层的网卡通过DMA方式将收到的数据包传递给内核层的网卡驱动程序,b.用户层的数据包捕获程序通过映射方式获取网卡驱动程序收到的数据包;所说的网卡初始化的具体步骤为:
a.加载网卡驱动并为每块网卡分配连续的内存块,
b.创建至少包括以下信息的DEVICE_EXTENSION结构体:为每块网卡分配的内存块的地址信息,网卡打开方式标志,指向网卡结构体net_device和adapt结构体的指针,
c.在每块网卡的adapt结构体中增加指向DEVICE_EXTENSION结构体的指针,
d.创建一个虚拟字符设备,初始化其file_operations结构,初始化与该虚拟字符设备对应的打开open方法、关闭close方法、控制ioctl方法、映射mmap方法。
2.如权利要求1所述的基于零拷贝技术的高速网络数据包捕获方法,其特征在于:所说的数据包捕获程序初始化的具体步骤为:
a.数据包捕获程序打开虚拟字符设备并获得其描述符,读取程序员或用户设定的短包门限,并将打开方式的信息写入DEVICE_EXTENSION结构体中的网卡打开方式标志open_flag,
b.数据包捕获程序使用ioctl方法获得步骤1)中所分配的内存块,
c.数据包捕获程序调用mmap方法将这些内存块映射到用户空间,
d.数据包捕获程序在上述内存块中初始化全局管理结构、写队列W、读队列R、短包拷贝队列S、额外分配队列E、A类数据域、A类数据域控制结构、B类数据域、B类数据域控制结构、C类数据域、C类数据域控制结构,将A类数据域对应的A类数据域控制结构全部入W队列,B类数据域对应的B类数据域控制结构全部入E队列,C类数据域对应的C类数据域控制结构全部入S队列,R队列用于存储被捕获数据包对应的数据域控制结构,初始化时只有一个头节点,
所说的全局管理结构和网卡一一对应,全局管理结构包含写队列W、读队列R、短包拷贝队列S、额外分配队列E的头节点,指向当前的写队列W、读队列R、短包拷贝队列S、额外分配队列E的指针、临时指针、可以分配的数据域控制结构数目、可以读取的数据域控制结构数目、数据域控制结构总数目、应用程序读取数据域控制结构时首数据域控制结构的虚拟地址,
所说的写队列W、读队列R、短包拷贝队列S、额外分配队列E均是至少包括一个头节点的双向循环链表,
所说的A类数据域用于存放长包,B类数据域是在A类数据域用完的情况下替代其存放长包,C类数据域用于存放短包;A类数据域、B类数据域、C类数据域均是带有头部的数据块,每个数据块头部结构至少包括以下信息:与数据域对应的控制结构的索引、数据包的长度、数据包到达内核的时间、指向数据包头部的指针;
所说的数据域控制结构包括数据域控制结构索引、数据域控制结构内核空间逻辑地址、数据域用户空间虚拟地址、数据域内核空间逻辑地址、数据域物理地址、W队列使用的指针、R队列使用的指针、用户空间使用的指针;所说的W队列使用的指针、R队列使用的指针均是两个,
e.初始化中断函数和DMA缓存分配函数,
所说的开始数据包捕获的具体步骤为:
a’.网卡驱动调用DMA缓存分配函数为网卡分配一定数目缓存,并将缓存的物理地址填入到网卡中,所说的缓存是指A类数据域或者A类数据域用完的情况下用于代替其的B类数据域,
b’.网卡通过DMA方式将其硬件缓存中的数据包写入到分配的缓存中,写入完成后发出DMA中断请求,
c’.操作系统收到DMA中断请求后,调用网卡中断服务程序,
d’.中断服务程序首先根据网卡中的信息找到第一个含有未处理数据包的数据域,然后根据数据域的头部信息找到对应的数据域控制结构,如果是A类数据域控制结构则转e’步骤,如果是B类数据域控制结构则忽略,读取下一个包含未处理数据包的数据域;如果所有的数据包均已经被处理,则中断函数调用DMA缓存分配函数为网卡重新分配一定数目的缓存,然后退出中断,
e’.中断服务程序检查数据包头部信息,如果匹配用户过滤规则则直接丢弃,并将A类数据域控制结构入W队列,然后转到d’步骤处理下一个包含未处理数据包的数据域,如果不匹配用户过滤规则则进入f’步骤,
f’.中断服务程序检查数据包长度,如果长度小于等于短包门限,且S队列存在除头节点以外的C类数据域控制结构,则取头节点的下一个C类数据域控制结构,拷贝数据包至C类数据域控制结构对应的C类数据域,将C类数据域控制结构从S队列中移动到R队列,然后将A类数据域控制结构入W队列;如果长度大于短包门限或者S队列只有一个头节点,则直接将A类数据域控制结构入R队列,
g’.判断R队列中的数据域控制结构数目是否达到唤醒预设值且数据包捕获程序休眠中,如果是则唤醒数据包捕获程序读取数据包,然后转到d’步骤处理下一个包含未处理数据包的数据域,否则直接转到d’步骤处理下一个包含未处理数据包的数据域。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于武汉飞思科技有限公司,未经武汉飞思科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200810097512.9/1.html,转载请声明来源钻瓜专利网。
- 上一篇:超声波探头安装盒
- 下一篇:双光束在线实时测量光学薄膜应力的装置及其测量方法