CN101267361B - 一种基于零拷贝技术的高速网络数据包捕获方法 - Google Patents

一种基于零拷贝技术的高速网络数据包捕获方法 Download PDF

Info

Publication number
CN101267361B
CN101267361B CN2008100975129A CN200810097512A CN101267361B CN 101267361 B CN101267361 B CN 101267361B CN 2008100975129 A CN2008100975129 A CN 2008100975129A CN 200810097512 A CN200810097512 A CN 200810097512A CN 101267361 B CN101267361 B CN 101267361B
Authority
CN
China
Prior art keywords
data field
control structure
category
formation
field control
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.)
Expired - Fee Related
Application number
CN2008100975129A
Other languages
English (en)
Other versions
CN101267361A (zh
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.)
Wuhan Fisee Technology Co., Ltd.
Original Assignee
WUHAN FISEE 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 WUHAN FISEE TECHNOLOGY Co Ltd filed Critical WUHAN FISEE TECHNOLOGY Co Ltd
Priority to CN2008100975129A priority Critical patent/CN101267361B/zh
Publication of CN101267361A publication Critical patent/CN101267361A/zh
Application granted granted Critical
Publication of CN101267361B publication Critical patent/CN101267361B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

一种基于零拷贝技术的高速网络数据包捕获方法,涉及网络流量监测分析领域,包括至少装有一块网卡的计算机,计算机上装有操作系统和数据包捕获程序,数据包捕获程序通过网卡捕获数据包,包括以下步骤:1)网卡初始化,2)数据包捕获程序初始化,3)开始数据包捕获,其特征在于:所说的开始数据包捕获的步骤为:a.硬件层的网卡通过DMA方式将收到的数据包传递给内核层的网卡驱动程序,b.用户层的数据包捕获程序通过映射方式获取网卡驱动程序收到的数据包。本发明所述的基于零拷贝技术的高速网络数据包捕获方法,以通用硬件平台为基础,基于零拷贝技术实现高速网络数据包捕获,具有系统开销小,捕获效率高,改造成本低廉的优点。

Description

