Winpcap的体系结构与性能研究
深度剖析WinPcap之(序言)

深度剖析WinPcap之(序言)——分析WinPcap源代码的缘由过去我一直在开发软件,包括Windows操作系统的应用软件,Linux操作系统的应用软件与驱动程序,也开发过一些嵌入式软件,并在后来的工作中逐渐专注于对软件的测试工作,主要从事软件测试技术与测试方法、软件工程的研究。
在此过程中与其他开发人员、测试人员一同工作,帮助他们构建达到工业级标准的软件,或者指导他们提高软件开发或测试的技术水平。
随着不断的遇见问题、解决问题,我也在思考一个问题:那就是软件开发人员与软件测试人员除了对应用程序需要清晰的理解之外,是否还需要对支撑应用软件运行的操作系统,共享库等有深入的了解?下面通过我亲身经历的两个案例来考虑该问题:案例1:嗅探软件掉包问题某自行开发的网络数据包嗅探软件,在对被测试设备进行数据包分析时,发现有掉包现象,但待测设备运行正常。
经过仔细分析,发现该嗅探软件设计有如下问题:针对高速网络流量,从软件架构上就没考虑到如何防止掉包的问题。
软件开发人员对该嗅探软件进行各种优化,比如增加缓冲区的大小,降低显示的复杂度、分析代码性能瓶颈,但都改善不大。
通过对所调用WinPcap库的仔细分析,获得下列解决方案:让WinPcap的内核驱动程序NPF实现协议过滤,而不是通过嗅探软件进行过滤,同时就在内核实现数据包的存储,而不导入应用层后进行存储。
该案例提醒我们,在测试人员开发测试工具时,需要对所用的支撑软件有深入的了解,才能更好的解决所遇到的实际问题。
内核层的过滤与转储功能是WinPcap的NPF驱动程序提供的优化功能,就是解决高速网络流量掉包问题的。
案例2:AD数据采集系统掉点问题某AD数据采集系统,基于嵌入式Linux系统实现,对所采集的数据进行分析,出现掉点现象。
经过仔细调试发现采样率还不到所要求一半时就开始出现掉点现象,采样率越高掉点现象越严重。
项目组相关人员对Linux驱动程序的机制了解不够深入,应用层软件开发人员对软件进行各种调优,收效甚微,曾一度怀疑是文件系统存储速度慢或硬件问题导致,项目陷入困境。
深度剖析WinPcap之

深度剖析WinPcap之WinPcap简介WinPcap是Windows平台下访问网络数据链路层的开源库,该库已达到工业标准的应用要求。
WinPcap允许应用程序绕开网络协议栈来捕获与传递网络数据包,并具有额外的有用特性,包括内核层的数据包过滤、一个网络统计引擎与支持远程数据包捕获。
1.1. 什么是WinPcap大多数网络应用程序通过被广泛使用的操作系统原语来访问网络,诸如sockets。
操作系统已经处理了底层的细节问题(如协议处理,数据包的封装等),并提供与读写文件类似的、熟悉的接口,这使得用该方法可以很容易的访问网络中的数据。
然而有些时候,这种“简单的方式”并不能满足任务要求,因为有些应用程序需要直接访问网络中的数据包。
也就是说,应用程序需要访问网络中的“原始”数据包,即没有被操作系统使用网络协议进行处理过的数据包。
WinPcap的目的就是为Win32应用程序提供这种访问方式。
WinPcap提供下列功能:•捕获原始数据包,无论是发送到运行WinPcap机器上的数据包,还是在其它主机(共享介质)上进行交换的数据包•在数据包分派给应用程序前,根据用户指定的规则过滤数据包•将原始数据包发送到网络•收集网络流量的统计信息1.2. WinPcap的优点自由 WinPcap遵循BSD open source licence发布。
这意味着你的应用程序拥有全部自由来修改与使用它,即使应用程序是商业化的。
高性能WinPcap实现了有关数据包捕获文献中描述的所有典型的优化方法(比如内核级的过滤与缓冲,减少上下文交换,数据包部分内容复制),加上一些原创的优化方法,如JIT过滤器编辑(JIT filter compilation)与内核级的统计过程。
因为这些原因,WinPcap胜过其它可比的方法。
普及WinPcap被许多工具作为网络接口使用——无论是自由软件还是商业软件。
包括网络协议分析器、网络监视器、网络入侵检测系统、网络嗅探器、网络流量生成器、网络测试器等等。
基于WinPcap的网络分析的研究与实现

