CN101135980A - 一种基于Linux操作***实现零拷贝的装置和方法 - Google Patents

一种基于Linux操作***实现零拷贝的装置和方法 Download PDF

Info

Publication number
CN101135980A
CN101135980A CNA2006101126835A CN200610112683A CN101135980A CN 101135980 A CN101135980 A CN 101135980A CN A2006101126835 A CNA2006101126835 A CN A2006101126835A CN 200610112683 A CN200610112683 A CN 200610112683A CN 101135980 A CN101135980 A CN 101135980A
Authority
CN
China
Prior art keywords
zero
copy
sign
packet
skb
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.)
Granted
Application number
CNA2006101126835A
Other languages
English (en)
Other versions
CN100464304C (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.)
Fortinet Inc
Original Assignee
Fortinet Information Technology Beijing 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 Fortinet Information Technology Beijing Co Ltd filed Critical Fortinet Information Technology Beijing Co Ltd
Priority to CNB2006101126835A priority Critical patent/CN100464304C/zh
Publication of CN101135980A publication Critical patent/CN101135980A/zh
Application granted granted Critical
Publication of CN100464304C publication Critical patent/CN100464304C/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明提出了一种基于Linux操作***实现零拷贝的装置,其中,包括:一零拷贝初始化模块,用于在内核中分配一段内核空间,将内核空间分配成多个数据块并进行标识;一网卡驱动模块,用于将接收到数据包发至内核空间的数据块中存放,在数据包的skb中记录数据块的标识,并将skb发送至协议栈;一协议栈,用于从网卡驱动模块接收并分析数据包的skb,获取数据块的标识;一标识缓存区,与协议栈连接并直接映射到用户进程模块,用于存储协议栈获取的数据块的标识;一用户进程模块,用于从直接映射的标识缓存区获取标识,根据标识从内核空间中对应的数据块中获取数据包,对数据包进行分析处理。此外,还提出了一种使用上述装置实现零拷贝的方法。

Description

