当前位置: 首页 > 专利查询>清华大学专利>正文

数据包捕获、处理和发送方法及系统技术方案

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

【技术实现步骤摘要】
数据包捕获、处理和发送方法及系统
本专利技术涉及互联网网络安全
,尤其涉及一种数据包捕获、处理和发送的方法及系统。
技术介绍
随着互联网的快速发展,对互联网内容进行安全审计越来越重要,网络安全技术也得以快速的发展。现有的基于内容的安全审计主要分为数据包的捕获、过滤和处理。快速的数据包捕获机制是安全审计的前提,捕获数据包的速率直接影响整个系统的性能。现有的数据包捕获机制有的基于软件实现,也有的基于硬件实现。随着千兆网卡的普及,虽然硬件的性能得以快速提升,但从性价比的角度,人们更多地考虑从软件的角度来实现高速的数据包的捕获。现阶段比较成熟的软件实现方案有传统的libpcap数据包捕获机制、基于RF_RING的数据包捕获机制和基于零拷贝的快速数据包捕获。随着零拷贝的提出,千兆网络数据包的捕获已经得以实现,但是网络安全系统处理数据包的速率能否跟上捕获数据包的速率成为影响整个安全系统性能的关键。现有零拷贝技术的实现大多是基于nopage的内存映射方法,而这种机制很难满足并行处理数据包的要求,一旦系统无法及时地处理捕获的数据包,系统的内存很快就被耗尽。与此同时,现有的捕获机制都修改了网卡驱动程序,影响了系统正常的协议栈使用,使得捕获的数据包只能由特定的程序使用,系统其他的用户程序无法通过网卡正常收发数据包。
技术实现思路
本专利技术旨在至少解决上述技术问题之一。为此,本专利技术的第一个目的在于提出一种数据包捕获、处理和发送方法。本专利技术的第二个目的在于提出一种数据包捕获、处理和发送系统。为了实现上述目的,本专利技术第一方面实施例的数据包捕获、处理和发送方法包括以下步骤:数据包捕获模块,处理模块和发送模块三个模块共用同一个内存模块,所述内存模块为DMA的缓冲区,每一个缓冲区都要进行编号,并设置标志位:可写:全部的用户程序处理完毕,清空DMA缓冲区,接收新的数据;可读:网卡数据接收完毕,应用层程序进行处理;可发:经过所述处理通过的数据包加入到发送队列中;所述捕获模块:管理网卡驱动程序分配的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被上层协议栈使用完后,再将skb重新初始化放入所述可用skb池中,保证了所述上层协议栈对数据访问的一致性;所述处理模块:数据包捕获成功后,需要对数据包进行分析检查和存储,网络安全系统通过多核CPU的并行处理机制实现对捕获数据包的并行处理;被捕获的数据包是按捕获顺序放入地址连续的内存中的,在多核系统中,数据包处理程序中根据多核CPU的核数m将共享内存虚拟的划分为m块,通过多线程方式对m核对共享内存的并行处理,共享内存有N个DMA缓冲区用于接收数据包,对DMA缓冲区从1到N进行编号,核Ci处理的DMA缓冲区可以表示为:Cij=i+jm其中,i∈[1,m],i为正整数,j为正整数,为向上取整;所述发送模块:安全系统将合法的数据包重新发送回网络中,采用线速发送模式,使发送速率能够达到对数据包的捕获速率,数据包发送tx_ring和数据包捕获模块rx_ring共用了数据缓冲区,每一个数据缓冲区设置一个发送标志,当缓冲区中存储的数据处理完成后,将发送标志位置为可发送,数据包发送模块轮询tx_ring,当检查到有数据包发送时,对数据包所在的缓冲区进行流式DMA映射,DMA机制自动的将要发送的数据包传送到网卡的发送缓冲区,最后经过网卡将数据包发送回网络,当有大量的数据包需要发送时,采用轮询tx_ring从而遍历发送标志位。根据本专利技术实施例的数据包捕获、处理和发送方法,实现了快速捕获、并行处理、线速发送的有机结合,从而解决了零拷贝技术不能及时处理捕获的数据包的缺点,为网络安全审计提供一定的技术支持。在本专利技术的一个实施例中,确定合适的DMA缓冲环的大小,随着rx_ring环的大小的增加,数据包的捕获速率提高,直至rx_ring环大小超过8192时,数据包的捕获速率不再发生变化,此时网卡主要产生的是接收定时器中断,根据系统负荷和对数据包捕获速率的需求选择实际操作的DMA缓冲环的大小。在本专利技术的一个实施例中,在不同的数据包长度下,并行处理方法均有高的处理速率。在本专利技术的一个实施例中,所述的数据包捕获、处理和发送方法,设置发送标志位,使得捕获系统不影响上层协议栈正常使用数据包。为了实现上述目的,本专利技术第二方面实施例的数据包捕获、处理和发送系统,用于执行权利要求1-4所述的数据包捕获、处理和发送方法。根据本专利技术实施例的数据包捕获、处理和发送系统,有效地解决了现有使用零拷贝技术的系统,在捕获数据包后无法在有限的时间内进行处理和发送,从而导致的丢包、内存资源消耗等问题。在本专利技术的一个实施例中,所述系统应用于Intel平台。本专利技术附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本专利技术的实践了解到。附图说明本专利技术上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中,图1是本专利技术实施例的数据包捕获、处理和发送方法流程示意图;图2是数据包捕获过程示意图;图3是DMA环大小对捕获速率的影响的仿真结果示意图;图4是利用多线程对数据包并行处理过程示意图;图5是采用单双线程处理数据包的速率对比结果示意图;和图6是本专利技术实施例的数据包发送过程示意图。具体实施方式下面详细描述本专利技术的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本专利技术,而不能理解为对本专利技术的限制。相反,本专利技术的实施例包括落入所附加权利要求书的精神和内涵范围内的所有变化、修改和等同物。在本专利技术的描述中,需要理解的是,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。在本专利技术的描述中,需要说明的是,除非另有明确的规定和限定,术语“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本专利技术中的具体含义。此外,在本专利技术的描述中,除非另有说明,“多个”的含义是两个或两个以上。流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或本文档来自技高网...
数据包捕获、处理和发送方法及系统

