牟鵬至
摘要:該文闡述了當(dāng)前網(wǎng)絡(luò)故障管理存在的問(wèn)題,針對(duì)公安局域網(wǎng)出現(xiàn)的故障必須及時(shí)準(zhǔn)確處理的要求,提出了基于SNMP提供的代理端自動(dòng)向管理端發(fā)送故障信息的設(shè)計(jì)思想,由于TRAP包的傳輸是基于不可靠的UDP協(xié)議,在線路不穩(wěn)定等情況下極可能出現(xiàn)丟包的現(xiàn)象,所以,設(shè)計(jì)出了以多線程運(yùn)行的后臺(tái)監(jiān)控服務(wù)程序。這樣通過(guò)雙重監(jiān)控,徹底解決了現(xiàn)在網(wǎng)絡(luò)故障管理存在的故障漏報(bào)誤報(bào)的難題。
關(guān)鍵詞:簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議;UDP協(xié)議;故障管理;后臺(tái)監(jiān)控;trap包
中圖分類號(hào):TP393文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):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
由于網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,網(wǎng)絡(luò)規(guī)模越來(lái)越大,結(jié)構(gòu)越來(lái)越復(fù)雜,網(wǎng)絡(luò)中各種設(shè)備能否正常運(yùn)行對(duì)整個(gè)網(wǎng)絡(luò)系統(tǒng)至關(guān)重要。特別是公安局域網(wǎng)對(duì)整個(gè)網(wǎng)絡(luò)的可靠性、安全性等方面要求更高,如果公安網(wǎng)絡(luò)出現(xiàn)了故障,勢(shì)必會(huì)給公安工作帶來(lái)諸多的不良社會(huì)影響,對(duì)人民群眾的利益造成損失。所以,要做到當(dāng)故障發(fā)生后能夠及時(shí)準(zhǔn)確地發(fā)現(xiàn)并排除它,這就要求對(duì)網(wǎng)絡(luò)設(shè)備的運(yùn)行情況進(jìn)行監(jiān)控,在設(shè)備出現(xiàn)故障后能及時(shí)地通知網(wǎng)絡(luò)管理人員進(jìn)行維護(hù)。
網(wǎng)絡(luò)故障牽涉很多方面的原因,如硬件的故障、軟件的漏洞、病毒的侵入。對(duì)于這類故障,一般比較容易地排查解決。但是,網(wǎng)絡(luò)中也經(jīng)常會(huì)出現(xiàn)網(wǎng)絡(luò)速度慢、丟包嚴(yán)重的情況,這類故障通常是網(wǎng)絡(luò)管理中最常見也是最難解決的問(wèn)題之一,引起網(wǎng)絡(luò)速度慢的原因也非常多,如網(wǎng)絡(luò)環(huán)路、廣播風(fēng)暴、流量占用、病毒等等[1]。如果對(duì)規(guī)模較小的局域網(wǎng),管理起來(lái)非常容易,但對(duì)于相對(duì)復(fù)雜龐大的網(wǎng)絡(luò)來(lái)說(shuō),必須考慮各種可能出現(xiàn)的問(wèn)題,排查起來(lái)是件比較困難的事情。
網(wǎng)絡(luò)故障管理的目的是使網(wǎng)絡(luò)管理者能夠及時(shí)、準(zhǔn)確地定位故障源,根據(jù)故障類型采取相應(yīng)的措施來(lái)解決故障。現(xiàn)在的故障報(bào)警達(dá)不到實(shí)時(shí)、準(zhǔn)確的要求,往往在故障發(fā)生了較長(zhǎng)時(shí)間才能給出報(bào)警,而且告警信息提供的也不夠準(zhǔn)確,本論文研究的目的就是針對(duì)以上難題給出詳細(xì)的解決思路和可行的解決辦法。
1網(wǎng)絡(luò)故障管理功能
1.1網(wǎng)絡(luò)故障管理概述
常見的網(wǎng)絡(luò)設(shè)備有交換機(jī)、路由器和服務(wù)器三種。無(wú)論是交換機(jī)還是路由器,如果性能變差,會(huì)直接影響到網(wǎng)絡(luò)應(yīng)用。網(wǎng)絡(luò)性能變差的癥狀通常表現(xiàn)為:設(shè)備CPU占用率居高不下、系統(tǒng)可用內(nèi)存劇減、端口流量劇增。我們以交換機(jī)為例加以說(shuō)明:眾所周知,交換機(jī)中的系統(tǒng)內(nèi)存分為系統(tǒng)運(yùn)行進(jìn)程所用內(nèi)存(Processor內(nèi)存)和緩存數(shù)據(jù)幀所用的內(nèi)存(I/O內(nèi)存),當(dāng)網(wǎng)絡(luò)中出現(xiàn)大量數(shù)據(jù)需要交換機(jī)處理或者高速端口向低速端口發(fā)送數(shù)據(jù)的情況時(shí),需要耗費(fèi)較多的緩存來(lái)臨時(shí)存儲(chǔ)數(shù)據(jù)幀。此時(shí),交換機(jī)不僅CPU使用率高,而且可用I/O內(nèi)存會(huì)嚴(yán)重不足,影響了網(wǎng)絡(luò)的性能。所以,必須考慮采取通過(guò)對(duì)CPU、內(nèi)存、端口流量的監(jiān)控來(lái)達(dá)到監(jiān)視網(wǎng)絡(luò)設(shè)備性能的目的[2]。
1.2網(wǎng)絡(luò)故障管理難點(diǎn)問(wèn)題分析
網(wǎng)絡(luò)故障管理的目的是使網(wǎng)管員能夠及時(shí)、準(zhǔn)確地定位故障源,根據(jù)故障類型采取相應(yīng)的解決措施,以最大程度地減少故障所造成的損失。公安網(wǎng)是一個(gè)復(fù)雜的網(wǎng)絡(luò),要想真正地達(dá)到實(shí)時(shí)準(zhǔn)確地監(jiān)控整個(gè)網(wǎng)絡(luò),是一件很困難的事情。現(xiàn)將其難點(diǎn)問(wèn)題予以分析:
1)實(shí)時(shí)性問(wèn)題。區(qū)級(jí)公安網(wǎng)系統(tǒng)中有路由器、交換機(jī)100臺(tái)左右,服務(wù)器20臺(tái)左右,經(jīng)測(cè)試輪詢所有設(shè)備一次一般需12分鐘,如果網(wǎng)絡(luò)性能差或者出現(xiàn)的故障設(shè)備多時(shí),時(shí)間會(huì)更長(zhǎng)。如果核心路由器或三層交換機(jī)出了故障,比如斷線故障,將直接影響下面相連設(shè)備的工作,造成的損失不可估量,這對(duì)于公安的業(yè)務(wù)需求來(lái)說(shuō),是絕對(duì)不允許的[3]。針對(duì)以上問(wèn)題,我們采取以下解決措施:
采用后臺(tái)服務(wù)程序,開多線程進(jìn)行監(jiān)控。后臺(tái)服務(wù)程序一開機(jī)就會(huì)直接在后臺(tái)運(yùn)行,與網(wǎng)絡(luò)管理系統(tǒng)與不干涉;共開三個(gè)線程,一個(gè)是監(jiān)控在線離線狀態(tài),一個(gè)監(jiān)控接口流量信息,一個(gè)專門臨控服務(wù)器的硬盤占用率,內(nèi)存,CPU信息。三個(gè)線程在后臺(tái)同時(shí)運(yùn)行,互不干擾。
2)報(bào)警方式問(wèn)題。當(dāng)檢測(cè)到故障信息后,需要報(bào)警,報(bào)警方式分為:手機(jī)短信,聲音,郵件,彈出窗口。針對(duì)不同的故障,采用不同的報(bào)警方式。如果是設(shè)備離線故障,非常嚴(yán)重,采用發(fā)手機(jī)短信、聲音和彈出圖片的方式;如果是接口流量占用率超限和服務(wù)器的CPU、內(nèi)存超限、硬盤占用率超限采用發(fā)聲音、彈出窗口和發(fā)郵件的方式。
3)產(chǎn)品設(shè)備型號(hào)問(wèn)題。當(dāng)前主要采用的網(wǎng)絡(luò)設(shè)備是CISCO和H3C的[4]。有的CISCO交換機(jī),例如2900XL/3500XL系列,由于硬件結(jié)構(gòu)等特點(diǎn),在開機(jī)后,即使空載的情況下,CPU使用率也有可能高達(dá)33%—45%。針對(duì)這種情況,我們采取的措施是:對(duì)只發(fā)生一次的CPU占用率超限不給予報(bào)警,當(dāng)下次輪詢時(shí),仍發(fā)現(xiàn)該設(shè)備CPU占用率超限才給予報(bào)警。同樣,內(nèi)存占用率的監(jiān)控我們也采取此種方式。
2網(wǎng)絡(luò)故障管理功能的實(shí)現(xiàn)
2.1 SNMP++開發(fā)包
SNMP++是HP公司提供的開發(fā)基于SNMP網(wǎng)管應(yīng)用程序的應(yīng)用程序編程接口,是為網(wǎng)絡(luò)管理應(yīng)用開發(fā)者提供SNMP服務(wù)的一系列C++類。為了更能夠保證移植性和高效性,SNMP++總是最少地利用已經(jīng)存在的平臺(tái)相關(guān)的SNMP庫(kù)[5]。HP SNMP++開發(fā)包具有以下特點(diǎn):
1)內(nèi)存管理方面。在創(chuàng)建或銷毀一個(gè)對(duì)象時(shí),SNMP++類負(fù)責(zé)該對(duì)象使用資源的申請(qǐng)和釋放,程序員不用擔(dān)心由于使用SNMP++對(duì)象而引起資源或內(nèi)存泄露問(wèn)題。
2)可移植性強(qiáng)。SNMP++在不同的平臺(tái)提供統(tǒng)一的應(yīng)用程序編程接口,因此不需要做任何改變就可以移植到其他的平臺(tái)。
3)提供超時(shí)和重傳機(jī)制。SNMP++在Target類中提供了超時(shí)和重傳機(jī)制,程序員只需設(shè)置參數(shù)就可以實(shí)現(xiàn)超時(shí)和重傳功能。
4)支持Trap的發(fā)送和接收。使用SNMP++可以很方便地實(shí)現(xiàn)Trap的發(fā)送和接收功能,并且可以調(diào)整Trap發(fā)送與接收時(shí)使用的UDP端口。
SNMP++包括了大約70個(gè)類,大致可分為:數(shù)據(jù)類型類,主要封閉了SMI中定義的ASN.1數(shù)據(jù)類型以及SNMP中定義的數(shù)據(jù)類型;變量綁定類,封裝了SNMP消息中的變量綁定數(shù)據(jù)結(jié)構(gòu);PDU類,封閉了SNMP消息中的PDU部分;Target類,封閉了構(gòu)成一個(gè)SNMP消息所需要的全部信息;SNMP類,主要用來(lái)完成建立網(wǎng)絡(luò)連接、發(fā)送消息、接收Trap等網(wǎng)絡(luò)操作等。
2.2 TRAP信息的收集和處理
Trap信息的收集是主要的故障信息來(lái)源,使用端口162進(jìn)行故障信息的接收,接收到的trap信息數(shù)據(jù)包的格式是SNMP協(xié)議里已經(jīng)定義好的。SNMPv2中共定義了6種類型的trap信息[6],其類型及其說(shuō)明如表1所示。
Trap信息的收集與處理模塊的程序中使用SNMP管理信息庫(kù)中的OID是1.3.6.1.2.1.11.19,在接收到trap數(shù)據(jù)包后,必須利用此OID進(jìn)行分析,才能獲得有用的trap信息。此模塊流程如圖1所示。
具體描述如下:首先利用SNMP++中的類SNMP創(chuàng)建一個(gè)SNMP對(duì)象并對(duì)其進(jìn)行初始化。然后,設(shè)置監(jiān)聽端口162獲取trap信息,注意這里需要有異常的處理。當(dāng)獲取到trap數(shù)據(jù)包后就需要對(duì)其做分析處理,取得trap源、trap發(fā)生時(shí)間以及trap類型等關(guān)鍵信息,最后將這些信息存入數(shù)據(jù)庫(kù)。
2.3后臺(tái)故障監(jiān)控服務(wù)
考慮到trap的發(fā)送是基于不可靠的UDP協(xié)議,在線路不好的情況下極可能出現(xiàn)丟包現(xiàn)象,達(dá)不到準(zhǔn)確監(jiān)控網(wǎng)絡(luò)故障的要求,另外,數(shù)據(jù)庫(kù)中的監(jiān)控參數(shù)值必須與設(shè)備運(yùn)行狀態(tài)保持一致,這就需要保證對(duì)數(shù)據(jù)庫(kù)信息實(shí)時(shí)更新[7]。針對(duì)以上問(wèn)題,開拓性地設(shè)計(jì)出了一種后臺(tái)監(jiān)控故障的服務(wù)程序,以保證故障監(jiān)控的準(zhǔn)確性和實(shí)時(shí)性。
后臺(tái)故障監(jiān)控服務(wù)程序的設(shè)計(jì)使用的方法是定時(shí)發(fā)SNMP包進(jìn)行探測(cè)。具體描述為:首先寫一個(gè)SNMP掃描的類,這個(gè)類提供的功能就是發(fā)SNMP包對(duì)監(jiān)控的網(wǎng)絡(luò)設(shè)備進(jìn)行掃描,根據(jù)網(wǎng)絡(luò)設(shè)備返回的信息,進(jìn)行分析,判斷網(wǎng)絡(luò)設(shè)備在線狀態(tài),然后采用開啟多線程的方式獲取該設(shè)備的其它監(jiān)控信息,更新數(shù)據(jù)庫(kù)[8]。設(shè)計(jì)時(shí)為保證檢測(cè)的準(zhǔn)確性,共發(fā)兩次SNMP包。第一次,超時(shí)時(shí)間設(shè)置較短(比如:10ms),如果有返回信息,表明設(shè)備在線,不進(jìn)行第二次發(fā)包;如果沒(méi)有返回包,第二次發(fā)包進(jìn)行探測(cè),超時(shí)時(shí)間設(shè)的長(zhǎng)一些(比如:3000ms)。若有返回信息,表明設(shè)備在線,但是線路不好;如果沒(méi)有返回信息,表明設(shè)備不在線。其實(shí)現(xiàn)的流程圖如圖2所示。
其實(shí)現(xiàn)的核心代碼如下:
char **snmpScan(char *str,char *community)
{status=snmp.get(pdu,*target);
if(status==SNMP_CLASS_SUCCESS) //第一次發(fā)包,如果成功則返回值
strcpy(p[0],str);
else
{//如果失敗,再發(fā)一次數(shù)據(jù)包
vb.set_oid((Oid)"1.3.6.1.2.1.1.2.0");
ctarget.set_retry(1);//重傳次數(shù)
ctarget.set_timeout(3000);//超時(shí)時(shí)間3000毫秒
status=snmp.get(pdu,*target);
if(status==SNMP_CLASS_SUCCESS) //第二次發(fā)包探測(cè)
{ strcpy(p[0],str);
} else
strcpy(p[0],"no line!");//如果失敗,表明該設(shè)備離線
} Snmp::socket_cleanup();
return &p[0];//返回結(jié)果
}
3網(wǎng)絡(luò)故障管理功能測(cè)試
3.1測(cè)試環(huán)境
本系統(tǒng)開發(fā)的軟件環(huán)境:VisualStudio2008,Sql Server2005,Visual C++ 6.0。
本系統(tǒng)開發(fā)的硬件環(huán)境:操作系統(tǒng)為Windows Server 2003,CPU為AMD 2800+,內(nèi)存為雙核1.5G。
需要安裝的補(bǔ)丁或插件:VS80sp1-KB926604-X86-CHS.exe補(bǔ)丁,SVGView.exe插件,ASP-AJAX-ExtSetup.msi插件。測(cè)試環(huán)境:將系統(tǒng)搭建在公安網(wǎng)的WindowsServer2003服務(wù)器上。
3.2測(cè)試結(jié)果
對(duì)于底層通過(guò)SNMP++編寫的DLL文件采集監(jiān)控?cái)?shù)據(jù),可以在封裝成DLL之前,以IP地址和SNMP的共同體(默認(rèn)為:public)為參數(shù),在命令行模式下測(cè)試是否成功獲取數(shù)據(jù),如圖3所示。
圖3顯示獲取的一部分?jǐn)?shù)據(jù)
開啟監(jiān)控故障信息的后臺(tái)服務(wù)程序,如果出現(xiàn)故障,將在系統(tǒng)首頁(yè)面的可伸縮的菜單中顯示最新的故障信息,分別顯示設(shè)備類型、事件描述、事件源名稱、事件生成時(shí)間、事件等級(jí)等重要信息。如圖4所示。
圖4設(shè)備故障信息
故障出現(xiàn)時(shí),系統(tǒng)將根據(jù)故障等級(jí),給予相應(yīng)的報(bào)警,如下圖5為路由器離線給出的報(bào)警信息。
經(jīng)測(cè)試,網(wǎng)絡(luò)故障管理系統(tǒng)實(shí)現(xiàn)了設(shè)計(jì)之初的功能要求,滿足了用戶對(duì)網(wǎng)絡(luò)故障管理系統(tǒng)功能的需求,證明了網(wǎng)絡(luò)故障管理難點(diǎn)問(wèn)題解決方法的可行性。
4結(jié)束語(yǔ)
本論文所設(shè)計(jì)開發(fā)的網(wǎng)絡(luò)故障管理系統(tǒng)能夠及時(shí)、準(zhǔn)確地定位故障源,達(dá)到了對(duì)故障報(bào)警實(shí)時(shí)、準(zhǔn)確的要求,實(shí)現(xiàn)了對(duì)路由器、交換機(jī)的接口流量,服務(wù)器的CPU、硬盤等信息實(shí)時(shí)監(jiān)控。當(dāng)然,由于經(jīng)驗(yàn)有限,在實(shí)現(xiàn)系統(tǒng)功能的某些方面可能考慮的還不是很周全,所以,在今后的工作中都將繼續(xù)實(shí)現(xiàn)和完善。
參考文獻(xiàn):
[1]鄭慶國(guó),呂衛(wèi)鋒.通信網(wǎng)絡(luò)中的告警相關(guān)性研究[J].計(jì)算機(jī)工程與應(yīng)用,2002(2):11-15.
[2]劉紹凱.基于SNMP網(wǎng)絡(luò)管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2005,10(21):135-138.
[3]袁梅宇.高效率多線程網(wǎng)絡(luò)流量采集算法研究及實(shí)踐[J].昆明理工大學(xué)學(xué)報(bào)(理工版),2006,31(1):32-35.
[4]張蓉.基于網(wǎng)絡(luò)拓?fù)涞母婢嚓P(guān)性分析[D].北京:北京郵電大學(xué)碩士學(xué)位論文,2008.
[5]楊漢祥,楊潤(rùn)華. HP SNMP++ SNMP管理站開發(fā)包的分析[J].計(jì)算機(jī)與現(xiàn)化,2002,2:7-11.
[6]楊漢祥,楊潤(rùn)華.HP SNMP++ SNMP管理站開發(fā)包的分析[J].計(jì)算機(jī)與現(xiàn)代化,2002,2.
[7]陳雷,董博,王雪.基于SNMP協(xié)議的全局網(wǎng)絡(luò)流量分析系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].大連理工大學(xué)學(xué)報(bào),2005,2(8):96-99.
[8]康華,周明全,房鼎益.基于SNMP協(xié)議的網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)和顯示[J].微機(jī)發(fā)展,2003,7(3):102-105.