2021-4-9 | 互聯(lián)網(wǎng)管理論文
網(wǎng)絡管理的目的是對網(wǎng)絡、網(wǎng)絡單元或設備進行監(jiān)視,采集相關的數(shù)據(jù),評價網(wǎng)絡和網(wǎng)絡單元的有效性,報告網(wǎng)絡設備的狀態(tài),支持網(wǎng)絡規(guī)劃和網(wǎng)絡分析。這些參數(shù)能幫助網(wǎng)絡管理人員了解和掌握網(wǎng)絡的狀態(tài)并及時給予維護或優(yōu)化。簡單網(wǎng)絡管理協(xié)議(SNMP)經(jīng)過幾十年的完善和發(fā)展,已經(jīng)成為目前使用最廣泛的網(wǎng)絡管理標準協(xié)議。基于SNMP協(xié)議以及Java技術與數(shù)據(jù)庫技術開發(fā)的網(wǎng)絡管理系統(tǒng),實現(xiàn)了對區(qū)域網(wǎng)絡的有效管理。
1SNMP網(wǎng)絡管理協(xié)議
SNMP框架由三個主要部分構成,分別是SMI(StructureofManagementInformation,管理信息結構)、MIB(ManagementInformationBase)、和SNMP協(xié)議。SMI是SNMP網(wǎng)絡管理框架三要素之首,它定義了SNMP框架所用信息的組織、組成和標識,SMI是用ASN.1來形式化定義管理對象。其中的每片信息是一個有標號的節(jié)點。每個節(jié)點包含兩個內(nèi)容:一個對象標識符和一個簡短的文本描述。其中對象標識符OID(ObjectIdentifiers,對象標識符)是由句點隔開的一組整數(shù),它命名節(jié)點并指示它在ASN.1樹中的準確位置。管理信息庫(MIB)是網(wǎng)絡管理中的重要組成部分。每個MIB包含:系統(tǒng)與設備的狀態(tài)信息,運行的數(shù)據(jù)統(tǒng)計,配置參數(shù)等。利用SNMP協(xié)議,可以查詢管理代理實現(xiàn)的MIB中相應對象的值,來監(jiān)視網(wǎng)絡設備的狀態(tài)。管理代理也會通過SNMP協(xié)議發(fā)出一些trap(陷阱報文)。
2SNMP網(wǎng)絡管理系統(tǒng)模型
2.1管理者—代理模式
SNMP采用“管理進程—代理進程”模型來監(jiān)視和控制Internet上各種可管理網(wǎng)絡設備。網(wǎng)管活動是通過網(wǎng)管請求的給予者(網(wǎng)管中心的管理者進程)和網(wǎng)管請求的接收者(代理系統(tǒng)中的代理進程)之間的交互式會話實現(xiàn)的。SNMP管理模型如圖1所示。網(wǎng)絡操作員首先通過特定的請求窗口向管理者提交網(wǎng)管請求,然后通過本地的網(wǎng)管通信模塊把該請求發(fā)送給指定的遠程代理,并等待執(zhí)行結果的返回。遠程代理在接收到這一請求后,向被監(jiān)控的網(wǎng)絡資源發(fā)出執(zhí)行該網(wǎng)管請求的命令。此時,遠程代理將等待執(zhí)行結果,或在被監(jiān)控的資源出現(xiàn)異常情況時產(chǎn)生事件報告。然后,遠程代理通過其網(wǎng)管通信模塊向網(wǎng)管中心發(fā)回網(wǎng)管結果。網(wǎng)管中心的管理者在接收到設備代理返回的結果或事件報告后,經(jīng)過分析處理再通過指定窗口把結果顯示出來。
2.2SNMP網(wǎng)絡管理系統(tǒng)構成
SNMP管理的網(wǎng)絡由三個關鍵組件組成:被管理設備(ManagedDevice)、代理(Agent)和網(wǎng)絡管理系統(tǒng)(NMS,NetworkManagementSystems)。被管理設備用于收集并儲存管理信息,通過SNMP,NMS能得到這些信息。被管理設備可以是路由器、訪問服務器,交換機和網(wǎng)橋、HUBS、主機或打印機等。SNMP代理是被管理設備上的一個網(wǎng)絡管理軟件模塊。SNMP代理擁有本地的相關管理信息,并將它們轉(zhuǎn)換成與SNMP兼容的格式。網(wǎng)絡管理系統(tǒng)NMS運行應用程序以實現(xiàn)監(jiān)控被管理設備。此外,NMS還為網(wǎng)絡管理提供了大量的處理程序及必須的儲存資源。任何受管理的網(wǎng)絡至少需要一個或多個NMS。
3網(wǎng)絡管理系統(tǒng)總體設計
基于SNMP網(wǎng)絡性能參數(shù)設置及獲取被管理設備信息的程序流程圖如圖2所示。IP地址標識了程序要訪問的網(wǎng)絡設備,如主機、路由器等等,要采集這些設備的性能參數(shù)就必須向它們發(fā)送SNMP報文,而IP地址則是組成這些SNMPPDU的變量之一。基于SNMP的網(wǎng)絡管理系統(tǒng)采用JAVA語言編寫,JAVA語言具有良好的跨平臺性和穩(wěn)健性。數(shù)據(jù)庫使用MYSQL,MYSQL具有功能強,使用簡單、管理方便、運行速度快等特點。
4系統(tǒng)功能實現(xiàn)
4.1系統(tǒng)功能主界面
本系統(tǒng)基于單文檔框架窗口作為系統(tǒng)的總控臺,所有的功能模塊都可在此總控臺中來調(diào)用,SN-MP管理功能部件采用對話框模式。主界面如圖3所示。進入系統(tǒng),啟動界面之后,在系統(tǒng)托盤建立應用程序圖標,并打開總控窗口。當總控窗口最小化時,將由在托盤區(qū)圖標上的相應菜單操作來執(zhí)行指令。如圖4所示。
4.2SNMP數(shù)據(jù)采集
SNMP數(shù)據(jù)的采集是重點研究的對象,如何通過編程來實現(xiàn)發(fā)送SNMP報文,取得SNMP報文,從中讀取數(shù)據(jù)就是這次設計所要解決的。當一個SNMP協(xié)議實體(比如管理者)發(fā)送報文時要執(zhí)行下面的過程:首先是按照ASN.1格式構造PDU,交給認證進程。認證進程檢查源和目標之間是否可以通信,如果通過這個檢查,則把有關信息(版本號、團體名、PDU)組裝成報文。最后經(jīng)過BER編碼,交給傳輸實體發(fā)送出去。如圖5所示。當一個SNMP協(xié)議實體(比如管理者)接受到報文時要執(zhí)行下面的過程:首先是按照BER編碼恢復ASN.1報文,然后對報文進行語法分析,驗證版本號和認證信息等。如果通過分析和驗證,則分離出協(xié)議數(shù)據(jù)單元,并進行語法分析,必要時經(jīng)過適當處理后返回應答報文。在認證檢驗失敗時可以生成一個陷阱報文,向發(fā)送端報告異常情況。無論何種檢驗失敗,都丟棄報文。
SNMP規(guī)定了5種協(xié)議數(shù)據(jù)單元PDU(SNMP報文),用來在管理進程和代理之間的交換。Get-request操作:從代理進程處提取一個或多個參數(shù)值Get-next-request操作:從代理進程處提取緊跟當前參數(shù)值的下一個參數(shù)值Set-request操作:設置代理進程的一個或多個參數(shù)值Get-response操作:返回的一個或多個參數(shù)值。這個操作是由代理進程發(fā)出的,它是前面三種操作的響應操作。Trap操作:代理進程主動發(fā)出的報文,通知管理進程有某些事情發(fā)出。
本系統(tǒng)采用Java語言開發(fā),報文構建和解碼工作的部分代碼如下:(1)創(chuàng)建SNMP報文VarBindListretrievedVars=newVarBindList();//請求標識interrorStatus=0;//錯誤狀態(tài)interrorIndex=0;//錯誤索引ObjectIdentifierrequestedObjectIdentifier=newObjectIdentifier(itemID);VariablePairnextPair=newVariablePair(re-questedObjectIdentifier,newNullSNMP());SequencevarList=newSequence();varList.addSNMPObject(nextPair);PDUpdu=newPDU(BERCodec.SNMPGE-TREQUEST,requestID,errorStatus,errorIndex,varList);MessageSNMPmessage=newMessageSNMP(version,community,pdu);//其中version、community、pdu三個參數(shù)分別為版本號、團體名、PDUbyte[]messageEncoding=message.get-BEREncoding();DatagramPacketoutPacket=newDatagram-Packet(messageEncoding,messageEncoding.length,hostAddress,remotePort);dSocket.send(outPacket);(2)對SNMP報文解碼DatagramPacketinPacket=newDatagram-Packet(newbyte[receiveBufferSize],receiveBuffer-Size);dSocket.receive(inPacket);byte[]encodedMessage=inPacket.getData();MessageSNMPreceivedMessage=newMes-sageSNMP(BERCodec.extractNextTLV(encod-edMessage,0).value);PDUreceivedPDU=receivedMessage.getPDU();if(receivedPDU.getRequestID()==re-questID){if(receivedPDU.getErrorStatus()!=0)thrownewGetExceptionSNMP(”OID”+itemID+”notavailableforretrieval”,receivedP-DU.getErrorIndex(),receivedPDU.getErrorStatus());varList=receivedPDU.getVarBindList();SequencenewPair=(Sequence)(varList.get-SNMPObjectAt(0));ObjectIdentifiernewObjectIdentifier=(Objec-tIdentifier)(newPair.getSNMPObjectAt(0));ObjectSNMPnewValue=newPair.getSNM-PObjectAt(1);if(newObjectIdentifier.toString().equals(itemID)){retrievedVars.addSNMPObject(newPair);break;}}returnretrievedVars;