网络的封包撷取方法

文档序号:7668106阅读:611来源:国知局
专利名称:网络的封包撷取方法
技术领域
本发明涉及一种网络的封包撷取方法,特别涉及一种对高速传输网络
(Gigabytes Network)的封包撷取方法,用以减少系统发出中断的次数与封包解 析过程中的复制次数。
背景技术
一个网络分析工具通常由网络捕包(capture packet)模块,协议分析 (protocol analysis)模块,规则匹配(mle match)模块,响应处理(response)模块
所组成。请参考图1所示,其为现有网络封包撷取工具的架构示意图。网络捕 包模块是网络分析工具中重要的组成部分,对封包的捕获率将直接影响着网络 分析工具的性能。
请参考图2所示,其为现有的封包撷取的运作流程图。当网络卡侦测有封 包被接收时,网络卡会触发硬件中断,使得中央处理单元进入中断服务程序(步 骤S210)。中央处理单元在网络卡的中断处理程序中会将数据插入到一个缓冲 区中(步骤S220),然后再等待操作系统的软件中断调用。软件中断处理程序会 将中央处理单元欲处理的封包复制给客户端应用程序(步骤S230)。以往的应用 程序多半通过操作系统调用recvfrom()或recvmsg()等函式(flmction)来获取封 包。依据这种方法来获取一个封包的话,需要将封包逐步的从实体层(physical layer)复制到应用层(application layer)中储存。
最后,操作系统在处理完软件中断后,中央处理单元会将数据传送到应用 层中(步骤S240)。若在软件中断的过程中,又有新的封包被接收的话,会因为 硬件中断优先级比软件中断高。所以操作系统会优先的执行硬件中断处理,并 停止软件中断的运行。
若中断频率高到一定程度的话,中央处理单元忙于处理硬件中断。此时处 理封包的上层协议(例如,网络层(networklayer)或传输层(transport layer))会无 法顺利进行解析封包内容,但中央处理单元还不断往缓冲区中放数据。当缓冲
3区被塞满后,所接收的封包就只能被丢弃,这种现象称为中断活锁。
关于中断活锁所引起的问题,我们可以从两个方面来解决 一个是处理中 断的时间,另一个是缓冲区的大小。如果中断时间过短,那么操作系统频繁的 硬件中断就容易造成中断活锁。如果中断时间过长,那样就造成中央处理单元 无事可做,平白浪费了中央处理器的运算资源。另一个就是缓冲区大小,理论 上缓冲区的容量越大越好。这对于大流量的网络传输而言,因为中央处理单元 需要做频繁的切换,所以这种方法的负载较大,使得不利于应用程序接收封包。

发明内容
鉴于以上的问题,本发明的主要目的在于提供一种网络的封包撷取方法, 使得网络服务器从实体层去撷取数个封包至应用层,可以减少封包从实体层复 制到应用层的复制次数。
为实现上述目的,本发明所揭露的网络的封包撷取方法,包括下列步骤
由新应用程序接口(NewAPI, NAPI)机制来撷取封包;于内存中设置缓冲区; 提供一个钩子程序(hook processe),用以撷取封包;将文件头信息存放至缓冲 区中;利用内存映像(memory map)手段来存取缓冲区中所储存的文件头信息。
本发明在利用内核空间中的环状队列,并将所撷取到的封包存放在环状队 列中。再采用内存映像的方式来存取环状队列中所储存的封包数据,以减少将 封包从实体层复制到应用层储存的次数。
以下结合附图和具体实施例对本发明进行详细描述,但不作为对本发明的 限定。