一种基于Linux操作***实现零拷贝的装置和方法
技术领域
本发明涉及计算机网络的零拷贝的***与方法,特别是有关于一种基于Linux操作***实现零拷贝的***和方法。
背景技术
在Linux操作***中,通过网络套接字捕获和发送网络数据的流程如图1所示。
接收数据包过程:网卡通过DMA(Direct Memory Access)机制将网络数据包接收到内核空间。用户态进程通过调用套接字相关***调用来获取网络数据,该***调用将数据从内核空间复制到用户空间,用户进程通过读取用户空间的数据来获取网络数据包。
发送数据包过程:用户进程通过调用套接字相关***调用来发送网络数据。该***调用将数据从用户空间复制到内核空间,进行相应的封装,通过DMA映射到网卡的发送缓冲区,网卡将该数据发送出去。
在这种模式下,用户进程接收数据需要一次从内核空间到用户空间的数据复制,同样在发送数据时也需要一次从用户空间到内核空间的数据复制。在网络流量较大的情况下,大量的数据拷贝极大地消耗了CPU资源,降低了***性能。同时,用户进程通过***调用来收发数据,每接收和发送一个数据包需要两次***调用,较大的网络流量会触发大量的***调用。由于***调用涉及到上下文切换,接收一个数据包***需要从用户态切换到内核态,***调用返回后,再从内核态切换回用户态(发包同理),所以大量的***调用也会带来极大的性能损失。
为了解决用户进程捕获网络数据性能低下的问题,零拷贝技术得以出现。
零拷贝的基本思想是:数据包在从网卡到用户进程空间传递的过程中,避免数据拷贝和***调用,实现CPU的零参与,彻底消除CPU在这方面的消耗。
零拷贝的结构流程如图2所示。
零拷贝主要利用了内存映射技术和DMA传输技术。零拷贝首先在内核中分配一段内核空间,并将该内核空间映射到用户进程的用户空间当中,用户进程访问该用户空间即是对该内核空间的访问。零拷贝修改网卡驱动程序,控制网卡数据包接收,使网卡将网络数据包接收到零拷贝事先分配好的内核空间当中。
目前的零拷贝技术只支持数据由下至上的传输,主要应用于IDS(IntrusionDetection System,入侵检测***)等带监听性质的应用之中。由于IDS属于并行设备,只需要单向地获取网络数据,不需要对数据进行转发,所以现时的零拷贝技术是适用的。但对于同时需要捕获和转发网络数据的应用(如实现在用户态的IPS(Intrusion Protection System,入侵保护***)),现时的零拷贝技术就存在缺陷:不支持由上至下的数据转发。
零拷贝的数据包直接从网卡DMA到内核空间,用户进程通过内存映射获取网络数据。该数据报文没有经过TCP/IP协议栈的任何处理而直接到达用户进程,虽然这种方式能部分提高捕包性能,但不能同协议栈的功能相结合,比如,用户进程还需要对数据包进行额外的碎片重组和流重组(例如IDS)此外,也不能同基于Netfilter架构的应用相结合。
由于网卡设备和用户进程共享一段内核空间,它们对该内核空间的访问是异步的(生产者与消费者的关系),所以零拷贝需要有一种解决这种异步的同步方案(比如:对于用户进程正访问的区域网卡不能使用。同样,网卡正使用或没有读入数据的区域用户进程也不应该访问)。
零拷贝的基本功能是在网卡驱动中实现的,往往需要对网卡驱动的open、close、异常处理以及中断服务程序进行修改,其修改的工作量大。对网卡驱动的大量修改增大了零拷贝对网卡驱动的依赖。如果网卡驱动版本升级,则需要仔细对比新旧两个版本,查看新旧版本间的差异是否会对零拷贝产生影响。如果更换网卡,则需要在新的网卡驱动中将零拷贝机制再重新实现一遍。
发明内容
为解决上述问题,本发明的目的在于提出一种基于Linux操作***实现零拷贝的装置和方法。以实现基于Linux操作***的双向零拷贝
为实现上述目的,本发明提出了一种基于Linux操作***实现零拷贝的装置,其中,包括:
一零拷贝初始化模块,用于当零拷贝初始化时,在内核中分配一段内核空间,将所述内核空间分配成多个数据块,并对每个数据块进行标识;
一网卡驱动模块,用于将接收到数据包发至所述内核空间的数据块中存放,在所述数据包的skb中记录所述数据块的标识,并将所述skb发送至协议栈;
一协议栈,与所述网卡驱动模块连接,用于从网卡驱动模块接收并分析所述数据包的skb,获取所述数据块的标识;
一标识缓存区,与所述协议栈连接并直接映射到用户进程模块,用于存储所述协议栈获取的数据块的标识;
一用户进程模块,用于从直接映射的标识缓存区获取标识,根据所述标识从所述内核空间中对应的数据块中获取数据包,对所述数据包进行分析处理。
上述的基于Linux操作***实现零拷贝的装置,其中,所述协议栈还连接一skb缓存区,用于在所述协议栈处理完所述skb之后,存放所述skb。
上述的基于Linux操作***实现零拷贝的装置,其中,还包括:
一零拷贝接口,与所述用户进程模块和应用模块连接,还用于传输所述用户进程模块的控制信令完成所述用户进程模块对所述应用模块的调用。
上述的基于Linux操作***实现零拷贝的装置,其中,所述应用模块进一步包括:
一零拷贝转包模块,与所述零拷贝接口连接,用于当用户进程分析所述数据包需要被转发时,根据所述数据包的标识从所述skb缓存区中获取对应的skb,并根据所述skb转发所述数据包;
一零拷贝启动模块,与所述零拷贝接口连接,用于在所述用户进程控制所述初始化模块完成初始化后开启内核的零拷贝模式;和
一零拷贝关闭模块,与所述零拷贝接口连接,用于在所述用户进程模块退出后关闭内核的零拷贝模式。
上述的基于Linux操作***实现零拷贝的装置,其中,所述零拷贝接口还包括:
一字符设备文件,与所述用户进程模块连接,用于实现所述用户进程模块与零拷贝接口之间的通信,实现所述用户进程模块对所述零拷贝接口的调用。
为实现上述目的,本发明还提出了一种利用权利要求1所述装置实现零拷贝的方法,在内核中分配一段内核空间,存储网卡驱动模块接收的数据包,将所述内核空间映射到用户进程模块的用户空间中,其中,该方法还包括以下步骤:
步骤一,将所述内核空间分成多个数据块,并对每个数据块进行标识;
步骤二,当有数据包到达时,网卡驱动模块将所述数据包接收至所述内核空间的数据块中,并在所述数据包的skb中记录所述数据块的标识;
步骤三,将所述数据包的skb传递给协议栈进行处理,所述协议栈提取所述数据块的标识保存至所述标识缓存区中;
步骤四,用户进程模块从标识缓存区中读取标识信息,根据所述标识查找到内核空间中对应的数据块,从所述数据块中获取所存放的数据包进行分析和处理。
上述的实现零拷贝的方法,其中,所述步骤一中具体包括:
所述内核空间和用户空间对每个数据块采用相同的标识的步骤。
上述的实现零拷贝的方法,其中,所述步骤二还包括:
在所述数据包的skb中记录零拷贝标志的步骤。
上述的实现零拷贝的方法,其中,所述步骤三还包括:
步骤91,所述协议栈判断所述数据包的skb中是否有零拷贝标志;
步骤92,若有,则从所述skb中提取所述数据块的标识,保存至所述标识缓存区,并将所述skb保存至skb缓存区中,终止处理;若没有,则将所述数据包进行其他处理。
上述的实现零拷贝的方法,其中,所述步骤四具体包括以下步骤:
步骤101,对所述数据块中存放的数据包进行分析,判断所述数据包是否需要被转发或者被丢弃;
步骤102,若所述数据包需要被转发,则根据所述数据块标识从所述skb缓存区中获取对应的skb,并根据所述skb转发所述数据包;
步骤103,若所述数据包需要被丢弃,则将所述数据包的skb释放。
步骤104,若所述数据包不需要被转发或被丢弃,则将所述数据包进行其他处理。
上述的实现零拷贝的方法,其中,所述步骤102具体包括:
当有多个数据包需要被转发时,将所述多个数据包一次全部转发出去的步骤。
上述的实现零拷贝的方法,其中,还包括:
步骤121,设置可用标识存储模块,将未存放数据包的数据块标识存放在所述可用标识存储模块中;
步骤122,当网卡驱动模块存储数据包时,从所述可用标识存储模块中获取可用标识,并将所述数据包存放到所述可用标识对应的数据块中,将所述标识从所述可用标识存储模块中删除;
步骤123,当数据包需要被丢弃时,释放所述数据包的skb,并将存放所述数据包的数据块的标识存放到所述可用标识存储模块中。
上述的实现零拷贝的方法,其中,还包括:
步骤131,设置可用标识存储模块和已用标识存储模块,将已经存放数据包的数据块的标识存放在所述可用标识存储模块中,将未存放数据包的数据块的标识存放在所述未用标识存储模块中;
步骤132,当网卡驱动模块存储数据包时,从所述可用标识存储模块中获取可用标识,并将所述数据包存放到所述可用标识对应的数据块中,将所述标识从所述可用标识存储模块转存到所述已用标识存储模块中;
步骤133,当数据包需要被丢弃时,释放所述数据包的skb,并将存放所述数据包的数据块的标识由所述已用标识存储模块转存到所述可用标识存储模块中。
上述的实现零拷贝的方法,其中,进一步包括零拷贝初始化步骤,包括:
步骤141,分配一段内核空间,将所述内核空间分成多个数据块,并将每个数据块进行编号;
步骤1142,用户进程模块通过所述零拷贝接口调用所述内核空间的首地址和每个数据块的大小,按照相同的数据块大小将内核空间分成相同数量的数据块,并将每个数据块分配一致的编号。
上述的实现零拷贝的方法,其中,每个数据块中只存放一个数据包。
如上所述,本发明具有以下优点:
1.一个数据包从网卡->用户进程->网卡,在整个过程中没有数据的拷贝。实现了双向的数据零拷贝。
2.由于对网卡驱动模块和内核的修改较少(对于网卡驱动模块仅仅是替换一个函数名),且修改的部分在版本的变迁中比较稳定,所以该机制对网卡驱动模块和内核的具体版本不敏感。
3.该机制基于Netfilter架构,Netfilter是目前Linux内核网络重要的组成部分,是Linux网络防火墙以及Iptable实现的基础。在Netfilter中,协议栈每种协议都定义了若干个钩子(HOOK),而对应协议的数据包将按照一定的流程通过若干个钩子,每一个钩子都是处理函数挂载点。内核模块通过在各个钩子上注册处理函数,以操作经过该钩子的数据包,操作完成向内核返回处理策略。根据应用的需要灵活地将Hook函数注册到所需的钩子之上。由于钩子的注册透明于协议栈和其它注册在钩子上的应用,所以可以同协议栈以及协议栈中的应用协同工作。
4.对于传统的零拷贝所涉及到的用户进程与网卡驱动模块的同步问题则被转化为协议栈与网卡驱动模块的同步。零拷贝模块只需要简单地维护两个链:free_list和used_list。free_list存放未被使用的结点,used_lidt存放已被使用的结点。网卡驱动模块通过调用zero_allco_skb()从free_list链上摘下一个结点使用,并将该结点挂入used_list,当调用kfree_skb()释放一个零拷贝skb时,则将对应结点从used_list挂回free_list。这种实现避免了网卡驱动模块和用户进程对内存块的争用。
附图说明
图1是Linux操作***中通过网络套接字捕获和发送网络数据的示意图;
图2是公知技术中Linux操作***零拷贝的示意图;
图3是本发明Linux操作***双向零拷贝的示意图;
图4是本发明相关接口的示意图;
图5是本发明执行零拷贝程序的流程示意图。
具体实施方式
下面结合附图对本发明实施例进行详细说明。
图3是本发明Linux操作***双向零拷贝的示意图。如图所示,当实现零拷贝的装置被加载时,零拷贝初始化模块100首先会进行内核空间的初始化:在内核中分配零拷贝数据区、标识缓冲区150和skb缓冲区160,并对零拷贝数据区进行分块、标识。注册零拷贝接口180中的字符设备文件“zerocopy“,该文件是内核和用户进程的通信接口。零拷贝接口180实现了该文件的mmap()、ioctl()接口,此外,零拷贝初始化模块100根据应用需求注册Netfilter钩子。将零拷贝Hook函数挂接到对应钩子上。
网卡设备110与网卡驱动模块120连接,网卡驱动模块120通过网卡设备110接收数据包,本发明还增加了零拷贝驱动模块130,该零拷贝驱动模块130与网卡驱动模块120连接。网卡驱动模块130可以将接收到的数据包存放在内核空间的数据块中,同时在数据包的skb(struct_sk_buff类型的结构)中记录存放数据包的相关信息,包括数据块的标识、零拷贝的标志、数据块的起始地址、路由信息、分片信息和/或其它内存空间信息。
此外,本发明还通过协议栈140对数据包进行处理,网卡驱动模块120将存放的数据包的skb传递给了协议栈140,协议栈140对该skb进行处理,首先通过检查skb中是否存在零拷贝标志,判断该数据包是否属于零拷贝数据包,如果存在,则从该skb中提取数据块的标识,如果不存在,则对数据包继续进行其它流程处理。
本发明内核中还设置有标识缓存区150和skb缓存区160,协议栈将从skb中获取的数据块标识存放在标识缓存区150中,同时将skb存放在skb缓存区160中,标识缓存区150将直接映射至用户进程模块170,用户进程模块170可以直接从标识缓存区150中获取数据块标识,根据标识从用户空间中直接找到对应的数据块,从数据块中获取存放的数据包并进行分析,获取的数据包可能需要被转发或者被丢弃,用户进程模块170将根据分析后的结果,发出相关指令,该指令通过内核中设置的零拷贝接口180发送相关模块进行处理,零拷贝接口 180与协议栈140和skb缓存区160分别连接,当数据包需要被转发时,零拷贝接口180将会调用skb缓存区160获取数据包的skb,根据该skb中的相关信息,通过协议栈140转发数据包。
skb是struct sk buff类型的结构,协议栈140通过该结构来管理网络数据包,通过此结构在网卡驱动模块120、协议栈140各层传递控制和数据信息。它是协议栈140的核心数据结构。由于考虑到内核协议栈的实现对该结构的高依赖性,所以本发明对该结构进行了扩展,以便同原有的内核协议栈机制相容。具体的扩充为:在该结构中增加两个成员unsignd short zero_flag和unsigned intZero_index。
协议栈140中每个数据包都对应一个skb结构变量,通过alloc_akb()获取(网卡驱动模块则是通过dev_alloc_skb()函数获取,dev_alloc_skb()是对alloc_skb()的进一步封装),通过kfree_skb()函数来释放。
skb中存放了该数据包相关的路由信息、分片信息、数据包各层头部地址以及该skb对应的内核空间信息(该空间用于存放数据包)。
通常情况下,网卡驱动模块120调用dev_alloc_skb()为即将收到的数据包分配skb。同样,用户态程序调用socket套接字发送数据时,协议栈也会通过调用alloc_skb()来为发送的数据分配skb。当数据包从网卡驱动模块120进入,经协议栈140处理到达目的地(用户进程或被转发)后,该数据包生命终止,协议栈140调用kfree_skb()来释放该包对应的skb结构以及内核空间。
在本发明的实施例中,零拷贝驱动模块130即是以dev_alloc_skb()为蓝本实现了一个功能类似的函数zero_alloc_skb(),并修改网卡驱动模块120,将网卡驱动模块120中所有对dev_alloc_skb()函数的调用替换成对zero_alloc_skb()函数的调用。通过zero_alloc_skb()函数所获得的skb为采用零拷贝机制的skb,它使用零拷贝的空间。
zero_alloc_skb()函数,与dev_alloc_skb()函数主要不同在于内核空间的分配:zero_alloc_skb()函数用零拷贝的数据块来初始化skb的head指针(从free_list上取),而不是调用kmalloc()数据来动态获取内核空间。同时,将该零拷贝的数据块的标识填入skb的unsigned int zero_index,并将skb的unsigned intzero_flag打上零拷贝标志。最后将零拷贝数据块的标识从free_list移到used_list上,防止被争用。
由于***存在两种类型的skb(分别通过alloc_skb()函数和zero_alloc_skb()函数获得),所以必须对其加以区分,从而进行不同的操作:属于零拷贝机制的skb应该按零拷贝的机制来管理和释放,而***自身的skb则按***原来的流程处理。unsignd short zero_flag成员就是用于区分该skb是否基于零拷贝机制。
一个属于零拷贝机制的skb对应一个零拷贝数据块。如以前的文档所描述的那样,零拷贝内核空间的数据块都有自己的标识,比如,如果零拷贝内核空间为1M字节,一个数据块大小为2048字节,那么该内核空间被分成512块,数据块的标识依次从0到511。通过具体数据块的标识结合该内核空间的首地址,可以计算出该数据块的地址。unsigned int zero_index成员就是用于存放该标识。
零拷贝机制通过标识来管理零拷贝空间的数据块,每个数据块都唯一对应一个标识。***中设置了可用标识存储模块free_list和已用标识存储模块used_list两个模块。可用标识存储模块free_list存放可用数据块对应的标识,已用标识存储模块used_list则存放已使用的数据块对应的标识。初始状态所有的标识都存放于free_list链上,当一个数据块被使用后,其对应的标识从free_list链移到used_list链。当一个数据包被释放后,该数据包对应的标识就从已用标识存储模块used_list移到可用标识存储模块free_list链上。
此外,***中还可以只设置可用标识存储模块free_list,用于存放可用数据块对应的标识,初始状态时,所有的标识都存放于free_list链上,当一个数据块被使用时,则将对应的标识从可用标识存储模块free_list链上删除,当一个数据包被丢弃,该数据包skb被释放后,该数据包对应的标识存放到可用标识存储模块free_list中。
在初始化阶段,首先在内核中分配一段内核空间,将其映射到用户进程的用户空间当中。用户进程访问该用户空间即是对内核空间的访问。然后将该空间划分成一个一个2k(该值由网卡的MTU(Maximum Transmission Unit,最大传输单元)决定)的数据块,并对每个数据块进行标识,内核空间和用户空间采用一致的标识,同时记录下各个数据块的起始地址。这些数据块用于网卡的数据接收,一个数据块存放一个网络数据包。
在Linux体系结构中,网卡驱动模块120通过调用dev_alloc_skb()函数来获取skb以及用于收包的内核空间(由skb的head成员指向)。由于需要网卡将网络数据包接收到指定的空间当中,所以通过修改dev_alloc_skb()函数,实现了一个功能类似的函数:zero_alloc_skb()函数。该函数与dev_alloc_skb()的不同之处在于:
zero_alloc_skb()函数用预先分配好的内核数据块来初始化skb,同时将该数据块的标识填入skb的zero_index成员当中,并将该skb的zero_flag打上零拷贝标记,而dev_alloc_skb()函数则是通过调用kmalloc()函数来动态获取空间(kmalloc()函数用于分配一段物理地址连续的内核空间)。
Linux操作***通过kfree_skb()函数来释放一个skb及其对应的空间。对于打上零拷贝标记的数据包,由于其空间是零拷贝预先分配好的,所以不能让其释放。因此,需要对***的kfree_skb()函数进行修改,使其区别释放零拷贝和协议栈的数据包:对于含有零拷贝标志的数据包,只释放其skb结构,不释放其对应的内核空间,而对于协议栈的数据包,则按内核原来的流程释放。
网卡驱动模块120通过调用zero_alloc_skb()函数来获取skb以及用于接收数据包的零拷贝空间。
当有数据包到达网卡时,网卡驱动模块120通过DMA机制将数据包接收到该空间之中。接着,网卡设备触发硬件中断,进入网卡中断服务程序。网卡中断服务程序完成相关操作后,触发收包软中断,将该包对应的skb递送给协议栈140处理。
协议栈140对数据包进行处理,数据包依次流经钩子141,当通过零拷贝所挂接的钩子141时,零拷贝Hook函数被调用,该函数通过查看skb的zero_flag成员来判断此包是否是属于零拷贝的数据包,如果不是则返回NF_ACCEPT放行,否则取出skb的zero_index标识,将其填入标识缓存区150中(该标识缓存区150在零拷贝初始化阶段被分配且被映射给用户进程,其结构为一个单向循环队列),并将此skb存入skb缓存区160之中,最后返回NF_STOLEN,数据包不再向后传递。
NF_ACCEPT和NF_STOLEN这两个符号是协议栈140定制的,属于Netfilter体系结构。挂于钩子141上的Hook函数需要按照与协议栈的约定返回对应的状态,以便告知协议栈140如何处理该数据包。NF_ACCEPT和NF_STOLEN是其中的两个状态。返回NF_ACCEPT表示Hook函数同意该数据包继续以后的流程。返回NF_STOLEN则告知协议栈140不再关心该数据包,全全交由Hook函数处理。
图4是本发明相关零拷贝内核接口的示意图。如图所示,本发明要实现双向零拷贝,还需要在内核中实现对应的接口供用户进程调用。在本发明的实施例中,零拷贝接口180包括mmap()接口和ioctl()接口,通过mmap()接口对内核空间进行映射,而通过ioctl()对内核空间中数据进行相应处理,零拷贝接口180中的字符设备文件(/dev/zerocopy)在用户态中负责与用户进程模块进行通信。mmap()主要用于将该内核空间映射到用户进程模块170中的空间中,用户进程模块170通过调用/dev/zerocopy的mmap()来将内核零拷贝空间映射到自身的用户空间当中。mmap()不负责分配内核零拷贝空间,该空间是在零拷贝内核模块初始化阶段分配的。而ioctl()主要控制应用模块完成相应操作,包括零拷贝转包模块210、零拷贝启动模块220和零拷贝关闭模块230。下面将详细说明上述各个模块的具体实现方式和功用。
在本发明的实施例中,零拷贝接口180采用了一个约定的字符设备的ioctl接口来实现。并通过在初始化过程中注册一个字符设备文件,名称为“zerocopy”,实现该设备文件的mmap()和ioctl()接口。用户态进程模块170通过访问“/dev/zerocopy”设备文件来完成对相关接口的调用。
mmap()接口将零拷贝的内核空间映射到用户进程的空间当中,用户进程模块170通过调用mmap()函数能得到映射空间的首地址。根据该首地址和约定的数据块大小,使用与内核零拷贝初始化相同的计算方法,能对该空间进行数据块分割及标识。由于计算方法一致,所以得到的标识也同内核一致。
零拷贝启动模块220(zero_up()),在用户进程模块170完成初始化后会调用该函数,开启内核的零拷贝模式。
零拷贝关闭模块230(zero_down()),在当用户进程模块170退出时会调用该函数,关闭内核的零拷贝模式。
零拷贝数据转包模块210(sendpkt()),当用户进程通过调用该函数来转发数据包(如果Hook函数挂于包转发的钩子上),该函数的参数为一组数据包标识。该函数通过标识从skb缓存区160中取出数据包对应的skb,并将该skb挂回钩子141,继续以后的流程。
用户进程从标识缓存区150中读取标识信息,通过该标识索引出对应的数据块,对该数据块中的数据包进行分析。分析完毕,如果该数据包需要被转发或被丢弃,则将该标识对应的状态设置为1或-1,最后通过零拷贝接口180调用内核中的零拷贝转包模块210对数据进行转发。零拷贝转包模块210根据标识从skb缓存区160中取出对应的skb,并根据标识的状态转发数据包,如果为丢弃状态则调用kfree_skb()将该skb释放,否则将该数据包挂回对应的钩子141,继续其后面的流程。为了减少用户进程发包所带来的***调用次数,转包模块一次可以转发多个数据包。
当一个数据包的生命周期终结时,协议栈140调用kfree_skb()函数将数据包对应的内核空间以及skb结构销毁。由于存在零拷贝模式的skb,所以需要对***原有的kfree_skb()函数进行修改,以便对零拷贝的数据包进行区分释放。具体处理步骤:
判断skb的zero_flag标志,如果标记为零拷贝数据包则不调用kfree()来释放skb->head对应的空间(kfree()对应于kmalloc());同时将该空间的索引从used_list链挂回free_list链。如果该数据包对应的skb不为零拷贝模式,则按照协议栈140原来的流程进行操作。
基于协议栈140的零拷贝机制可以被实现成可装载的内核module形式。Linux内核提供对可装载内核模块(Loadable Kernel Module)的支持,这种方式使得用户可以编写自己的module(模块)并将其加载到内核中运行。
具体实施如下,如图5所示:
零拷贝模块:zero_copy.ko
用户应用:user
实施:
步骤S501:insmod zero_copy.ko
将模块挂入内核,此时内核支持零拷贝机制,但零拷贝模式仍未启用,内核对数据包的处理保持原来的流程。
步骤S502:mknod/dev/zerocopy c 254 0
零拷贝接口180在内核中实现了该字符设备的ioctl和mmap,user通过此设备文件同内核中的零拷贝接口180通信
步骤S503:./user
运行用户进程,并启用零拷贝模式。
步骤S504:killall-s 2 user
向user进程发送SIGINT信号,user捕获该信号,执行关闭内核零拷贝模式操作,并终止自身运行,执行完操作后会退出。
步骤S505:rmmod zero_copy
卸载零拷贝模块,内核不再支持零拷贝机制。
当然,本发明还可有其它多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的普通技术人员当可根据本发明做出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。