【技术保护点】
一种数据包捕获、处理和发送方法,包括以下步骤:根据系统的页面大小分配一个预定大小的内存空间;将内存从内核空间映射到用户地址空间以使用户程序与所述内核空间的内存相关联;将接收到的数据包通过直接内存存取方式依次存储到所述内存空间中连续的多个DMA缓冲区;所述用户程序通过m个线程对N个DMA缓冲区中的数据包进行并行处理,其中m为处理器的内核数;依次将所述N个DMA缓冲区中处理完成的数据包向外发送。

【技术特征摘要】
1.一种数据包捕获、处理和发送方法,包括以下步骤:分配模块:根据系统的页面大小分配一个预定大小的内存空间;映射模块:将内存从内核空间映射到用户地址空间以使用户程序与所述内核空间的内存相关联;存储控制模块:将接收到的数据包通过直接内存存取方式依次存储到所述内存空间中连续的多个DMA缓冲区;在DMA缓冲区在建立流式DMA映射后,网卡驱动程序通过调用dma_unmap_single函数,访问所述DMA缓冲区的内容;在数据包被发往上层协议栈之前调用dma_unmap_single函数,同时在所述函数被调用后设置DMA缓冲区的标志位,通知用户程序读取该DMA缓冲区的内容;在为每个DMA缓冲区设置标志位的同时对每一个DMA缓冲区进行编号,指示其:(1)可写:全部的用户程序处理完毕,清空DMA缓冲区,接收新的数据;(2)可读:网卡数据接收完毕,应用层程序进行处理;(3)可发:经过所述处理通过的数据包加入到发送队列中;管理网卡驱动程序分配的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被上层协议栈使用完后,再将skb重新初始化放入所述可用skb池中,保证了...

【专利技术属性】
技术研发人员:赵有健裴昶华全成斌
申请(专利权)人:清华大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1