一种基于零拷贝技术的高速网络数据包捕获方法
技术领域
本发明涉及网络流量监测分析领域,具体地说是一种基于零拷贝技术的高速网络数据包捕获方法。
背景技术
流量指标是网络运行和维护过程中重要的指标之一,它是网络规划设计、协议设计、业务部署、流量工程实施、攻击检测、故障诊断等的基础。通过网络流量的监测和分析可以获得网络性能信息,网络服务状况以及网络中存在的攻击或者弱点。流量监测和分析技术被广泛应用到防火墙、入侵检测和协议解码以及流量监测系统中,数据包捕获是流量监测和分析的前提和第一步骤,它决定了基于流量监测和分析的系统的性能,通常数据包捕获是由数据包捕获程序通过网卡捕获数据包。目前绝大部分的流量分析监测系统都是借助libpcap等函数库完成数据包的捕获,在低速网络的情况下可满足需求。
然而,随着网络技术的不断发展,网路链路的速率迅猛增长,已经开始从Mbit/s迈向Gbit/s,在不久的将来还可能会发展至40Gbit/s甚至是Tbit/s。千兆网卡和千兆交换机已经开始逐步进入主流市场,几乎每个新的局域网用户都会采用此项技术,一个普通家庭用户所能够获得的带宽比几年前一个公司获得的带宽还要大。网络应用的普及与网络技术的发展,导致网络流量也日益庞大。面对高速网络,传统的流量监测和分析技术所依赖的数据包捕获方法遇到了诸多瓶颈问题,如PCI总线吞吐量、存储容量、内存访问速度、磁盘阵列访问的速率、内存拷贝的开销、系统调用的开销、中断开销以及操作系统的任务调度机制等都对高速网络数据包捕获产生一定的影响。因此,使得可以满足低速网络的传统的数据包捕获方法无法应用到高速网络中。
图1给出了现有的低速网络的分布式网络数据包捕获方法流程示意图,如图所示,在低速网络中,硬件层的网卡通过DMA方式将收到的数据包传递给内核层的网卡驱动程序,网卡驱动程序再转发到内核层的协议栈,数据包在协议栈中排队等待处理,用户层的数据包捕获程序通过拷贝方式获取协议栈内的数据包。所说的拷贝方式大多通过操作系统提供的socket套接字接口完成。上述的数据包捕获方法不但要为数据包动态的分配和释放缓存,而且需要将数据包从内核层拷贝到用户层,这些操作均需要耗费大量的系统资源,因此无法用于高速网络数据包的捕获。
目前,为了克服PCI总线吞吐量、存储容量、内存访问速度、磁盘阵列访问的速率、内存拷贝的开销、系统调用的开销、中断开销以及操作系统的任务调度机制等都对高速网络数据包捕获的限制和影响,一些研究人员和硬件产商已经开始了一番探索。有些采用网络处理器替代通用硬件平台来实现数据包捕获并完成部分的流量监测和分析功能,但是采用网络处理器的方法价格非常昂贵,且开发和升级的周期较长,大量部署不太现实;有些试图通过专门硬件来实现数据包捕获来实现数据包捕获进而完成被动流量监测和分析,然而基于专门硬件的实现方式同样价格昂贵,且系统缺乏足够的灵活性,很难跟上当今瞬息万变的网络发展状况和流量监测分析的需求。
流量监测和分析,尤其是高速网络的流量监测分析逐渐成为一个热门的领域。高速网络数据包捕获的方法在流量监测和分析技术中具有重要的应用价值。
发明内容
针对现有技术中存在的缺陷,本发明的目的是提供一种基于零拷贝技术的高速网络数据包捕获方法,以通用硬件平台为基础,基于零拷贝技术实现高速网络数据包捕获,具有系统开销小,捕获效率高,改造成本低廉的优点。
为达到以上目的,本发明采取的技术方案是:
一种基于零拷贝技术的高速网络数据包捕获方法,包括以下步骤:1)网卡初始化,2)数据包捕获程序初始化,3)开始数据包捕获,其特征在于:所说的开始数据包捕获的步骤为:a.硬件层的网卡通过DMA方式将收到的数据包传递给内核层的网卡驱动程序,b.用户层的数据包捕获程序通过映射方式获取网卡驱动程序收到的数据包。
在上述技术方案的基础上,所说的网卡初始化的具体步骤为:
a.加载网卡驱动并为每块网卡分配连续的内存块,
b.创建至少包括以下信息的DEVICE_EXTENSION结构体:为每块网卡分配的内存块的地址信息,网卡打开方式标志,指向网卡结构体net_device和adapt结构体的指针,
c.在每块网卡的adapt结构体中增加指向DEVICE_EXTENSION结构体的指针,
d.创建一个虚拟字符设备,初始化其file_operations结构,初始化与该虚拟字符设备对应的打开(open)方法、关闭(close)方法、控制(ioctl)方法、映射(mmap)方法。
在上述技术方案的基础上,所说的数据包捕获程序初始化的步骤为:
a.数据包捕获程序打开虚拟字符设备并获得其描述符,
b.数据包捕获程序使用ioctl方法获得步骤1)中所分配的内存块,
c.数据包捕获程序调用mmap方法将这些内存块映射到用户空间,
d.数据包捕获程序在上述内存块中初始化用于捕获数据包的数据结构,
e.初始化中断函数和DMA缓存分配函数,
所说的开始数据包捕获的步骤为:
a.网卡驱动调用DMA缓存分配函数为网卡分配一定数目缓存,并将缓存的物理地址填入到网卡中,所说的缓存是指A类数据域或者A类数据域用完的情况下用于代替其的B类数据域,
b.网卡通过DMA方式将其硬件缓存中的数据包写入到分配的缓存中,写入完成后发出DMA中断请求,
c.操作系统收到DMA中断请求后,调用网卡中断服务程序,
d.中断服务程序根据网卡中的信息处理数据包,
e.中断函数调用DMA缓存分配函数为网卡重新分配一定数目的缓存。
在上述技术方案的基础上,所说的数据包捕获程序初始化的具体步骤为:
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步骤处理下一个包含未处理数据包的数据域。
在上述技术方案的基础上,所说的数据包捕获程序读取数据包的具体步骤为:
a.数据包捕获程序调用get_read_nodes函数获取当前时刻R队列中的数据域控制结构,如果存在未处理的数据域控制结构,则根据数据域控制结构中的信息找到对应的数据域并对其进行处理,直到处理完R队列中的所有数据域控制结构,然后进入b,否则数据包捕获程序进入休眠状态,等待中断过程中的唤醒操作,
b.数据包捕获程序调用put_back_nodes函数,返还A类数据域控制结构和C类数据域控制结构分别至W队列和S队列。
在上述技术方案的基础上,所说的数据包捕获程序读取数据包的具体步骤为:
a.数据包捕获程序调用get_read_nodes函数获取当前时刻R队列中的数据域控制结构,如果存在未处理的数据域控制结构,则根据数据域控制结构中的信息找到对应的数据域并对其进行处理,直到处理完R队列中的所有数据域控制结构,然后进入b,否则数据包捕获程序进入休眠状态,等待中断过程中的唤醒操作,如果在10ms内没有发生中断过程中的唤醒操作,数据包捕获程序会系统被唤醒,
b.数据包捕获程序调用put_back_nodes函数,返还A类数据域控制结构和C类数据域控制结构分别至W队列和S队列。
在上述技术方案的基础上,所说的中断函数调用DMA缓存分配函数为网卡重新分配一定数目的缓存的具体步骤为:
a.如果W队列中存在除头节点以外的A类数据域控制结构,则获得头节点的下一个A类数据域控制结构对应的A类数据域,从W队列中删除该A类数据域控制结构;否则取E队列中的B类数据域控制结构,获得B类数据域控制结构对应的B类数据域,更新丢包信息,
b.将获得的A类数据域或B类数据域的物理地址填写至网卡的硬件中。
本发明所述的基于零拷贝技术的高速网络数据包捕获方法,以通用硬件平台为基础,基于零拷贝技术实现高速网络数据包捕获,具有系统开销小,捕获效率高,改造成本低廉的优点。
附图说明
本发明有如下附图:
图1低速网络的分布式网络数据包捕获方法流程示意图
图2基于零拷贝技术的高速网络数据包捕获方法流程示意图
具体实施方式
以下结合附图对本发明作进一步详细说明。
图2为本发明所述的基于零拷贝技术的高速网络数据包捕获方法流程示意图,本发明所述的方法以通用硬件平台为基础,所说的通用硬件平台是至少装有一块网卡的计算机,计算机上装有操作系统和数据包捕获程序,数据包捕获程序通过网卡捕获数据包,包括以下步骤:1)网卡初始化,2)数据包捕获程序初始化,3)开始数据包捕获,其特征在于:所说的开始数据包捕获的步骤为:a.硬件层的网卡通过DMA方式将收到的数据包传递给内核层的网卡驱动程序,b.用户层的数据包捕获程序通过映射方式获取网卡驱动程序收到的数据包。在上述技术方案的基础上,所说的网卡初始化的具体步骤为:
a.加载网卡驱动并为每块网卡分配连续的内存块,
b.创建至少包括以下信息的DEVICE_EXTENSION结构体:为每块网卡分配的内存块的地址信息,网卡打开方式标志,指向网卡结构体net_device和adapt结构体的指针,
c.在每块网卡的adapt结构体中增加指向DEVICE_EXTENSION结构体的指针,
d.创建一个虚拟字符设备,初始化其file_operations结构,初始化与该虚拟字符设备对应的打开(open)方法、关闭(close)方法、控制(ioctl)方法、映射(mmap)方法。
利用虚拟字符设备的映射(mmap)方法即可实现“用户层的数据包捕获程序通过映射方式获取网卡驱动程序收到的数据包”。由于网卡通过DMA方式将数据包从硬件传输至内核层,数据包捕获程序通过内存映射的共享方式直接读取数据包,因此拷贝次数为零,即零拷贝技术。这种捕获数据包的方式不需要将数据包从内核层拷贝到用户层,占用系统资源少,可以以通用硬件平台为基础,实现高速网络数据包捕获。
在上述技术方案的基础上,所说的数据包捕获程序初始化的步骤为:
a.数据包捕获程序打开虚拟字符设备并获得其描述符,
b.数据包捕获程序使用ioctl方法获得步骤1)中所分配的内存块,
c.数据包捕获程序调用mmap方法将这些内存块映射到用户空间,
d.数据包捕获程序在上述内存块中初始化用于捕获数据包的数据结构,
e.初始化中断函数和DMA缓存分配函数,
所说的开始数据包捕获的步骤为:
a.网卡驱动调用DMA缓存分配函数为网卡分配一定数目缓存,并将缓存的物理地址填入到网卡中,所说的缓存是指A类数据域或者A类数据域用完的情况下用于代替其的B类数据域,
b.网卡通过DMA方式将其硬件缓存中的数据包写入到分配的缓存中,写入完成后发出DMA中断请求,
c.操作系统收到DMA中断请求后,调用网卡中断服务程序,
d.中断服务程序根据网卡中的信息处理数据包,
e.中断函数调用DMA缓存分配函数为网卡重新分配一定数目的缓存。
在上述技术方案的基础上,所说的数据包捕获程序初始化的具体步骤可以为:
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步骤处理下一个包含未处理数据包的数据域。
在上述技术方案的基础上,所说的数据包捕获程序读取数据包的具体步骤为:
a.数据包捕获程序调用get_read_nodes函数获取当前时刻R队列中的数据域控制结构,如果存在未处理的数据域控制结构,则根据数据域控制结构中的信息找到对应的数据域并对其进行处理,直到处理完R队列中的所有数据域控制结构,然后进入b,否则数据包捕获程序进入休眠状态,等待中断过程中的唤醒操作,
b.数据包捕获程序调用put_back_nodes函数,返还A类数据域控制结构和C类数据域控制结构分别至W队列和S队列。
所说的数据包捕获程序读取数据包的具体步骤还可以为:
a.数据包捕获程序调用get_read_nodes函数获取当前时刻R队列中的数据域控制结构,如果存在未处理的数据域控制结构,则根据数据域控制结构中的信息找到对应的数据域并对其进行处理,直到处理完R队列中的所有数据域控制结构,然后进入b,否则数据包捕获程序进入休眠状态,等待中断过程中的唤醒操作,如果在10ms内没有发生中断过程中的唤醒操作,数据包捕获程序会系统被唤醒,
b.数据包捕获程序调用put_back_nodes函数,返还A类数据域控制结构和C类数据域控制结构分别至W队列和S队列。
增加系统唤醒数据包捕获程序可以避免由于中断未能及时唤醒数据包捕获程序而造成的捕获延迟问题,提高捕获数据包的效率。
在上述技术方案的基础上,所说的中断函数调用DMA缓存分配函数为网卡重新分配一定数目的缓存的具体步骤为:
a.如果W队列中存在除头节点以外的A类数据域控制结构,则获得头节点的下一个A类数据域控制结构对应的A类数据域,从W队列中删除该A类数据域控制结构;否则取E队列中的B类数据域控制结构,获得B类数据域控制结构对应的B类数据域,更新丢包信息,
b.将获得的A类数据域或B类数据域的物理地址填写至网卡的硬件中。
以下通过一个具体的实施例进一步说明本发明所述的一种基于零拷贝技术的高速网络数据包捕获方法,本实施例是基于装有intele1000双网卡的电脑。所说的基于零拷贝技术的高速网络数据包捕获方法的具体步骤为:
步骤1)网卡初始化
a.加载网卡驱动并为每块网卡分配连续的内存块,
本实施例中,加载网卡驱动时为每张网卡分配30块大小为2M物理上连续的内存块,由于有两张网卡,所以总共分配120M内存。所说的分配内存块可以采用现有技术实现,例如:可以通过_get_free_pages函数实现,分配时最好保证内存块在物理上的连续,以方便后面的管理。
b.创建至少包括以下信息的DEVICE_EXTENSION结构体:为每块网卡分配的内存块的地址信息,网卡打开方式标志open_flag,指向网卡结构体net_device和adapt结构体的指针,
DEVICE_EXTENSION结构体用于管理本发明所述方法需要使用的信息。所说的net_device和adapt结构体是现有技术中加载网卡驱动时均会自动创建的结构体。
c.在每块网卡的adapt结构体中增加指向DEVICE_EXTENSION结构体的指针,
d.创建一个虚拟字符设备,初始化其file_operations结构,初始化与该虚拟字符设备对应的打开(open)方法、关闭(close)方法、控制(ioctl)方法、映射(mmap)方法,
所说的初始化与该虚拟字符设备对应的打开(open)方法、关闭(close)方法、控制(ioctl)方法、映射(mmap)方法可以采用现有技术实现。创建虚拟字符设备是为了使用虚拟字符设备提供的ioctl方法和mmap方法。ioctl方法可以方便的控制内存的分配,初始化以及回收。mmap方法用于将内核的地址空间映射到用户空间,是实现用户层的数据包捕获程序通过映射方式获取网卡驱动程序收到的数据包的关键,这可以使用户层的数据包捕获程序直接访问内核的地址空间,从而不用或减少由内核层到用户层的拷贝操作,降低了系统开销,提高了内核和用户数据包捕获程序收包的效率。
步骤2)数据包捕获程序初始化
a.数据包捕获程序打开虚拟字符设备并获得其描述符,读取程序员或用户设定的短包门限,并将打开方式的信息写入DEVICE_EXTENSION结构体中的打开方式标志open_flag,
短包门限可以由程序员在编程时写入程序中,也可以由用户在运行数据包捕获程序时设定,也可以采用现有技术实现。本实施例中,短包门限为256个字节。短包门限的设定及判断方法可以采用现有技术实现,例如:实际判断时,数据包捕获程序先用短包门限减去数据域头部所占的字节(16个),将:小于等于240字节的数据包判定为短包,大于240字节的数据包被判定为长包。
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的指针,指向缓冲池当前数据域控制结构的指针、临时指针、可以分配的数据域控制结构数目、可以读取的数据域控制结构数目、数据域控制结构总数目、应用程序读取数据域控制结构时首数据域控制结构的虚拟地址。本实施例中,该结构体分布在第一块内存最初的4k空间内。
所说的写队列W、读队列R、短包拷贝队列S、额外分配队列E均是双向循环链表,刚初始化完成时,写队列W、读队列R、短包拷贝队列S、额外分配队列E只有头节点。
所说的A类数据域用于存放长包,B类数据域是在A类数据域用完的情况下替代其存放长包,C类数据域用于存放短包。A类数据域、B类数据域、C类数据域均是带有头部的数据块,每个数据块头部结构至少包括以下信息:与数据域对应的控制结构的索引、数据包的长度、数据包到达内核的时间、数据包头部指针。其中记录的数据包到达内核的时间大大减小了在应用进程中需要使用系统调用来获得时间戳的开销,提高了系统性能。A类数据域、B类数据域、C类数据域的数量、大小可以根据内存来调整。例如:A类数据域的数目为18416,每个A类数据域大小为2k。B类数据域的数目为16,每个B类数据域大小为2k。C类数据域的数目40960,每个C类数据域大小为256字节。B类数据域的设置是为了避免当A类数据域用完时,网卡无法继续工作而设计的,本发明所说的数据包捕获方法对B类数据域中的数据包不进行处理,凡是写入B类数据域的数据包就相当于丢包。
所说的数据域控制结构包括数据域控制结构索引、数据域控制结构内核空间逻辑地址、数据域用户空间虚拟地址、数据域内核空间逻辑地址、数据域物理地址、W队列使用的指针、R队列使用的指针、用户空间使用的指针。所说的W队列使用的指针、R队列使用的指针均是两个,因为W队列和R队列是双向循环链表。数据域控制结构和其对应的数据域的数量是相同的,本实施例中,A类数据域控制结构的数目为18416。B类数据域控制结构的数目为16。C类数据域控制结构的数目40960。
本发明所述的方法主要是通过对数据域控制结构的分析、处理,实现对数据域的管理、控制,下面对上述数据结构的使用方式进行说明:在初始化阶段:
A类数据域对应的数据域控制结构全部入W队列,每次为网卡分配DMA缓存时从W队列取数据域控制结构即可获得其对应的A类数据域地址。
B类数据域对应的B类数据域控制结构全部入E队列。当出现A类数据域用尽的情况时(在W队列只存在头节点),数据包捕获程序从E队列中获取数据域控制结构,获得的数据域控制结构用于网卡和网卡驱动程序间的DMA传输。E队列采用循环分配的方式,其目的是避免在A类数据域用尽时,网卡收到数据包后没有地方写入的问题,循环分配就不会存在分配不到的问题。凡是写入B类数据域的数据包就会按丢包处理,而不会像A类数据域中的数据包那样进行处理,因此B类数据域控制结构不会写入R队列。
C类数据域对应的C类数据域控制结构全部入S队列,当数据包小于短包门限时,取S队列中的数据域控制结构,获得其对应的C类数据域,并将短包拷贝到C类数据域中。
R队列用于数据包捕获程序读包,初始化时只有一个头节点。凡是入到R队列的数据域控制结构对应的数据域内的数据包,就代表基于零拷贝技术的高速网络数据包捕获过程的完成,此时数据包捕获程序可以将该数据包读出以便进行其它后续工作。
e.初始化中断函数和DMA缓存分配函数,
所说的初始化中断处理函数可以采用现有技术实现,例如:首先调用e1000_close函数禁用网卡,在该函数中将网卡状态位设置为关闭,此步目的在于防止网卡在接收数据包的时候被重新初始化。然后调用e1000_open函数激活网卡,设置网卡状态位为打开,使用网卡状态位的目的是为了防止网卡以字符设备的方式被打开多次。最后调用e1000_open函数初始化接收模块。在调用e1000_open函数激活网卡的时候,DMA缓存分配函数会预分配一定数目的A类数据域地址给网卡。
为了使该数据包捕获程序保持兼容性(既可以使用本发明的方法也可以使用现有的方法捕获数据包),可以在e1000_open函数初始化接收模块时,让e1000_open函数首先判断DEVICE_EXTENSION结构体中的打开方式标志open_flag,如果打开方式标志是zero copy方式,则注册zero copy方式的中断函数fsnic_clean_rx_irq和DMA缓存分配函数fsnic_alloc_rx_buffers。如果是普通的方式,则使用驱动自带的函数。所说的中断函数fsnic_clean_rx_irq和DMA缓存分配函数fsnic_alloc_rx_buffers可以采用现有技术实现。
步骤3)开始数据包捕获
a.网卡驱动调用DMA缓存分配函数为网卡分配一定数目缓存,并将缓存的物理地址填入到网卡中,所说的缓存是指A类数据域或者A类数据域用完的情况下用于代替其的B类数据域,
b.网卡通过DMA方式将其硬件缓存中的数据包写入到分配的缓存中,写入完成后发出DMA中断请求,
网卡通过DMA方式将其硬件缓存中的数据包写至网卡驱动程序的A类数据域或B类数据域可以采用现有技术实现,
c.操作系统收到DMA中断请求后,调用网卡中断服务程序,
d.中断服务程序首先根据网卡中的信息找到第一个含有未处理数据包的数据域,然后根据数据域的头部信息找到对应的数据域控制结构,如果是A类数据域控制结构则转e,如果是B类数据域控制结构则忽略,读取下一个包含未处理数据包的数据域;如果所有的数据包均已经被处理,则中断函数调用DMA缓存分配函数为网卡重新分配一定数目的缓存,然后退出中断,
判断是否是A类数据域控制结构可以采用现有技术实现,例如:本实施例中,可以判断数据域控制结构索引,小于等于18416的就是A类数据域控制结构;判断是否是B类数据域控制结构可以采用现有技术实现,例如:本实施例中,可以判断数据域控制结构索引,大于等于18417且小于等于18432的就是B类数据域控制结构;所说的缓存即A类数据域或者B类数据域。
e.中断服务程序检查数据包头部信息,如果匹配用户过滤规则则直接丢弃,并将A类数据域控制结构入W队列,然后转到d步骤处理下一个包含未处理数据包的数据域,如果不匹配用户过滤规则则进入f步骤,
所说的用户过滤规则是指对端口、IP地址等信息的自定义过滤规则。用户过滤规则是用户为了捕获某一类数据包而指定的,如果用户希望不加选择的捕获全部数据包,可以不设定用户过滤规则。用户过滤规则的设定、匹配均可采用现有技术实现,在不需要使用用户过滤规则功能的系统中,此步骤可以省略。为了避免未实际使用的A类数据域控制结构被浪费,如果匹配用户过滤规则,将A类数据域控制结构入W队列可以使得该未实际使用的A类数据域控制结构能被再次利用。
f.中断服务程序检查数据包长度,如果长度小于等于短包门限,且S队列存在除头节点以外的C类数据域控制结构,则取头节点的下一个C类数据域控制结构,拷贝数据包至C类数据域控制结构对应的C类数据域,将C类数据域控制结构从S队列中移动到R队列,然后将A类数据域控制结构入W队列;如果长度大于短包门限或者S队列只有一个头节点,则直接将A类数据域控制结构入R队列,
g.判断R队列中的数据域控制结构数目是否达到唤醒预设值且数据包捕获程序休眠中,如果是则唤醒数据包捕获程序读取数据包,然后转到d步骤处理下一个包含未处理数据包的数据域,否则直接转到d步骤处理下一个包含未处理数据包的数据域。
例如:判断R队列中的数据域控制结构数目是否达到16个,如果达到且数据包捕获程序休眠中,则唤醒数据包捕获程序读取数据包,唤醒数据包捕获程序的数据域控制结构数目可以根据实际需要调整,可以采用现有技术实现这一功能。
上述技术方案中所说的“数据包捕获程序读取数据包”是指数据包捕获程序循环读取R队列,可以采用现有技术实现,例如,其具体步骤为:
a.数据包捕获程序调用get_read_nodes函数获取当前时刻R队列中的数据域控制结构,如果存在未处理的数据域控制结构,则根据数据域控制结构中的信息找到对应的数据域并对其进行处理,直到处理完R队列中的所有数据域控制结构,然后进入b,否则据包捕获程序进入休眠状态,等待中断过程中的唤醒操作,如果在10ms内中断中没有发生唤醒操作,数据包捕获程序会系统被唤醒,此过程即超时唤醒,可以保证及时处理R队列中的数据域控制结构。
b.数据包捕获程序调用put_back_nodes函数,返还A类数据域控制结构和C类数据域控制结构分别至W队列和S队列。
put_back_nodes函数可以采用现有技术实现,例如:该函数的具体工作过程如下:通过数据域控制结构索引判断出是A类数据域控制结构还是C类数据域控制结构,将C类数据域控制结构入S队列,将A类数据域控制结构入W队列,然后返回a步骤,数据包捕获程序继续读取R队列。
上述技术方案中所说的“中断函数调用DMA缓存分配函数为网卡重新分配一定数目的缓存”可以采用现有技术,DMA缓存分配函数的实现可以自己设计,例如,其具体步骤为:
a.如果W队列中存在除头节点以外的A类数据域控制结构,则获得头节点的下一个A类数据域控制结构对应的A类数据域,从W队列中删除该A类数据域控制结构;否则取E队列中的B类数据域控制结构,获得B类数据域控制结构对应的B类数据域,更新丢包信息,
b.将获得的A类数据域或B类数据域的物理地址填写至网卡的硬件中。
由于E队列中的数据域控制结构不进行删除操作,而是采取循环获取的方式,因此不存在不能从E队列中获得B类数据域控制结构的情况。
本发明所述的基于零拷贝技术的高速网络数据包捕获方法系统开销小,可以以通用硬件平台为基础,实现高速网络数据包捕获,具有系统开销小,捕获效率高,系统改造成本低廉的优点。

