摘要:通過結(jié)合SNMP[1]與ICMP[2]的相關(guān)特性,提出了一種基于DNMAI[3](分布式網(wǎng)絡(luò)測量和分析基礎(chǔ)架構(gòu))的可定制的網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)方法,并給出了拓?fù)湫畔⒌牟杉⑦^濾算法與數(shù)據(jù)庫結(jié)構(gòu)的定義。最后,詳細(xì)描述了網(wǎng)絡(luò)拓?fù)鋱D形的程序?qū)崿F(xiàn)過程,并在網(wǎng)絡(luò)測試平臺上得到了實際測試結(jié)果。
關(guān)鍵詞:拓?fù)浒l(fā)現(xiàn); 網(wǎng)絡(luò)管理; 分布式網(wǎng)絡(luò)測量和分析基礎(chǔ)架構(gòu); 拓?fù)淇梢暬?/p>
中圖分類號:TP311文獻(xiàn)標(biāo)志碼:A
文章編號:1001—3695(2007)03—0234—04
近年來,隨著Internet/Intranet的高速發(fā)展,計算機網(wǎng)絡(luò)技術(shù)被廣泛地應(yīng)用于政府、企業(yè)、院校等各個領(lǐng)域,越來越多的新節(jié)點、新鏈路不斷地被引入到網(wǎng)絡(luò)中,使普通的手工維護(hù)很難跟上網(wǎng)絡(luò)的變化。而很多重要的網(wǎng)絡(luò)管理任務(wù),如網(wǎng)絡(luò)資源管理、服務(wù)器部署、事件關(guān)聯(lián)以及故障分析等均以獲得網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)為前提。如何準(zhǔn)確、有效地獲取網(wǎng)絡(luò)拓?fù)湫畔ⅲ殉蔀榫W(wǎng)絡(luò)管理和應(yīng)用軟件性能分析研究的重要組成部分。通過改進(jìn)SNMP(簡單網(wǎng)絡(luò)管理協(xié)議)和ICMP(互聯(lián)網(wǎng)控制消息協(xié)議)的相關(guān)應(yīng)用技術(shù),提出了一種在DNMAI下對網(wǎng)絡(luò)拓?fù)溥M(jìn)行可定制分層自動發(fā)現(xiàn)的方法,同時引入按子網(wǎng)節(jié)點環(huán)狀遞歸分配坐標(biāo)的思想,結(jié)合關(guān)系數(shù)據(jù)庫功能模塊實現(xiàn)對網(wǎng)絡(luò)拓?fù)涞目梢暬?/p>
1相關(guān)技術(shù)背景
DNMAI[3]是一種能根據(jù)用戶需求定制測量和分析方案的體系架構(gòu),具有很強的包容性和擴(kuò)展性。它使用HTML網(wǎng)頁結(jié)合XSL技術(shù)來設(shè)計程序界面,以XML作為各模塊間的信息交換媒介,應(yīng)用場景靈活,支持跨平臺使用。其主要的執(zhí)行模塊均在DNMAI服務(wù)器端運行,用戶只需要擁有IE或Mozzila等瀏覽器登錄即可進(jìn)行相關(guān)操作,無需下載程序,極大地減輕了客戶端的運算負(fù)擔(dān),同時由于DNMAI對網(wǎng)絡(luò)中傳遞的相關(guān)數(shù)據(jù)均進(jìn)行了加密處理,在一定程度上保障了網(wǎng)絡(luò)信息的安全。
SNMP是一種用于在 IP 網(wǎng)絡(luò)中管理網(wǎng)絡(luò)節(jié)點(服務(wù)器、工作站、路由器、交換機及HUB 等)的標(biāo)準(zhǔn)協(xié)議,借助于檢查MIB(管理信息庫)的參數(shù)或監(jiān)督特定的網(wǎng)絡(luò)狀態(tài),SNMP 可以進(jìn)行交互式的網(wǎng)絡(luò)管理。使用SNMP的最大優(yōu)點是信息自動隨網(wǎng)絡(luò)的狀況更新,這樣通過SNMP獲取的拓?fù)湫畔⒖偸欠从尘W(wǎng)絡(luò)最新的狀況;其缺點是并非所有設(shè)備都支持SNMP,而且除了標(biāo)準(zhǔn)的信息庫外,各廠家均為自己的設(shè)備開發(fā)了專門的MIB,如果在拓?fù)渥詣影l(fā)現(xiàn)程序中使用了這些MIB,必須隨廠家的不同而作特殊的處理。因此本文中用到的MIB組(System組、Interfaces組、IP組),均為符合RFC協(xié)議的MIB-II下的標(biāo)準(zhǔn)組。
ICMP是TCP/IP協(xié)議族的一個子協(xié)議,用于在IP主機、路由器之間傳遞控制消息,這些消息對于用戶提取路由信息、掌握網(wǎng)絡(luò)設(shè)備的活動狀態(tài)起著十分重要的作用。本文主要通過改進(jìn)ICMP的Ping方法實現(xiàn)對子網(wǎng)中主機設(shè)備的高效發(fā)現(xiàn)。
2總體設(shè)計思想
目前已有的大多數(shù)拓?fù)浒l(fā)現(xiàn)方法或多或少地存在一些不足之處:缺乏靈活的交互式用戶接口與面向需求的功能定制系統(tǒng);分析方法不足且比較零散;未考慮到如何拓展、復(fù)用探測數(shù)據(jù),使拓?fù)浒l(fā)現(xiàn)方法與已有的一些探測手段相結(jié)合;顯示的拓?fù)鋱D形信息量不足,不能準(zhǔn)確、高效地反映網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)。
針對以上不足,提出了一種改進(jìn)的網(wǎng)絡(luò)拓?fù)渥詣影l(fā)現(xiàn)方法,它采用模塊化的構(gòu)建方式,各模塊間相互獨立,通過關(guān)系數(shù)據(jù)庫定義各接口信息,用戶界面與后臺調(diào)度模塊嵌入到DNMAI網(wǎng)絡(luò)測試架構(gòu)中實現(xiàn);骨干IP網(wǎng)絡(luò)信息數(shù)據(jù)由SNMP服務(wù)管理模塊取得,而子網(wǎng)內(nèi)部各設(shè)備之間的相互連接關(guān)系由基于ICMP的子網(wǎng)發(fā)現(xiàn)模塊取得;最后利用繪圖程序模塊實現(xiàn)對網(wǎng)絡(luò)拓?fù)鋱D的繪制。其主要特點如下:
(1)利用DNMAI客戶端提供了豐富的輸入選項,用戶可根據(jù)實際需要定制拓?fù)浒l(fā)現(xiàn)任務(wù)。
(2)以數(shù)據(jù)庫的方式組織管理各類應(yīng)用數(shù)據(jù),在進(jìn)行網(wǎng)絡(luò)拓?fù)涮綔y的同時,處理和統(tǒng)計信息數(shù)據(jù),既有利于各模塊間的數(shù)據(jù)共享和二次開發(fā),也避免了向網(wǎng)絡(luò)中注入大量的無效數(shù)據(jù)包,從而減輕了網(wǎng)絡(luò)負(fù)擔(dān)。
(3)在繪制拓?fù)鋱D時,將路由設(shè)備、子網(wǎng)、主機以及各個接口間的連接關(guān)系明確地展現(xiàn)出來,使用戶對整個網(wǎng)絡(luò)結(jié)構(gòu)一目了然。此外,借助于DNMAI已有的執(zhí)行模塊,可進(jìn)一步擴(kuò)展應(yīng)用領(lǐng)域。
3關(guān)系數(shù)據(jù)庫結(jié)構(gòu)
在整個拓?fù)浒l(fā)現(xiàn)過程中將用到的主要數(shù)據(jù)庫表與子項如表1—6所示。
4網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)算法
4.1拓?fù)浒l(fā)現(xiàn)算法思想
網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)的主要思路是根據(jù)用戶在DNMAI客戶端設(shè)置的各項條件,采用由內(nèi)而外、漸進(jìn)探測的方式,首先發(fā)現(xiàn)網(wǎng)絡(luò)層拓?fù)浣Y(jié)構(gòu)[4],然后根據(jù)用戶的需要發(fā)現(xiàn)全網(wǎng)拓?fù)浠蛑付ǖ淖泳W(wǎng)拓?fù)洹>W(wǎng)絡(luò)層的拓?fù)浒l(fā)現(xiàn)過程主要是利用SNMP訪問路由設(shè)備MIB[1]中的相關(guān)信息來實現(xiàn),因此網(wǎng)絡(luò)層拓?fù)浒l(fā)現(xiàn)的算法復(fù)雜度主要就由發(fā)送SNMP包的耗時所決定,如果能合理地定義網(wǎng)絡(luò)連接關(guān)系[5],將有效地降低拓?fù)湫畔⑷哂啵瑴p少發(fā)送SNMP探測包的次數(shù),提高拓?fù)浒l(fā)現(xiàn)的效率。在普遍的拓?fù)浒l(fā)現(xiàn)方法中,通常將網(wǎng)絡(luò)連接關(guān)系用路由設(shè)備—路由設(shè)備、路由設(shè)備—子網(wǎng)、子網(wǎng)—子網(wǎng)三種方式來表示。這種方法在一定程度上反映了拓?fù)溥B接狀況,但并不能完全表示出網(wǎng)絡(luò)各子網(wǎng)接口間的連接關(guān)系,而且在三種方式之間還存在著相當(dāng)?shù)男畔⑷哂啵驗槁酚稍O(shè)備與路由設(shè)備、子網(wǎng)間的連接關(guān)系可以簡化表示為路由設(shè)備的接口與子網(wǎng)的連接,即每一接口均對應(yīng)到一個子網(wǎng)中。本文采用了路由設(shè)備接口—子網(wǎng)—子網(wǎng)—主機的方式來定義連接,將路由設(shè)備與子網(wǎng)以及子網(wǎng)內(nèi)的主機統(tǒng)一起來,簡化了所需的拓?fù)湫畔ⅲ瑑H需查詢一次MIB中的IP組路由地址表即可確定該部分網(wǎng)絡(luò)層的連接關(guān)系。
子網(wǎng)拓?fù)涞陌l(fā)現(xiàn)過程采用ICMP中的Ping[2]方法來實現(xiàn),但與一般拓?fù)浒l(fā)現(xiàn)中使用的Ping方法不同。子網(wǎng)發(fā)現(xiàn)模塊首先將已發(fā)現(xiàn)的所有子網(wǎng)劃分為若干個基本網(wǎng)段(當(dāng)子網(wǎng)內(nèi)能容納的IP數(shù)<255時,則基本網(wǎng)段中的IP數(shù)等于該子網(wǎng)中實際的IP數(shù);如果>255,則基本網(wǎng)段中IP數(shù)等于255,然后再對該子網(wǎng)中超過255部分的IP進(jìn)行劃分),以一個基本網(wǎng)段中的IP數(shù)為單位,一次性發(fā)出所有Ping包,并設(shè)置超時時間為一個大于Ping包正常返回所需時間的有效值。由于Ping包成功返回時間總小于超時返回時間,可以認(rèn)為在接收時只要連續(xù)收到兩個超時錯誤返回包,則可判定該基本網(wǎng)段中后續(xù)的Ping包皆失敗,則不再對其后續(xù)包進(jìn)行解析處理。此外,當(dāng)基本網(wǎng)段數(shù)量較多時,可采用多線程的方式進(jìn)行,為每一個基本網(wǎng)段分配一個Ping包子線程。由于在通常的多線程算法中,并未考慮到單獨創(chuàng)建子線程所產(chǎn)生的時間損耗。而根據(jù)實際測試的結(jié)果發(fā)現(xiàn),當(dāng)基本網(wǎng)段的數(shù)量在10—12之間時,單線程的方式比多線程效率更高。子網(wǎng)發(fā)現(xiàn)模塊將根據(jù)劃分后的基本網(wǎng)段數(shù)量自動選擇按單線程或多線程方式發(fā)現(xiàn)子網(wǎng)設(shè)備,進(jìn)一步提高了子網(wǎng)設(shè)備的發(fā)現(xiàn)效率。
4.2拓?fù)浒l(fā)現(xiàn)算法流程圖(圖1)
圖1拓?fù)浒l(fā)現(xiàn)算法流程圖
4.3 對拓?fù)浒l(fā)現(xiàn)算法的進(jìn)一步描述
(1)由于路由設(shè)備的每個端口定義了不同的IP地址,同一臺路由設(shè)備還可能由于添加或刪除子網(wǎng)而更改端口的IP地址,如果使用單一的IP地址來標(biāo)志路由設(shè)備,將有可能因為設(shè)備配置信息的變動而導(dǎo)致無法完整發(fā)現(xiàn)網(wǎng)絡(luò)拓?fù)洹1疚奶岬降乃惴▽⒏鶕?jù)路由設(shè)備的發(fā)現(xiàn)順序為其編號,以作為管理數(shù)據(jù)庫的唯一標(biāo)志。
(2)由于關(guān)系數(shù)據(jù)庫的引入,使得獲取數(shù)據(jù)與處理數(shù)據(jù)的過程相互獨立,在執(zhí)行SNMP探測包的同時,后臺程序進(jìn)行同步更新,并對下一探測包進(jìn)行發(fā)送設(shè)置。
(3)訪問MIB中System組的SysName項可獲取設(shè)備名稱;訪問IP組的ipForwarding項可判斷其是否為路由設(shè)備;通過訪問IP組中的ipAddrTable表能確定路由設(shè)備的接口狀態(tài),而ipRouteTable表則提供了路由設(shè)備之間、路由設(shè)備與子網(wǎng)之間的連接信息。
(4)在提取路由設(shè)備MIB信息時,首先對該路由設(shè)備執(zhí)行SNMP命令,取其ipAddrTable項,找出路由器上設(shè)置的所有接口地址,并將結(jié)果加入數(shù)據(jù)庫Tinterfaceinfo表,然后再查詢ipRouteTable項,對ipRoutetType=3且ipRouteNextHop不為回環(huán)地址(127.0.0.1)的子項可認(rèn)為是連接子網(wǎng)的路由。如果該子網(wǎng)未在tSubNet表中出現(xiàn)過,則加入數(shù)據(jù)庫中的tSubNet表;對ipRouteType=4的路由,可視為是直接相連路由設(shè)備地址,如果與數(shù)據(jù)庫中的設(shè)備地址無重復(fù),則加入數(shù)據(jù)庫中的tDeviceInfo表。最后,將當(dāng)前設(shè)備與直連路由設(shè)備之間的鏈路信息裝入tLink表,完成對該設(shè)備的查詢。
5拓?fù)淇梢暬惴í?/p>
5.1拓?fù)淇梢暬惴ㄋ枷氇?/p>
拓?fù)淇梢暬幕舅枷朐谟谌绾螌@得的網(wǎng)絡(luò)設(shè)備間的連接關(guān)系轉(zhuǎn)換為適當(dāng)?shù)淖鴺?biāo)位置關(guān)系,并最終顯示到用戶界面上。本文提到的可視算法采用了VC動態(tài)生成新節(jié)點的方法,首先將實際網(wǎng)絡(luò)環(huán)境中的路由設(shè)備、子網(wǎng)、主機統(tǒng)一映射為圖形環(huán)境下的節(jié)點模型,每一節(jié)點模型均由一個靜態(tài)文本框(Static)和一個普通文本框(Text)控件組成。靜態(tài)文本框根據(jù)節(jié)點類型的不同(路由器、子網(wǎng)、交換機、主機)載入不同的節(jié)點圖形,普通文本框用于節(jié)點信息顯示,如IP、主機名等。
在計算各節(jié)點的位置信息時,引入了如圖2所示的環(huán)狀遞歸分配節(jié)點坐標(biāo)[6]的方法。以拓?fù)涑绦虬l(fā)現(xiàn)的第一個路由設(shè)備作為中心父節(jié)點(X0,Y0),將與該節(jié)點連接的所有子網(wǎng)、路由設(shè)備設(shè)為子節(jié)點,并均勻分配于一個圓環(huán),這個環(huán)定義其為主環(huán)。隨后計算出各子節(jié)點的坐標(biāo)以及相對父節(jié)點的偏置角度,再以每一子節(jié)點為中心坐標(biāo),以該節(jié)點入射角的切線方向分配一個半圓環(huán)區(qū)域(分配半圓的目的是保證繪圖方向逐步向外擴(kuò)展),如果當(dāng)前分配的區(qū)域與已分配的某一區(qū)域發(fā)生重疊,則按入射角方向以0.2倍的系數(shù)增大坐標(biāo),當(dāng)增大后的坐標(biāo)與原坐標(biāo)的連線與已分配的區(qū)域有交叉時,則將入射角加上一個偏置角度再次分配半圓區(qū)域,直到?jīng)]有重疊的區(qū)域為止。然后按照當(dāng)前節(jié)點類型分別將與當(dāng)前節(jié)點連接的且未繪制過的設(shè)備均勻分配到此半圓上,并按上述方法遞歸調(diào)用直到所有節(jié)點都被繪制完成。
5.3對拓?fù)淇梢暬惴ǖ倪M(jìn)一步描述
(1)當(dāng)一個子網(wǎng)內(nèi)主機數(shù)量較多時,若直接在拓?fù)鋱D上顯示全部主機信息,則較為復(fù)雜,不利于查看。因此,在具體實現(xiàn)中,當(dāng)子網(wǎng)內(nèi)主機數(shù)量<12時,直接顯示主機信息;當(dāng)子網(wǎng)內(nèi)主機數(shù)量>12時,只注明實際主機的數(shù)目,詳細(xì)的信息保存在數(shù)據(jù)庫中,用戶可選擇生成單獨子網(wǎng)拓?fù)鋱D的方式來查看。
(2)為方便觀察與管理,拓?fù)淇梢曀惴ㄔ诶L制拓?fù)鋱D形中節(jié)點的連線時,根據(jù)節(jié)點類型的不同,分別采用了不同的連接線段進(jìn)行表示,在節(jié)點與連線間出現(xiàn)遮擋時,以特定顏色的虛線表示。同時為了簡化坐標(biāo)計算,對各節(jié)點模型使用了相同大小的矩形顯示面積。
(3)由于繪圖程序模塊生成的是BMP格式的圖形文件,體積較大,不利于在網(wǎng)絡(luò)傳輸,在程序最后引入了CxImage庫,該庫能將輸出結(jié)果保存為增強圖元文件的格式。這種文件特別適合于存儲網(wǎng)絡(luò)拓?fù)溥@種體積巨大而畫面簡單的圖形,如存儲一個398×1280的拓?fù)鋱D大約只需十幾KB,能夠快速方便地回顯與放縮。
6拓?fù)浒l(fā)現(xiàn)程序的測試實例
6.1測試環(huán)境選擇與部署
測試環(huán)境選擇了實驗室內(nèi)的網(wǎng)絡(luò)測試平臺,該平臺包括了若干支持SNMP的路由器、交換機和主機設(shè)備,可根據(jù)要求組建不同的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)。為方便測試,網(wǎng)內(nèi)所有支持SNMP的設(shè)備,設(shè)置了統(tǒng)一的Community名和密碼。運行在網(wǎng)絡(luò)測試平臺上的DNMAI客戶端參數(shù)設(shè)置界面如圖5所示。
6.2測試結(jié)果
在測試時,分別采用了對不同拓?fù)浣Y(jié)構(gòu)的網(wǎng)絡(luò)進(jìn)行拓?fù)浒l(fā)現(xiàn),以及對同一拓?fù)浣Y(jié)構(gòu)的不同探測起點發(fā)起拓?fù)涮綔y等多種方案。結(jié)果證明,本文提出的方法能準(zhǔn)確、高效地發(fā)現(xiàn)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),繪制出完整的拓?fù)鋱D形,能較好地滿足實際網(wǎng)絡(luò)管理的需求。部分探測結(jié)果如圖6所示。
7結(jié)束語
網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)是隨網(wǎng)絡(luò)大規(guī)模應(yīng)用和普及而興起的一項研究課題。本文在對現(xiàn)有的網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)算法存在的不足進(jìn)行了分析之后,提出了一種新型的基于DNMAI的實現(xiàn)方法,既注重具體實現(xiàn)的性能要求,又考慮了拓?fù)湫畔⒌臄U(kuò)展和復(fù)用,應(yīng)用簡便且易實現(xiàn)。由于在實際網(wǎng)絡(luò)中可能存在對SNMP的管理權(quán)限限制,此類網(wǎng)絡(luò)并不完全適用于本文所提出的方法。下一步的工作就是實現(xiàn)將該方法與DNMAI中已有的基于UDP的拓?fù)涮綔y模塊[3]相結(jié)合,以適應(yīng)更廣泛的網(wǎng)絡(luò)應(yīng)用需求。
本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文。