WEB开发网
开发学院操作系统windows 2008 深度剖析WinPcap之(四)——WinPcap的体系架构 阅读

深度剖析WinPcap之(四)——WinPcap的体系架构

 2009-09-11 00:00:00 来源:WEB开发网   
核心提示: 用户缓冲区的大小非常重要,因为它决定了在单个系统调用内,深度剖析WinPcap之(四)——WinPcap的体系架构(7),能够从内核空间复制到用户空间的最大数据量,另一方面,应用程序所写的每个原始数据包在驱动设备文件上都将会发送1000次,能够用该特性可为测试的目的生成高速的网络流量:上下文切换

用户缓冲区的大小非常重要,因为它决定了在单个系统调用内,能够从内核空间复制到用户空间的最大数据量。另一方面,在单个调用中能够复制的最小数据量也非常重要的。该变量如果为一个巨大的数值,内核在把数据复制到用户层前需要等待几个数据包的到来。这保证了低数量的系统调用,也就是,低的处理器占用,这对诸如嗅探器的应用程序是一个很好的设置。在另一方面,一个小的数值意味着只要应用程序准备好接收数据包,内核就将复制数据包。这对于实时应用程序是极好的(如ARP重定向器(redirectors)或网桥)方案,这些程序需要内核做出更好的响应。从这些方面看来,NPF具有一个可配置的特性,允许用户在最好的效率与好的响应度(或任何中间情况)之间做出选择。

库wpcap.dll包括两个系统调用,能够用来设置读超时时间与内核能够传输到应用程序的数据的最小数量。缺省状态下,读超时时间为1秒,内核与应用程序之间数据复制的最小数量为16K。

1.3.2.2 数据包发送

NPF 允许把原始数据包发送到网络上。为发送数据,一个用户层应用程序在NPF设备上执行一个WriteFile()系统调用。该数据被发送到网络,并不对数据作任何协议封装,因此应用程序将不得不构建每个数据包的不同协议头。应用程通常不需要生成FCS,它通常由网络适配器硬件计算,并在发送到网络前自动添加到一个数据包的尾部。

正常情况下,网络数据包的发送率并不是非常高,因为每个数据包都需要一个系统调用。因为该原因,WinPcap添加了使用一次写系统调用就能把单个数据包发送多次的功能。通过IOCTL调用(控制码为pBIOCSWRITEREP),用户层应用程序能够设置单个数据包发送的次数。例如,该值设为1000,应用程序所写的每个原始数据包在驱动设备文件上都将会发送1000次。能够用该特性可为测试的目的生成高速的网络流量:上下文切换的负载不再出现,因此性能显著性的变好。

上一页  2 3 4 5 6 7 8  下一页

Tags:深度 剖析 WinPcap

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接