陳秀蘭(甘肅廣播電視大學,甘肅 蘭州 730030)
隨著網絡的不斷變化,使得網絡的管理和維護變得越來越困難。一個好的網絡管理系統(tǒng)首先要掌握的就是整個管理網絡的拓撲結構。網絡管理中的拓撲發(fā)現主要目的就是獲取和維護網絡中元素的信息以及它們之間的連接關系信息,最終實現對它們的有效管理。
網絡的拓撲結構是指網絡中各個節(jié)點在物理上或邏輯上的布局,稱為網絡的物理拓撲或邏輯拓撲,相應地包含了網絡節(jié)點之間數據鏈路層及網絡層的設備連接關系。
網絡的拓撲結構發(fā)現算法國內外已有很多研究[1][2],本文根據這些算法進行多次實踐,并總結、歸納出兩種經典、可行的算法。網絡拓撲發(fā)現方法主要分為兩類:基于SNMP協(xié)議的算法、基于ICMP協(xié)議的算法[3]。
基于SNMP協(xié)議主要通過訪問MIB庫進行拓撲關系的獲取,由于權限的關系,適合于在具有管轄權的網絡范圍內進行測量,所以難以推廣應用。
基于ICMP協(xié)議,通過Ping或Tracert實現,可用于Internet上的大規(guī)模網絡測量,但當網絡上安裝有防火墻軟件時,則無法進行測量。
本文主要介紹在自治域下,使用基于SNMP協(xié)議被動[4]的測量方法實現網絡拓撲發(fā)現算法。
拓撲結構包括網絡層的主拓撲結構、數據鏈路層的邏輯子網拓撲結構和物理拓撲結構。主拓撲結構反映網絡中的路由設備和子網之間的關系,包括路由器一路由器、路由器一子網以及接口的關系。
邏輯子網反映各子網內的設備連接情況,即從各子網的網關為起點,每個接口所對應的子網內的設備連接情況。
物理拓撲結構反映路由器與交換機,交換機與交換機,交換機與主機或其他終端設備的連接關系,這個拓撲圖的發(fā)現在網絡故障管理中起到很重要的作用。
主拓撲發(fā)現主要算法描述如下:
1)給定一個種子路由器地址,且注意目前網絡中的路由器有時是由服務器充當的。
2)檢測路由器的ipAddrTable,可以得到給路由器配置的所有IP地址、相應VLAN索引號(這個號不是給VLAN配置的標示號)、子網掩碼;這個表說明了與該路由器相連的所有子網,而這些IP地址是子網的網關地址;
3)檢測路由器的ipRouteTable:可以得到該實體的IP路由表。在路由表中選擇出ipRouteNextHop類型是3 Direct的IP地址,這些是與路由器直接相連的下一跳路由器地址集合,但這些地址包括了子網間通訊的網關地址,因此需要在路由器地址集合中減去。
4)從路由器地址集合取出一個沒有經過檢測的IP地址,作為下一個要檢測的路由器,重復步驟2;直到找到所有路由器并全部遍歷完。
以上算法可以使用鏈表實現,將搜索到結果存放在數據庫中,以便顯示拓撲結構。
在實現主拓撲算法,獲得MIB相關信息是很必要的,以下對相關表做說明:
1)地址表 ipAddrTable (.1.3.6.1.2.1.4.20)
ipAdEntAddr(.1.3.6.1.2.1.4.20.1.1):網絡設備實體的IP地址;
ipAdEntlfindex(.1.3.6.1.2.1.4.20.1.2):網絡設備實體的IP地址對應的設備物理接口標識;
ipAdEntNetMask(.1.3.6.1.2.1.4.20.1.3):網 絡 設備實體的IP地址對應的掩碼;
有些實體具有多個IP地址,稱為多穴主機,如路由器,服務器。在拓撲發(fā)現中,對這種情況要加以識別,這些地址都表示一個實體,否則發(fā)現結果就會有誤。
2)路由表ipRouteTable (.1.3.6.1.2.1.4.21)
ipRouteDest(.1.3.6.1.2.1.4.21.1.1):路由的目的IP地址,0.0.0.0是默認路由;
ipRoutelfindex(.1.3.6.1.2.1.4.21.1.2):路由對應的路由器物理接口索引;
ipRouteNextHop(.1.3.6.1.2.1.4.21.1.7):路由下一跳的IP地址;
ipRouteType(.1.3.6.1.2.1.4.21.1.8):路由的類型標識,其中Direct(3)表示直連關聯;
ipRouteMask(.1.3.6.1.2.1.4.21.1.11):路由對應的IP地址掩碼;
利用上述路由表的定義,結合相關路由協(xié)議RIP、OSPF等知識可以方便地發(fā)現與當前網關路由器相關聯的其他網關和子網,從而描繪出某個范圍內網絡層的互聯關系。
1)給定一臺路由器地址,讀取ipAddrTable表信息,可以得到路由器上設置的個子網配置信息,通過這個信息可以得到路由器與子網連接關系;
2)確定每一個子網的活動主機數,為了實現子網拓撲的搜索則需要引入其他協(xié)議,如ARP協(xié)議或者ICMP協(xié)議。
任何有以太網接口的網絡設備都必須支持地址解析協(xié)議(ARP)并在本機維護一張ARP表,用于IP地址到物理地址的映射。通過分析MIB庫中的對象,發(fā)現路由器的IpNetTOMediaTable表中記錄了該路由器所連接其他設備的IP地址到物理地址的映射和映射方式。
地址映射表 ipNetToMediaTable(.1.3.6.1.2.1.4.22)
IpNetToMedialfindex(.1.3.6.1.2.1.4.22.1.1): 該地址轉換條目對應的設備物理接口標號;
ipNetToMediaPhysAddress(.1.3.6.1.2.1.4.22.1.2):該地址轉換條目對應的物理地址,即MAC地址;
ipNetToMediaNetAddres(.1.3.6.1.2.1.4.22.1.3):該地址轉換條目對應的網絡地址,即IP地址;
由ARP協(xié)議可知,該表中所列舉的各個MAC地址都是與當前網絡設備直接關聯的某子網內設備或終端。由此可以發(fā)現子網段的拓撲關系。
這個表記錄了最近活動主機的IP地址和物理地址,而每一條記錄只能保留一段時間。而在ipAddrTable中記錄了子網的網絡地址和子網掩碼。使用子網掩碼與相應的路由器表中的IpNetToMediaNetAddress進行“與”操作,就可以得到IP地址屬于哪個子網,這樣搜索IpNetToMediaNetAddress表中的所有IP地址,便可以得到子網內所有的活動主機。
通過以上兩大步驟的查找,可以得到動態(tài)的邏輯網絡拓撲結構,但并不是網絡中的實際的物理連接拓撲。
物理網絡拓撲指的是一個通信網內部實體的實際物理連接(對應網絡結構第2層)[5]。
在MIB-Ⅱ的擴展部分透明網橋管理組BRIDGEMIB(.1.3.6.1.2.1.17)中反映的交換機端口信息,地址轉發(fā)表,端口狀態(tài),通過交換機所提供的信息就可以識別直接相連的終端或交換機的MAC地址等信息。
與物理拓撲圖相關的MIB信息是:
dot1dBaseBridgeAddress (.1.3.6.1.2.1.17.1.1) :唯一標識網橋的MAC地址
dot1dStpDesignateRoot(.1.3.6.1.2.1.17.2.5) :根網橋標識符
dot1dStpRootPort (.1.3.6.1.2.1.17.2.7):設備根端口
dot1dStpPortDesignatadBridge(.1.3.6.1.2.1.17.2.15.1.8):端口指定網橋
dot1dTpFdbAddress (.1.3.6.1.2.1.17.4.3.1.1):橋端口學習到的MAC地址
dot1dTpfdbStatus(.1.3.6.1.2.1.17.4.3.1.3): 橋端口端口狀態(tài)
dot1dTpFdbPort(.1.3.6.1.2.1.17.4.3.1.2): 橋端口端口號
1)搜索交換機之間的連接關系
首先知道該網段所有交換機的管理IP地址,讀取交換機中的dotldTpFdbTahle的轉發(fā)表條目,獲得各交換機之間的級連關系,從而實現二層網絡的拓撲發(fā)現。實現算法如下:
掃描所有的交換機dot1dStpDesignateRoot信息,將值一樣的交換機歸類,有生成樹協(xié)議可以知道,這些交換機處于同一交換域;掃描所有的交換機和路由器的dot1dBaseBridgeAddress信息,得到交換機的MAC地址;同時查看dotldTpFdbTable轉發(fā)表信息,查找與交換機MAC相符的記錄,得到交換機的級連端口信息。例如在匯聚層交換機中的dotldTpFdbTable信息如表1,它標識了連接各交換機的MAC地址和相連的端口信息以及上連路由器的端口信息。
表1 dotldTpFdbTable轉發(fā)表信息
2)搜索交換機與主機的連接關系
(1)首先查詢路由器中的ARP表,IpNetToMediaTable表中保存的所有通過該設備轉發(fā)數據包的主機的 MAC地址信息和IP地址信息,表2所示。
表2 IpNetToMediaTable表
(2)讀取交換機中的dotldTpFdbTable
dotldTpFdbTable表中存放了交換機中相連的實體的MAC及相連的端口信息。
結 合 ipAddrTable,IpNetToMediaTable,dotldTpFdbTable信息,可以得到一個有關交換機的VLAN、響應物理端口、及IP地址分配情況,如表3所示。
表3 子網和主機信息表
通過這個表可以獲得與交換機連接的主機信息,例如主機192.168.2.6所屬的VLAN索引號78的子網內,MAC地址000d050b84e1,連接在交換機端口的第五端口上。
基于上述算法,安裝Adventnet的SNMP開發(fā)包,使用Java語言編寫的采集程序,并將數據寫入后臺數據庫中,前臺則使用php實現實時數據顯示與信息查詢功能。實現了主拓撲、邏輯拓撲結構的搜索結果,和實際情況完全吻合。
1)輸入種子路由器IP地址,讀取路由器中的IpAddrtable信息,得到端口索引號、設備IP地址,子網掩碼;而這些地址有些是本地VLAN設置交換網關地址,用于本地數據交換用;其中IP也有用于與其他路由器進行互連之用,因此必須將這兩種IP地址分別處理。一級網絡發(fā)現主要指發(fā)現3層設備互連拓撲。
2)讀取Iproutetable信息,搜索出類型為4(indirect)的路由項,從該類型項可以得出下一跳并直接相連的路由器地址;或讀出ipRoutNextHop地址,排除在第一步中出現的IP地址,就可以得出與當前路由器相連的其他三層網絡設備。
3)將發(fā)現設備進行文本顯示。
算法實現效果及清單:
圖1 一級路由器搜索界面
在該界面圖1上輸入4,在下一級界面將出現于種子路由器相連的路由器地址如圖2;如果輸入3,則出現種子路由器中的網關地址信息;
圖2 一級路由器搜索結果
其中202.201.96.126為上聯出口位于蘭州大學;192.168.2.2,192.168.3.2聯至兩個分校。
1)輸入種子路由器IP地址,讀取該設備IpAddrtable、ipNetToMediaTAble信息表。
2)得到ipNetToMediaIfIndex,ipNetToMediaNetAd dress,ipNetToMediaPhyAddress信息。
(1)將兩個表信息按照索引號進行歸類,即可得到每一個VLAN中網關設置、正在使用的活動主機IP地址及MAC地址,如果繼續(xù)讀取網絡設備的SYSTENOID信息,便可得出計算機的名稱。
(2)為了得到VLAN中正在通信的網絡設備,還可以使用主動測試方法,使用PING 或TRCERT工具,按照網絡設備IP地址發(fā)送ICMP包,有正?;貞脑O備為活動主機,但不能發(fā)現有防火墻的設備。因此使用第一種方法回更快、更簡單且準確。
3)將所有設備按照VLAN索引進行查詢并文本顯示。
算法實現效果及程序清單:
圖3是從路由器的ARP表中,計算出VLAN當前活動主機數量;單擊左邊菜單“瀏覽VLAN”,可以得到圖5-8,當前活動主機IP地址、子網掩碼、所屬VLAN,網關地址。
圖3 VLAN中活動主機數量
本文介紹了一個利用了SNMP的MIB信息進行網絡拓撲結構的搜索方案,主要利用了網絡路由表和ARP緩存這兩種工具分別進行主拓撲和邏輯拓撲的構造。深入利用SNMP提供的MIB變量,獲取到更多的設備信息,實現多種網管功能。
[1]彭建,朱萍,傅明 一種基于SNMP協(xié)議的網絡拓撲發(fā)現改進算法 [J].計算機工程與科學,2009(4),18-20
[2]Stanislav Belenki Sven Tafvelin Analysis of Errors in Network Load Measurements [J] ACM SIGCOMM Computer Communication Review Volume 30,Issue 1 (January 2000)5-14
[3]、William Stallings SNMP 網絡管理 [M] 北京 中國電力出版社 2001.9
[4]、張宏莉,方濱興,胡銘曾,姜譽,詹春艷,張樹峰 Internet 測量與分析綜述[J].軟件學報,2003(14),110-116
[5]、陳餛 王正華.基于SNMP物理網絡拓撲發(fā)現算法[J].北京:計算機系統(tǒng)應用 2009(3).50-53