基于 WiP a n cp的网络分析 的研 究与实现
徐 波 。张勤 慧
( 南京林业大学 信息 ( 网络)中心 , 南京 203) 107
摘 要 :主要讨论利 用 WiP a n cp开发 包实现 Wid w no s下网络数据 包的捕 获技术 ,分析 了I 、T P等协议 的解析过 P C
划分 硬件 和软件监控 系统 。实 时监 视 、控制和记 录局域 网 中
的违 规 行 为 是 网络 监 控 系 统标 准 功 能 。 目前 国外 主 要有 : Ehra 和 S ie 这两款软件 。S ie 软件它能够给 网管员实 tee l nfr n r f
3 WiP a n cp研 究
通过用 户级 的程 序接 口来实现 抓包 ,通过这 些接 口,用
最后 介绍 了利 用 vc + + 开发工 具来 实现实 时抓取 并分 析数 据 包 ,将 协议 、I P源地址 、 目标地址 、包长度等 主要协议 内容
保存 下来 ,提供给用户 ,也是为进 一步 的网络分 析打下坚 实
的基 础 。
户 程序 可以利用 内核驱 动提供 的高级 特性 。pc ed1 w — akt l和 p . cpd1 Wi cp提 供 的 两 个 库 。 pc e 提供 了 一 个 底 层 a.l是 n a p ak t
AI P ,通过 它可 以直接用来访 问驱动 的函数 ;Wip a n cp导 出了
Ab t a t ag o a ra n t r sn n v ra r walh s i a t l r m h sr c :a l r e lc a e ewo k u i g u i e s l e l a e n u a l o me t e a t a e d , h s r ce fo te l i f t i p a t a n i e r g r q ie n s u e t e W iP a r e o a h e e a p a t a ewo k mo i r g s se T i a t l r c il e gn e n e u r me t , s h n c p d v r t c iv r ci l n t r n ti y t m. h s r c e c i i c on i ma ny d s u s s t e u e o n c p d v l p n i wi d ws n t r a k t c p u e tc n lg .An l ss o P CP i l ic s e h s f Wi P a e e o me t kt n o ewo k p c e a t r e h oo y ay i f I ,T p o o o a s g p o e s u i g t e MS S ld t a et tr aa n t o k F n l , s b ih d t e s se h r w r p rt g r t c lp r i r c s , s - q a a s O s e d t e w r . i al e t l e y t m a d a e o e ai n n h b o y a s h n e v r n n , h u h t sig t c i v AN n t r gf n t n n i me t tr g e t , o a h e eL o o n mo i i u ci . on o
WinPcap的体系架构

WinPcap 的体系架构深度剖析WinPcap 之(四)——WinPcap 的体系架构(1) 2009-08-31 20:02:37 标签:架构WinPcapWinPcap 是Win32 平台下用于数据包捕获与网络分析的一个架构。
它包含一个内核层数据包过滤器,一个底层动态链接库( packet.dll ),与一个高层并独立于系统的库 (wpcap.dll )1.1 WinPcap 的主要组成WinPcap 的各个主要组成部分如图2-1 所示。
图2-1 WinPcap 的主要组成首先,为了访问网络上传输的原始数据,一个捕获系统需要绕过操作系统的协议栈。
这需要一部分程序运行于操作系统的内核中,来与网络接口驱动直接交互。
该部分与操作系统密切相关,WinPcap 的解决方案是实现一个叫做Netgroup Packet Filter (NPF )的设备驱动程序,并对Windows 95 、Windows 98 、Windows ME 、Windows NT 4 、Windows 2000 与Windows XP 等不同操作系统提供不同版本的驱动程序。
这些驱动程序提供了数据包捕获与发送的基本特性,同时也提供诸如一个可编程的过滤系统与一个监控引擎之类的更高级特性。
第一个特性可用于限制一个捕获会话,只捕获特定的网络数据包(比如,可以只捕获一个特定主机生成的ftp 数据包)。
第二个特性提供了一个强大但简单的方式,来获取网络流量的统计信息(比如,可以获取网络负载或两个主机间所交换数据的数量)。
其次,捕获系统必须导出一个接口,使得用户层应用程序可使用内核驱动所提供的特性。
WinPcap 提供两个不同的库:packet.dll 与wpcap.dll 。
第一个库提供一个底层的API ,可用来直接访问驱动程序的函数,提供一个独立于微软的不同操作系统的编程接口。
第二个库导出了更强大的、更高层的捕获函数接口,并提供与UNIX 捕获库libpcap 的兼容性。
winpcap数据结构

