牟鹏至
摘要:该文阐述了当前网络故障管理存在的问题,针对公安局域网出现的故障必须及时准确处理的要求,提出了基于SNMP提供的代理端自动向管理端发送故障信息的设计思想,由于TRAP包的传输是基于不可靠的UDP协议,在线路不稳定等情况下极可能出现丢包的现象,所以,设计出了以多线程运行的后台监控服务程序。这样通过双重监控,彻底解决了现在网络故障管理存在的故障漏报误报的难题。
关键词:简单网络管理协议;UDP协议;故障管理;后台监控;trap包
中图分类号:TP393文献标识码:A文章编号:1009-3044(2012)01-0012-03
Research and Implementation of Network Trap Management Function Based on SNMP
MU Peng-zhi
(Yubei Sub-bureau of Chongqing Public Security Bureau Science and Technologh Department, Chongqing 401120, China)
Abstract: This paper introduced the problems for network trap management firstly. To solve the requirements for police LAN trap must be timely and accurately processed , the thinking for trap information was sent to the management by the agent automatically based on SNMP was proposed,Because the TRAP packet transmission was based on unreliable UDP protocol, it was likely to drop packages in unsta? ble line. Therefore, the background monitoring service program of using multiple threads was designed. Through the double monitoring, the problems for missing and false alarms were completely solved.
Key words: simple network management protocol; UDP protocol;trap management; background monitoring;trap package
由于网络技术的飞速发展,网络规模越来越大,结构越来越复杂,网络中各种设备能否正常运行对整个网络系统至关重要。特别是公安局域网对整个网络的可靠性、安全性等方面要求更高,如果公安网络出现了故障,势必会给公安工作带来诸多的不良社会影响,对人民群众的利益造成损失。所以,要做到当故障发生后能够及时准确地发现并排除它,这就要求对网络设备的运行情况进行监控,在设备出现故障后能及时地通知网络管理人员进行维护。
网络故障牵涉很多方面的原因,如硬件的故障、软件的漏洞、病毒的侵入。对于这类故障,一般比较容易地排查解决。但是,网络中也经常会出现网络速度慢、丢包严重的情况,这类故障通常是网络管理中最常见也是最难解决的问题之一,引起网络速度慢的原因也非常多,如网络环路、广播风暴、流量占用、病毒等等[1]。如果对规模较小的局域网,管理起来非常容易,但对于相对复杂庞大的网络来说,必须考虑各种可能出现的问题,排查起来是件比较困难的事情。
网络故障管理的目的是使网络管理者能够及时、准确地定位故障源,根据故障类型采取相应的措施来解决故障。现在的故障报警达不到实时、准确的要求,往往在故障发生了较长时间才能给出报警,而且告警信息提供的也不够准确,本论文研究的目的就是针对以上难题给出详细的解决思路和可行的解决办法。
1网络故障管理功能
1.1网络故障管理概述
常见的网络设备有交换机、路由器和服务器三种。无论是交换机还是路由器,如果性能变差,会直接影响到网络应用。网络性能变差的症状通常表现为:设备CPU占用率居高不下、系统可用内存剧减、端口流量剧增。我们以交换机为例加以说明:众所周知,交换机中的系统内存分为系统运行进程所用内存(Processor内存)和缓存数据帧所用的内存(I/O内存),当网络中出现大量数据需要交换机处理或者高速端口向低速端口发送数据的情况时,需要耗费较多的缓存来临时存储数据帧。此时,交换机不仅CPU使用率高,而且可用I/O内存会严重不足,影响了网络的性能。所以,必须考虑采取通过对CPU、内存、端口流量的监控来达到监视网络设备性能的目的[2]。
1.2网络故障管理难点问题分析
网络故障管理的目的是使网管员能够及时、准确地定位故障源,根据故障类型采取相应的解决措施,以最大程度地减少故障所造成的损失。公安网是一个复杂的网络,要想真正地达到实时准确地监控整个网络,是一件很困难的事情。现将其难点问题予以分析:
1)实时性问题。区级公安网系统中有路由器、交换机100台左右,服务器20台左右,经测试轮询所有设备一次一般需12分钟,如果网络性能差或者出现的故障设备多时,时间会更长。如果核心路由器或三层交换机出了故障,比如断线故障,将直接影响下面相连设备的工作,造成的损失不可估量,这对于公安的业务需求来说,是绝对不允许的[3]。针对以上问题,我们采取以下解决措施:
采用后台服务程序,开多线程进行监控。后台服务程序一开机就会直接在后台运行,与网络管理系统与不干涉;共开三个线程,一个是监控在线离线状态,一个监控接口流量信息,一个专门临控服务器的硬盘占用率,内存,CPU信息。三个线程在后台同时运行,互不干扰。
2)报警方式问题。当检测到故障信息后,需要报警,报警方式分为:手机短信,声音,邮件,弹出窗口。针对不同的故障,采用不同的报警方式。如果是设备离线故障,非常严重,采用发手机短信、声音和弹出图片的方式;如果是接口流量占用率超限和服务器的CPU、内存超限、硬盘占用率超限采用发声音、弹出窗口和发邮件的方式。
3)产品设备型号问题。当前主要采用的网络设备是CISCO和H3C的[4]。有的CISCO交换机,例如2900XL/3500XL系列,由于硬件结构等特点,在开机后,即使空载的情况下,CPU使用率也有可能高达33%—45%。针对这种情况,我们采取的措施是:对只发生一次的CPU占用率超限不给予报警,当下次轮询时,仍发现该设备CPU占用率超限才给予报警。同样,内存占用率的监控我们也采取此种方式。
2网络故障管理功能的实现
2.1 SNMP++开发包
SNMP++是HP公司提供的开发基于SNMP网管应用程序的应用程序编程接口,是为网络管理应用开发者提供SNMP服务的一系列C++类。为了更能够保证移植性和高效性,SNMP++总是最少地利用已经存在的平台相关的SNMP库[5]。HP SNMP++开发包具有以下特点:
1)内存管理方面。在创建或销毁一个对象时,SNMP++类负责该对象使用资源的申请和释放,程序员不用担心由于使用SNMP++对象而引起资源或内存泄露问题。
2)可移植性强。SNMP++在不同的平台提供统一的应用程序编程接口,因此不需要做任何改变就可以移植到其他的平台。
3)提供超时和重传机制。SNMP++在Target类中提供了超时和重传机制,程序员只需设置参数就可以实现超时和重传功能。
4)支持Trap的发送和接收。使用SNMP++可以很方便地实现Trap的发送和接收功能,并且可以调整Trap发送与接收时使用的UDP端口。
SNMP++包括了大约70个类,大致可分为:数据类型类,主要封闭了SMI中定义的ASN.1数据类型以及SNMP中定义的数据类型;变量绑定类,封装了SNMP消息中的变量绑定数据结构;PDU类,封闭了SNMP消息中的PDU部分;Target类,封闭了构成一个SNMP消息所需要的全部信息;SNMP类,主要用来完成建立网络连接、发送消息、接收Trap等网络操作等。
2.2 TRAP信息的收集和处理
Trap信息的收集是主要的故障信息来源,使用端口162进行故障信息的接收,接收到的trap信息数据包的格式是SNMP协议里已经定义好的。SNMPv2中共定义了6种类型的trap信息[6],其类型及其说明如表1所示。
Trap信息的收集与处理模块的程序中使用SNMP管理信息库中的OID是1.3.6.1.2.1.11.19,在接收到trap数据包后,必须利用此OID进行分析,才能获得有用的trap信息。此模块流程如图1所示。
具体描述如下:首先利用SNMP++中的类SNMP创建一个SNMP对象并对其进行初始化。然后,设置监听端口162获取trap信息,注意这里需要有异常的处理。当获取到trap数据包后就需要对其做分析处理,取得trap源、trap发生时间以及trap类型等关键信息,最后将这些信息存入数据库。
2.3后台故障监控服务
考虑到trap的发送是基于不可靠的UDP协议,在线路不好的情况下极可能出现丢包现象,达不到准确监控网络故障的要求,另外,数据库中的监控参数值必须与设备运行状态保持一致,这就需要保证对数据库信息实时更新[7]。针对以上问题,开拓性地设计出了一种后台监控故障的服务程序,以保证故障监控的准确性和实时性。
后台故障监控服务程序的设计使用的方法是定时发SNMP包进行探测。具体描述为:首先写一个SNMP扫描的类,这个类提供的功能就是发SNMP包对监控的网络设备进行扫描,根据网络设备返回的信息,进行分析,判断网络设备在线状态,然后采用开启多线程的方式获取该设备的其它监控信息,更新数据库[8]。设计时为保证检测的准确性,共发两次SNMP包。第一次,超时时间设置较短(比如:10ms),如果有返回信息,表明设备在线,不进行第二次发包;如果没有返回包,第二次发包进行探测,超时时间设的长一些(比如:3000ms)。若有返回信息,表明设备在线,但是线路不好;如果没有返回信息,表明设备不在线。其实现的流程图如图2所示。
其实现的核心代码如下:
char **snmpScan(char *str,char *community)
{status=snmp.get(pdu,*target);
if(status==SNMP_CLASS_SUCCESS) //第一次发包,如果成功则返回值
strcpy(p[0],str);
else
{//如果失败,再发一次数据包
vb.set_oid((Oid)"1.3.6.1.2.1.1.2.0");
ctarget.set_retry(1);//重传次数
ctarget.set_timeout(3000);//超时时间3000毫秒
status=snmp.get(pdu,*target);
if(status==SNMP_CLASS_SUCCESS) //第二次发包探测
{ strcpy(p[0],str);
} else
strcpy(p[0],"no line!");//如果失败,表明该设备离线
} Snmp::socket_cleanup();
return &p[0];//返回结果
}
3网络故障管理功能测试
3.1测试环境
本系统开发的软件环境:VisualStudio2008,Sql Server2005,Visual C++ 6.0。
本系统开发的硬件环境:操作系统为Windows Server 2003,CPU为AMD 2800+,内存为双核1.5G。
需要安装的补丁或插件:VS80sp1-KB926604-X86-CHS.exe补丁,SVGView.exe插件,ASP-AJAX-ExtSetup.msi插件。测试环境:将系统搭建在公安网的WindowsServer2003服务器上。
3.2测试结果
对于底层通过SNMP++编写的DLL文件采集监控数据,可以在封装成DLL之前,以IP地址和SNMP的共同体(默认为:public)为参数,在命令行模式下测试是否成功获取数据,如图3所示。
图3显示获取的一部分数据
开启监控故障信息的后台服务程序,如果出现故障,将在系统首页面的可伸缩的菜单中显示最新的故障信息,分别显示设备类型、事件描述、事件源名称、事件生成时间、事件等级等重要信息。如图4所示。
图4设备故障信息
故障出现时,系统将根据故障等级,给予相应的报警,如下图5为路由器离线给出的报警信息。
经测试,网络故障管理系统实现了设计之初的功能要求,满足了用户对网络故障管理系统功能的需求,证明了网络故障管理难点问题解决方法的可行性。
4结束语
本论文所设计开发的网络故障管理系统能够及时、准确地定位故障源,达到了对故障报警实时、准确的要求,实现了对路由器、交换机的接口流量,服务器的CPU、硬盘等信息实时监控。当然,由于经验有限,在实现系统功能的某些方面可能考虑的还不是很周全,所以,在今后的工作中都将继续实现和完善。
参考文献:
[1]郑庆国,吕卫锋.通信网络中的告警相关性研究[J].计算机工程与应用,2002(2):11-15.
[2]刘绍凯.基于SNMP网络管理系统的设计与实现[J].电脑知识与技术,2005,10(21):135-138.
[3]袁梅宇.高效率多线程网络流量采集算法研究及实践[J].昆明理工大学学报(理工版),2006,31(1):32-35.
[4]张蓉.基于网络拓扑的告警相关性分析[D].北京:北京邮电大学硕士学位论文,2008.
[5]杨汉祥,杨润华. HP SNMP++ SNMP管理站开发包的分析[J].计算机与现化,2002,2:7-11.
[6]杨汉祥,杨润华.HP SNMP++ SNMP管理站开发包的分析[J].计算机与现代化,2002,2.
[7]陈雷,董博,王雪.基于SNMP协议的全局网络流量分析系统的设计与实现[J].大连理工大学学报,2005,2(8):96-99.
[8]康华,周明全,房鼎益.基于SNMP协议的网络拓扑发现和显示[J].微机发展,2003,7(3):102-105.