CN103581181A - 数据包捕获、处理和发送方法及系统 - Google Patents

数据包捕获、处理和发送方法及系统 Download PDF

Info

Publication number
CN103581181A
CN103581181A CN201310517176.XA CN201310517176A CN103581181A CN 103581181 A CN103581181 A CN 103581181A CN 201310517176 A CN201310517176 A CN 201310517176A CN 103581181 A CN103581181 A CN 103581181A
Authority
CN
China
Prior art keywords
packet
buffering area
dma
processing
memory
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
CN201310517176.XA
Other languages
English (en)
Other versions
CN103581181B (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.)
Tsinghua University
Original Assignee
Tsinghua University
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 Tsinghua University filed Critical Tsinghua University
Priority to CN201310517176.XA priority Critical patent/CN103581181B/zh
Publication of CN103581181A publication Critical patent/CN103581181A/zh
Application granted granted Critical
Publication of CN103581181B publication Critical patent/CN103581181B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)
  • Information Transfer Systems (AREA)

Abstract

本发明提出一种数据包捕获、处理和发送方法,包括以下步骤:根据系统的页面大小分配一个预定大小的内存空间;将内存从内核空间映射到用户地址空间以使用户程序与内核空间的内存相关联;将接收到的数据包通过直接内存存取方式依次存储到内存空间中连续的多个DMA缓冲区;用户程序通过m个线程对N个DMA缓冲区中的数据包进行并行处理,其中m为处理器的内核数;依次将N个DMA缓冲区中处理完成的数据包向外发送。本发明实现了快速捕获、并行处理、线速发送的有机结合,从而解决了零拷贝技术不能及时处理捕获的数据包的缺点,为安全审计系统提供一定的技术支持。本发明还提出一种数据包捕获、处理和发送系统。

Description