Claims (6)

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’步骤处理下一个包含未处理数据包的数据域。
3.如权利要求2所述的基于零拷贝技术的高速网络数据包捕获方法,其特征在于:所说的数据包捕获程序读取数据包的具体步骤为:
a”.数据包捕获程序调用get_read_nodes函数获取当前时刻R队列中的数据域控制结构,如果存在未处理的数据域控制结构,则根据数据域控制结构中的信息找到对应的数据域并对其进行处理,直到处理完R队列中的所有数据域控制结构,然后进入b”步骤,否则数据包捕获程序进入休眠状态,等待中断过程中的唤醒操作,
b”.数据包捕获程序调用put_back_nodes函数,返还A类数据域控制结构和C类数据域控制结构分别至W队列和S队列。
4.如权利要求2所述的基于零拷贝技术的高速网络数据包捕获方法,其特征在于:所说的数据包捕获程序读取数据包的具体步骤为:
a”’.数据包捕获程序调用get_read_nodes函数获取当前时刻R队列中的数据域控制结构,如果存在未处理的数据域控制结构,则根据数据域控制结构中的信息找到对应的数据域并对其进行处理,直到处理完R队列中的所有数据域控制结构,然后进入b”’步骤,否则数据包捕获程序进入休眠状态,等待中断过程中的唤醒操作,如果在10ms内没有发生中断过程中的唤醒操作,数据包捕获程序会被系统唤醒,
b”’.数据包捕获程序调用put_back_nodes函数,返还A类数据域控制结构和C类数据域控制结构分别至W队列和S队列。
5.如权利要求2所述的基于零拷贝技术的高速网络数据包捕获方法,其特征在于:所说的中断函数调用DMA缓存分配函数为网卡重新分配一定数目的缓存的具体步骤为:
a.如果W队列中存在除头节点以外的A类数据域控制结构,则获得头节点的下一个A类数据域控制结构对应的A类数据域,从W队列中删除该A类数据域控制结构;否则取E队列中的B类数据域控制结构,获得B类数据域控制结构对应的B类数据域,更新丢包信息,
b.将获得的A类数据域或B类数据域的物理地址填写至网卡的硬件中。
6.如权利要求3或4所述的基于零拷贝技术的高速网络数据包捕获方法,其特征在于:所说的中断函数调用DMA缓存分配函数为网卡重新分配一定数目的缓存的具体步骤为:
a.如果W队列中存在除头节点以外的A类数据域控制结构,则获得头节点的下一个A类数据域控制结构对应的A类数据域,从W队列中删除该A类数据域控制结构;否则取E队列中的B类数据域控制结构,获得B类数据域控制结构对应的B类数据域,更新丢包信息,
b.将获得的A类数据域或B类数据域的物理地址填写至网卡的硬件中。
CN2008100975129A 2008-05-09 2008-05-09 一种基于零拷贝技术的高速网络数据包捕获方法 Expired - Fee Related CN101267361B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2008100975129A CN101267361B (zh) 2008-05-09 2008-05-09 一种基于零拷贝技术的高速网络数据包捕获方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2008100975129A CN101267361B (zh) 2008-05-09 2008-05-09 一种基于零拷贝技术的高速网络数据包捕获方法