保存已捕获数据包的数量,丢弃数据包的数量等统计信息
sf_pkthdr
在驱动缓冲中的数据包的首部,该驱动在dump模式下,与bpf_hdrstructure相似,但更简单
__CPU_Private_Data
每个CPU的核心缓存
_DEVICE_EXTENSION
端口设备扩展
_INTERNAL_REQUEST
保存一个对象标识(OID)请求
_OPEN_INSTANCE
包含一个运行着的NPF驱动实例的
_PACKET_RESERVED
包含一个NDIS数据包
active_pars
activehosts
在激活模式下打开的所有连接的列表
binary_stream
X86体系的二进制代码流
daemon_slpars
保存daemon_serviceloop()函数所需要的参数
JIT_BPF_Filter
描述X86过滤程序的结构编写:jitter
packet_file_header
libpcap的当机转储文件(dump file)的首部
PacketHeader
内核缓冲池中每个数据包的预定结构
pcap_addr
接口地址描述,用于函数pcap_findalldevs()
pcap_file_header
libpcap的当机转储文件(dump file)的首部
pcap_if
接口表中的一项,用于函数pcap_findalldevs()
pcap_pkthdr
pcap_stat
描述接口的静态信息
rpcap_auth
描述被用于远程主机验证的所需的数据
rpcap_filter
第7章 Winpcap编程技术

PacketSetHwFilter() 设置接收模式(一般设置为混杂模式) 设置接收模式(一般设置为混杂模式) PacketSetBpf() PacketSetBuff() 编辑设置过滤规则 设置核心缓冲区大小
PacketSetReadTimeout() 设置读操作等待时间 PacketAllocatePacket() 设置(分配)用户缓冲区 设置(分配) PacketInitPacket() PacketReceivePacket() 初始化
Winpcap的各个组成部分
6
常州大学信息学院
网络编程
1、NPF驱动
网络数据包过滤器(Netgroup Filter, NPF)是Winpcap的核心部分。它处理网络 上传输的数据包,并且对用户级提供捕获、 发送和分析等功能。 NPF是一个协议驱动,它包括Network Tap和Packet Filter两个主要部件。
30
常州大学信息学院
网络编程
3、接口数据结构
struct pcap_if { struct pcap_if *next; char *name; char *description; struct pcap_addr *addresses; u_int flags; };
31
常州大学信息学院
网络编程
10
常州大学信息学院
网络编程
2、typedef struct _PACKET *LPPACKET
描述一组网络数据包的结构。它包含 了以下几个域: OVERLAPPED OverLapped PVOID Buffer UINT Length PVOID ulBytesReceived BOOLEAN bIoComplete
发送一个或多个数据报的副本。
winpcap

winpcap(windows packet capture)是windows平台下一个免费,公共的网络访问系统。
开发winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。
目录winpcap 驱动各项功能Winpcap的内部结构Winpcap程序实例winpcap卸载不干净的解决方法编辑本段winpcap 驱动各项功能1> 捕获原始数据包,包括在共享网络上各主机发送/接收的以及相互之间交换的数据winpcap结构包;2> 在数据包发往应用程序之前,按照自定义的规则将某些特殊的数据包过滤掉;3> 在网络上发送原始的数据包;4> 收集网络通信过程中的统计信息。
winpcap的主要功能在于独立于主机协议(如TCP-IP)而发送和接收原始数据包。
也就是说,winpcap不能阻塞,过滤或控制其他应用程序数据包的发收,它仅仅只是监听共享网络上传送的数据包。
因此,它不能用于QoS调度程序或个人防火墙。
目前,winpcap开发的主要对象是windows NT/2000/XP,这主要是因为在使用winpcap的用户中只有一小部分是仅使用windows 95/98/Me,并且MS也已经放弃了对win9x的开发。
因此本文相关的程序T-ARP也是面向NT/2000/XP用户的。
其实winpcap中的面向9x系统的概念和NT系统的非常相似,只是在某些实现上有点差异,比如说9x只支持ANSI编码,而NT系统则提倡使用Unicode编码。
有个软件叫sniffer pro.可以作网管软件用,有很多功能,可监视网络运行情况,每台网内机器的数据流量,实时反映每台机器所访问IP以及它们之间的数据流通情况,可以抓包,可对过滤器进行设置,以便只抓取想要的包,比如POP3包,smtp包,ftp包等,并可从中找到邮箱用户名和密码,还有ftp用户名和密码。
它还可以在使用交换机的网络上监听,不过要在交换机上装它的一个软件。
winpcap分析

