李慧萍 鲁晓帆 张凯
1长春工业大学计算机科学与工程学院 吉林 130012
2内蒙古交通建设工程监理咨询有限责任公司 内蒙古 021008
随着Internet技术和网络业务的飞速发展,用户对网络资源的需求空前增长。不断增加的网络用户和应用,导致网络负担沉重,网络设备超负荷运转,从而引起网络性能下降。优化网络性能首先要对当前网络的性能进行测量,全面地、系统地了解计算机网络中存在哪些性能问题以及如何解决这些性能问题。而数据包捕获是网络测量的重要手段,快速准确的数据包捕获技术是优化网络性能的基础、前提条件。
以太网是一种总线型的网络,总线的特点是:当一台计算机发送数据时,总线上所有计算机都能检测到这个数据。从逻辑上来看是由一条总线和多个连接在总线上的节点所组成,各个节点采用CSMA/CD协议进行信道的征用和共享,每个节点通过网卡来实现这种功能。
网卡具有如下的几种工作模式:
(1)广播模式:该模式下的网卡能够接收到网络中的广播信息。
(2)组播模式:该模式下的网卡能够接收组播数据。
(3)直接模式:工作在直接模式下的网卡只能接收目的地址是自己Mac地址的帧。
(4)混杂模式:工作在混杂模式下的网卡接收所有的流过网卡的帧,数据包捕获程序就是在这种模式下运行的。
通常,网卡的缺省工作模式包含广播模式和直接模式。因此,为了捕获到所有经过该网卡的数据包就必须先将网卡设置成混杂模式。这样,就可以捕获到流经该网卡的所有数据包,实现对网络进行监测的目的。
Winpcap(Windows Packet Capture)是由意大利人Fulvio Risso和Loris Degioanni提出并实现的。是Windows平台下一个免费、公共的网络访问系统,是为Linux下的Libpcap移植到Windows平台下实现数据包捕获而设计的函数库。在设计WinPcap时参照了Libpcap,使用方法也与Libpcap相似,基于Libpcap的程序可以很容易的移植到Windows平台下。如今,大部分Windows平台下有数据包捕获功能的软件都使用了WinPcap作为编程接口,如Windump、Sniffit、Wireshark等。它具有访问底层的能力,提供了捕获原始数据包,按照一定规则过滤数据包,以及发送原始数据包的功能。
Winpcap由三个模块构成:
(1)NPF(Netgroup Packet Filter),网络组包过滤器:它是运行于操作系统内核中的驱动程序,直接与网卡驱动程序进行交互,获取网络上传输的原始数据包。同时还可以发送、存储数据包以及对网络进行统计分析。
(2)Packet.dll动态链接库:它为Win32平台提供了一个公共的接口,不同版本的Windows系统都有自己的内核模块和用户层模块。Packet.dll用于解决这些不同,调用Packet.dll的程序可以运行在不同版本的Windows平台上而无需重新编译。
(3)Wpcap.dll高级动态链接库:该动态链接库比Packet.dll更高级,它的调用与操作系统无关,它和应用程序编译在一起,使用由Packet.dll提供的服务,向应用程序提供完善的接口函数,提供了更高层、更抽象的函数。Winpcap的结构如图1所示。
图1 Winpcap结构图
(1)Pcap_findalldevs_ex():获取设备列表;
(2)Pcap_open_live():打开一个网络接口进行数据捕获;
(3)Pcap_compile():编译过滤程序;
(4)Pcap_setfilter():设置过滤条件;
(5)Pcap_loop():循环捕获网络数据包;
(6)Pcap_close():关闭Winpcap关联文件并释放相关资源。
Winpcap捕获数据包流程如图2所示。
图2 Winpcap数据包捕获流程图
虽然,Winpcap具有强大的数据包捕获功能,目前大部分Windows平台下有数据包捕获功能的软件都使用了Winpcap作为编程接口,但是,随着网络技术的发展和高速网络链路的普及,Winpcap在数据包捕获性能方面的缺陷也逐渐暴露。探究其原因主要有两方面:一方面是:数据包接收时产生的中断开销;另一方面是:将数据包从内核空间拷贝到用户空间的系统调用和内存拷贝需要消耗大量的CPU资源。这就使得基于Winpcap实现的网络流量捕获程序很难适用于百兆以上链路环境中。在高速网络中,调用系统读写的次数会显著增多,相应的丢包率也会增高。
针对以上问题,我们提出了动态多线程技术。该技术的核心思想是:根据实时的网络流量动态的调整捕获数据包的线程数目,线程数目随流经网卡数据包数量的增加而增加。这样就可以有效的解决丢包率的问题,大大提高数据包捕获的效率。
本文简要介绍了数据包捕获技术的基本原理,Winpcap函数库的构成及Winpcap数据包捕获程序的工作流程,并针对当前数据包捕获技术中普遍存在的丢包率的问题给出了相应的解决方案。通过动态多线程技术可以有效的降低丢包率,提高数据包捕获的效率。对提高网络安全性、优化网络性能有着重要作用。
[1]谢希仁.计算机网络(第5版)[M].电子工业出版社.2009.
[2]廖敏,文庆.Windows平台下网络数据包捕获的设计与实现[J].电脑知识与技术.2008.