《電子技術(shù)應用》
您所在的位置:首頁 > 通信與網(wǎng)絡 > 業(yè)界動態(tài) > 基于SNMP的網(wǎng)絡拓撲結(jié)構(gòu)自動發(fā)現(xiàn)研究

基于SNMP的網(wǎng)絡拓撲結(jié)構(gòu)自動發(fā)現(xiàn)研究

2009-09-16
作者:劉亞莉 孫亞民

  摘? 要: 分析了簡單網(wǎng)絡管理協(xié)議(SNMP)、網(wǎng)絡管理模型以及地址解析協(xié)議(ARP),在此基礎上提出了一種網(wǎng)絡拓撲結(jié)構(gòu)的自動發(fā)現(xiàn)方法。

  關(guān)鍵詞: 網(wǎng)絡管理? SNMP? 拓撲發(fā)現(xiàn)

?

  國際標準化組織提出的網(wǎng)絡管理標準框架(即開放系統(tǒng)互連管理框架)將網(wǎng)絡管理劃分成5大功能模塊:配置管理、性能管理、故障管理、計費管理和安全管理。Internet體系結(jié)構(gòu)委員會在此框架基礎上提出了相應的網(wǎng)絡管理標準,即簡單網(wǎng)絡管理協(xié)議SNMP。

  直觀、可視化的網(wǎng)絡拓撲圖使網(wǎng)絡管理更加方便和高效,所以在網(wǎng)絡管理軟件中構(gòu)造拓撲圖很有必要。網(wǎng)絡拓撲發(fā)現(xiàn)技術(shù)則是實現(xiàn)網(wǎng)絡拓撲圖的關(guān)鍵?;赥CP/IP的SNMP協(xié)議由于其簡單和易于實現(xiàn)的特性,已經(jīng)成為網(wǎng)絡管理領(lǐng)域事實上的協(xié)議標準,且目前主要的網(wǎng)絡設備都提供對SNMP協(xié)議的支持,因此基于SNMP協(xié)議的拓撲發(fā)現(xiàn)技術(shù)被廣泛采用。本文主要討論基于SNMP協(xié)議的網(wǎng)絡搜索技術(shù)。

1? 相關(guān)協(xié)議及概念

1.1 SNMP的管理模型

  SNMP的網(wǎng)絡管理模型如圖1所示。該模型由管理站、代理、管理信息庫(Management Information Base,MIB)和網(wǎng)絡管理協(xié)議等組成。

?

?

  SNMP管理站一般是單機設備或者共享網(wǎng)絡中的一員,它是網(wǎng)絡管理員與網(wǎng)絡管理系統(tǒng)的接口。SNMP代理對來自管理站的信息查詢和請求做出響應,同時異步地向管理站提供一些重要的非請求信息。管理信息庫是被管代理特性的數(shù)據(jù)變量集合。管理站通過獲取代理MIB對象的值來實現(xiàn)監(jiān)視功能,也可以通過修改代理的特殊變量的值來改變代理的配置。

  管理站和代理之間通過SNMP網(wǎng)絡管理協(xié)議連接。該協(xié)議包括以下功能。

  (1)Get:由管理站執(zhí)行,獲取代理的MIB對象值。

  (2)Set:由管理站執(zhí)行,設置代理的MIB對象值。

  (3)Trap:由代理發(fā)送的非請求信息,異步地向管理站報告重要事件。

  具體地講,管理站把感興趣的對象標識提取到應用程序中,發(fā)出GetRequest報文,從擁有SNMP管理代理的網(wǎng)絡設備中獲取指定對象的信息。管理代理用GetResponse消息響應GetRequest報文。GetNextRequest是管理站用于查詢信息的報文,它可以獲取一個表中指定對象的下一個對象,以遍歷整個表。Get實現(xiàn)了對設備信息的查詢,如果要求改變代理的配置,就需要管理站向被管代理發(fā)送SetRequest報文。SetRequest常用于對網(wǎng)絡設備進行遠程配置。SNMP陷阱(Trap)是SNMP代理發(fā)送給工作站的非請求消息,該消息通知管理站發(fā)生了特定事件。

1.2 SNMP報文

  管理站和代理之間通過交換SNMP報文來交換信息。管理站的每個請求或者響應都是一個完整、獨立的SNMP報文。每個報文包括SNMP版本號、SNMP共同體名和協(xié)議數(shù)據(jù)單元(Protocol Data Unit,PDU)。SNMP的消息格式如圖2所示。

?