数据包捕获、处理和发送方法及系统
技术领域
本发明涉及互联网网络安全技术领域,尤其涉及一种数据包捕获、处理和发送的方法及系统。
背景技术
随着互联网的快速发展,对互联网内容进行安全审计越来越重要,网络安全技术也得以快速的发展。现有的基于内容的安全审计主要分为数据包的捕获、过滤和处理。快速的数据包捕获机制是安全审计的前提,捕获数据包的速率直接影响整个系统的性能。
现有的数据包捕获机制有的基于软件实现,也有的基于硬件实现。随着千兆网卡的普及,虽然硬件的性能得以快速提升,但从性价比的角度,人们更多地考虑从软件的角度来实现高速的数据包的捕获。
现阶段比较成熟的软件实现方案有传统的libpcap数据包捕获机制、基于RF_RING的数据包捕获机制和基于零拷贝的快速数据包捕获。随着零拷贝的提出,千兆网络数据包的捕获已经得以实现,但是网络安全系统处理数据包的速率能否跟上捕获数据包的速率成为影响整个安全系统性能的关键。现有零拷贝技术的实现大多是基于nopage的内存映射方法,而这种机制很难满足并行处理数据包的要求,一旦系统无法及时地处理捕获的数据包,系统的内存很快就被耗尽。与此同时,现有的捕获机制都修改了网卡驱动程序,影响了系统正常的协议栈使用,使得捕获的数据包只能由特定的程序使用,系统其他的用户程序无法通过网卡正常收发数据包。
发明内容
本发明旨在至少解决上述技术问题之一。
为此,本发明的第一个目的在于提出一种数据包捕获、处理和发送方法。
本发明的第二个目的在于提出一种数据包捕获、处理和发送系统。
为了实现上述目的,本发明第一方面实施例的数据包捕获、处理和发送方法包括以下步骤:根据系统的页面大小分配一个预定大小的内存空间;将内存从内核空间映射到用户地址空间以使用户程序与所述内核空间的内存相关联;将接收到的数据包通过直接内存存取方式依次存储到所述内存空间中连续的多个DMA缓冲区;所述用户程序通过m个线程对N个DMA缓冲区中的数据包进行并行处理,其中m为处理器的内核数;依次将所述N个DMA缓冲区中处理完成的数据包向外发送。
根据本发明实施例的数据包捕获、处理和发送方法,实现了快速捕获、并行处理、线速发送的有机结合,从而解决了零拷贝技术不能及时处理捕获的数据包的缺点,为网络安全审计提供一定的技术支持。
在本发明的一个实施例中,所述根据系统的页面大小分配一个预定大小的内存空间,具体包括:初始化网卡驱动程序并创建字符设备;通过所述字符设备分配连续的多个整页内存以得到所述内存空间。
在本发明的一个实施例中,所述根据系统的页面大小分配一个预定大小的内存空间,还包括:对所述整页内存设置预留位以使所述整页内存不被置换。
在本发明的一个实施例中,在所述将接收到的数据包通过直接内存存取方式依次存储到所述内存空间中连续的多个DMA缓冲区之前,还包括:对所述多个DMA缓冲区建立流式DMA映射。
在本发明的一个实施例中,所述多个DMA缓冲区具有标志位,以便所述用户程序通过m个线程对N个DMA缓冲区中的数据包进行并行处理时,根据所述多个DMA缓冲区具有标志位对所述N个DMA缓冲区进行读、写操作。
为了实现上述目的,本发明第二方面实施例的数据包捕获、处理和发送系统,包括:分配模块,用于根据系统的页面大小分配一个预定大小的内存空间;映射模块,用于将内存从内核空间映射到用户地址空间以使用户程序与所述内核空间的内存相关联;存储控制模块,用于将接收到的数据包通过直接内存存取方式依次存储到所述内存空间中连续的多个DMA缓冲区;处理器,用于执行用户程序,以通过m个线程对N个DMA缓冲区中的数据包进行并行处理,其中m为处理器的内核数;发送模块,用于依次将所述N个DMA缓冲区中处理完成的数据包向外发送。
根据本发明实施例的数据包捕获、处理和发送系统,有效地解决了现有使用零拷贝技术的系统,在捕获数据包后无法在有限的时间内进行处理和发送,从而导致的丢包、内存资源消耗等问题。
在本发明的一个实施例中,所述分配模块用于对网卡驱动程序继续并初始化并创建字符设备,以及通过所述字符设备分配连续的多个整页内存以得到所述内存空间。
在本发明的一个实施例中,所述分配模块还包括:所述处理器还用于对所述整页内存设置预留位以使所述整页内存不被置换。
在本发明的一个实施例中,在所述将接收到的数据包通过直接内存存取方式依次存储到所述内存空间中连续的多个DMA缓冲区之前,所述存储控制模块还用于对所述多个DMA缓冲区建立流式DMA映射。
在本发明的一个实施例中,所述多个DMA缓冲区具有标志位,以便所述处理器执行所述用户程序,以通过m个线程对N个DMA缓冲区中的数据包进行并行处理时,根据所述多个DMA缓冲区具有标志位对所述N个DMA缓冲区进行读、写操作。
本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中,
图1是本发明实施例的数据包捕获、处理和发送方法流程示意图;
图2是数据包捕获过程示意图;
图3是DMA环大小对捕获速率的影响的仿真结果示意图;
图4是利用多线程对数据包并行处理过程示意图;
图5是采用单双线程处理数据包的速率对比结果示意图;和
图6是本发明实施例的数据包发送过程示意图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。相反,本发明的实施例包括落入所附加权利要求书的精神和内涵范围内的所有变化、修改和等同物。
在本发明的描述中,需要理解的是,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。此外,在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。
下面参考附图描述根据本发明第一方面实施例的数据包捕获、处理和发送方法。
图1是本发明的数据包捕获、处理和发送方法流程图。具体实现过程如下:
S1,在初始化网卡驱动程序时,创建字符设备,该字符设备根据系统的页面大小分配一个预定大小的内存空间。
具体地,在本发明的一个实施例中,初始化网卡驱动程序时,创建字符设备Datammap,Datammap在初始化过程中主要根据系统的页面大小(Linux默认为4K),通过调用__get_free_pages函数分配一个预定大小的内存空间。这样在一次性分配大块内存的同时,分配到的内存空间大小为页面大小的整数倍,使得每一页内存都可以分成2k的大小,便于数据包的接收。
S2,将内存从内核空间映射到用户地址空间以使用户程序与内核空间的内存相关联。
在内存空间分配成功后,数据包捕获程序过调用SetPageReserved函数,设置内存空间的每一页的页面预留位,保证这些页面不会从内存中被换出,在上述步骤完成后,将内存从内核空间映射到用户地址空间以使用户程序与内存空间相关联。
具体地,为实现内存从内核空间到用户地址空间的映射,Datammap还需注册一个mmap函数。用户程序通过open函数打开字符设备Datammap后,完成对mmap函数的调用,mmap函数通过调用remap_pfn_range函数实现数据包捕获设备的内存从内核空间到用户地址空间的映射,使得用户程序可以直接访问内核态的内存空间。这样通过内存分配和共享机制,实现了高速的数据包捕获。
S3,将接收到的数据包通过直接内存存取方式(Direct Memory Access,DMA)依次存储到内存空间中连续的多个DMA缓冲区。
事实上,在前述步骤中,字符设备Datammap中通过调用__get_free_pages分配的内存即DMA缓冲区。具体地,DMA缓冲区以页面为单位进行分配,网卡驱动程序在接收数据包时,设置网卡驱动程序可接收的数据包最大长度为1522字节,因此可以将分配的DMA缓冲区中的每页平均分成2k大小,用于数据包的接收。
在实际运行中,DMA缓冲区在接收数据包之前需要对该缓冲区进行流式DMA映射,即为DMA缓冲区生成一个网卡可访问的总线地址,该总线地址用dma_addr_t表示。由于在许多硬件中流式映射可以被优化,因此在网卡驱动程序中,调用dma_map_single函数为每个DMA缓冲区建立流式DMA映射。一般情况下,在建立流式DMA映射时,需要通过dma_map_single函数的direction参数来指示数据的流动方向,由于本发明实施例的数据是由网卡发出的,因此将该参数设置为DMA_FROM_DEVICE。在DMA缓冲区在建立流式DMA映射后,网卡驱动程序只可通过调用dma_unmap_single函数,才能访问该DMA缓冲区的内容。具体地,在数据包被发往上层协议栈之前调用dma_unmap_single函数,同时在该函数被调用后设置DMA缓冲区的标志位,通知用户程序读取该DMA缓冲区的内容。
在为每个DMA缓冲区设置标志位的同时对每一个DMA缓冲区进行编号,指示其:
(1)可写:所有的用户程序处理完毕,可以清空该DMA缓冲区,接收新的数据;
(2)可读:网卡数据已经接收完毕,应用层程序可以进行处理;
(3)可发:经过处理可以通过的数据包加入到发送队列中。
在本发明实施例的网卡驱动程序中,采用字符设备Datammap用于将接收数据包的DMA缓冲区映射给用户程序,使得用户程序可以直接访问这些DMA缓冲区。网卡驱动程序在接收数据包时,这些DMA缓冲区是可以被重复使用的,即DMA缓冲区中的数据会不断更新,因此用户程序和网卡驱动程序在对这些DMA缓冲区访问时需要保持同步性。将每个DMA缓冲区的最后8字节设置成标志位。网卡驱动程序在向DMA缓冲区写入数据后设置该标志位为可读,表明用户程序在判断一个DMA缓冲区的标志位为可读时,对这个DMA缓冲区进行访问,并在访问结束后设置标志位为可写,可实现对DMA缓冲区的重复使用,节省内存空间。
在DMA缓冲区建立流式DMA映射后,网卡驱动程序通过DMA缓冲环管理字符设备Datammap分配的DMA缓冲区,来实现数据包的传送。如图2所示,DMA缓冲环即用于接收数据包的rx_ring环(即流式DMA映射的虚拟地址,用于存储skb地址空间的指针),rx_ring环的每个节点都通过skb关联着一个2k大小的缓冲区。在正常模式下,网卡收到一个数据包后,会将这个数据包放入rx_ring环中的下一个可用缓冲区中,之后引发中断,通知驱动程序将这个数据包发给上层协议进行处理,并为rx_ring环分配一个新的DMA缓冲区。但是在NAPI模式中,网卡会一次接收多个数据包放入rx_ring环的可用缓冲区中,在引发中断后,一次性将这些数据包发送给上层协议栈进行处理。
为了更好地管理网卡驱动程序分配的skb,需在网卡驱动程序初始化后创建了一个可用skb池和一个在用skb池。可用skb池,为网卡驱动程序的rx_ring环提供skb,当rx_ring环的节点需要关联一个新的skb时,网卡驱动程序会从可用skb池中取出一个skb关联给rx_ring的节点。若在用skb池在创建后为空,当网卡驱动程序从可用skb池中取出skb时,将把该skb放入在用skb池中。网卡驱动程序在运行中,若可用skb池的skb被分配完,网卡驱动程序将从在用skb池中查找skb->data被处理过的skb,并将其重新初始化后放入可用skb池中。当网卡驱动程序向上层协议栈提交数据包时,网卡驱动程序还需要通过检查skb的users计数和skb->data的dataref计数判断skb是否仍被上层协议栈使用,在判断它们被上层协议栈使用完后,再将它们重新初始化放入可用skb池中。这样保证了上层协议栈对数据访问的一致性。
在实际运行中,DMA缓冲环的大小会影响到数据包捕获的性能,如图3所示,随着rx_ring环的大小的增加,数据包的捕获速率明显提高。直至rx_ring环大小超过8192时,数据包的捕获速率不再发生变化,此时网卡主要产生的是接收定时器中断。因此可以根据系统负荷和对数据包捕获速率的需求选择实际操作的DMA缓冲环的大小。
S4,用户程序通过m个线程对N个DMA缓冲区中的数据包进行并行处理。
数据包捕获成功后,需要对数据包进行分析检查和存储,因此CPU处理速率必须要跟上网卡的捕获速率。在现实中,单核CPU的处理能力极其有限,多核CPU的出现,提高了网络安全系统对数据包的处理速率。网络安全系统可以通过多核CPU的并行处理机制实现对捕获数据包的并行处理,以此提高对数据包的处理速率。
在本发明的实施例中,被捕获的数据包是按捕获顺序放入地址连续的内存中的,这样在多核系统中,数据包处理程序中可以根据多核CPU的核数m将共享内存虚拟的划分为m块,通过多线程方式实现m核对该共享内存的并行处理。假设共享内存有N个DMA缓冲区用于接收数据包,对它们从1到N进行编号,核Ci需要处理的DMA缓冲区可以表示为:
Cij=i+jm
其中,i∈[1,m],i为正整数,
Figure BDA0000403467570000061
j为正整数,
Figure BDA0000403467570000062
为向上取整。在多核CPU的核数为4时,包处理程序通过4个线程处理N个DMA缓冲区的方式如图4所示。在图4中,N个DMA缓冲区被划分为4个部分进行并行处理。以核C1为例,其处理的DMA缓冲区为{1,5,9,…,N-3},保证了多核CPU中每个核都能在最快时间内对捕获的数据包进行处理。经过仿真测试,表明本发明实施例的方法,多核CPU对数据包的处理速率有明显的优化效果,如图5所示。
S5,依次将N个DMA缓冲区中处理完成的数据包向外发送。
由于安全系统对用户来说是透明的,因此安全系统对数据包的捕获和处理不应该影响网络上其他设备的正常运行,所以安全系统必须要将合法的数据包重新发送回网络中。为保证数据包的正常发送,本发明的实施例采用线速发送模式,使其发送速率能够达到其对数据包的捕获速率,从而实现系统对网络流量的正常吞吐。如图6所示,数据包发送tx_ring和数据包捕获模块rx_ring共用了数据缓冲区(图中虚线框所示)。每一个数据缓冲区设置一个发送标志(1个字节),当缓冲区中存储的数据被“包处理程序”处理完成后,将发送标志位置为“可发送”。数据包发送模块轮询tx_ring(发送环,指向要发送的数据),当检查到有数据包可以发送时,会对数据包所在的缓冲区进行流式DMA映射,DMA机制会自动的将要发送的数据包传送到网卡的发送缓冲区,最后经过网卡将数据包发送回网络。当有大量的数据包需要发送时,采用轮询tx_ring从而遍历发送标志位的方法使得发送速率明显提高。
在本发明的第二方面的实施例中,提出一种数据包捕获、处理和发送系统包括:分配模块、映射模块、存储控制模块、处理器和发送模块。
其中,分配模块,用于根据系统的页面大小分配一个预定大小的内存空间。映射模块,用于将内存从内核空间映射到用户地址空间以使用户程序与内核空间的内存相关联。存储控制模块,用于将接收到的数据包通过直接内存存取方式依次存储到内存空间中连续的多个DMA缓冲区。处理器,用于执行用户程序,以通过m个线程对N个DMA缓冲区中的数据包进行并行处理,其中,m为处理器的内核数。发送模块,用于依次将N个DMA缓冲区中处理完成的数据包向外发送。
在本发明的一个实施例中,分配模块用于对网卡驱动程序继续并初始化并创建字符设备,以及通过字符设备分配连续的多个整页内存以得到内存空间。具体过程如下:初始化网卡驱动程序时,创建字符设备Datammap。Datammap在初始化过程中主要根据系统的页面大小(Linux默认为4K),通过调用__get_free_pages函数分配一个预定大小的内存空间。这样在一次性分配大块内存的同时,分配到的内存空间大小为页面大小的整数倍,使得每一页内存都可以分成2k的大小,便于数据包的接收。
在内存空间分配成功后,用户程序通过调用SetPageReserved函数,设置内存空间的每一页的页面预留位,保证这些页面不会从内存中被换出。
在上述步骤完成后,需要通过映射模块将内存从内核空间映射到用户地址空间以使用户程序与内核空间的内存相关联。
具体地,为实现内存从内核空间到用户地址空间的映射,Datammap还需注册一个mmap函数。用户程序通过open函数打开字符设备Datammap后,完成对mmap函数的调用后,mmap函数通过调用remap_pfn_range函数实现数据包捕获设备的内存从内核空间到用户地址空间的映射,使得用户程序可以直接访问内核态的内存空间。
在本发明的一个实施例中,存储控制模块将接收到的数据包通过直接内存存取方式(Direct Memory Access,DMA)依次存储到内存空间中连续的多个DMA缓冲区。
在实际运行中,DMA缓冲区在接收数据包之前需要对该缓冲区进行流式DMA映射,即为DMA缓冲区生成一个网卡可访问的总线地址,该总线地址用dma_addr_t表示。由于在许多硬件中流式映射可以被优化,因此在网卡驱动程序中,调用dma_map_single函数为每个DMA缓冲区建立流式DMA映射。一般情况下,在建立流式DMA映射时,需要通过dma_map_single函数的direction参数来指示数据的流动方向,由于本发明实施例的数据是由网卡发出的,因此将该参数设置为DMA_FROM_DEVICE。在DMA缓冲区在建立流式DMA映射后,网卡驱动程序只可通过调用dma_unmap_single函数,才能访问该DMA缓冲区的内容。具体地,在数据包被发往上层协议栈之前调用dma_unmap_single函数,同时在该函数被调用后设置DMA缓冲区的标志位,通知用户程序读取该DMA缓冲区的内容。
在为每个DMA缓冲区设置标志位的同时对每一个DMA缓冲区进行编号,指示其:
(1)可写:所有的用户程序处理完毕,可以清空该DMA缓冲区,接收新的数据;
(2)可读:网卡数据已经接收完毕,应用层程序可以进行处理;
(3)可发:经过处理可以通过的数据包加入到发送队列中。
在本发明实施例的网卡驱动程序中,采用字符设备Datammap用于将接收数据包的DMA缓冲区映射给用户程序,使得用户程序可以直接访问这些DMA缓冲区。网卡驱动程序在接收数据包时,这些DMA缓冲区是可以被重复使用的,即DMA缓冲区中的数据会不断更新,因此用户程序和网卡驱动程序在对这些DMA缓冲区访问时需要保持同步性。将每个DMA缓冲区的最后8字节设置成标志位。网卡驱动程序在向DMA缓冲区写入数据后设置该标志位为可读,表明用户程序在判断一个DMA缓冲区的标志位为可读时,对这个DMA缓冲区进行访问,并在访问结束后设置标志位为可写,可实现对DMA缓冲区的重复使用,节省内存空间。
在DMA缓冲区建立流式DMA映射后,网卡驱动程序通过DMA缓冲环管理字符设备Datammap分配的DMA缓冲区,来实现数据包的传送。如图2所示,DMA缓冲环即用于接收数据包的rx_ring环(即流式DMA映射的虚拟地址,用于存储skb地址空间的指针),rx_ring环的每个节点都通过skb关联着一个2k大小的缓冲区。在正常模式下,网卡收到一个数据包后,会将这个数据包放入rx_ring环中的下一个可用缓冲区中,之后引发中断,通知驱动程序将这个数据包发给上层协议进行处理,并为rx_ring环分配一个新的DMA缓冲区。但是在NAPI模式中,网卡会一次接收多个数据包放入rx_ring环的可用缓冲区中,在引发中断后,一次性将这些数据包发送给上层协议栈进行处理。
为了更好地管理网卡驱动程序分配的skb,需在网卡驱动程序初始化后创建了一个可用skb池和一个在用skb池。可用skb池,为网卡驱动程序的rx_ring环提供skb,当rx_ring环的节点需要关联一个新的skb时,网卡驱动程序会从可用skb池中取出一个skb关联给rx_ring的节点。若在用skb池在创建后为空,当网卡驱动程序从可用skb池中取出skb时,将把该skb放入在用skb池中。网卡驱动程序在运行中,若可用skb池的skb被分配完,网卡驱动程序将从在用skb池中查找skb->data被处理过的skb,并将其重新初始化后放入可用skb池中。当网卡驱动程序向上层协议栈提交数据包时,网卡驱动程序还需要通过检查skb的users计数和skb->data的dataref计数判断skb是否仍被上层协议栈使用,在判断它们被上层协议栈使用完后,再将它们重新初始化放入可用skb池中。这样保证了上层协议栈对数据访问的一致性。
在实际运行中,DMA缓冲环的大小会影响到数据包捕获的性能,如图3所示,随着rx_ring环的大小的增加,数据包的捕获速率明显提高。直至rx_ring环大小超过8192时,数据包的捕获速率不再发生变化,此时网卡主要产生的是接收定时器中断。因此可以根据系统负荷和对数据包捕获速率的需求选择实际操作的DMA缓冲环的大小。
数据包捕获成功后,需要对数据包进行分析检查和存储,因此CPU处理速率必须要跟上网卡的捕获速率。在现实中,单核CPU的处理能力极其有限,多核CPU的出现,提高了网络安全系统对数据包的处理速率。网络安全系统可以通过多核CPU的并行处理机制实现对捕获数据包的并行处理,以此提高对数据包的处理速率。
在本发明的实施例中,处理器用于执行用户程序,以通过m个线程对N个DMA缓冲区中的数据包进行并行处理。被捕获的数据包是按捕获顺序放入地址连续的内存中的,这样在多核系统中,数据包处理程序中可以根据多核CPU的核数m将共享内存虚拟的划分为m块,通过多线程方式实现m核对该共享内存的并行处理。假设共享内存有n个DMA缓冲区用于接收数据包,对它们从1到n进行编号,核Ci需要处理的DMA缓冲区可以表示为:
Cij=i+jm
其中,i∈[1,m],i为正整数,
Figure BDA0000403467570000091
j为正整数,
Figure BDA0000403467570000092
为向上取整。在多核CPU的核数为4时,包处理程序通过4个线程处理N个DMA缓冲区的方式如图4所示。在图4中,N个DMA缓冲区被划分为4个部分进行并行处理。以核C1为例,其处理的DMA缓冲区为{1,5,9,…,N-3},保证了多核CPU中每个核都能在最快时间内对捕获的数据包进行处理。经过仿真测试,表明本发明实施例的方法,多核CPU对数据包的处理速率有明显的优化效果,如图5所示。
由于安全系统对用户来说是透明的,因此安全系统对数据包的捕获和处理不应该影响网络上其他设备的正常运行,所以安全系统必须要将合法的数据包重新发送回网络中。为保证数据包的正常发送,本发明实施例中的发送模块用于依次将N个DMA缓冲区中处理完成的数据包向外发送。
在本发明的一个实施例中,发送模块采用线速发送模式,使其发送速率能够达到其对数据包的捕获速率,从而实现系统对网络流量的正常吞吐。如图6所示,数据包发送tx_ring和数据包捕获模块rx_ring共用了数据缓冲区(图中虚线框所示)。每一个数据缓冲区设置一个发送标志(1个字节),当缓冲区中存储的数据被“包处理程序”处理完成后,将发送标志位置为“可发送”。数据包发送模块轮询tx_ring(发送环,指向要发送的数据),当检查到有数据包可以发送时,会对数据包所在的缓冲区进行流式DMA映射,DMA机制会自动的将要发送的数据包传送到网卡的发送缓冲区,最后经过网卡将数据包发送回网络。当有大量的数据包需要发送时,采用轮询tx_ring从而遍历发送标志位的方法使得发送速率明显提高。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
尽管已经示出和描述了本发明的实施例,本领域的普通技术人员可以理解:在不脱离本发明的原理和宗旨的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由权利要求及其等同物限定。

