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

基于SNMP的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)自動(dòng)發(fā)現(xiàn)研究

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

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

  關(guān)鍵詞: 網(wǎng)絡(luò)管理? SNMP? 拓?fù)浒l(fā)現(xiàn)

?

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

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

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

1.1 SNMP的管理模型

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

?

?

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

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

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

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

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

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

1.2 SNMP報(bào)文

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

?

1.3 SNMP的管理信息庫

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

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

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

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

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

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

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

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

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

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

2?網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)的自動(dòng)發(fā)現(xiàn)

  網(wǎng)絡(luò)拓?fù)鋱D用圖形化的方式直觀、形象地表示出整個(gè)網(wǎng)絡(luò)中的各子網(wǎng)以及子網(wǎng)內(nèi)部網(wǎng)絡(luò)設(shè)備之間的互連關(guān)系。一個(gè)合理的網(wǎng)絡(luò)拓?fù)鋱D應(yīng)該具有層次性,即包括主拓?fù)浜妥油負(fù)?。主拓?fù)滹@示網(wǎng)絡(luò)中子網(wǎng)及網(wǎng)關(guān)間的互連結(jié)構(gòu);子拓?fù)鋭t顯示子網(wǎng)內(nèi)部網(wǎng)絡(luò)設(shè)備間的互連關(guān)系。在網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)的自動(dòng)發(fā)現(xiàn)的實(shí)現(xiàn)過程中,使用SNMP協(xié)議搜索路由表信息構(gòu)造網(wǎng)絡(luò)主拓?fù)?使用ARP協(xié)議或者ICMP協(xié)議發(fā)現(xiàn)子網(wǎng)中的終端設(shè)備,實(shí)現(xiàn)子拓?fù)涞臉?gòu)建。

2.1 主拓?fù)?/STRONG>

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

  主拓?fù)涞乃阉魍ㄟ^SNMP協(xié)議訪問路由表的信息來實(shí)現(xiàn)。MIB庫中的IP路由表ipRouteTable是對(duì)路由表的抽象。其定義用ASN.1文法描述如下:

  ipRouteTable OBJECT-TYPE

  SYNTAX SEQUENCE OF IpRouteEntry

  IpRouteEntry∷=SEQUENCE

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

  ipRouteIfIndex INTEGER,  //惟一標(biāo)識(shí)本地接口的索引值,

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

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

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

               //3-直接,4-間接

  ipRouteProto INTEGER//路由的學(xué)習(xí)機(jī)制,

               //如RIP、EGP或OSPF等

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

  ……}

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

  實(shí)現(xiàn)主拓?fù)渌阉鞯姆椒ㄈ缦?假設(shè)待訪問的網(wǎng)絡(luò)是一個(gè)連通圖,而且至少知道其中一個(gè)節(jié)點(diǎn)R0的IP地址,則初始化已知路由隊(duì)列,將缺省路由標(biāo)志IP放到已知的路由隊(duì)列中,已知路由器隊(duì)列={R0},已訪問路由器隊(duì)列=φ,下一跳路由器隊(duì)列=φ,子網(wǎng)隊(duì)列=φ。

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

{

    從已知路由隊(duì)列中取出一個(gè)路由器,為CurrentRouter;

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

?      break;

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

  {

?   訪問CurrentRouter的每個(gè)路由表項(xiàng);

?   if(ipRouteType==indirect)

?   把路由表中的各ipRouteNextHop不重復(fù)地放到下一跳路由器隊(duì)列;

   if(ipRouteType==direct)

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

  }

  遍歷下一跳路由器隊(duì)列中的每個(gè)路由器,將其標(biāo)志IP放到待訪問的路由器隊(duì)列;

}

  說明:

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

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

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

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

2.2 子拓?fù)?/STRONG>

  需要指出的是使用SNMP協(xié)議只能發(fā)現(xiàn)網(wǎng)絡(luò)系統(tǒng)中的路由器和子網(wǎng),對(duì)于子網(wǎng)內(nèi)部的結(jié)構(gòu)還是一無所知。為了實(shí)現(xiàn)子拓?fù)涞乃阉鲃t需要引入其他協(xié)議,如ARP協(xié)議或者ICMP協(xié)議。本文中使用ARP協(xié)議來實(shí)現(xiàn)子拓?fù)涞乃阉鳌?/P>

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

  ipNetToMediaTable OBJECT-TYPE

  SYNTAX SEQUENCE OF IpNetToMediaEntry

  IpNetToMediaEntry∷=SEQUENCE

  {ipNetToMediaIfIndex INTEGER,

              //該記錄對(duì)應(yīng)的接口索引

  ipNetToMediaPhysAddress PhysAddress,

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

  ipNetToMediaNetAddress IpAddress,

              //與物理地址對(duì)應(yīng)的IP地址

  ipNetToMediaType INTEGER } //地址映射類型

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

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

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

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

?

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

?

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

?

?

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

3? 結(jié)束語

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

?

參考文獻(xiàn)

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

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

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

4? 凌軍,曹陽,李莉等.基于ARP和SNMP的網(wǎng)絡(luò)拓?fù)渥詣?dòng)發(fā)現(xiàn)算法.武漢大學(xué)學(xué)報(bào),2001;47(1)

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