1.3 SNMP的管理信息庫

  管理信息庫是網(wǎng)管數(shù)據(jù)的標準。該標準規(guī)定了網(wǎng)絡代理必須保存的數(shù)據(jù)項目、類型及允許的操作。網(wǎng)絡管理系統(tǒng)中的每個結(jié)點都包括一個MIB,它反映了該結(jié)點中被管資源的狀態(tài)。利用SNMP協(xié)議訪問網(wǎng)絡設備的管理信息庫,就可以得到網(wǎng)絡設備的所有統(tǒng)計內(nèi)容,完成網(wǎng)絡拓撲的構(gòu)建。

  MIB被劃分成8個組和171個對象,SNMP可操作的數(shù)據(jù)結(jié)構(gòu)和變量都包括在其中。常用的組如下:

  (1)System組中包含被管系統(tǒng)的總體信息,如位置、名稱、功能、制造者等。

  (2)Interfaces組提供網(wǎng)絡實體的物理層接口的信息,包括配置信息和每個接口上的事件統(tǒng)計信息。

  (3)IP組提供網(wǎng)絡結(jié)點中有關(guān)IP實現(xiàn)和操作的信息。

  (4)ICMP組包括了有關(guān)ICMP的實現(xiàn)和操作的信息。

  (5)TCP組的對象主要用于解決流量控制、丟失重傳和網(wǎng)絡擁擠等問題。

  (6)UDP組監(jiān)視打開的UDP連接,記錄錯誤信息。

  (7)EGP組用于支持外部網(wǎng)關(guān)協(xié)議的路由器,記錄本地和臨近路由器的EGP信息。

  (8)SNMP組包括了有關(guān)SNMP實現(xiàn)和操作的信息。

2?網(wǎng)絡拓撲結(jié)構(gòu)的自動發(fā)現(xiàn)

  網(wǎng)絡拓撲圖用圖形化的方式直觀、形象地表示出整個網(wǎng)絡中的各子網(wǎng)以及子網(wǎng)內(nèi)部網(wǎng)絡設備之間的互連關(guān)系。一個合理的網(wǎng)絡拓撲圖應該具有層次性,即包括主拓撲和子拓撲。主拓撲顯示網(wǎng)絡中子網(wǎng)及網(wǎng)關(guān)間的互連結(jié)構(gòu);子拓撲則顯示子網(wǎng)內(nèi)部網(wǎng)絡設備間的互連關(guān)系。在網(wǎng)絡拓撲結(jié)構(gòu)的自動發(fā)現(xiàn)的實現(xiàn)過程中,使用SNMP協(xié)議搜索路由表信息構(gòu)造網(wǎng)絡主拓撲,使用ARP協(xié)議或者ICMP協(xié)議發(fā)現(xiàn)子網(wǎng)中的終端設備,實現(xiàn)子拓撲的構(gòu)建。

2.1 主拓撲

  計算機網(wǎng)絡是由各種不同規(guī)模的子網(wǎng)組成的。子網(wǎng)通過各自的路由器同其他的子網(wǎng)通信。這些子網(wǎng)可以是局域網(wǎng),也可以是某個局域網(wǎng)中的子網(wǎng),它們都連接到路由器的一個端口上。路由器的端口可以和子網(wǎng)相連,也可以和路由器相連。主拓撲反映網(wǎng)絡中的路由設備和子網(wǎng)之間的關(guān)系,包括路由器-路由器、路由器-子網(wǎng)以及接口的關(guān)系。

  主拓撲的搜索通過SNMP協(xié)議訪問路由表的信息來實現(xiàn)。MIB庫中的IP路由表ipRouteTable是對路由表的抽象。其定義用ASN.1文法描述如下:

  ipRouteTable OBJECT-TYPE

  SYNTAX SEQUENCE OF IpRouteEntry

  IpRouteEntry∷=SEQUENCE

  {ipRouteDest IpAddress,  //路由器的目的子網(wǎng)地址

  ipRouteIfIndex INTEGER,  //惟一標識本地接口的索引值,

                //通過該接口可以到達該路由的下一站

  ipRouteNextHop IpAddress, //路由器的下一個網(wǎng)關(guān)地址

  ipRouteType INTEGER,//路由類型:1-其他,2-無效,

               //3-直接,4-間接

  ipRouteProto INTEGER//路由的學習機制,

               //如RIP、EGP或OSPF等

  ipRouteMask IpAddress  ? //路由目的地的子網(wǎng)掩碼

  ……}

  如果ipRouteDest為0.0.0.0則表示該路由為缺省路由。由于路由表中的下一站地址項標識的必然是具有路由功能的網(wǎng)絡結(jié)點,因此從網(wǎng)絡管理站的缺省路由開始,采用廣度優(yōu)先或深度優(yōu)先遍歷無向圖的算法對整個網(wǎng)絡進行遍歷,可逐級找出所有的路由器和子網(wǎng),在此基礎上就可以實現(xiàn)網(wǎng)絡主拓撲結(jié)構(gòu)的構(gòu)建。

  實現(xiàn)主拓撲搜索的方法如下:假設待訪問的網(wǎng)絡是一個連通圖,而且至少知道其中一個節(jié)點R0的IP地址,則初始化已知路由隊列,將缺省路由標志IP放到已知的路由隊列中,已知路由器隊列={R0},已訪問路由器隊列=φ,下一跳路由器隊列=φ,子網(wǎng)隊列=φ。