Claims (15)

1.一种基于Linux操作***实现零拷贝的装置,其特征在于,包括:
一零拷贝初始化模块,用于当零拷贝初始化时,在内核中分配一段内核空间,将所述内核空间分配成多个数据块,并对每个数据块进行标识;
一网卡驱动模块,用于将接收到数据包发至所述内核空间的数据块中存放,在所述数据包的skb中记录所述数据块的标识,并将所述skb发送至协议栈;
一协议栈,与所述网卡驱动模块连接,用于从网卡驱动模块接收并分析所述数据包的skb,获取所述数据块的标识;
一标识缓存区,与所述协议栈连接并直接映射到用户进程模块,用于存储所述协议栈获取的数据块的标识;
一用户进程模块,用于从直接映射的标识缓存区获取标识,根据所述标识从所述内核空间中对应的数据块中获取数据包,对所述数据包进行分析处理。
2.根据权利要求1所述的基于Linux操作***实现零拷贝的装置,其特征在于,所述协议栈还连接一skb缓存区,用于在所述协议栈处理完所述skb之后,存放所述skb。
3.根据权利要求2所述的基于Linux操作***实现零拷贝的装置,其特征在于,还包括:
一零拷贝接口,与所述用户进程模块和应用模块连接,还用于传输所述用户进程模块的控制信令完成所述用户进程模块对所述应用模块的调用。
4.根据权利要求3所述的基于Linux操作***实现零拷贝的装置,其特征在于,所述应用模块进一步包括:
一零拷贝转包模块,与所述零拷贝接口连接,用于当用户进程分析所述数据包需要被转发时,根据所述数据包的标识从所述skb缓存区中获取对应的skb,并根据所述skb转发所述数据包;
一零拷贝启动模块,与所述零拷贝接口连接,用于在所述用户进程控制所述初始化模块完成初始化后开启内核的零拷贝模式;和
一零拷贝关闭模块,与所述零拷贝接口连接,用于在所述用户进程模块退出后关闭内核的零拷贝模式。
5.根据权利要求3所述的基于Linux操作***实现零拷贝的装置,其特征在于,所述零拷贝接口还包括:
一字符设备文件,与所述用户进程模块连接,用于实现所述用户进程模块与零拷贝接口之间的通信,实现所述用户进程模块对所述零拷贝接口的调用。
6.一种利用权利要求1所述装置实现零拷贝的方法,在内核中分配一段内核空间,存储网卡驱动模块接收的数据包,将所述内核空间映射到用户进程模块的用户空间中,其特征在于,该方法还包括以下步骤:
步骤一,将所述内核空间分成多个数据块,并对每个数据块进行标识;
步骤二,当有数据包到达时,网卡驱动模块将所述数据包接收至所述内核空间的数据块中,并在所述数据包的skb中记录所述数据块的标识;
步骤三,将所述数据包的skb传递给协议栈进行处理,所述协议栈提取所述数据块的标识保存至所述标识缓存区中;
步骤四,用户进程模块从标识缓存区中读取标识信息,根据所述标识查找到内核空间中对应的数据块,从所述数据块中获取所存放的数据包进行分析和处理。
7.根据权利要求6所述的实现零拷贝的方法,其特征在于,所述步骤一中具体包括:
所述内核空间和用户空间对每个数据块采用相同的标识的步骤。
8.根据权利要求7所述的实现零拷贝的方法,其特征在于,所述步骤二还包括:
在所述数据包的skb中记录零拷贝标志的步骤。
9.根据权利要求8所述的实现零拷贝的方法,其特征在于,所述步骤三还包括:
步骤91,所述协议栈判断所述数据包的skb中是否有零拷贝标志;
步骤92,若有,则从所述skb中提取所述数据块的标识,保存至所述标识缓存区,并将所述skb保存至skb缓存区中,终止处理;若没有,则将所述数据包进行其他处理。
10.根据权利要求9所述的实现零拷贝的方法,其特征在于,所述步骤四具体包括以下步骤:
步骤101,对所述数据块中存放的数据包进行分析,判断所述数据包是否需要被转发或者被丢弃;
步骤102,若所述数据包需要被转发,则根据所述数据块标识从所述skb缓存区中获取对应的skb,并根据所述skb转发所述数据包;
步骤103,若所述数据包需要被丢弃,则将所述数据包的skb释放。
步骤104,若所述数据包不需要被转发或被丢弃,则将所述数据包进行其他处理。
11.根据权利要求10所述的实现零拷贝的方法,其特征在于,所述步骤102具体包括:
当有多个数据包需要被转发时,将所述多个数据包一次全部转发出去的步骤。
12.根据权利要求6或10所述的实现零拷贝的方法,其特征在于,还包括:
步骤121,设置可用标识存储模块,将未存放数据包的数据块标识存放在所述可用标识存储模块中;
步骤122,当网卡驱动模块存储数据包时,从所述可用标识存储模块中获取可用标识,并将所述数据包存放到所述可用标识对应的数据块中,将所述标识从所述可用标识存储模块中删除;
步骤123,当数据包需要被丢弃时,释放所述数据包的skb,并将存放所述数据包的数据块的标识存放到所述可用标识存储模块中。
13.根据权利要求6或10所述的实现零拷贝的方法,其特征在于,还包括:
步骤131,设置可用标识存储模块和已用标识存储模块,将已经存放数据包的数据块的标识存放在所述可用标识存储模块中,将未存放数据包的数据块的标识存放在所述未用标识存储模块中;
步骤132,当网卡驱动模块存储数据包时,从所述可用标识存储模块中获取可用标识,并将所述数据包存放到所述可用标识对应的数据块中,将所述标识从所述可用标识存储模块转存到所述已用标识存储模块中;
步骤133,当数据包需要被丢弃时,释放所述数据包的skb,并将存放所述数据包的数据块的标识由所述已用标识存储模块转存到所述可用标识存储模块中。
14.根据权利要求6所述的实现零拷贝的方法,其特征在于,进一步包括零拷贝初始化步骤,包括:
步骤141,分配一段内核空间,将所述内核空间分成多个数据块,并将每个数据块进行编号;
步骤1142,用户进程模块通过所述零拷贝接口调用所述内核空间的首地址和每个数据块的大小,按照相同的数据块大小将内核空间分成相同数量的数据块,并将每个数据块分配一致的编号。
15.根据权利要求6所述的实现零拷贝的方法,其特征在于,每个数据块中只存放一个数据包。
CNB2006101126835A 2006-08-29 2006-08-29 一种基于Linux操作***实现零拷贝的装置和方法 Active CN100464304C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB2006101126835A CN100464304C (zh) 2006-08-29 2006-08-29 一种基于Linux操作***实现零拷贝的装置和方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB2006101126835A CN100464304C (zh) 2006-08-29 2006-08-29 一种基于Linux操作***实现零拷贝的装置和方法

