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