While(已知路由隊列不為空)

{

    從已知路由隊列中取出一個路由器,為CurrentRouter;

    if(CurrentRouter屬于已訪問的路由器隊列)

?      break;

  elseif(將CurrentRouter加入到已訪問的路由隊列成功)

  {

?   訪問CurrentRouter的每個路由表項;

?   if(ipRouteType==indirect)

?   把路由表中的各ipRouteNextHop不重復地放到下一跳路由器隊列;

   if(ipRouteType==direct)

   把ipRouteDest和ipRouteMask不重復地放到子網(wǎng)隊列中;

  }

  遍歷下一跳路由器隊列中的每個路由器,將其標志IP放到待訪問的路由器隊列;

}

  說明:

  (1)如果在路由器的某路由記錄中ipRouteType為3,則其目的子網(wǎng)(ipRouteDest)與本路由器直接相連。ipRouteNextHop表示從該路由器轉(zhuǎn)發(fā)數(shù)據(jù)的出口地址,是該路由器的一塊網(wǎng)卡地址。此時,ipRouteNextHop與ipRouteMask相與可以得到子網(wǎng)地址。ipRouteTable中的ipRouteIfIndex是本地接口的索引,其值與接口表(ifTable)中的ifIndex值相對應。通過ifIndex和ifType的對應關(guān)系可以得到子網(wǎng)的類型。將子網(wǎng)及其相關(guān)信息加入到子網(wǎng)數(shù)據(jù)庫中。

  (2)如果不滿足條件(1),目的子網(wǎng)不直接與路由器相連,則只能通過ipRouteNextHop所指的下一跳路由器到達子網(wǎng)。此時的下一跳路由器與本路由器直接相連,將其加入到路由器數(shù)據(jù)庫中。

  (3)對于新發(fā)現(xiàn)的路由器,重復上述步驟完成所有路由器和子網(wǎng)的搜索。

  (4)通過對數(shù)據(jù)庫中路由器表和子網(wǎng)表的搜索可以知道大致的網(wǎng)絡主拓撲結(jié)構(gòu)。但是要想繪制出網(wǎng)絡的拓撲圖還需要路由器之間、路由器和子網(wǎng)之間的連接關(guān)系,這些關(guān)系還需要查詢MIB中其他表項的信息。

2.2 子拓撲

  需要指出的是使用SNMP協(xié)議只能發(fā)現(xiàn)網(wǎng)絡系統(tǒng)中的路由器和子網(wǎng),對于子網(wǎng)內(nèi)部的結(jié)構(gòu)還是一無所知。為了實現(xiàn)子拓撲的搜索則需要引入其他協(xié)議,如ARP協(xié)議或者ICMP協(xié)議。本文中使用ARP協(xié)議來實現(xiàn)子拓撲的搜索。

  任何有以太網(wǎng)接口的網(wǎng)絡設備都必須支持地址解析協(xié)議(ARP)并在本機維護一張ARP表,用于IP地址到物理地址的映射。通過分析MIB庫中的對象,發(fā)現(xiàn)路由器的ipNetToMediaTable表中記錄了該路由器所連接其他設備的IP地址到物理地址的映射和映射方式,其ASN.1定義如下:

  ipNetToMediaTable OBJECT-TYPE

  SYNTAX SEQUENCE OF IpNetToMediaEntry

  IpNetToMediaEntry∷=SEQUENCE

  {ipNetToMediaIfIndex INTEGER,

              //該記錄對應的接口索引

  ipNetToMediaPhysAddress PhysAddress,

              //介質(zhì)依賴的物理地址

  ipNetToMediaNetAddress IpAddress,

              //與物理地址對應的IP地址

  ipNetToMediaType INTEGER } //地址映射類型