Publications (2)

Publication Number Publication Date
CN101135980A true CN101135980A (zh) 2008-03-05
CN100464304C CN100464304C (zh) 2009-02-25

Family

ID=39160089

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2006101126835A Active CN100464304C (zh) 2006-08-29 2006-08-29 一种基于Linux操作***实现零拷贝的装置和方法

Country Status (1)

Country Link
CN (1) CN100464304C (zh)

Cited By (52)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2010015142A1 (zh) * 2008-08-04 2010-02-11 中兴通讯股份有限公司 一种实现零拷贝发送流媒体数据的方法及***
CN101841470A (zh) * 2010-03-29 2010-09-22 东南大学 一种基于Linux的底层数据包的高速捕获方法
CN101917350A (zh) * 2010-09-13 2010-12-15 南京中兴特种软件有限责任公司 一种Linux下基于网卡驱动的零拷贝以太网报文捕获及发送的实现方法
CN101304373B (zh) * 2008-06-25 2011-03-02 中兴通讯股份有限公司 一种实现局域网内高效传输大块数据的方法及***
CN101267361B (zh) * 2008-05-09 2011-05-18 武汉飞思科技有限公司 一种基于零拷贝技术的高速网络数据包捕获方法
CN102075432A (zh) * 2011-01-25 2011-05-25 上海聚欣网络科技有限公司 一种用于发送及接收报文的方法、装置、设备及***
CN101718981B (zh) * 2009-11-03 2012-01-11 四川省电力工业调整试验所 一种分散控制***网络数据采样仪
CN102375789A (zh) * 2010-08-09 2012-03-14 上海中标软件有限公司 一种通用网卡非缓存的零拷贝方法及零拷贝***
CN102387212A (zh) * 2011-10-25 2012-03-21 曙光信息产业(北京)有限公司 一种机群节点间通信的方法
CN101409715B (zh) * 2008-10-22 2012-04-18 中国科学院计算技术研究所 一种利用InfiniBand网络进行通信的方法及***
CN102497385A (zh) * 2011-12-31 2012-06-13 曙光信息产业股份有限公司 一种网络流量审计方法及审计***
CN102508783A (zh) * 2011-10-18 2012-06-20 深圳市共进电子股份有限公司 一种避免数据混乱的内存回收方法
CN102638487A (zh) * 2011-03-02 2012-08-15 中国科学院地质与地球物理研究所 大型遥测地震仪高性能数据传输方法
CN102663276A (zh) * 2012-03-01 2012-09-12 上海大亚科技有限公司 Linux中提供用户空间信息摘要、加密和压缩统一接口的***及方法
CN101789959B (zh) * 2009-12-30 2013-05-08 北京天融信科技有限公司 一种多核***中的skb重用方法及装置
CN103617142A (zh) * 2013-09-09 2014-03-05 南京邮电大学 一种基于pf_ring的高速网络数据采集方法
CN103856474A (zh) * 2012-11-29 2014-06-11 北京千橡网景科技发展有限公司 用于网络数据处理的方法和装置
CN103870318A (zh) * 2012-12-11 2014-06-18 正文科技股份有限公司 非对称式处理的多核心***与其网络设备
CN103905420A (zh) * 2013-12-06 2014-07-02 北京太一星晨信息技术有限公司 一种协议栈和应用程序间传输数据的方法及装置
CN104011656A (zh) * 2011-12-22 2014-08-27 英特尔公司 使用直接数据路径架构来存储数据以降低能量消耗和改进性能
CN104111891A (zh) * 2013-04-19 2014-10-22 珠海扬智电子科技有限公司 电子装置及其数据存取方法
WO2014180397A1 (zh) * 2013-12-16 2014-11-13 中兴通讯股份有限公司 网络数据包的发送方法及装置
CN104239249A (zh) * 2014-09-16 2014-12-24 国家计算机网络与信息安全管理中心 Pci-e零拷贝dma数据传输方法
CN104679532A (zh) * 2013-11-27 2015-06-03 腾讯科技(深圳)有限公司 内核模块加载方法和装置
CN104796337A (zh) * 2015-04-10 2015-07-22 京信通信***(广州)有限公司 一种转发报文的方法及装置
CN104811391A (zh) * 2014-01-24 2015-07-29 中兴通讯股份有限公司 数据包的处理方法、装置及服务器
CN105162796A (zh) * 2015-09-24 2015-12-16 上海上讯信息技术股份有限公司 一种数据传输的方法与设备
CN105164980A (zh) * 2014-04-04 2015-12-16 华为技术有限公司 众核下网络数据的分发方法及***
WO2016078313A1 (zh) * 2014-11-20 2016-05-26 中兴通讯股份有限公司 数据写入方法及装置
CN105635045A (zh) * 2014-10-28 2016-06-01 北京启明星辰信息安全技术有限公司 一种基于驱动零拷贝模式***下的tcpdump抓包实现方法和装置
WO2016197659A1 (zh) * 2015-06-12 2016-12-15 中兴通讯股份有限公司 网络媒体流收包方法、装置及***
CN106330887A (zh) * 2016-08-22 2017-01-11 苏州华兴源创电子科技有限公司 一种用于多媒体中转服务的数据传输方法
CN106413004A (zh) * 2016-09-05 2017-02-15 上海斐讯数据通信技术有限公司 一种无线mac嗅探扫描方法及其装置
CN107302499A (zh) * 2017-06-26 2017-10-27 北京赛特斯信息科技股份有限公司 无需拷贝报文缓存的nfv协议报文收发方法
CN108804244A (zh) * 2018-05-28 2018-11-13 北京小米移动软件有限公司 数据发送方法、装置及存储介质
CN108875421A (zh) * 2018-04-28 2018-11-23 置富科技(深圳)股份有限公司 拷贝机、数据管理方法、存储介质及数据销毁、备份设备
WO2018223302A1 (zh) * 2017-06-07 2018-12-13 华为技术有限公司 数据的重组方法和装置
CN109413106A (zh) * 2018-12-12 2019-03-01 中国航空工业集团公司西安航空计算技术研究所 一种tcp/ip协议栈实现方法
CN109962885A (zh) * 2017-12-22 2019-07-02 北京安天网络安全技术有限公司 物联网设备的网络安全防护方法及物联网设备
CN110391999A (zh) * 2018-04-18 2019-10-29 海能达通信股份有限公司 一种数据通信方法及***
CN110826065A (zh) * 2019-10-30 2020-02-21 亚信科技(成都)有限公司 一种扫描方法、装置及***
CN111124948A (zh) * 2019-12-04 2020-05-08 北京东土科技股份有限公司 嵌入式***的网络数据抓包方法及***、存储介质
CN111124506A (zh) * 2019-11-12 2020-05-08 中国电子科技集团公司第三十研究所 基于应用层的运算卡驱动实现方法
CN111539010A (zh) * 2020-06-16 2020-08-14 北京明朝万达科技股份有限公司 剪贴板控制方法、装置、电子设备及计算机可读存储介质
CN111857731A (zh) * 2020-07-31 2020-10-30 广州锦行网络科技有限公司 一种基于linux平台的流量保存方法
CN112835775A (zh) * 2021-01-29 2021-05-25 许继集团有限公司 模拟网络通讯方法、装置及继电保护装置仿真测试***
CN113127183A (zh) * 2019-12-30 2021-07-16 阿里巴巴集团控股有限公司 一种用户态协议栈中的内存分配方法和装置
CN114244917A (zh) * 2020-08-31 2022-03-25 华为技术有限公司 一种数据传输方法、装置及***
CN114338647A (zh) * 2021-12-16 2022-04-12 中孚安全技术有限公司 一种基于国产操作***的轻量级文件传输方法及***
CN114610660A (zh) * 2022-03-01 2022-06-10 Oppo广东移动通信有限公司 控制接口数据的方法、装置及***
CN115103036A (zh) * 2022-05-20 2022-09-23 中国科学院计算技术研究所 一种高效的tcp/ip数据报处理方法及***
CN116166508A (zh) * 2023-04-18 2023-05-26 天津市天河计算机技术有限公司 Io数据分析方法、装置、设备、存储介质及***

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5931925A (en) * 1996-12-02 1999-08-03 International Business Machines Corporation System and method for efficiently transferring datastreams in a multimedia system
CN1312577C (zh) * 2003-05-07 2007-04-25 中兴通讯股份有限公司 一种实现通信过程零拷贝消息队列的方法
US7428730B2 (en) * 2003-12-15 2008-09-23 Intel Corporation Software development environment
CN100486248C (zh) * 2005-11-11 2009-05-06 华中科技大学 一种实时环境下的零拷贝通信方法