Claims (10)

1.一种数据包捕获、处理和发送方法,包括以下步骤:
根据系统的页面大小分配一个预定大小的内存空间;
将内存从内核空间映射到用户地址空间以使用户程序与所述内核空间的内存相关联;
将接收到的数据包通过直接内存存取方式依次存储到所述内存空间中连续的多个DMA缓冲区;
所述用户程序通过m个线程对N个DMA缓冲区中的数据包进行并行处理,其中m为处理器的内核数;
依次将所述N个DMA缓冲区中处理完成的数据包向外发送。
2.根据权利要求1所述的数据包捕获、处理和发送方法,其特征在于,所述根据系统的页面大小分配一个预定大小的内存空间,具体包括:
初始化网卡驱动程序并创建字符设备;
通过所述字符设备分配连续的多个整页内存以得到所述内存空间。
3.根据权利要求2所述的数据包捕获、处理和发送方法,其特征在于,还包括:对所述整页内存设置预留位以使所述整页内存不被置换。
4.根据权利要求1所述的数据包捕获、处理和发送方法,其特征在于,在所述将接收到的数据包通过直接内存存取方式依次存储到所述内存空间中连续的多个DMA缓冲区之前,还包括:对所述多个DMA缓冲区建立流式DMA映射。
5.根据权利要求1所述的数据包捕获、处理和发送方法,其特征在于,所述多个DMA缓冲区具有标志位,以便所述用户程序通过m个线程对N个DMA缓冲区中的数据包进行并行处理时,根据所述多个DMA缓冲区具有标志位对所述N个DMA缓冲区进行读、写操作。
6.一种数据包捕获、处理和发送系统,其特征在于,包括:
分配模块,用于根据系统的页面大小分配一个预定大小的内存空间;
映射模块,用于将内存从内核空间映射到用户地址空间以使用户程序与所述内核空间的内存相关联;
存储控制模块,用于将接收到的数据包通过直接内存存取方式依次存储到所述内存空间中连续的多个DMA缓冲区;
处理器,用于执行用户程序,以通过m个线程对N个DMA缓冲区中的数据包进行并行处理,其中m为处理器的内核数;
发送模块,用于依次将所述N个DMA缓冲区中处理完成的数据包向外发送。
7.根据权利要求6所述的数据包捕获、处理和发送系统,其特征在于,所述分配模块用于对网卡驱动程序继续并初始化并创建字符设备,以及通过所述字符设备分配连续的多个整页内存以得到所述内存空间。
8.根据权利要求7所述的数据包捕获、处理和发送系统,其特征在于,还包括:所述处理器还用于对所述整页内存设置预留位以使所述整页内存不被置换。
9.根据权利要求6所述的数据包捕获、处理和发送系统,其特征在于,在所述将接收到的数据包通过直接内存存取方式依次存储到所述内存空间中连续的多个DMA缓冲区之前,所述存储控制模块还用于对所述多个DMA缓冲区建立流式DMA映射。
10.根据权利要求6所述的数据包捕获、处理和发送系统,其特征在于,所述多个DMA缓冲区具有标志位,以便所述处理器执行所述用户程序,以通过m个线程对N个DMA缓冲区中的数据包进行并行处理时,根据所述多个DMA缓冲区具有标志位对所述N个DMA缓冲区进行读、写操作。
CN201310517176.XA 2013-10-28 2013-10-28 数据包捕获、处理和发送方法及系统 Active CN103581181B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310517176.XA CN103581181B (zh) 2013-10-28 2013-10-28 数据包捕获、处理和发送方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310517176.XA CN103581181B (zh) 2013-10-28 2013-10-28 数据包捕获、处理和发送方法及系统