图1为现有网络封包撷取工具的架构示意图2为现有的封包撷取的运作流程图3为本发明的运作流程示意图4为本发明的组件运作示意图。
其中,附图标记
110 响应处理模块
120 规则匹配模块
4130协议分析模块
140网络捕包模块
150封包
410网络卡
411环状队列
420系统内存
430封包
具体实施例方式
本发明提供了一种网络的封包撷取方法。通过网络卡从网络实体层去读取
数个封包至应用层。请参考图3所示,其为本发明的运作流程示意图。本发明 的封包读取方法包括下列步骤由新应用程序接口(New Application Interface,简称NAPI)机制来撷取网络封包(步骤S310)。在内核层(kernel) 中设置缓冲区(步骤S320)。提供一个钩子程序(hook processes)用以撷取封 包(步骤S330)。将所撷取到的封包存放至缓冲区中(步骤S340)。利用内存映 像(memory map)手段将储存于缓冲区的封包映像到用户系统的地址空间中(步 骤S350)。
请参考图4所示,其为本发明的组件运作示意图。同时也请配合图3的运 作流程。在本发明中采取新应用程序接口来撷取网络封包。原因在于为了解决 系统中断活锁的问题,必须降低网络卡410中断的频率。新应用程序接口的核 心概念是利用中断唤醒数据接收的服务程序,然后轮询的方法来轮询是否数据 需要被读取。新应用程序接口用以减少产生中断的数目,特别在于大量的短数 据封包。以达到不要让操作系统花费太多的时间在中断现场的保护和恢复上, 以便更多的时间用来在实体层上处理数据传输。
当网络卡410开始撷取封包时,网络卡410会将所撷取到的封包储存至一 环状队列411 (ring queue)的缓冲区中。环状队列411系以内存页面(Memory page)为单位,由连续的多个内存页面所组成。而一个内存页面为多个内存框 架(Frame)所组成。网络卡410将所撷取到的封包分别的储存在内存框架中
虽然内存框架的大小不一定与被撷取的封包大小相同。如果封包的大小比 内存框架的大,则将封包尾部超出的部分数据截去,将剩下的部分数据复制到内存框架中。除此之外,也可以仅储存封包的文件头信息。
接着通过内存映像的方式来存取环状队列411中所储存的封包430。将储 存于环状队列411中的封包430映像到应用程序所使用的内存空间中。特别需 要注意的是,此一步骤所指的应用程序为利用本发明的撷取封包方法的应用程 序,其所配置给应用层应用程序的地址空间。内存映像的主要目的在于减少 读写文件的开销、分配一个较大的内存空间与在应用程序进行中共享内存数 据。这样一来,操作系统不需频繁的从实体层复制封包430到应用层中。
应用程序根据内存映像后得到的环状队列411起始地址提供相应的两组 向量指标。这两个向量指针分别设置于系统内核与应用层中。在系统内核的向 量指针提供软中断处理函数使用,它会依次将待处理队列中的封包复制到环状 队列411中。直至将环状队列411塞满。另一个是在应用层的向量指标,其为 提供应用程序所使用。在应用层的向量指针用以处理环状队列411中的封包, 直至环状队列411中无新的封包430。
本发明在利用网络卡410中的环状队列411,并将所撷取到的封包存放在 环状队列411中。再采用内存映像的方式来存取环状队列411中所储存的封包 430,以减少将封包430从实体层复制到应用层储存的次数。
当然,本发明还可有其它多种实施例,在不背离本发明精神及其实质的情 况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但 这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
权利要求
1、一种网络的封包撷取方法,由一网络服务器执行下列步骤,使得该网络服务器所执行的应用程序通过一网络卡从一网络实体层中撷取数个封包至一应用层,其特征在于,该封包撷取方法包括下列步骤由一新应用程序接口来撷取该些封包;在该网络卡中设置一缓冲区;提供一钩程序用以撷取该些封包;将所撷取到的该些封包存放至该缓冲区中;以及利用一内存映像手段将储存于该缓冲区的该些封包映像到相应的应用程序的内存空间中。
2、 根据权利要求1所述的网络的封包撷取方法,其特征在于,撷取该些 封包更包括以下步骤撷取该些封包的一文件头信息;及将该缓冲区中所储存的该些文件头信息映像到相应的应用程序的内存空 间中。
3、 根据权利要求2所述的网络的封包撷取方法,其特征在于,该应用层 存取该系统内存中所储存的该些文件头信息。
4、 根据权利要求l所述的网络的封包撷取方法,其特征在于,该缓冲区 由一环状队列所构成。
全文摘要
一种网络的封包撷取方法,由网络服务器通过网络卡从实体层中撷取数个封包至应用层,封包撷取方法包括下列步骤由新应用程序接口(NewApplication Interface,NAPI)来撷取封包;在内核层(kernel)中设置环状队列;提供钩程序用以撷取封包;将所撷取到的封包存放至环状队列中;利用内存映像手段将储存于环状队列的封包映像到相应的应用程序的内存空间中。以减少系统发出中断的次数与封包解析过程中的复制次数。
文档编号H04L12/26GK101453386SQ20071019905
公开日2009年6月10日 申请日期2007年12月7日 优先权日2007年12月7日
发明者刘文涵, 宋贤广, 王兴家, 陈玄同 申请人:英业达股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1