Cited By (76)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101267361B (zh) * 2008-05-09 2011-05-18 武汉飞思科技有限公司 一种基于零拷贝技术的高速网络数据包捕获方法
CN101304373B (zh) * 2008-06-25 2011-03-02 中兴通讯股份有限公司 一种实现局域网内高效传输大块数据的方法及***
RU2477930C2 (ru) * 2008-08-04 2013-03-20 ЗетТиИ Корпорейшн Способ и система для передачи потоковых мультимедийных данных с нулевым копированием
WO2010015142A1 (zh) * 2008-08-04 2010-02-11 中兴通讯股份有限公司 一种实现零拷贝发送流媒体数据的方法及***
CN101409715B (zh) * 2008-10-22 2012-04-18 中国科学院计算技术研究所 一种利用InfiniBand网络进行通信的方法及***
CN101718981B (zh) * 2009-11-03 2012-01-11 四川省电力工业调整试验所 一种分散控制***网络数据采样仪
CN101789959B (zh) * 2009-12-30 2013-05-08 北京天融信科技有限公司 一种多核***中的skb重用方法及装置
CN101841470B (zh) * 2010-03-29 2012-10-10 东南大学 一种基于Linux的底层数据包的高速捕获方法
CN101841470A (zh) * 2010-03-29 2010-09-22 东南大学 一种基于Linux的底层数据包的高速捕获方法
CN102375789B (zh) * 2010-08-09 2014-05-28 中标软件有限公司 一种通用网卡非缓存的零拷贝方法及零拷贝***
CN102375789A (zh) * 2010-08-09 2012-03-14 上海中标软件有限公司 一种通用网卡非缓存的零拷贝方法及零拷贝***
CN101917350B (zh) * 2010-09-13 2012-08-15 南京中兴特种软件有限责任公司 一种Linux下基于网卡驱动的零拷贝以太网报文捕获及发送的实现方法
CN101917350A (zh) * 2010-09-13 2010-12-15 南京中兴特种软件有限责任公司 一种Linux下基于网卡驱动的零拷贝以太网报文捕获及发送的实现方法
CN102075432A (zh) * 2011-01-25 2011-05-25 上海聚欣网络科技有限公司 一种用于发送及接收报文的方法、装置、设备及***
CN102075432B (zh) * 2011-01-25 2012-11-28 上海聚欣网络科技有限公司 一种用于发送及接收报文的方法、装置、设备及***
CN102638487B (zh) * 2011-03-02 2015-09-16 中国科学院地质与地球物理研究所 大型遥测地震仪高性能数据传输方法
CN102638487A (zh) * 2011-03-02 2012-08-15 中国科学院地质与地球物理研究所 大型遥测地震仪高性能数据传输方法
CN102508783A (zh) * 2011-10-18 2012-06-20 深圳市共进电子股份有限公司 一种避免数据混乱的内存回收方法
CN102508783B (zh) * 2011-10-18 2014-04-09 深圳市共进电子股份有限公司 一种避免数据混乱的内存回收方法
CN102387212A (zh) * 2011-10-25 2012-03-21 曙光信息产业(北京)有限公司 一种机群节点间通信的方法
CN104011656A (zh) * 2011-12-22 2014-08-27 英特尔公司 使用直接数据路径架构来存储数据以降低能量消耗和改进性能
CN102497385A (zh) * 2011-12-31 2012-06-13 曙光信息产业股份有限公司 一种网络流量审计方法及审计***
CN102663276A (zh) * 2012-03-01 2012-09-12 上海大亚科技有限公司 Linux中提供用户空间信息摘要、加密和压缩统一接口的***及方法
CN102663276B (zh) * 2012-03-01 2014-10-15 上海大亚科技有限公司 Linux中提供用户空间信息摘要、加密和压缩统一接口的***及方法
CN103856474A (zh) * 2012-11-29 2014-06-11 北京千橡网景科技发展有限公司 用于网络数据处理的方法和装置
CN103870318A (zh) * 2012-12-11 2014-06-18 正文科技股份有限公司 非对称式处理的多核心***与其网络设备
CN103870318B (zh) * 2012-12-11 2017-05-24 正文科技股份有限公司 非对称式处理的多核心***与其网络设备
CN104111891B (zh) * 2013-04-19 2017-05-24 珠海扬智电子科技有限公司 电子装置及其数据存取方法
CN104111891A (zh) * 2013-04-19 2014-10-22 珠海扬智电子科技有限公司 电子装置及其数据存取方法
CN103617142A (zh) * 2013-09-09 2014-03-05 南京邮电大学 一种基于pf_ring的高速网络数据采集方法
CN103617142B (zh) * 2013-09-09 2017-03-15 南京邮电大学 一种基于pf_ring的高速网络数据采集方法
CN104679532B (zh) * 2013-11-27 2018-12-11 腾讯科技(深圳)有限公司 内核模块加载方法和装置
CN104679532A (zh) * 2013-11-27 2015-06-03 腾讯科技(深圳)有限公司 内核模块加载方法和装置
CN103905420B (zh) * 2013-12-06 2017-10-10 北京太一星晨信息技术有限公司 一种协议栈和应用程序间传输数据的方法及装置
CN103905420A (zh) * 2013-12-06 2014-07-02 北京太一星晨信息技术有限公司 一种协议栈和应用程序间传输数据的方法及装置
CN104717189A (zh) * 2013-12-16 2015-06-17 中兴通讯股份有限公司 网络数据包的发送方法及装置
WO2014180397A1 (zh) * 2013-12-16 2014-11-13 中兴通讯股份有限公司 网络数据包的发送方法及装置
CN104811391B (zh) * 2014-01-24 2020-04-21 中兴通讯股份有限公司 数据包的处理方法、装置及服务器
CN104811391A (zh) * 2014-01-24 2015-07-29 中兴通讯股份有限公司 数据包的处理方法、装置及服务器
CN105164980A (zh) * 2014-04-04 2015-12-16 华为技术有限公司 众核下网络数据的分发方法及***
CN104239249A (zh) * 2014-09-16 2014-12-24 国家计算机网络与信息安全管理中心 Pci-e零拷贝dma数据传输方法
CN104239249B (zh) * 2014-09-16 2017-08-04 国家计算机网络与信息安全管理中心 Pci‑e零拷贝dma数据传输方法
CN105635045B (zh) * 2014-10-28 2019-12-13 北京启明星辰信息安全技术有限公司 一种基于驱动零拷贝模式***下的tcpdump抓包实现方法和装置
CN105635045A (zh) * 2014-10-28 2016-06-01 北京启明星辰信息安全技术有限公司 一种基于驱动零拷贝模式***下的tcpdump抓包实现方法和装置
WO2016078313A1 (zh) * 2014-11-20 2016-05-26 中兴通讯股份有限公司 数据写入方法及装置
CN104796337A (zh) * 2015-04-10 2015-07-22 京信通信***(广州)有限公司 一种转发报文的方法及装置
WO2016197659A1 (zh) * 2015-06-12 2016-12-15 中兴通讯股份有限公司 网络媒体流收包方法、装置及***
CN105162796A (zh) * 2015-09-24 2015-12-16 上海上讯信息技术股份有限公司 一种数据传输的方法与设备
CN106330887B (zh) * 2016-08-22 2019-10-29 苏州华兴源创科技股份有限公司 一种用于多媒体中转服务的数据传输方法
CN106330887A (zh) * 2016-08-22 2017-01-11 苏州华兴源创电子科技有限公司 一种用于多媒体中转服务的数据传输方法
CN106413004A (zh) * 2016-09-05 2017-02-15 上海斐讯数据通信技术有限公司 一种无线mac嗅探扫描方法及其装置
WO2018223302A1 (zh) * 2017-06-07 2018-12-13 华为技术有限公司 数据的重组方法和装置
CN107302499A (zh) * 2017-06-26 2017-10-27 北京赛特斯信息科技股份有限公司 无需拷贝报文缓存的nfv协议报文收发方法
CN107302499B (zh) * 2017-06-26 2020-12-18 北京赛特斯信息科技股份有限公司 无需拷贝报文缓存的nfv协议报文收发方法
CN109962885A (zh) * 2017-12-22 2019-07-02 北京安天网络安全技术有限公司 物联网设备的网络安全防护方法及物联网设备
CN110391999A (zh) * 2018-04-18 2019-10-29 海能达通信股份有限公司 一种数据通信方法及***
CN110391999B (zh) * 2018-04-18 2022-12-16 海能达通信股份有限公司 一种数据通信方法及***
CN108875421A (zh) * 2018-04-28 2018-11-23 置富科技(深圳)股份有限公司 拷贝机、数据管理方法、存储介质及数据销毁、备份设备
CN108804244A (zh) * 2018-05-28 2018-11-13 北京小米移动软件有限公司 数据发送方法、装置及存储介质
CN108804244B (zh) * 2018-05-28 2021-01-01 北京小米移动软件有限公司 数据发送方法、装置及存储介质
CN109413106A (zh) * 2018-12-12 2019-03-01 中国航空工业集团公司西安航空计算技术研究所 一种tcp/ip协议栈实现方法
CN110826065A (zh) * 2019-10-30 2020-02-21 亚信科技(成都)有限公司 一种扫描方法、装置及***
CN111124506A (zh) * 2019-11-12 2020-05-08 中国电子科技集团公司第三十研究所 基于应用层的运算卡驱动实现方法
CN111124948A (zh) * 2019-12-04 2020-05-08 北京东土科技股份有限公司 嵌入式***的网络数据抓包方法及***、存储介质
CN113127183A (zh) * 2019-12-30 2021-07-16 阿里巴巴集团控股有限公司 一种用户态协议栈中的内存分配方法和装置
CN113127183B (zh) * 2019-12-30 2024-06-14 阿里巴巴集团控股有限公司 一种用户态协议栈中的内存分配方法和装置
CN111539010A (zh) * 2020-06-16 2020-08-14 北京明朝万达科技股份有限公司 剪贴板控制方法、装置、电子设备及计算机可读存储介质
CN111539010B (zh) * 2020-06-16 2023-09-01 北京明朝万达科技股份有限公司 剪贴板控制方法、装置、电子设备及计算机可读存储介质
CN111857731A (zh) * 2020-07-31 2020-10-30 广州锦行网络科技有限公司 一种基于linux平台的流量保存方法
CN114244917A (zh) * 2020-08-31 2022-03-25 华为技术有限公司 一种数据传输方法、装置及***
CN112835775A (zh) * 2021-01-29 2021-05-25 许继集团有限公司 模拟网络通讯方法、装置及继电保护装置仿真测试***
CN112835775B (zh) * 2021-01-29 2024-03-01 许继集团有限公司 模拟网络通讯方法、装置及继电保护装置仿真测试***
CN114338647A (zh) * 2021-12-16 2022-04-12 中孚安全技术有限公司 一种基于国产操作***的轻量级文件传输方法及***
CN114610660A (zh) * 2022-03-01 2022-06-10 Oppo广东移动通信有限公司 控制接口数据的方法、装置及***
CN115103036A (zh) * 2022-05-20 2022-09-23 中国科学院计算技术研究所 一种高效的tcp/ip数据报处理方法及***
CN116166508A (zh) * 2023-04-18 2023-05-26 天津市天河计算机技术有限公司 Io数据分析方法、装置、设备、存储介质及***

