高速网络数据包捕获技术方法研究_周照峰
- 格式:pdf
- 大小:210.20 KB
- 文档页数:3
科技经济市场
1引言
随着信息技术的迅猛发展,互联网上的数据流量不断增大,目前计算机网络的物理层传输速率已突破Gb 级带宽的水平。
但与此同时,单机节点最大处理数据量仅为110M bps 左右,网络节点对于高速网络流量的捕获处理能力的不足,已经成为制约网络发展的瓶颈。
如今基于千兆网络的入侵检测系统的出现,更迫切的需要高性能的数据包捕获技术。
本文正是分析探讨了在高速网络环境下数据包捕获的技术及其应用。
2数据包捕获原理2.1libpcap 的应用流程
目前有很多基于Linux 网络分析工具和IDS 软件采用libpcap 直接与内核交互,实现网络数据包的捕获。
该库提供的C 函数接口可用于需要捕获经过网络接口数据包的系统开发上。
由Berkeley 大学Lawrence Berkeley National Laboratory 研究院的Van Jacobson 、Craig Leres 和Steven M cCanne 编写。
Libpcap 的应用流程可大致归纳为如图2.1所示,
图2.1Libpcap 应用流程图
此流程图中主要函数的函数功能如下:(1)pcap_findalldevs():此函数功能是查找机器的所有可用的网络接口,用一个网络接口链表返回。
(2)pcap_lookupdev():用于获得本机的网络接口。
返回可被pcap_open_live()函数调用的网络设备名指针。
(3)pcap_open_live():用于打开网络接口进行数据包捕获。
设参数promsic 为1时,表示以混杂模式打开此网络接口。
(4)pcap_lookupnet():用于获得指定网络设备的网络地址和网络掩码。
(5)pcap_setfilter():用于设置过滤器。
例如参数fp 用于设置BPF 过滤规则。
(6)pcap_compile():用于将用户制订的过滤策略编译到过滤程序中,比如编译BPF 过滤规则。
(7)pcap_dispatch():用于捕获并处理数据包。
其最终调用系统函数recvfrom(),把从网卡捕获到的一个链路层的数据包,传送到用户指定的主机内存空间中。
然后,调用回调函数对接收到的数据包进行进一步的处理。
(8)pcap_close():用于关闭libpcap 操作,并销毁相应资源。
2.2数据包捕获流程
以下简要介绍怎样调用libpcap 实现对网络数据包的捕获即网卡向Linux 内核提交数据包的过程。
首先,调用open_pcap 函数对网卡进行初始化,使网卡工作在混杂模式,以监听网络上所有的数据包。
当有数据包到达的时候,网卡上的DM A 引擎将包放入到内核rx_ring 空间,同时向CPU 发起中断服务请求,进入中断服务程序,然后调用网卡驱动程序中的函数将数据包封装成sk_buff 结构,并脱离驱动程序,转到通用的处理函数netif_rx 中。
netif_rx 函数将数据包传入等待队列中,并置软中断标志位,其目的是使上层的处理采用软中断(do_softirq )来提高CPU 的处理效率。
在软中断中调用net_rx_action()函数轮询backlog 队列中,调用ip_rcv()函数对每个
数据包做进一步处理,完成将数据传送到上层协议。
捕包软件就是通过用Libpcap 实现从内核中数据包的获取。
3提高数据包捕获的方法
对于高速网络环境下的数据包捕获,传统意义上的包捕获
技术不能满足需求,会有大量的数据包丢失。
以下介绍几种提高数据包捕获效率的方法。
3.1改善内存管理
应用程序提供一块缓冲区用来缓存网络报文,以此连接网络层界面和用户层应用。
传统的缓冲区动态管理算法出于对通用性的考虑,在每次报文传输时都进行malloc/free 操作。
可以想象,在高速网络环境下,对于捕获到的大量包,系统要频繁的针对每一个数据包进行内存的分配、释放,这无疑会影响系统性能,大大降低主机对数据包的处理能力。
一个好的做法是预先分配出一大块内存,然后由应用程序从这块大内存中取出一块小unit 用于接收来自网卡的一个数据包,而不是在每次接受到一个包的之后由系统临时分配一块用户态内存。
这样可以降低系
统对malloc/free 两个函数的调用频率,
提高系统对包的捕获率。
但既便如此,对于包捕获效率的提高依然是有限的。
Linux 将主机内存分为核心态内存和用户态内存。
核心态内存由操作系统来管理,用户应用程序无法直接访问到核心态内存。
在传统的做法上,捕获、接收数据包的过程是这样的,当网卡接收到一个数据包后,网卡驱动程序通过DM A 方式调用系统函数netif_rx(),将数据包从网卡拷贝到核心态内存;应用程序要想访问位于核心态内存中的数据包就必须再次利用系统调用,将数据包从核
作者简介:周照峰(1982-)男,浙江宁波人,贵州大学电子科学与信息技术学院网络通信与信息安全技术专业硕士研究生。
高速网络数据包捕获技术方法研究
周照峰
(贵州大学电子科学与信息技术学院,贵州贵阳550025)
摘要:
本文首先讨论了网络数据包捕获的基本原理与技术,之后分别介绍与分析了在高速网络流量环境下从几种数据包捕获技术到网络设备上如何提高数据包捕获能力的方法。
关键词:
数据捕获;N A PI;libpcap;网络处理器;负载均衡技术平台
心态内存拷贝到用户态内存中。
这种对数据包在内存中的重复的拷贝无疑会占用很多的系统资源,降低主机对捕获到包的处理能力。
一个好的办法是采用M M AP技术。
Linux2.2Kernel 以上版本都支持M M AP技术。
应用程序通过调用系统函数mmap(),可以建立核心态内存与用户态内存的映射。
具体来说,mmap()函数负责把系统分配给网卡设备文件的核心态内存映射到一块用户态内存,返回值是用户态内存的首地址pA。
这样,应用程序就可以通过调用系统函数recvfrom()把数据包从网卡上直接传送到以pA为首地址的用户态内存中,减少了一次数据拷贝,从而很大程度上降低了系统资源的消耗,提高数据包的捕获效率。
3.2基于半轮询机制的NAPI技术
NAPI的基本工作流程是:
首先中断唤醒数据接收程序,然后使用轮询的方法来获取数据。
当一批数据包中的第一个数据包到达时,采用中断的方式通知系统,系统就将该设备注册到一个设备轮询队列中,并关闭对该设备的中断响应。
同时,激活一个软中断,对轮询队列中注册的网络设备进行轮询,从中读取数据包。
采用配额的方法保证对各个网络设备的公平调度。
配额是指网络设备每次发送的数据包的最大个数。
如果网络设备发送数据包达到这个数时,设备的数据包接收缓冲区中仍然有数据,就将该设备重新注册到轮询队列的末尾,等待下一次轮询到该设备时再向内核提交数据包;接收缓冲区中没有数据则将该设备从轮询队列中注销,同时打开该设备的中断响应。
NAPI流程如图3.1所示,图中p表示配额数。
图3.1NAPI流程图
所以说,当网络负载较低时,每次到达网卡的数据包的个数比较少,极端情况下只有一个数据包到达。
那么,当网卡将该数据包提交到上次之后,就从轮询队列中注销,同时开中断,等待下一个网络数据包的到达。
这与Linux2.4采用的中断方式是一致的。
当网络负载较高时,每次会有一批数据到达网卡,在极端情况下,数据包源源不断的到达。
由于接收缓冲区是一个环形的缓冲区,网卡每向内核提交一个数据包,就会马上有一个数据包填充进来,接收缓冲区一致处于满的状态。
在这种情况下,网卡就一直处于在轮询队列中,并行的进行读取网络上的数据包和向上层提交数据包的工作。
这与轮询的方式是一致的。
也就是说,采用NAPI技术,使系统在轻负载的情况下趋近于中断方式,响应速度很快;而在重负载的情况下,趋近于轮询方式,高效的处理数据包并且避免了重负载情况下的中断活锁问题。
3.3负载均衡技术
负载均衡技术通过一些工具实时地分析数据包,掌握网络中的数据流量状况,把任务合理均衡地分配出去,用多个设备共同完成任务,从而以较低成本消除网络瓶颈,提高网络的灵活性和可靠性。
将负载均衡技术应用在网络处理系统中,能够解决高速网的网络速度与处理速度不匹配的问题,将从网络中均衡地捕获的数据包再分配给各处理节点进行处理。
所以负载均衡技术满足以下条件将更有利于实现网络分析处理:
(1)属于同一IP的所有数据包应由同一个捕获节点完成。
(2)同一类型的数据包,即使用同一协议的数据包集中在一起以便共同处理。
(3)可扩展性和容错性。
随网络中的流量发生变化,捕获节点负载分配不均或崩溃时,负载均衡技术都能针对具体情况进行响应,调整数据捕获节点之间的负载,使之重新达到均衡,并且使对其余数据分析处理器的影响降低到最小。
如何在多个数据捕获器之间分配流量是关键问题,其分配方法,在分流节点按照控制节点根据当前情况定义的策略向各捕获节点分配任务,通过调整对应于捕获节点的这些策略来保证每个数据捕获节点的负载均衡。
4网络设备的改进
传统的网络设备已不能满足网络带宽迅速增长的要求,面对高速网络的发展趋势,当前主要有两种解决方案,即ASIC技术与网络处理器技术。
4.1ASIC技术
采用ASIC(专用集成电路)芯片技术通过把指令或计算逻辑固化在硬件中来获得很高的处理能力,可以为网络产品应用设计专门的数据包处理流水线,优化存储器等资源的利用,可以非常有效的提高数据捕获速率,达到千兆线速较为简单。
但ASIC技术存在缺乏灵活性的问题,一旦指令或计算逻辑固化到硬件中就很难进行修改、升级、增加新功能或提高性能。
4.2网络处理器技术
网络处理器是一类新出现的可编程%将计算%存储和媒体资源控制高度集成的高性能芯片,它被优化来实现网络数据包的线速处理,能够对报文进行深度匹配并以线速进行转发的技术。
网络处理器一般具有如通用CPU一样的可编程性,这种编程性指的是对进行网络处理的可能应用具有灵活的和充分的可编程性能。
程序员可以通过对网络处理器芯片进行编程让网络处理器执行所需操作。
此外,网络处理器的设计使其可对OSI网络模型第二层到第四层数据进行处理,特别是第四层以上数据的处理。
它的应用目标是OC-1(55M b/s)到C-192(10Gb/s)的速率的网络环境。
在网络设备上,灵活性和可编程性使网络处理器成为替代昂贵而又不够灵活的ASIC芯片进行快速网络数据处理的新手段。
为了提高网络处理器的对某些常用操作的处理速度,网络处理器通常还集成了多个可编程硬件加速器来提高对数据包的处理速度,如CRC器件Hash器件等等。
网络处理器还集成了高效的存储器子系统控制器来支持对网络数据包存储的优化,如出/入队列、环操作和原子操作等存储器操作的硬件支持。
网络处理器还支持多线程的零开销切换设计来实现存储器时延屏蔽。
5小结
目前NAPI技术已经在网卡驱动层和网络层得到了广泛的应用,驱动层次上已经有E1000系列网卡,RTL8139系列网卡,3c50X系列等主流的网络适配器都采用了这个技术,而在网络层次上,NAPI技术已经完全被应用到了著名的netif_rx函数中间,并且提供了专门的POLL方法——
—process_backlog来处理轮询的方法。
负载均衡技术还面临负载状况的定义、如何(下接第10页)
(上接第12页)获取网络数据以及获取后如何处理的问题。
而如何处理实际上就是选择合适的负载均衡算法,它能保证设备协同完成任务,消除或避免现有的网络负载不均、数据流量拥挤和响应时间长的瓶颈。
参考文献:
[1]DER I L.Improving passive packet capture beyond device polling [EB/OL].http:///.
[2]贾彩霞,吴秋峰,朱卫国等.采用轮询机制提高Linux系统的网络性能[J].计算机工程与应用,2004(11):134-138.
[3]刘玮,郭莉.半轮询方式提高Linux以太网桥性能[J].计算机应用,2005(25):50-51.
[4]毕学尧.高速网络的数据获取与分析研究[D].北京:中国科学院高能物理,2003.
[5]汪世义,秦品乐.基于Linux的高速网络包捕获技术研究[J].微型电脑应用,2006,22(3):51-53.
[6]尹家生,周健,辜丽川.基于Linux的高速网络流量采集与分析模型研究[J].计算机工程与应用,2006(10):151-153.
[7]田志宏,方滨兴,云晓春.R TLinux下基于半轮询驱动的用户级报文传输机制[J].软件学报,2004,15(06):834-841.
[8]夏添,陈国龙.高速网路的数据捕获的研究[J].福建电脑,2005,(10): 16-25.
[9]负载均衡技术:/cword/2876.shtml.
击的时间要求,常需加做辅助等电位联结或局部等电位联结,来降低接触电压至限值以下,而构成一个相对封闭安全的环境。
(2)剩余电流理论,即在任何电气网络所构成的任意节点中依据克希霍夫定律,在任意时间内流进和流出节点的电流矢量和均为零这一原理,如果不为零这个电流就被认为是剩余电流。
为减少人体同时接触不同电位引起的电击危险,同时也为了防范雷击危害及满足信息设备抗干扰等要求,IEC标准十分强调总等电位联结系统的设置。
总等电位联结是指在一建筑物的电源进线处将进线处的PE(PEN)干线、接地级引入线、水道干管、燃气干管、通风空调干管、建筑物的金属结构等可导电部分互相连通,从而在建筑内形成一电位相等或接近的区域。
这样当任一管线(包括电气线路)因导入危险高电位时整个建筑物将
同时升高至同一电位,在其内将不出现电位差,借以避免许多电气危险。
总等电位联结对不同接地系统的作用是不尽相同的。
对TN系统,其作用为:(1)建筑物内发生接地故障时,它可降低由此引起的接触电压;(2)当建筑物外的电源发生接地故障时,它可消除沿PEN(PE)线导入的对地电压。
对TT系统和IT系统,总等电位联结的作用不似TN系统那么重要,因为TT系统的电气装置各有自己的接地极,正常时装置内的外露导电部分为地电位,电源侧和各装置出现的故障电压不互窜,发生接地故障时回路阻抗较大,故障电流较小,主要靠RCD来迅速切断电源。
而IT系统在发生接地故障时由于不具备故障电流返回电源的通路,其故障电流仅为非故障相的对地电容电流,其值甚小,因此对地故障电压很低,不致引发事故。
电气装置内电气回路任点在同一时间内所有带电导体电流的向量和称为剩余电流,由于对地正常泄漏电流的存在,回路多多少少总有剩余电流。
当回路对地绝缘损坏发生接地故障,或回路绝缘老化,回路剩余电流大增超过规定值可能引起电击、电气火灾等事故时,检测出此异常剩余电流并自动切断电源避免灾难发生的开关电器称作剩余电流动作保护电器(residual current operated protective device),英文简称RCD。
在短路起火中电弧性接地故障导致火灾的危险最大,而且难以用一般过电流防护电器切断电源,但是最易引起火灾的接地故障无论是金属性的还是电弧性的,都能用剩余电流保护电器(RCD)及时有效地切断电源或发出信号,原因很简单,500mA以上的电弧能量才能引燃起火,而RCD防止接地故障引起的短路起火是非常简单有效的装设RCD并不需要很大的经费,只需为断路器或报警器配套装设一个零序电流互感器来检测接地故障电流,即可起到防火的作用,为有效地防电击和防接地电弧火灾,建筑物内应设丙级或三级RCD。
图5所示为IEC标准建筑物内多级RCD的方案举例。
图5(a)图5(b)为两级RCD的方案,第一级为通常的示端回路上安装的30mA或100mA的普通瞬动RCD,其5倍ION的最大动作时间为0.04s;第二级为建筑物电源进线处安装的延时动作的500mA 的选择型RCD,其最大切断时间为0.15s,最小不动作时间为0.05s。
这样两级RCD在动作时间和电流上都满足了选择性要求。
第二级RCD的作用是作为第一级RCD防问接接触电击和防接他电弧火灾的后备防护,更重要的是建筑物电气装置内任一处发生电弧性接地故障时,它都能有效地切断电源以防止最常见多发的电弧火灾的发生。
在大型建筑物内可装设如图5(b)所示的三级RCD。
第三级RCD为固定延时型,例如取1s的延时,Ion取为1A,这级RCD 可采用分离式单独的零序电流互感器,经一断电器动作于火警号以避免切断电源引起大面积的停电,当然也可作用于断路器的跳闸。
从发生接地电弧到烤燃起火以至火势蔓延成灾需一相当长的时间,在发出报警信号后完全有足够的时间查出故障回路切断回路电源。
在建筑物电源进线处安装具有RCD功能的断路器是一项十分有效的防接触电击和防接地电弧火灾措施。
我国电气设计规范对此也有相关规定,例如民用建筑中供移动式电气设备的插座回路装设RCD可防人身电击等,应当严格执行这此规定。
通过以上分析可知,在低压配电设计中接地故障保护应引起广大电气设计人员的高度重视,应根据不同的建筑、不同的接地型式做好等电位联结,正确选择RCD,提高系统的安全性,减少因接地故障引起电击、火灾事故所带来的人身和财产损失。
参考文献:
[1]王厚余.低压电气装置的设计安装和检验.
[2]萧运勤.低压配电系统中接地故障的保护.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!。