Publications (2)

Publication Number Publication Date
CN101267361A CN101267361A (zh) 2008-09-17
CN101267361B true CN101267361B (zh) 2011-05-18

Family

ID=39989508

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2008100975129A Expired - Fee Related CN101267361B (zh) 2008-05-09 2008-05-09 一种基于零拷贝技术的高速网络数据包捕获方法

Country Status (1)

Country Link
CN (1) CN101267361B (zh)

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101718981B (zh) * 2009-11-03 2012-01-11 四川省电力工业调整试验所 一种分散控制系统网络数据采样仪
CN101702688B (zh) * 2009-11-24 2012-01-04 武汉绿色网络信息服务有限责任公司 一种数据包收发方法
CN102467473B (zh) * 2010-11-03 2015-02-11 Tcl集团股份有限公司 一种在用户空间和内核之间传输数据的方法和装置
CN102436400A (zh) * 2011-12-06 2012-05-02 曙光信息产业股份有限公司 零拷贝驱动的实现方法和装置
CN102571434B (zh) * 2012-01-11 2014-09-10 清华大学 操作系统中网络驱动层的数据访问控制方法
CN103036746B (zh) * 2012-12-21 2015-07-08 中国科学院计算技术研究所 基于网络中间点的网页响应时间被动测量方法及系统
CN103441951A (zh) * 2013-08-19 2013-12-11 南京邮电大学 一种基于网卡驱动的数据包处理优化方法
CN103686700A (zh) * 2013-12-09 2014-03-26 中国科学院深圳先进技术研究院 数据链路层流量处理方法及系统
CN103888850B (zh) * 2014-03-26 2018-01-26 深圳市九洲电器有限公司 一种网络视频播放方法及终端
CN105579963B (zh) * 2014-09-03 2019-10-01 华为技术有限公司 任务处理装置、电子设备及方法
CN104333533B (zh) * 2014-09-12 2017-09-08 北京华电天益信息科技有限公司 一种用于工业控制系统网络的数据包零拷贝获取方法
CN104778138B (zh) * 2015-04-20 2018-03-06 中国科学院光电技术研究所 一种内核多线程直接存储驱动实现方法
CN106452946A (zh) * 2016-09-21 2017-02-22 深圳市金立通信设备有限公司 一种流量控制方法及终端
CN106571978B (zh) * 2016-10-28 2020-11-27 东软集团股份有限公司 数据包捕获方法及装置
CN108111558A (zh) * 2016-11-25 2018-06-01 中兴通讯股份有限公司 一种高速报文处理方法、装置及系统
CN108123877A (zh) * 2016-11-28 2018-06-05 网宿科技股份有限公司 实现非本地网络流量获取的方法、系统及装置
CN106452979A (zh) * 2016-12-06 2017-02-22 郑州云海信息技术有限公司 一种在线捕包方法及工具
CN106713462A (zh) * 2016-12-26 2017-05-24 郑州云海信息技术有限公司 一种网络数据包处理方法和装置
CN107026767B (zh) * 2017-03-30 2019-10-18 上海七牛信息技术有限公司 业务协议指标数据收集方法及系统
CN107302499B (zh) * 2017-06-26 2020-12-18 北京赛特斯信息科技股份有限公司 无需拷贝报文缓存的nfv协议报文收发方法
CN110519497B (zh) * 2019-08-28 2020-11-17 中国大恒(集团)有限公司北京图像视觉技术分公司 一种基于vdma的零拷贝触发采集装置及方法
CN112035071B (zh) * 2020-09-27 2023-06-06 万兴科技(湖南)有限公司 磁盘数据读取方法、装置、计算机设备及存储介质
CN115378921B (zh) * 2022-08-05 2023-07-07 科东(广州)软件科技有限公司 基于raw的网络构架及数据传输方法
CN116225999B (zh) * 2023-05-04 2023-07-21 太初(无锡)电子科技有限公司 一种dma数据传输方法及系统

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101135980A (zh) * 2006-08-29 2008-03-05 飞塔信息科技(北京)有限公司 一种基于Linux操作系统实现零拷贝的装置和方法
CN101150487A (zh) * 2007-11-15 2008-03-26 曙光信息产业(北京)有限公司 一种零拷贝网络报文发送方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101135980A (zh) * 2006-08-29 2008-03-05 飞塔信息科技(北京)有限公司 一种基于Linux操作系统实现零拷贝的装置和方法
CN101150487A (zh) * 2007-11-15 2008-03-26 曙光信息产业(北京)有限公司 一种零拷贝网络报文发送方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
刘峰,黄凯明,黎忠文.Linux平台下基于Intel千兆网卡的零拷贝技术的研究与实现.福建电脑.2008,2008(4),5-6. *