Also Published As

Publication number Publication date
CN100464304C (zh) 2009-02-25

Similar Documents

Publication Publication Date Title
CN100464304C (zh) 一种基于Linux操作***实现零拷贝的装置和方法
CN111522653B (zh) 基于容器的网络功能虚拟化平台
CN101354693B (zh) 一种异构多核处理器的核间通信调度***及方法
US9935899B2 (en) Server switch integration in a virtualized system
US7769031B2 (en) Virtual machine system and method of network communication between virtual machines
US7653754B2 (en) Method, system and protocol that enable unrestricted user-level access to a network interface adapter
CN100438481C (zh) 分组处理装置
US9594842B2 (en) Hashing algorithm for network receive filtering
US8543729B2 (en) Virtualised receive side scaling
US8392565B2 (en) Network memory pools for packet destinations and virtual machines
US7529224B2 (en) Scheduler, network processor, and methods for weighted best effort scheduling
US7515596B2 (en) Full data link bypass
CN103154897B (zh) 用于电信网络应用的核抽象层
CN111431757B (zh) 虚拟网络的流量采集方法及装置
US8606975B2 (en) Managing interrupts in a virtualized input/output device supporting multiple hosts and functions
WO1998036536A1 (en) Method and apparatus for reclaiming buffers
EP0960502A1 (en) Method and apparatus for transmitting multiple copies by replicating data identifiers
US20040213243A1 (en) Transmission components for processing VLAN tag and priority packets supported by using single chip's buffer structure
US9069592B2 (en) Generic transport layer mechanism for firmware communication
CN110519180A (zh) 网卡虚拟化队列调度方法及***
US8194670B2 (en) Upper layer based dynamic hardware transmit descriptor reclaiming
CN114500418A (zh) 数据统计方法及相关装置
KR19980086588A (ko) Tcp/ip 소켓 애플리케이션을 이용한 시스템 자원 저감 툴
CN114301641A (zh) 一种适用于rdma网络的虚拟化安全网关***
CN111382091A (zh) 用于低周期存储器访问和附加功能的宽边随机访问存储器

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
ASS Succession or assignment of patent right

Owner name: FORTINET INC.

Free format text: FORMER OWNER: FORTINET INFORMATION TECHNOLOGY (BEIJING) CO., LTD.

Effective date: 20091002

C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20091002

Address after: California, USA

Patentee after: Fortinet, Inc.

Address before: Room 507, digital media building, No. 7 information road, Beijing, Haidian District

Patentee before: Fortinet,Inc.