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