Publications (2)

Publication Number Publication Date
CN103581181A true CN103581181A (zh) 2014-02-12
CN103581181B CN103581181B (zh) 2017-02-15

Family

ID=50052111

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310517176.XA Active CN103581181B (zh) 2013-10-28 2013-10-28 数据包捕获、处理和发送方法及系统

Country Status (1)

Country Link
CN (1) CN103581181B (zh)

Cited By (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103916316A (zh) * 2014-04-11 2014-07-09 国家计算机网络与信息安全管理中心 网络数据包线速捕获方法
CN104486249A (zh) * 2014-12-22 2015-04-01 浪潮集团有限公司 一种提高rapidio传输网络报文效率的方法
CN105262680A (zh) * 2015-10-21 2016-01-20 浪潮(北京)电子信息产业有限公司 一种应用于云存储系统的多线程nas网关
CN105871780A (zh) * 2015-01-21 2016-08-17 杭州迪普科技有限公司 会话日志发送方法及装置
CN106571978A (zh) * 2016-10-28 2017-04-19 东软集团股份有限公司 数据包捕获方法及装置
CN107678987A (zh) * 2017-10-10 2018-02-09 郑州云海信息技术有限公司 一种dma传输的方法、装置及设备
CN108156172A (zh) * 2018-01-09 2018-06-12 四川九洲电器集团有限责任公司 一种高速接收tcp数据的方法
CN108600053A (zh) * 2018-05-10 2018-09-28 南京邮电大学 一种基于零拷贝技术的无线网络数据包捕获方法
CN109461451A (zh) * 2018-11-23 2019-03-12 深圳时空壶技术有限公司 一种基于opus的语音传输方法和设备及系统
CN109766187A (zh) * 2019-01-10 2019-05-17 烽火通信科技股份有限公司 网络数据包高速处理转发方法及系统
CN110138797A (zh) * 2019-05-27 2019-08-16 北京知道创宇信息技术股份有限公司 一种报文处理方法及装置
CN110716695A (zh) * 2019-09-12 2020-01-21 北京浪潮数据技术有限公司 一种节点日志的存储方法、系统、电子设备及存储介质
CN110784430A (zh) * 2018-07-29 2020-02-11 雅座在线(北京)科技发展有限公司 一种具有环状缓冲的非阻塞网络数据处理实现方法
CN113965844A (zh) * 2021-12-22 2022-01-21 深圳市维海德技术股份有限公司 低延时音频传输方法、装置、驱动设备及可读存储介质
CN113992608A (zh) * 2021-10-25 2022-01-28 北京科东电力控制系统有限责任公司 一种网络收发包路径优化方法、装置及存储介质
CN115442319A (zh) * 2022-08-31 2022-12-06 北京天融信网络安全技术有限公司 数据传输方法、电子设备和计算机可读存储介质

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
MAHDI DASHTBOZORGI,MOHAMMAD ABDOLLAHI AZGOMI: "A High-Performance Software Solution for Packet Capture and Transmission", 《PROCEEDINGS OF 2009 2ND IEEE INTERNATIONAL CONFERENCE ON COMPUTER SCIENCE AND INFORMATION TECHNOLOGY VOL.1》 *
孙江 兰巨龙: "基于Intel千兆网卡的高速包捕获技术的研究与实现", 《信息工程大学学报》 *
孙江: "基于多核处理器的普适性报文捕获技术研究", 《硕士学习论文》 *
高晓东: "基于多核平台的高速网络数据捕获和并行处理研究与实现", 《硕士学位论文》 *

Cited By (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103916316A (zh) * 2014-04-11 2014-07-09 国家计算机网络与信息安全管理中心 网络数据包线速捕获方法
CN104486249A (zh) * 2014-12-22 2015-04-01 浪潮集团有限公司 一种提高rapidio传输网络报文效率的方法
CN105871780B (zh) * 2015-01-21 2020-01-03 杭州迪普科技股份有限公司 会话日志发送方法及装置
CN105871780A (zh) * 2015-01-21 2016-08-17 杭州迪普科技有限公司 会话日志发送方法及装置
CN105262680A (zh) * 2015-10-21 2016-01-20 浪潮(北京)电子信息产业有限公司 一种应用于云存储系统的多线程nas网关
CN106571978A (zh) * 2016-10-28 2017-04-19 东软集团股份有限公司 数据包捕获方法及装置
CN106571978B (zh) * 2016-10-28 2020-11-27 东软集团股份有限公司 数据包捕获方法及装置
CN107678987A (zh) * 2017-10-10 2018-02-09 郑州云海信息技术有限公司 一种dma传输的方法、装置及设备
CN108156172A (zh) * 2018-01-09 2018-06-12 四川九洲电器集团有限责任公司 一种高速接收tcp数据的方法
CN108600053B (zh) * 2018-05-10 2021-09-28 南京邮电大学 一种基于零拷贝技术的无线网络数据包捕获方法
CN108600053A (zh) * 2018-05-10 2018-09-28 南京邮电大学 一种基于零拷贝技术的无线网络数据包捕获方法
CN110784430A (zh) * 2018-07-29 2020-02-11 雅座在线(北京)科技发展有限公司 一种具有环状缓冲的非阻塞网络数据处理实现方法
CN109461451A (zh) * 2018-11-23 2019-03-12 深圳时空壶技术有限公司 一种基于opus的语音传输方法和设备及系统
CN109461451B (zh) * 2018-11-23 2022-06-03 深圳时空壶技术有限公司 一种基于opus的语音传输方法和设备及系统
CN109766187A (zh) * 2019-01-10 2019-05-17 烽火通信科技股份有限公司 网络数据包高速处理转发方法及系统
CN110138797A (zh) * 2019-05-27 2019-08-16 北京知道创宇信息技术股份有限公司 一种报文处理方法及装置
CN110716695A (zh) * 2019-09-12 2020-01-21 北京浪潮数据技术有限公司 一种节点日志的存储方法、系统、电子设备及存储介质
CN113992608A (zh) * 2021-10-25 2022-01-28 北京科东电力控制系统有限责任公司 一种网络收发包路径优化方法、装置及存储介质
CN113992608B (zh) * 2021-10-25 2024-01-05 北京科东电力控制系统有限责任公司 一种网络收发包路径优化方法、装置及存储介质
CN113965844A (zh) * 2021-12-22 2022-01-21 深圳市维海德技术股份有限公司 低延时音频传输方法、装置、驱动设备及可读存储介质
CN115442319A (zh) * 2022-08-31 2022-12-06 北京天融信网络安全技术有限公司 数据传输方法、电子设备和计算机可读存储介质
CN115442319B (zh) * 2022-08-31 2024-03-12 北京天融信网络安全技术有限公司 数据传输方法、电子设备和计算机可读存储介质

Also Published As

Publication number Publication date
CN103581181B (zh) 2017-02-15

Similar Documents

Publication Publication Date Title
CN103581181A (zh) 数据包捕获、处理和发送方法及系统
EP3754498B1 (en) Architecture for offload of linked work assignments
EP3588781B1 (en) Cache monitoring
US20200192715A1 (en) Workload scheduler for memory allocation
CN101267361B (zh) 一种基于零拷贝技术的高速网络数据包捕获方法
US8539199B2 (en) Hash processing in a network communications processor architecture
KR102003089B1 (ko) 효율적인 작업 큐잉을 갖는 프로세서
CN103269284B (zh) 实时网络数据的捕获方法
CN103827842B (zh) 向控制器存储器空间写入消息
US20200136971A1 (en) Hash-table lookup with controlled latency
CN107124286B (zh) 一种海量数据高速处理、交互的系统及方法
CN103647807A (zh) 一种信息缓存方法、装置和通信设备
CN103763173A (zh) 数据传输方法和计算节点
US10467140B2 (en) Apparatus having main TLB and local TLBS, and configured to set selected size for new entry allocated to local TLB to a default size
CN101150488A (zh) 一种零拷贝网络报文接收方法
KR101893966B1 (ko) 메모리 관리 방법 및 장치, 및 메모리 컨트롤러
US10474575B2 (en) Cache-based communication between execution threads of a data processing system
US7865624B1 (en) Lookup mechanism based on link layer semantics
US11928504B2 (en) System and method for queuing work within a virtualized scheduler based on in-unit accounting of in-unit entries
CN109983438A (zh) 使用直接存储器访问(dma)重新映射来加速半虚拟化网络接口
CN115658586A (zh) 资源管理芯片、方法、电子设备及可读存储介质
Ammendola et al. Virtual-to-Physical address translation for an FPGA-based interconnect with host and GPU remote DMA capabilities
CN110519180A (zh) 网卡虚拟化队列调度方法及系统
CN109857517A (zh) 一种虚拟化系统及其数据交换方法
US11093405B1 (en) Shared mid-level data cache

Legal Events

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