????這個表記錄了最近活動過的有效設備的IP地址和物理地址。如果子網(wǎng)內(nèi)主機是活動的,則一定在ipNetToMediaTable中有記錄。在主拓撲的發(fā)現(xiàn)過程中記錄了子網(wǎng)的網(wǎng)絡地址和子網(wǎng)掩碼。使用子網(wǎng)掩碼與相應的路由器表中的ipNetToMediaNetAddress進行“與”操作,就可以得到這個子網(wǎng)內(nèi)的所有主機的IP地址。此外,通過ipNetToMediaIfIndex查詢路由器接口表(ifTable)中對應的子網(wǎng)接口,查看ifType可以查詢出子網(wǎng)的類型,這樣就實現(xiàn)了子拓撲的發(fā)現(xiàn)。

????對于網(wǎng)絡節(jié)點數(shù)目不多,網(wǎng)絡流量不大的企業(yè)內(nèi)部網(wǎng),經(jīng)常采用交換機完成局域網(wǎng)的組建。但是,一般的交換機工作于數(shù)據(jù)鏈路層,沒有路由功能,所以上述方法不適合于非三層的交換機,這樣的網(wǎng)絡拓撲屬于鏈路層的拓撲結(jié)構(gòu)。為了檢測交換機每個端口的狀態(tài),可以從交換機的MAU-MIB中取出相應的值。在RFC2239中定義了MAU-MIB,包含了一些設備內(nèi)部的狀態(tài)信息,可以取出ifMauTable表內(nèi)容,根據(jù)其中的ifMauStatus值來判斷該端口的運行狀態(tài)。

  查詢方法如下:先讀取交換機Bridge-MIB中的信息,獲取連接到交換機各個端口的計算機的物理地址,然后讀取在交換機的ipNetToMediaTable表中保存的所有通過該設備轉(zhuǎn)發(fā)數(shù)據(jù)包的主機的MAC地址。假設這張表中包含了所有連接主機的MAC地址,則可以通過下面的方法來得到它的連接情況。

  (1)首先得到dot1dTpFdbTable中關(guān)于各個端口的Address Forwarding Table,這是交換機中轉(zhuǎn)發(fā)和過濾數(shù)據(jù)幀的依據(jù)。表1顯示了端口接入設備物理地址表。

?

  (2)得到物理地址與IP地址轉(zhuǎn)換表(ipNetToMediaTable)。該表保存了所有通過該設備進行數(shù)據(jù)包轉(zhuǎn)發(fā)的主機的MAC地址,其物理地址與IP地址對應表如表2所示。

?

  (3)由上面2張表可以得出端口接入設備信息表,如表3所示。

?

?

  該表顯示了與交換機連接并激活的計算機狀態(tài)。

3? 結(jié)束語

  本文討論了基于SNMP協(xié)議和ARP協(xié)議的網(wǎng)絡拓撲發(fā)現(xiàn)方法。在使用該方法實現(xiàn)網(wǎng)絡拓撲的過程中,采用HP公司的SNMP++開發(fā)包,并使用Visual C++作為開發(fā)工具,對于MIB-Ⅱ中標識的網(wǎng)絡元素使用SQL Server數(shù)據(jù)庫中的表項來表示。所建立的數(shù)據(jù)庫結(jié)構(gòu)反映了網(wǎng)絡元素之間的關(guān)系,并建立相應的路由器表、子網(wǎng)表、設備表以及連接關(guān)系表等。使用開發(fā)工具和開發(fā)包利用拓撲發(fā)現(xiàn)方法將網(wǎng)絡數(shù)據(jù)取到數(shù)據(jù)庫中,再利用開發(fā)工具將數(shù)據(jù)轉(zhuǎn)換成圖形顯示在網(wǎng)絡管理平臺上,完成網(wǎng)絡拓撲圖的構(gòu)建。實踐結(jié)果表明該方法可以搜索出指定網(wǎng)段內(nèi)的拓撲圖。網(wǎng)絡拓撲圖的實現(xiàn),為繼續(xù)實現(xiàn)網(wǎng)絡管理的其他功能模塊打下了基礎。

?

參考文獻

1? 楊家海,任憲坤,王沛瑜.網(wǎng)絡管理原理與實現(xiàn)技術(shù).北京:清華大學出版社,2000

2? 岑賢道,安常青.網(wǎng)絡管理協(xié)議及應用開發(fā).北京:清華大學出版社,1998

3? 武俊明,羅軍周.基于IP的網(wǎng)絡結(jié)點發(fā)現(xiàn)與拓撲管理.連云港化工高等??茖W校學報,2001;14(2)

4? 凌軍,曹陽,李莉等.基于ARP和SNMP的網(wǎng)絡拓撲自動發(fā)現(xiàn)算法.武漢大學學報,2001;47(1)

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。