CN100477643C - 基于共享内存实现的数据包捕获方法 - Google Patents
基于共享内存实现的数据包捕获方法 Download PDFInfo
- Publication number
- CN100477643C CN100477643C CNB2006101133294A CN200610113329A CN100477643C CN 100477643 C CN100477643 C CN 100477643C CN B2006101133294 A CNB2006101133294 A CN B2006101133294A CN 200610113329 A CN200610113329 A CN 200610113329A CN 100477643 C CN100477643 C CN 100477643C
- Authority
- CN
- China
- Prior art keywords
- packet
- data
- flow monitoring
- territory
- routine analyzer
- 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
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种基于共享内存实现的数据包捕获方法,包括:网卡加载并初始化驱动程序;创建字符设备;设置监测端口网卡为混杂模式;接收数据包,判断接收端口,若为监测端口,执行下一步,否则将数据包交给操作***;判断数据包可否写入数据信息域中,若可以,则输送到缓存单元中,执行下一步;否则,丢弃数据包;初始化管理信息域中的管理单元;运行流量监测分析程序;打开字符设备,获取指针;提取数据包;若全局引用计数值不为0且标识字段中有标识为未被处理的位,执行下一步,若全局引用计数值为0,忽略数据包,挂起流量监测分析程序;执行流量监测分析程序,改变全局引用计数值,同时访问标识字段的标识位设置为已处理,重新提取数据包。
Description
技术领域
本发明涉及计算机网络流量监测分析、网卡驱动及操作***内存管理等技术领域,特别涉及一种基于内核空间和用户空间共享内存的方式应用通用硬件平台和开源软件实现的数据包捕获方法。
背景技术
流量指标是网络运行和维护过程中最重要的指标之一,它是网络规划设计、协议设计、业务部署、流量工程实施、攻击检测与故障诊断的基础。通过对网络流量的监测和分析可以获得网络性能信息、网络服务状况以及网络中存在的攻击或者弱点。流量监测和分析技术被广泛应用到防火墙、入侵检测(如snort、Bro等)和协议解码以及流量监测(如ethereal、tcpflow、ntop等)***中。数据包捕获是流量监测和分析的前提和第一步骤,它决定了基于流量监测和分析的***的性能。目前绝大部分的流量监测和分析***都是借助libpcap等函数库完成数据包捕获,在低速链路情况下其可满足需求。
然而,随着技术和需求的发展,网络链路速率迅猛增长,已经开始从Mbit/s迈向Gbit/s,不久的将来可能还会发展至40Gbit/s甚至Tbit/s。千兆网卡和千兆交换机已经开始逐步进入主流市场,几乎每个新的局域网用户都会采用此项技术,一个普通的家庭用户所能够获得的带宽比两年前一个公司获得的带宽还要大。网络应用的普及与网络技术的发展,导致网络流量也日益庞大。面对高速链路,流量监测和分析技术所依赖的传统的数据包捕获方法开始受到诸多条件的限制,如PCI总线吞吐量、存储容量、内存访问速度、磁盘阵列访问速率、内存拷贝开销、***调用开销、中断开销以及操作***中的任务调度机制等都对数据包在高速链路条件下的捕获产生影响。由于这些条件的限制,使得可满足低速链路流量监测和分析要求的传统的数据包捕获技术很难适用于高速链路的网络环境。
图2为现有的一种分布式流量监测分析***的结构图,在该流量监测分析***中,网卡有两种端口,分别为监测端口和控制端口。其中的控制端口接收与该端口的IP地址相符合的数据包,监测端口接收网卡所能收到的所有数据包。当监测端口接收到数据包以后,由网卡驱动程序转发到位于操作***内核的TCP/IP协议栈中排队等待处理,流量检测分析程序中的各种应用程序通过操作***提供的socket套接字接口提取数据包进行解码和分析。在上述数据包的接收过程中,不仅要为数据包动态的分配和释放缓存,更重要的是需要将数据包从操作***的内核空间拷贝到用户空间,这些操作都将耗费大量的开销,因此该流量监测分析***很难适用于高速链路的网络环境下。
目前,为了克服操作***、PCI总线带宽和***资源所带来的性能限制,一些研究人员和硬件生产厂商已经开始进行了一番探索。首先,采用网络处理器替代通用硬件平台来实现数据包捕获并完成部分的进行流量监测和分析功能,但是通常采用网络处理器的方法价格非常昂贵,且开发和升级的周期较长,大量部署不太现实;其次,试图通过专用硬件来实现数据包捕获进而完成被动流量监测和分析,如OCX3MON项目即通过Endace公司的DAG系列监测板卡完成对骨干链路的流量监测和分析,然而基于专用硬件的实现方式价格昂贵,且***缺乏足够的灵活性,很难跟上当今瞬息万变的网络发展现状和流量监测和分析需求。
流量监测和分析,尤其是高速链路下的流量监测分析正逐渐成为一个热门领域。有关流量监测分析的一些新的研究项目也正在如火如荼的展开,如欧洲的SCAMP项目设计了一种数据包捕获的体系结构;MAGNet则可以进行应用流的监测;CoralReef是由著名的CAIDA组织开发实现的一种收集和分析Internet被动流量监测信息的重要工具之一,等等。数据包捕获是这些的前提和基础。
因此,一种可在通用硬件平台上实现、能够达到更高性能、可满足高速网络链路环境的数据包捕获方法在流量监测和分析技术中具有重要的应用价值。
发明内容
本发明的目的是为了克服在高速网络链路环境下,针对基于专用硬件实现的流量监测分析***价格昂贵,且缺乏足够的灵活性的缺陷,提出一种基于通用硬件平台的数据包捕获效率高、***资源占用少的数据包捕获方法。
为了实现上述目的,本发明提供了一种基于共享内存实现的数据包捕获方法,包括以下步骤:
步骤1)、网卡加载并初始化网卡驱动程序后,流量监测分析程序向网卡驱动程序注册自身信息;
所述的网卡驱动程序初始化时,向操作***申请一块内存空间作为共享内存空间,所述共享内存空间分为数据信息域和管理信息域;所述数据信息域被分割成等长的数据包缓存单元,每个数据包缓存单元缓存一个数据包;所述管理信息域用来存放数据信息域中的数据包所对应的全局索引数组信息和流量监测分析程序的注册信息;
步骤2)、网卡驱动程序创建一个字符设备,在字符设备中设置mmap内存映射接口;
步骤3)、将监测端口的网卡设置为混杂模式;
步骤4)、网卡依次接收网络链路上侦听到的数据包,并将其存放入板载缓存中,然后判断数据包的接收端口,若数据包来自监测端口,则执行下一步,否则,执行步骤7);
步骤5)、网卡驱动程序检查共享内存中的管理信息域,判断当前的数据包是否能够安全写入数据信息域中,若能,则网卡驱动程序将数据包通过DMA通道从网卡的板载缓存输送到共享内存数据信息域的缓存单元中,并对共享内存管理信息域的管理单元填充管理信息,然后执行下一步;否则,说明流量监测分析程序的处理能力不足,导致共享内存数据信息域溢出,网卡驱动程序将丢弃后继收到的数据包,返回步骤4);
步骤6)、运行流量监测分析程序,该程序从共享内存的数据信息域中读取所存放的数据包,并对数据包执行解码、统计运算的分析处理,同时更新所述管理信息域的管理单元中的管理信息;当数据信息域中所保存的数据包处理完毕,则执行步骤4),继续接收数据包;
步骤7)、数据包按照正常的处理流程交给操作***,由操作***和上层的网络应用程序进行正常的处理,然后转向步骤4),继续接收数据。
上述技术方案中,所述的步骤6)包括:
6-1)、运行流量监测分析程序,该程序向流量监测分析***注册自身信息,并向网卡驱动下达数据包查看请求;
6-2)、由流量监测分析程序打开步骤2)中创建的字符设备,调用字符设备的mmap内存映射接口,获取指向共享内存的指针;
6-3)、根据步骤6-2)中获得的指针,从数据信息域中提取出一个数据包;
6-4)、在步骤6-3)提取数据包后,检查数据包对应管理单元中的全局引用计数和访问标识字段,若全局引用计数值不为0且标识字段中有标识为未被处理的位,则执行下一步,若全局引用计数值为0,则忽略该数据包,转向步骤6-6);
6-5)、流量监测分析程序读取数据包信息,执行解码、统计运算的分析处理过程,然后将全局引用计数值减1,同时将该流量监测分析程序所对应的访问标识字段的标识位设置为已处理,转向步骤6-3);
6-6)、挂起流量监测分析程序,等待更多的数据包进入共享内存,然后转向步骤4)。
上述技术方案中,所述的所述数据信息域在逻辑上形成一个环形缓存区,可循环存放接收到的数据包。
上述技术方案中,所述的管理信息域有四个数据成员信息,其中的数据成员app_count表示目前***中已注册并运行的流量监测分析程序数目;appname表示目前***中已注册并运行的流量监测分析程序名称;skb_cnt_index表示数据信息域中数据包全局引用计数,该计数器初始化为app_count中的值,此后由流量监测分析程序递减该计数器到0;skb_label_index表示数据信息域中数据包访问标识字段,该字段初始化为0,此后由流量监测分析程序将该字段的对应标识位置1;所述的skb_cnt_index和skb_label_index合称为全局索引数组信息,所述的app_count和appname合称为流量监测分析程序的注册信息。
所述的判断当前的数据包是否能够安全写入数据信息域的判断标准是:如果当前需要写入的数据包缓存单元的全局引用计数为0,则该缓存单元可以安全覆盖,所述数据包就可安全写入数据信息域中。
所述的对共享内存管理信息域的管理单元填充管理信息包括:
(1)、根据当前***中已注册的上层流量监测分析应用的个数初始化全局引用计数数组中的对应元素;
(2)、将访问标识字段数组中的对应元素进行置位。
本发明的优点在于:
1、本发明的基于共享内存实现的数据包捕获方法能够完全消除内存拷贝开销,减少***调用次数,节省CPU资源,提高数据包捕获的效率和性能;
2、本发明的基于共享内存实现的数据包捕获方法采用基于通用硬件平台和开源软件的实现方式,相比采用专用硬件设备而言,大大降低了成本,有利于开拓市场,适合大量部署。
附图说明
图1为基于本发明的方法实现的流量监测分析程序的***结构图;
图2为现有的一种分布式流量监测分析***的结构图;
图3为一个实施例中的共享内存空间的组成图;
图4为本发明方法的流程图。
具体实施方式
下面结合附图和具体实施方式对本发明的方法作进一步的描述。
在一个实施例中,本发明的基于共享内存实现的数据包捕获方法在宝德2U刀片服务器上实现,在服务器的CPU主频为双XEON 3.2G,PCI-X插槽主频为133MHz,内存为1GB,网卡型号为PRO/1000 MT Server Adapter。该服务器的操作***为Fedora Core 3,内核版本号为linux-2.6.9SMP;网卡驱动程序版本为Intel e1000-6.3.9。
在上述硬件平台上,如图4所示,本发明的方法包括以下步骤:
步骤10、网卡开始工作,加载修改后的网卡驱动程序,并初始化该驱动程序。在初始化的过程中,所述的网卡驱动程序向操作***申请一块连续的物理内存空间作为共享内存空间,然后将这块共享内存空间划分为数据信息域和管理信息域,并对数据信息域和管理信息域进行初始化,其中的数据信息域用来缓存数据包,管理信息域则对数据信息域进行管理。此外,流量监测分析程序还需向网卡驱动程序注册自身信息。
申请物理内存空间作为共享内存空间时,经过修改后的网卡驱动程序在启动时自动加载共享内存实现模块,该模块的功能是从操作***页表中查找连续的空闲内存页面,从查找到的多段连续空闲内存中选择一个内存段,选择策略可以按操作***的内存分配方法实现为最佳匹配、最大匹配和最快匹配等,从选出的内存段中再划分出用户指定数量的页面,在操作***页表中将这些内存页面标记为reserved,此后这些标记页面就不会***作***的内存调度程序交换出物理内存,在网卡驱动程序退出时主动释放这些页面,清空页面的reserved标记,将共享内存交还操作***。
图3显示了一种共享内存空间的实现方式,该共享内存空间共132M,其中128M为数据信息域,4M为管理信息域,其中的数据信息域可被分割成等长的数据包缓存单元,每个数据包缓存单元缓存一个数据包。在逻辑上,所述数据信息域形成一个环形缓存区,可循环存放接收到的数据包。管理信息域用来存放数据信息域中的数据包所对应的全局索引数组信息和流量监测分析程序的注册信息,共包含有四个数据成员信息,如表1所示,其中的数据成员app_count表示目前***中已注册并运行的流量监测分析程序数目;appname[8][20]表示目前***中已注册并运行的流量监测分析程序名称;skb_cnt_index[53430]表示数据信息域中数据包全局引用计数,该计数器初始化为app_count中的值,此后由流量监测分析程序递减该计数器到0;skb_label_index[53430]表示数据信息域中数据包访问标识字段,该字段初始化为0,此后由流量监测分析程序将该字段的对应标识位置1。其中,skb_ont_index和skb_label_index合称为全局索引数组信息,app_count和appname合称为流量监测分析程序的注册信息。
数据成员名称 | 成员类型 | 功能介绍 |
app_count | unsigned char | 目前***中已注册并运行的流量监测分析程序数目。 |
appname[8][20] | char | 目前***中已注册并运行的流量监测分析程序名称,最多可支持8种应用程序同时注册运行,每种应用程序的注册名称不超过20字节。 |
skb_cnt_index[53430] | unsigned char | 数据信息域中数据包全局引用计数,该计数器初始化为app_count中的值,此后由流量监测分析程序递减该计数器到0。 |
skb_label_index[53430] | unsigned char | 数据信息域中数据包访问标识字段,该字段初始化为0,此后由流量监测分析程序将该字段的对应标识位置1。 |
表1
在本步骤中,共享内存空间的建立是本发明的一个重要技术特征。如图1所示,在***中申请一块连续的内存区域作为共享内存空间后,该共享内存空间可以脱离操作***内存调度程序的管辖,直接由网卡驱动和流量监测分析程序操纵并管理。其中,网卡驱动负责写入数据包到共享内存,流量监测分析程序读取数据包并做分析和统计,这二者可视为简单的生产者消费者问题,通过位于共享内存管理信息域的数据包全局索引数组信息进行生产者和消费者之间的同步和互斥。通过网卡驱动向共享内存数据区顺序循环写入数据,可以避免将数据包送到操作***内核数据结构和队列中所造成的维护和管理开销,同时可实现数据包零拷贝和消除***调用目的,达到一步到位的数据包访问。
在本步骤中,还对所述的网卡驱动程序进行了修改,与现有的网卡驱动程序相比,修改后的网卡驱动程序新增了以下功能:
1)在网卡驱动程序初始化过程中加载共享内存实现模块,并初始化申请到的共享内存空间;该功能在本步骤即已实现。
2)区分监测端口和控制端口接收到的数据包,监测端口数据包送到共享内存的数据信息域单元中缓存,控制端口数据包按照正常的数据包处理流程,送入操作***内核协议栈中处理;该功能在后续的步骤40中实现。
3)在网卡驱动程序初始化过程中创建一个字符设备,在字符设备中实现mmap内存映射接口方法,该接口方法将提供给流量监测分析程序使用。该功能在下面的步骤20中实现。
步骤20、网卡驱动程序在初始化过程中创建一个字符设备,在字符设备中实现mmap内存映射接口方法,该接口方法将提供给流量监测分析程序使用。所述字符设备的作用是使在内核空间中所创建的共享内存能够在用户空间中被使用。
步骤30、设置监测端口网卡为混杂模式。在正常情况下(也就是非混杂模式),网卡硬件会侦听并比较网络链路上正在传输的MAC帧的目的地址,如果侦听到目的MAC地址是广播地址,或者是网卡自身的MAC地址,就接收该MAC帧到网卡的板载缓存中,否则停止接收。本步骤中,将网卡设置为混杂模式后,网卡硬件将不再比较网络链路上正在传输的MAC帧的目的地址,直接接收MAC帧到网卡的板载缓存中。
步骤40、网卡依次接收网络链路上侦听到的数据包,并将其存放入板载缓存中,然后判断数据包的接收端口,若数据包来自监测端口,则执行下一步,否则,执行步骤140;
步骤50、网卡驱动程序检查位于共享内存中的管理信息域,读取全局索引数组信息,判断当前的数据包是否可以安全写入数据信息域中,判断方法是:如果当前需要写入的数据包缓存单元的全局引用计数为0,说明该缓存单元可以安全覆盖,则网卡驱动程序将数据包通过DMA通道从网卡的板载缓存搬运到共享内存的数据信息域中,然后转向步骤下一步;否则,转向步骤70;
步骤60、初始化管理信息域中与缓存单元所对应的管理单元,包括:
(1)、根据当前***中已注册的上层流量监测分析应用的个数初始化全局引用计数数组中的对应元素,即:skb_cnt_index[i]=app_count;
(2)、将访问标识字段数组中的对应元素进行置位,即:skb_label_index[i]=0x00;
完成上述初始化操作后,执行步骤80。
步骤70、上层流量监测分析程序的处理能力不足,导致共享内存数据信息域溢出,网卡驱动程序将丢弃后继收到的数据包,返回步骤40。
步骤80、运行流量监测分析程序,该程序向流量监测分析***注册自身信息,并向网卡驱动下达数据包查看请求。
步骤90、在流量监测分析程序中打开步骤20中创建的字符设备,调用字符设备的mmap内存映射方法,获取指向共享内存的指针。
步骤100、根据步骤90中获得的指针,从数据信息域中提取出一个数据包。
步骤110、检查数据包对应管理单元中的全局引用计数和访问标识字段,若全局引用计数值不为0且标识字段中有标识为未被处理的位,则执行下一步;若全局引用计数值为0,则忽略该数据包,转向步骤130;
步骤120、流量监测分析程序读取数据包信息,执行解码、统计运算等分析处理,然后将全局引用计数值减1,同时将该流量监测分析程序所对应的访问标识字段设置为已处理,转向步骤100;
步骤130、挂起流量监测分析程序,等待更多的数据包进入共享内存,转向步骤40;
步骤140、数据包按照正常的处理流程交给操作***,由操作***和上层的网络应用程序进行正常的处理,然后转向步骤40,继续接收数据。
下面结合一个具体的实例,对本发明的方法进行说明。
假设***中正在运行的两个流量监测分析程序为snort和ethereal,网卡成功接收到10个数据包,分别顺序存储到数据信息域中标识为slot 1~slot 10的缓存单元中,并在管理信息域中注册相关的信息。管理信息域中相应信息在接收数据包前后的变化如表2所示:
管理信息域中的数据 | 存储数据包之前的取值 | 存储数据包之后的取值 |
app_count | 2 | 2 |
appname[0] | “snort” | “snort” |
appname[1] | “ethereal” | “ethereal” |
skb_cnt_index[i] | 0 | 2 |
skb_label_index[i] | 0x03 | 0x00 |
表2
表中i的取值为slot 1~slot 10,app_count、appname[0]和appname[1]存储的是流量监测分析程序的注册信息,其取值不会随接收数据包而改变。
流量监测分析程序对数据信息域中的信息进行分析处理的过程如下:
1、首先,snort(ethereal)程序检查skb_ont_index[i]取值是否为0,如果不为0则转向步骤2,否则转向步骤5;
2、继续判断skb_label_index[i]中的特定标识位是否标识为未处理skb_label_index[i]&=(1<<(skb_cnt_index[i]-1))(每一个注册的流量监测程序都有自己特定的标识位,用以相互区别,标识位位置由skb_cnt_index[i]的值动态决定),如果为未处理则转向步骤3,否则转向步骤5;
3、将数据包返回给snort(ethereal)程序处理,转向步骤4;
4、snort(ethereal)程序处理完数据包信息,递减skb_cnt_index[i]的值,将skb_label_index[i]的特定标识位置为已处理skb_label_index[i]|=(1<<skb_cnt_index[i]),将i自加1移动到下一个数据缓冲单元,转向步骤1;5、没有数据包可供处理,暂时挂起snort(ethereal)程序等待后继数据包进入共享内存,将i自加1移动到下一个数据缓冲单元,转向步骤1。
根据以上步骤,详细描述流量监测分析程序snort、ethereal并行运行时分别处理位于数据信息域slot 1缓存单元的数据包过程中,对应管理信息域中的数据取值变化情况,
假设由snort程序和ethereal程序先后进行处理,这两个程序都必须严格按照上述流程中的五个步骤执行,每执行完一个步骤,管理信息域中数据的取值情况如下:
首先snort程序访问共享内存数据信息域中的第i=slot 1个数据包缓存单元:
snort执行步骤1之前:i=slot 1,skb_cnt_index[i]=2,skb_label_index[i]=0x00;
snort执行步骤2之前:i=slot 1,skb_cnt_index[i]=2,skb_label_index[i]=0x00;
snort执行步骤3之前:i=slot 1,skb_cnt_index[i]=2,skb_label_index[i]=0x00;
snort执行步骤4之前:i=slot 1,skb_cnt_index[i]=2,skb_label_index[i]=0x00;
snort执行步骤5之前:i=slot 2,skb_cnt_index[i]=1,skb_label_index[i]=0x02;
snort执行步骤5之后:i=slot 2,skb_cnt_index[i]=0或者(skb_label_index[i]&0x02)=0x02;
接着ethereal程序访问共享内存数据信息域中的第j=slot 1个数据包缓存单元:
ethereal执行步骤1之前:j=slot 1,skb_cnt_index[j]=1,skb_label_index[j]=0x02;
ethereal执行步骤2之前:同上;
ethereal执行步骤3之前:同上;
ethereal执行步骤4之前:同上;
ethereal执行步骤5之前:j=slot 2,skb_cnt_index[j]=0,skb_label_index[j]=0x03;
ethereal执行步骤5之后:j=slot 2,skb_cnt_index[j]=0或者(skb_label_index[j]&0x01)=0x01;
app_count、appname[0]和appname[1]存储的是流量监测分析程序的注册信息,其取值不会随数据包的处理过程而改变,只有当有新的流量监测分析程序需要注册或者注销snort(ethereal)程序时其取值才可能发生变化。
Claims (6)
1、一种基于共享内存实现的数据包捕获方法,包括以下步骤:
步骤1)、网卡加载并初始化网卡驱动程序后,流量监测分析程序向网卡驱动程序注册自身信息;
所述的网卡驱动程序初始化时,向操作***申请一块内存空间作为共享内存空间,所述共享内存空间分为数据信息域和管理信息域;所述数据信息域被分割成等长的数据包缓存单元,每个数据包缓存单元缓存一个数据包;所述管理信息域用来存放数据信息域中的数据包所对应的全局索引数组信息和流量监测分析程序的注册信息;
步骤2)、网卡驱动程序创建一个字符设备,在字符设备中设置mmap内存映射接口;
步骤3)、将监测端口的网卡设置为混杂模式;
步骤4)、网卡依次接收网络链路上侦听到的数据包,并将其存放入板载缓存中,然后判断数据包的接收端口,若数据包来自监测端口,则执行下一步,否则,执行步骤7);
步骤5)、网卡驱动程序检查共享内存中的管理信息域,判断当前的数据包是否能够安全写入数据信息域中,若能,则网卡驱动程序将数据包通过DMA通道从网卡的板载缓存输送到共享内存数据信息域的缓存单元中,并对共享内存管理信息域的管理单元填充管理信息,然后执行下一步;否则,说明流量监测分析程序的处理能力不足,导致共享内存数据信息域溢出,网卡驱动程序将丢弃后继收到的数据包,返回步骤4);
步骤6)、运行流量监测分析程序,该程序从共享内存的数据信息域中读取所存放的数据包,并对数据包执行解码、统计运算的分析处理,同时更新所述管理信息域的管理单元中的管理信息;当数据信息域中所保存的数据包处理完毕,则执行步骤4),继续接收数据包;
步骤7)、数据包按照正常的处理流程交给操作***,由操作***和上层的网络应用程序进行正常的处理,然后转向步骤4),继续接收数据。
2、根据权利要求1所述的基于共享内存实现的数据包捕获方法,其特征在于,所述的步骤6)包括:
6-1)、运行流量监测分析程序,该程序向流量监测分析***注册自身信息,并向网卡驱动下达数据包查看请求;
6-2)、由流量监测分析程序打开步骤2)中创建的字符设备,调用字符设备的mmap内存映射接口,获取指向共享内存的指针;
6-3)、根据步骤6-2)中获得的指针,从数据信息域中提取出一个数据包;
6-4)、在步骤6-3)提取数据包后,检查数据包对应管理单元中的全局引用计数和访问标识字段,若全局引用计数值不为0且标识字段中有标识为未被处理的位,则执行下一步,若全局引用计数值为0,则忽略该数据包,转向步骤6-6);
6-5)、流量监测分析程序读取数据包信息,执行解码、统计运算的分析处理过程,然后将全局引用计数值减1,同时将该流量监测分析程序所对应的访问标识字段的标识位设置为已处理,转向步骤6-3);
6-6)、挂起流量监测分析程序,等待更多的数据包进入共享内存,然后转向步骤4)。
3、根据权利要求1所述的基于共享内存实现的数据包捕获方法,其特征在于,所述的数据信息域在逻辑上形成一个环形缓存区,可循环存放接收到的数据包。
4、根据权利要求1所述的基于共享内存实现的数据包捕获方法,其特征在于,所述的管理信息域有四个数据成员信息,其中的数据成员app_count表示目前***中已注册并运行的流量监测分析程序数目;appname表示目前***中已注册并运行的流量监测分析程序名称;skb_cnt_index表示数据信息域中数据包全局引用计数,该计数器初始化为app_count中的值,此后由流量监测分析程序递减该计数器到0;skb_label_index表示数据信息域中数据包访问标识字段,该字段初始化为0,此后由流量监测分析程序将该字段的对应标识位置1;所述的skb_cnt_index和skb_label_index合称为全局索引数组信息,所述的app_count和appname合称为流量监测分析程序的注册信息。
5、根据权利要求1所述的基于共享内存实现的数据包捕获方法,其特征在于,所述的判断当前的数据包是否能够安全写入数据信息域的判断标准是:如果当前需要写入的数据包缓存单元的全局引用计数为0,则该缓存单元可以安全覆盖,所述数据包就可安全写入数据信息域中。
6、根据权利要求1所述的基于共享内存实现的数据包捕获方法,其特征在于,所述的对共享内存管理信息域的管理单元填充管理信息包括:
(1)、根据当前***中已注册的上层流量监测分析应用的个数初始化全局引用计数数组中的对应元素;
(2)、将访问标识字段数组中的对应元素进行置位。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006101133294A CN100477643C (zh) | 2006-09-22 | 2006-09-22 | 基于共享内存实现的数据包捕获方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006101133294A CN100477643C (zh) | 2006-09-22 | 2006-09-22 | 基于共享内存实现的数据包捕获方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1925465A CN1925465A (zh) | 2007-03-07 |
CN100477643C true CN100477643C (zh) | 2009-04-08 |
Family
ID=37817933
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2006101133294A Expired - Fee Related CN100477643C (zh) | 2006-09-22 | 2006-09-22 | 基于共享内存实现的数据包捕获方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100477643C (zh) |
Families Citing this family (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101217573B (zh) * | 2007-12-29 | 2010-11-24 | 厦门大学 | 一种加速网卡报文捕获的方法 |
CN101521621B (zh) * | 2008-02-29 | 2012-12-12 | 上海博达数据通信有限公司 | 在dmvpn中实现互联网任意两端安全通信的方法 |
CN101895460B (zh) * | 2009-05-20 | 2012-09-05 | 智微科技股份有限公司 | 网络分组接收管理方法与具有网络分组接收管理功能的网络控制电路 |
CN101727323B (zh) * | 2009-12-04 | 2012-08-01 | 山东省计算中心 | Vista操作***下网络信息的获取方法 |
CN101763231B (zh) * | 2010-01-07 | 2011-07-20 | 浙江大学 | 一种打印设备数据的快速传输方法 |
CN101815014B (zh) * | 2010-02-09 | 2012-04-25 | 上海百络信息技术有限公司 | 基于连接的实时网络数据捕获方法 |
CN102195783B (zh) * | 2010-03-11 | 2015-04-08 | 瑞昱半导体股份有限公司 | 可共享缓冲器的网络接口卡与缓冲器共享方法 |
CN101854276B (zh) * | 2010-05-28 | 2014-12-10 | 中兴通讯股份有限公司 | 一种检测报文量的方法、装置和*** |
CN102025634B (zh) * | 2010-12-16 | 2015-06-03 | 中兴通讯股份有限公司 | 数据包缓存管理方法和设备 |
CN102006241B (zh) * | 2010-12-17 | 2013-11-27 | 曙光信息产业股份有限公司 | 一种多个应用共享一个缓冲区的报文接收方法 |
CN102567068A (zh) * | 2011-12-13 | 2012-07-11 | 曙光信息产业(北京)有限公司 | 一种解决内核mmap调用失败的***和方法 |
CN103441951A (zh) * | 2013-08-19 | 2013-12-11 | 南京邮电大学 | 一种基于网卡驱动的数据包处理优化方法 |
CN103617142B (zh) * | 2013-09-09 | 2017-03-15 | 南京邮电大学 | 一种基于pf_ring的高速网络数据采集方法 |
CN104506379B (zh) * | 2014-12-12 | 2018-03-23 | 北京锐安科技有限公司 | 网络数据捕获方法和*** |
CN106161398A (zh) * | 2015-04-21 | 2016-11-23 | 北京信威通信技术股份有限公司 | 抓包方法及装置 |
CN105847087B (zh) * | 2016-05-12 | 2019-02-12 | 西安航天动力技术研究所 | 非注入式网络侦听装置 |
CN108388529B (zh) * | 2018-01-26 | 2021-03-09 | 武汉中元华电电力设备有限公司 | 一种外设主动实现与cpu间数据交换的方法 |
CN108989151B (zh) * | 2018-07-20 | 2020-08-28 | 北京云杉世纪网络科技有限公司 | 用于网络或应用性能管理的流量采集方法 |
CN110784430A (zh) * | 2018-07-29 | 2020-02-11 | 雅座在线(北京)科技发展有限公司 | 一种具有环状缓冲的非阻塞网络数据处理实现方法 |
CN110347615B (zh) * | 2019-07-05 | 2022-02-18 | 南京芯驰半导体科技有限公司 | 动态资源配置方法及缓存单元 |
CN111431757B (zh) * | 2020-02-18 | 2023-03-24 | 平安科技(深圳)有限公司 | 虚拟网络的流量采集方法及装置 |
CN114900487B (zh) * | 2022-05-27 | 2023-12-19 | 深圳铸泰科技有限公司 | 基于内存设计优化流量抓取方法及*** |
CN116166508B (zh) * | 2023-04-18 | 2023-07-07 | 天津市天河计算机技术有限公司 | Io数据分析方法、装置、设备、存储介质及*** |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1435977A (zh) * | 2002-02-01 | 2003-08-13 | 联想(北京)有限公司 | 防火墙入侵检测与响应的方法 |
WO2005114910A1 (en) * | 2004-05-21 | 2005-12-01 | Xyratex Technology Limited | A method of processing data, a network analyser card, a host and an intrusion detection system |
CN1713598A (zh) * | 2004-06-25 | 2005-12-28 | 深圳市傲天通信有限公司 | 互联网共享接入检测*** |
-
2006
- 2006-09-22 CN CNB2006101133294A patent/CN100477643C/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1435977A (zh) * | 2002-02-01 | 2003-08-13 | 联想(北京)有限公司 | 防火墙入侵检测与响应的方法 |
WO2005114910A1 (en) * | 2004-05-21 | 2005-12-01 | Xyratex Technology Limited | A method of processing data, a network analyser card, a host and an intrusion detection system |
CN1713598A (zh) * | 2004-06-25 | 2005-12-28 | 深圳市傲天通信有限公司 | 互联网共享接入检测*** |
Also Published As
Publication number | Publication date |
---|---|
CN1925465A (zh) | 2007-03-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100477643C (zh) | 基于共享内存实现的数据包捕获方法 | |
CN101267361B (zh) | 一种基于零拷贝技术的高速网络数据包捕获方法 | |
CN100499568C (zh) | 具有统计收集装置的数据包传送装置和统计收集方法 | |
CN101465863B (zh) | 一种内核虚拟机环境下高效网络i/o的实现方法 | |
US10616101B1 (en) | Forwarding element with flow learning circuit in its data plane | |
CN101309216B (zh) | 一种ip包分类方法和设备 | |
US20110289485A1 (en) | Software Trace Collection and Analysis Utilizing Direct Interthread Communication On A Network On Chip | |
CN1866951B (zh) | 在网络中检测共享接入主机的方法及*** | |
CN107241305B (zh) | 一种基于多核处理器的网络协议分析***及其分析方法 | |
CN103067218B (zh) | 一种高速网络数据包内容分析装置 | |
CN107040405B (zh) | 网络环境下被动式多维度主机指纹模型构建方法及其装置 | |
CN107769992B (zh) | 一种报文解析分流方法及装置 | |
CN103294718A (zh) | 网页缓存管理方法和装置 | |
CN113518130B (zh) | 一种基于多核处理器的分组突发负载均衡方法及*** | |
CN104009885A (zh) | 一种云环境下基于隐蔽通道的虚拟机同驻检测方法 | |
CN111190662A (zh) | 基于x86板卡的网络数据平台及数据采集过滤分析方法 | |
CN112650558A (zh) | 数据处理方法、装置、可读介质和电子设备 | |
CN103036759B (zh) | 一种x86虚拟化条件下降低网络i/o操作cpu开销的*** | |
CN110851334B (zh) | 流量统计方法、电子设备、***及介质 | |
CN101340370B (zh) | 链路选择方法和链路选择装置 | |
KR101837935B1 (ko) | 전수 패킷 저장 기반의 데이터 검색 성능 향상을 위한 수신 패킷 저장 장치 및 그 방법 | |
CN106599681A (zh) | 恶意程序特征提取方法和*** | |
CN114024758B (zh) | 流量特征提取方法、***、存储介质及电子设备 | |
CN102724068A (zh) | 一种在IPv6混合网络中进行审计日志资产识别的方法 | |
CN107332725B (zh) | 一种快速解析pcap报文的方法 |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090408 Termination date: 20190922 |
|
CF01 | Termination of patent right due to non-payment of annual fee |