深度剖析WinPcap之(四)——WinPcap的体系架构
2009-09-11 00:00:00 来源:WEB开发网用户缓冲区的大小非常重要,因为它决定了在单个系统调用内,能够从内核空间复制到用户空间的最大数据量。另一方面,在单个调用中能够复制的最小数据量也非常重要的。该变量如果为一个巨大的数值,内核在把数据复制到用户层前需要等待几个数据包的到来。这保证了低数量的系统调用,也就是,低的处理器占用,这对诸如嗅探器的应用程序是一个很好的设置。在另一方面,一个小的数值意味着只要应用程序准备好接收数据包,内核就将复制数据包。这对于实时应用程序是极好的(如ARP重定向器(redirectors)或网桥)方案,这些程序需要内核做出更好的响应。从这些方面看来,NPF具有一个可配置的特性,允许用户在最好的效率与好的响应度(或任何中间情况)之间做出选择。
库wpcap.dll包括两个系统调用,能够用来设置读超时时间与内核能够传输到应用程序的数据的最小数量。缺省状态下,读超时时间为1秒,内核与应用程序之间数据复制的最小数量为16K。
1.3.2.2 数据包发送
NPF 允许把原始数据包发送到网络上。为发送数据,一个用户层应用程序在NPF设备上执行一个WriteFile()系统调用。该数据被发送到网络,并不对数据作任何协议封装,因此应用程序将不得不构建每个数据包的不同协议头。应用程通常不需要生成FCS,它通常由网络适配器硬件计算,并在发送到网络前自动添加到一个数据包的尾部。
正常情况下,网络数据包的发送率并不是非常高,因为每个数据包都需要一个系统调用。因为该原因,WinPcap添加了使用一次写系统调用就能把单个数据包发送多次的功能。通过IOCTL调用(控制码为pBIOCSWRITEREP),用户层应用程序能够设置单个数据包发送的次数。例如,该值设为1000,应用程序所写的每个原始数据包在驱动设备文件上都将会发送1000次。能够用该特性可为测试的目的生成高速的网络流量:上下文切换的负载不再出现,因此性能显著性的变好。
- ››深度解释攻击linux服务器的四种级别
- ››剖析java.util.concurrent锁
- ››剖析Android智能手机系统的更多功能
- ››深度分析地方社区网站的内容定位
- ››剖析Windows Azure Platform框架与组成
- ››剖析使用 ObjectOutputStream 可能引起的内存泄漏...
- ››剖析EWebEditor编辑器漏洞攻击案例
- ››剖析开源云:构建 Infrastructure as a Service 块...
- ››深度剖析 Android 和 iPhone OS
- ››深度分析:HTML5能否成为Flash终结者
- ››深度挖掘 更多Windows 7快捷模式
- ››深度挖掘 Windows 7快捷模式
更多精彩
赞助商链接