Also Published As

Publication number Publication date
CN101267361A (zh) 2008-09-17

Similar Documents

Publication Publication Date Title
CN101267361B (zh) 一种基于零拷贝技术的高速网络数据包捕获方法
US9935899B2 (en) Server switch integration in a virtualized system
US7836212B2 (en) Reflecting bandwidth and priority in network attached storage I/O
CN104506379B (zh) 网络数据捕获方法和系统
US8539199B2 (en) Hash processing in a network communications processor architecture
US8392565B2 (en) Network memory pools for packet destinations and virtual machines
CN100590609C (zh) 一种基于非连续页的动态内存管理方法
CN110226157A (zh) 用于减少行缓冲冲突的动态存储器重新映射
CN108958649B (zh) 一种用于存储系统的安全隔离方法及装置
US20060069869A1 (en) Enqueueing entries in a packet queue referencing packets
EP0889623A2 (en) System and method for efficient remote disk I/O
US9769081B2 (en) Buffer manager and methods for managing memory
WO2015066489A2 (en) Efficient implementations for mapreduce systems
EP1896965A1 (en) Dma descriptor queue read and cache write pointer arrangement
GB2395308A (en) Allocation of network interface memory to a user process
CN101150485A (zh) 一种零拷贝缓冲区队列网络数据发送的管理方法
US20100020818A1 (en) Sharing buffer space in link aggregation configurations
CN108090003A (zh) 一种基于零拷贝的提升web服务器性能的方法、系统
CN109861931A (zh) 一种高速以太网交换芯片的存储冗余系统
CN101308477A (zh) 系统总线的防死锁方法、装置及片上系统
EP3077914A1 (en) System and method for managing and supporting virtual host bus adaptor (vhba) over infiniband (ib) and for supporting efficient buffer usage with a single external memory interface
WO2023246843A1 (zh) 数据处理方法、装置及系统
CN110519180B (zh) 网卡虚拟化队列调度方法及系统
CN100469055C (zh) 转发报文的处理方法及处理装置
CN103731364B (zh) 基于x86平台实现万兆大流量快速收包的方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20170417

Address after: 430000 Wuhan, East Lake, New Technology Development Zone, Optics Valley Avenue, No. 77, Optics Valley financial background service center, building, No. two, 4-5 floor, No. 3, B5

Patentee after: Wuhan Jian Tong Information Technology Co., Ltd

Address before: 430000 Hubei city of Wuhan province Kuanshan East Lake development zone two Road No. 1 international business center of Wuhan fisee science and Technology Co Ltd

Patentee before: Wuhan Fisee Technology Co., Ltd.

TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20191029

Address after: 430000 No.1 International Enterprise Center, Guanshan 2nd Road, Donghu Development Zone, Wuhan, Hubei Province

Patentee after: Wuhan Fisee Technology Co., Ltd.

Address before: 430000, Hubei Wuhan New Technology Development Zone, Optics Valley Road, East Lake, No. 77, Optics Valley finance backstage service center base, No. two, B5 building, No. 4-5, floor 3

Patentee before: Wuhan Jian Tong Information Technology Co., Ltd

TR01 Transfer of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20110518

Termination date: 20200509

CF01 Termination of patent right due to non-payment of annual fee