4.3.2 4.3.3 4.4 4.4.1 4.4.2
结构图............................................................................................................... 25 源码分析............................................................................................................29 系统特色............................................................................................................46 分布式网络监听 .................................................................................................46 简单网络管理.................................................................................................... 46
第 5 章 系统测试与使用说明书 ......................................................................................47 5.1 5.1.1 5.1.2 5.1.2 5.1.3 5.2 5.3 结论 致谢: 系统测试............................................................................................................47 监听功能............................................................................................................47 显示功能............................................................................................................48 管理功能............................................................................................................51 连接功能............................................................................................................52 工具软件的配置 .................................................................................................54 监听工具的使用 .................................................................................................55 .....................................................................................................................56 .....................................................................................................................61
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Winpcap的体系结构与性能研究摘要: Winpcap有一系列创新(如数据包监视和数据包注入)的特点,这在以前的操作系统中是见不到的。
介绍了Winpcap的系统结构及其功能。
关键词: Winpcap;数据包监测;数据包注入网络分析软件通常依赖底层调用抓取数据包,进行数据包监视或流量分析等。
大多数的Unix系统都提供这些功能(至少是数据包抓取),而Windows提供的这些功能却不令人满意。
Windows提供了一些与各种内核组件相关的API,但这些API存在严重的缺陷,如并不是所有的Netmon API都可用,而且其扩展存在很多限制。
IP过滤驱动程序(IP filter driver)只存在Windows 2000及以上系统中,而且它只支持IP协议,虽然它能够控制和丢弃数据包但却不能监测和构造数据包。
PCAUSA提供了一个商业产品,该产品含有数据包捕获和BPF兼容的过滤器,然而它的用户接口处于底层且没有提供过滤器构造这样的抽象方法。
随着原本在Unix系统上的应用不断转向Windows系统,这些特性的缺失成了不可忽视的问题。
本文主要介绍一个强大可扩展的Win32平台的网络监听框架系统Winpcap的结构及其功能。
该体系结构填补了Unix和Windows间网络监听能力的间隔,使得Unix应用到Windows的移植更简单,而且Winpcap把性能放在最首位,使其能满足更苛刻的需求。
1 Winpcap的体系结构Winpcap的基本结构,由1个过滤引擎、2个缓冲区(内核层与用户层)以及一系列供开发人员使用的组件库组成。
尽管Libpcap具有稳固的结构并且功能强大,但Winpcap在结构和数据捕获上仍然有自己独到的地方,而且甚至可以认为是对Libpcap的创新。
Winpcap的过滤可从用户层开始(与Libpcap兼容),开发人员可以自定义包过滤条件(如picks up all udp packets);Winpcap会把它们编译成一些虚拟指令(如if the packet is ip and the protocol type field is equal to 17,then return true),同时把这些虚拟指令发送到过滤引擎,并且激活这些功能。
要实现这些目的,内核模块必须能够执行指令,因此需要一个“虚拟BPF”用来在每个接收的数据包执行这些虚拟代码。
其中内核层的过滤引擎是获得高性能的关键。
NPF与BPF在体系上最大的不同是对循环缓冲区的使用选择[1]。
Winpcap每次复制一部分数据包,Winpcap的缓冲区不再是固定大小(Libpcap 的内核缓冲区与用户缓冲区都是32 KB),而且在将数据包从内核缓冲区复制到用户缓冲区的过程中对数据包进行更新,而不是复制完后更新。
在复制过程中,将已经传送的数据包所占用的空间立即释放,因为尽管Winpcap工作在较高的优先级并且可能一直垄断CPU,但内核层的捕获程序可能会中断复制过程。
只要交换缓冲区允许占用一般的内存,Winpcap的缓冲区就可以存放大量的数据包。
内核缓冲区仅通过一个read函数就可以完全复制,这可以减少大量的系统调用并且避免程序在内核层与用户层之间频繁切换。
因为环境的切换之前必须保存任务状态(CPU描述符与任务状态大约有几百个字节),频繁切换会导致CPU使用率下降。
Winpcap的内核缓冲区比BPF的要大(为1 MB),因为较小的内核缓存也会带来一些问题,特别是当程序无法与捕获数据包的驱动程序的速度保持一致情况下,这种情况在将数据发往硬盘或网络数据量激增的情况下很常见。
相反,用户缓冲区需要小一些,通常情况下为256 KB。
内核缓冲区与用户缓冲区都可以在运行时调整。
用户缓冲区的大小至关重要,因为它决定了仅通过一个调用最多可以从内核读多少数据,同时,一次从内核中至少应该读多少数据也很重要。
如果给出一个较大的值,则内核可以在数据送往用户缓冲区之前等待足够多的数据包到达,这可以减少一些系统调用。
如果给出一个较小的值,则意味着内核可以将数据包尽快送往用户缓存。
这对那些实时性要求比较高的应用来说很重要,一个好的捕获引擎会在两者之间做出好的平衡。
NPF是可配置的,让用户选择程序具有好的执行效率或快速的反应。
而Winpcap提供了一组函数可以设置数据包读延时和数据包拷贝的最小值。
当读延时或内核缓冲区获得的数据包数据量满足了最小值,数据都会被送往用户缓冲区。
延时默认设置为1 s,最小数据量设置为16 KB,这种功能被称之为“延迟写入”。
1.1 统计模式包捕获与网络分析会过多占用CPU,因为有大量的数据需要处理和拷贝。
提高执行速度最常用的方法是提高过滤引擎的速度与一次拷贝结构,这种方法是通过将内核缓冲区映射到程序内存来实现。
一次拷贝的操作会减少数据的拷贝,但并不会减少内核层与用户层之间的系统调用。
如果用户一次读一个数据包,环境切换的代价会抵消一次拷贝所带来的好处。
一种新的方法是监视时并不将数据包送往用户层,而是Winpcap将监视的功能放在内核层,这样就可以避免数据送往用户层。
Winpcap提供了一种嵌入在NPF过滤引擎中的可编程的统计模式,可以使过滤器成为强大的分类器而不仅仅是过滤器。
应用程序可以使用这个模块监视任意的网络行为(如网络下载、两台主机间的网络流量、每秒钟的网页访问数量),并且可以在预先设定的时间间隔获得这些结果。
统计模式避免了数据拷贝,并且实行0拷贝模式(统计行为在数据包到达网卡驱动的存储区时执行,之后数据包被丢弃),所以不需要缓冲区。
统计模式是监视网络的一种极为有效的方法,且能在高速网络中表现出良好的性能。
Winpcap为开发人员提供了一组高层调用可以很容易地使用统计模式,对那些习惯了Libpcap的开发人员来说很容易掌握。
1.2 数据包注入BPF与NPF都提供了直接发送原始包的功能,可以将数据包直接发送到网络中。
但是Libpcap并没有使用这些调用,而BPF也并不是用于此目的。
大多数Unix系统都提供了直接发送原始包的功能,而Windows只有2000才提供了此功能,且功能受限。
因此,Winpcap是Win32平台上第一标准的而且可靠的发送原始包的类库。
NPF 提供了许多新的函数可以发送多个数据包而只在内核层与用户层之间切换一次。
Winpcap虽然提供了很多函数可以去开发这些新的功能(但并没有直接提供这些功能),它需要开发人员手工构造数据包或利用已有的工具。
而用户可以使用Libnet Packet Assembly Library(即在Winpcap上加了一层功能),就可以构造数据包并发送到网络中。
2 性能分析主要是对Winpcap的性能进行测试,用Winpcap在Windows98与Windows2000下的表现与Libpcap/BPF 在FreeBSD下的表现进行比较。
图2为两台主机直接相连,以排除外部数据包的干扰,使实验结果更精确。
一台主机是Windows2000操作系统,使用基于Winpcap的工具产生大量的数据包发送到网络中,并保证高速率。
数据包的大小选择,是以保证每秒所产生的数据包都能够达到一个极限值。
操作系统安装在同一台主机上的不同硬盘分区上,以避免由于硬件原因带来的差异。
数据包被发送到不同的主机上,这样可以使两台主机之间不用进行交互。
接收端的主机网卡设置为混杂模式,根据测试主题的不同而用不同的工具捕获数据包。
根据测试需要,数据包收到后或丢弃、或传送给应用程序、或存储在硬盘中。
FreeBSD的CPU负载可以在TOP PROGRAM 查看,Windows2000可以通过任务管理器查看,Windows98则可以用CPUMETER查看(可以从网上获得)。
被测试的软件都是最新的发行版,Winpcap的内核缓冲区为1 MB,Libpcap的缓冲区被设置为2个512 KB大小的空间(默认为32 KB)。
这些实验将努力避免其他软件对实验结果的影响,但是结果并不能准确地表现出单独组件的性能,因为不同的组件不交互基本上是不可能的。
2.1 发送实验发送实验是测试发送性能,只在Windows2000下进行(95/98没有对这个功能做优化)。
图3显示了当每个包都为88 B的情况下达到每秒发送的最大值(原认为在每个包为64 B的情况下会达到最大值),这出乎意料。
因为测试并不依赖NPF,CPU的负载始终没有达到100%,这也说明了NPF并不是瓶颈所在。
当数据包为400 B 时网络达到全速。
经实验发现发送能力更多依赖于网卡,当更换网卡、并在相同情况下进行测试时,发送速度只能达到每秒30 000个包。
2.2 接收与过滤实验接收与过滤能力实验测试:数据包被网络接口接收并被过滤器检查,如果所有的包都不会满足过滤条件,它们将在检查后被丢弃(不会被拷贝)。
测试在两种情况下进行:第一种使用3条BPF虚拟指令;第二种使用13条复杂的BPF虚拟指令。
图4为网络分离和过滤性能,几乎所有的包都被接受并没有被过滤器检查。
Windows98的CPU负载明显高于Windows2000(但是也在可以接受的范围内)FreeBSD 表现很差,只捕获大约一半的数据包,而且CPU负载始终较高。
2.3 向应用程序传送数据包的测试测试应用程序从Winpcap接收数据包的能力(收到后直接丢弃,并不做进一步的处理),检验整个Winpcap体系的功能,包括数据从网卡复制到内核缓冲区再到用户缓冲区,而且将不使用过滤功能。
图5为测试结果,Winpcap几乎可以将所有从网络接口获得的数据全部送至应用程序,没有数据包在内核缓冲区被丢弃。
而FreeBSD并不能做到这些,特别是在高数据率的情况下,大部分的数据包在没有到达过滤器之前已被丢弃。
无论在Windows2000还是FreeBSD中,CPU的负载都随着数据包容量的增大而降低,Windows98因为没有延迟写入的能力而表现一般。
2.4 程序性能实验实验将使用基于Winpcap的工具将获得的数据包转存在文件中,结果。
程序将每个数据包的68 B的内容存到文件中。
所有的系统在高数据率的情况下都会丢失一些数据包:一部分是因为恪守CPU时间(当一个数据包到达时,程序却还在处理前面的包);另一部分则因为内核缓冲区没有足够的空间去存放数据包。
图7为整个数据包被写入文件时的结果。
2.5 监视实验监视实验在AD-HOC网络上进行。
实验结果表明CPU负载一直维持在较低的水平,而且结果与图4相类似。
图5显示了在用户层监视的代价远高于内核层,这些多余的代价会给用户层监视的性能带来折扣。
另外,用户层的监视需要大容量的缓冲区。
3 Winpcap 的改进意见根据实验结果与体系结构的特点,采取了如下相应的改进措施:3.1 过滤引擎改进因为采用动态代码生成技术对BPF进行改进,使BPF性能取得明显效果,因此对NPF 也进行了类似的改进,采用JIT(Just In Time)技术,将过滤代码翻译成X86的二进制代码,这项改进使整体的捕获性能提高了约8%。