基于SNMP的網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)_第1頁
基于SNMP的網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)_第2頁
基于SNMP的網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)_第3頁
基于SNMP的網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)_第4頁
基于SNMP的網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

基于SNMP的網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)一、SNMP簡介SNMP〔SimpleNetworkManagementProtocol,簡單網(wǎng)絡(luò)管理協(xié)議〕是一種基于TCP/IP協(xié)議的互連網(wǎng)管理協(xié)議。SNMP誕生于1988年,當(dāng)時只想把它作為一個短期的網(wǎng)絡(luò)管理框架,臨時用于管理連接到Internet上的設(shè)備。但隨著SNMP的開展和大量應(yīng)用,其使用范圍已大為擴展,超出了Internet的范圍。SNMP逐漸作為一種標(biāo)準(zhǔn)的協(xié)議在網(wǎng)絡(luò)管理領(lǐng)域得到了普遍的接受和支持,成為了事實上的國際標(biāo)準(zhǔn)。SNMP采用“管理進(jìn)程/代理進(jìn)程〞模型來監(jiān)視和控制各種可管理網(wǎng)絡(luò)設(shè)備。其核心思想是在每個網(wǎng)絡(luò)節(jié)點上設(shè)置一個管理信息庫MIB〔ManageInformationBase〕,由節(jié)點上的代理負(fù)責(zé)維護(hù),管理進(jìn)程通過應(yīng)用層協(xié)議對這些信息庫進(jìn)行訪問。圖3.1說明了SNMP網(wǎng)絡(luò)管理框架的一般體系結(jié)構(gòu),它由四個主要部件構(gòu)成,分別是:通信網(wǎng)絡(luò)、網(wǎng)絡(luò)協(xié)議、網(wǎng)絡(luò)管理進(jìn)程和被管網(wǎng)絡(luò)實體。圖3.1簡單網(wǎng)絡(luò)管理協(xié)議〔SNMP〕體系結(jié)構(gòu)二、基于SNMP協(xié)議的網(wǎng)絡(luò)層拓?fù)浒l(fā)現(xiàn)SNMP已經(jīng)成為網(wǎng)絡(luò)管理的標(biāo)準(zhǔn),為網(wǎng)絡(luò)拓?fù)渥詣影l(fā)現(xiàn)帶來了巨大的方便,同時也大大提高了網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)的速度。圖3.2網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)模型 網(wǎng)絡(luò)層拓?fù)浒l(fā)現(xiàn)算法的任務(wù)就是發(fā)現(xiàn)被管網(wǎng)絡(luò)中的子網(wǎng)、路由器以及它們之間的連接關(guān)系。圖3.2是網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)的一個模型。其中,各子網(wǎng)通過各自的路由器與其他子網(wǎng)通信,它們都連接到路由器的一個端口上。路由器的一個端口可以連接一個子網(wǎng),也可以同其他路由器相連。當(dāng)子網(wǎng)內(nèi)的某一機器向別的子網(wǎng)發(fā)送數(shù)據(jù)時,數(shù)據(jù)包首先到達(dá)本子網(wǎng)的缺省路由器,缺省路由器檢測數(shù)據(jù)包中的目的地址,根據(jù)其路由表確定該目的地址是否在與自己相連的子網(wǎng)中。如果是,那么把數(shù)據(jù)包直接發(fā)往目的地,否那么轉(zhuǎn)發(fā)給路由表中規(guī)定的下一個路由器,下一個路由器再進(jìn)行類似處理,依次類推,數(shù)據(jù)包將最終到達(dá)目的地。可見,通過分析路由器上的路由表,就可以知道網(wǎng)絡(luò)層的拓?fù)浣Y(jié)構(gòu)。2.1網(wǎng)絡(luò)層拓?fù)浒l(fā)現(xiàn)用到的MIB組MIB-II(RFC-1213)是標(biāo)準(zhǔn)的SNMPMIB,所有的路由器都必須實現(xiàn)它。拓?fù)浒l(fā)現(xiàn)程序為了具有通用性的特點,必然選擇MIB-II作為拓?fù)浒l(fā)現(xiàn)工具。MIB-II由很多不同的組組成,本節(jié)的拓?fù)浒l(fā)現(xiàn)算法用到的組包括:system,interfaces,和ip。下面詳細(xì)介紹這三個組中包含的對象。1)System組 該組內(nèi)包含七個對象,分別為:sysDescr、sysObjectID、sysUpTime、sysContact、sysName、sysLocation和sysServices。其中sysDescr描述了設(shè)備的相關(guān)信息,一般包括廠商,型號等。SysObjectID唯一標(biāo)識特定廠商的特定類型設(shè)備,比方sysObjectID為..45,那么可以判斷該設(shè)備為思科公司生產(chǎn)的型號為cisco6506的交換機。SysUptime表示設(shè)備從最近一次啟動開始正常運行的時間。SysContact由網(wǎng)絡(luò)管理員設(shè)定,一般設(shè)為網(wǎng)絡(luò)管理員的聯(lián)系方式。SysName為設(shè)備的名字,算法中會用這個對象來判斷不同的IP地址是否屬于同一個設(shè)備。SysLocation由網(wǎng)絡(luò)管理員設(shè)定,一般設(shè)為設(shè)備所在地點。SysServices表示了該設(shè)備所能提供的效勞。2)Interfaces組該組包含兩個對象ifNumber和ifTable。其中,ifNumber對象表示該設(shè)備所具有的接口數(shù)量。該組的另一個元素ifTable是一張表,表內(nèi)的每一個字段都是某一個接口的一個屬性,包括接口索引(ifindex),接口類型(ifType),接口速度(ifSpeed)和接口物理地址(ifPhysAddress)等。3)IP組該組的元素較多,其中有三個表對拓?fù)浒l(fā)現(xiàn)來說比擬重要,分別是ipAddrTable,ipRouteTable和ipNetToMediaTable。通過表ipAddrTable,可以找到被管設(shè)備所有的IP地址,同時結(jié)合interfaces組的ifTable表,可以把接口和其IP地址一一對應(yīng)起來。網(wǎng)絡(luò)層的拓?fù)浒l(fā)現(xiàn)算法主要就是利用表ipRouteTable來判斷網(wǎng)絡(luò)層的拓?fù)浣Y(jié)構(gòu)的。子網(wǎng)與路由器以及路由器和路由器的關(guān)系都能從路由表中得出來。該表中對應(yīng)拓?fù)浒l(fā)現(xiàn)的對象列舉如下:IpRouteDest:路由的目的地址。如為.0,說明該路由為缺省路由。通往同一個目的地的路由可能有多個,路由的選擇依賴于所使用的路由協(xié)議。IpRouteNextHop:路由的下一跳路由器地址。ipRouteMask:路由目的地的子網(wǎng)掩碼。提取IP數(shù)據(jù)包中的目的地地址,與ipRouteMask進(jìn)行按位“與〞運算,得到的結(jié)果與ipRouteDest比擬,如相同那么應(yīng)選擇該路由。如果ipRouteDest為.0,那么規(guī)定ipRouteMask也為。ipRouteType:路由的類型,為整型類型。其意義如表3.1所示:表3.1ipRouteType值及其意義ipRouteType值意義Other(1)其他Invalid(2)非法Direct(3)該路由目的地址為路由器直接連接的子網(wǎng)Indirect(4)遠(yuǎn)程路由,目的地址為遠(yuǎn)程的主機、網(wǎng)絡(luò)或子網(wǎng)2.2基于SNMP的網(wǎng)絡(luò)層對象發(fā)現(xiàn)在詳細(xì)討論拓?fù)浒l(fā)現(xiàn)算法之前,首先對算法中涉及到的一些問題進(jìn)行說明。1〕默認(rèn)網(wǎng)關(guān)的發(fā)現(xiàn)首先,訪問拓?fù)浒l(fā)現(xiàn)程序所在計算機的SNMPMIBII中的ipRouteTable,如果發(fā)現(xiàn)有ipRouteDest值為.0的記錄,那么說明程序所在的計算機設(shè)置了默認(rèn)網(wǎng)關(guān),該記錄的ipRouteNextHop值即為默認(rèn)網(wǎng)關(guān)的地址。檢查默認(rèn)網(wǎng)關(guān)的ipForwarding值。如果為1,那么說明該默認(rèn)網(wǎng)關(guān)確實是路由設(shè)備,否那么不是。2)子網(wǎng)的發(fā)現(xiàn)遍歷路由器MIBII的IP管理組中管理對象ipRouteDest下的所有對象,以每個路由目的網(wǎng)絡(luò)號為索引,查詢ipRouteType字段的值。假設(shè)該值為3〔direct〕,那么說明這條路由為直接路由,假設(shè)該值為4〔indirect〕,那么為間接路由。間接路由說明在通往目的網(wǎng)絡(luò)或目的主機的路徑上還要經(jīng)過其它路由器,而直接路由說明目的網(wǎng)絡(luò)或目的主機與該路由設(shè)備直接相連,這樣就得到了與路由器直接相連的網(wǎng)絡(luò)號。再以這組網(wǎng)絡(luò)號中的每個為索引,查詢其路由掩碼〔ipRouteMask〕。根據(jù)路由掩碼,就可以確定這組網(wǎng)絡(luò)中每一個的IP地址范圍。例如,路由器的IP地址為,且路由器支持SNMP協(xié)議。利用SNMP協(xié)議可以得到以下與路由器直接相連的子網(wǎng),如圖3.3所示。圖3.3與網(wǎng)關(guān)直連的子網(wǎng)3)其他路由設(shè)備的發(fā)現(xiàn)對于除了默認(rèn)網(wǎng)關(guān)之外的路由設(shè)備,查詢默認(rèn)網(wǎng)關(guān)MIBII的IP管理組路由表中類型為間接路由的路由表項,得到路由的下一跳地址〔ipRouteNextHop〕。下一跳地址給出了與該網(wǎng)關(guān)相連的路由設(shè)備,仍可以利用上面的方法搜索這個設(shè)備的路由表。這樣,該方法可以搜索出多個路由設(shè)備,并要求將它們所存儲的路由表信息進(jìn)行整合,得到更大的網(wǎng)絡(luò)拓?fù)洹?)網(wǎng)絡(luò)層的連接對象網(wǎng)絡(luò)層拓?fù)渲饕从匙泳W(wǎng)和路由器之間的連接關(guān)系。子網(wǎng)和路由器的連接關(guān)系可以在發(fā)現(xiàn)與路由器直接相連的子網(wǎng)時得到,路由器和路由器的連接關(guān)系可以通過路由表中的ipRouteNextHop得到。2.3基于SNMP的網(wǎng)絡(luò)層拓?fù)浒l(fā)現(xiàn)算法描述網(wǎng)絡(luò)層拓?fù)浒l(fā)現(xiàn)算法用偽代碼描述如下:CGatewaygw=GetDefaultGateway〔〕;//得到默認(rèn)網(wǎng)關(guān)If〔gw確實是路由設(shè)備〕 把該設(shè)備添加到RouteList鏈表的末尾;for〔RouteList中的每一個路由器CurrentRouter〕 //遍歷該路由器的路由表,提取路由器和子網(wǎng)信息{ for(CurrentRouter的路由表的每一項) { if(ipRouteType為direct) { if(ipRouteMask為55) 〔1〕 {把IpRouteNextHop所代表的路由器添加到RouteList尾部,同時保證鏈表中的路由器不重復(fù);〔2〕把當(dāng)前路由器CurrentRouter和IpRouteNextHop代表的路由器之間的鏈接添加到鏈表LinkList中; } else {把ipRouteDest和ipRouteMask所代表的子網(wǎng)添加到SubnetList中去;把該子網(wǎng)與當(dāng)前路由器CurrentRouter之間的連接添加到LinkList中; }}if(ipRouteType為indirect){把IpRouteNextHop所代表的路由器添加到RouteList尾部,同時保證鏈表中的路由器不重復(fù);把當(dāng)前路由器CurrentRouter和IpRouteNextHop代表的路由器之間的鏈接添加到鏈表LinkList中;} }}在〔1〕處,如果ipRouteMask為55,那么該路由為到主機的路由。也就是說,以該路由的ipRouteNextHop為地址的路由器和當(dāng)前路由器通過一根電纜直接連接。在〔2〕處判斷不同的IP地址是否屬于同一臺路由器時,可以首先查詢ip管理組的ipAddrTable的所有IP地址,然后看當(dāng)前的IP地址是否也在列表當(dāng)中,如果在就是同一臺路由設(shè)備,否那么不是。三、基于SNMP協(xié)議的鏈路層拓?fù)浒l(fā)現(xiàn)算法在大多數(shù)情況下,僅僅發(fā)現(xiàn)網(wǎng)絡(luò)層的拓?fù)浣Y(jié)構(gòu)是不夠的,還需要發(fā)現(xiàn)鏈路層的拓?fù)浣Y(jié)構(gòu),即子網(wǎng)內(nèi)的設(shè)備及其連接關(guān)系。子網(wǎng)內(nèi)的設(shè)備包括主機、交換機、打印機、集線器等等。連接關(guān)系不但包括設(shè)備之間的連接,還包括其他設(shè)備和交換機端口之間的連接關(guān)系以及交換機端口之間的連接關(guān)系。雖然局域網(wǎng)的拓?fù)湫畔τ诰W(wǎng)絡(luò)管理非常重要,但是該信息卻很難得到。大局部網(wǎng)絡(luò)管理工具僅僅依賴網(wǎng)絡(luò)層的拓?fù)浒l(fā)現(xiàn)和網(wǎng)絡(luò)管理員手工添加二層的網(wǎng)絡(luò)設(shè)備,比方交換機等,沒有提供鏈路層的拓?fù)浒l(fā)現(xiàn)。Cisco,Intel以及其它硬件提供商雖然設(shè)計了它們自己的拓?fù)浒l(fā)現(xiàn)協(xié)議,但是這些對于大型,異構(gòu)的網(wǎng)絡(luò)沒有任何用處。局域網(wǎng)拓?fù)浒l(fā)現(xiàn)的復(fù)雜性在于以太交換機硬件的內(nèi)在透明性:網(wǎng)絡(luò)用戶感覺不到網(wǎng)絡(luò)中交換設(shè)備的存在。這些交換機設(shè)備僅僅在執(zhí)行生成樹協(xié)議(Spanningtreeprotocol)時才和鄰居設(shè)備交換信息,況且這種協(xié)議也不是在所有環(huán)境下都使用。交換機能保存的唯一狀態(tài)是它的轉(zhuǎn)發(fā)數(shù)據(jù)庫,它的作用是把收到的數(shù)據(jù)包轉(zhuǎn)發(fā)到適當(dāng)?shù)亩丝谏先ァ_@些信息對于局域網(wǎng)的拓?fù)浒l(fā)現(xiàn)來說是足夠的,并且可以通過SNMP的標(biāo)準(zhǔn)MIB來訪問。局域網(wǎng)中,交換機的連接關(guān)系確定了整個局域網(wǎng)拓?fù)浣Y(jié)構(gòu)的布局,所以,發(fā)現(xiàn)局域網(wǎng)絡(luò)拓?fù)涫紫纫l(fā)現(xiàn)交換機之間的連接關(guān)系。3.1交換機互聯(lián)關(guān)系的發(fā)現(xiàn)圖3.4為鏈路層的網(wǎng)絡(luò)模型圖,其中的節(jié)點包括交換機和主機。交換機通過它們的端口相連,主機通過局域網(wǎng)或者集線器和交換機的端口相連。由網(wǎng)橋〔交換〕設(shè)備組成的局域網(wǎng)中的設(shè)備可以被劃分為網(wǎng)橋集合B和端點集合E。如圖3.4所示,B={A,B,C,D}。E={W,X,Y,Z}。當(dāng)今的以太網(wǎng)通常是交換式的,交換機通過不同的端口把網(wǎng)絡(luò)中的其它各種設(shè)備連接起來。以太局域網(wǎng)中還包括:集線器〔圖3.4中與A相連〕,該設(shè)備用來把幾臺主機連接在交換機的同一個端口上;共享網(wǎng)段〔圖3.4中和C相連〕;啞交換機,即不支持SNMP的交換機〔圖3.4中和B相連〕。交換機和其它交換機以及網(wǎng)段之間的連接不應(yīng)該出現(xiàn)環(huán)路,即使物理上有環(huán)路,交換機也會利用生成樹算法〔spanningtreeprotocol〕在所有連接中選擇一個無環(huán)路的子集。一旦拓?fù)浣Y(jié)構(gòu)確定,交換機就通過監(jiān)聽每個端口的數(shù)據(jù)包學(xué)習(xí)網(wǎng)絡(luò)中設(shè)備的位置信息。當(dāng)一個新節(jié)點發(fā)出的數(shù)據(jù)經(jīng)過交換機的一個端口時,交換時機把該數(shù)據(jù)包的源地址加到與該端口對應(yīng)的列表中。在這以后,當(dāng)交換機收到一個發(fā)往該地址的數(shù)據(jù)包時,它會自動把這個數(shù)據(jù)包轉(zhuǎn)發(fā)到對應(yīng)端口上。這些對應(yīng)關(guān)系組成了交換機的轉(zhuǎn)發(fā)數(shù)據(jù)庫。在轉(zhuǎn)發(fā)數(shù)據(jù)庫中,交換機的每一個端口都對應(yīng)著多個設(shè)備的物理地址,稱這些物理地址所對應(yīng)設(shè)備的集合為該端口的轉(zhuǎn)發(fā)集。對于交換機C,用FxC來標(biāo)識交換機C的端口x的轉(zhuǎn)發(fā)集。在圖3.4中,F(xiàn)1C={A,B,D,W,X,Z}。該集合隨著網(wǎng)絡(luò)拓?fù)涞淖兓兓瑫r由于記錄有生存時間,所以該集合還隨著時間而變化。當(dāng)該集合中包含該端口下連接的所有設(shè)備時,該集合稱為完整的,F(xiàn)1BBCADYZWX3142121221主機交換機啞交換機集線器圖3.4鏈路層網(wǎng)絡(luò)模型圖1)直接連接定理發(fā)現(xiàn)局域網(wǎng)絡(luò)拓?fù)涫紫纫l(fā)現(xiàn)交換機之間的連接關(guān)系。當(dāng)兩個不同的節(jié)點互相連接,并且在它們之間不存在任何其它設(shè)備時,稱該連接為直接連接。當(dāng)兩個不同的節(jié)點通過中間其它設(shè)備連接在一起時,稱該連接為間接連接。直接連接是間接連接的一種特殊情況。如果一個數(shù)據(jù)包從交換機A的端口x發(fā)出,然后中途未經(jīng)過任何其它網(wǎng)絡(luò)設(shè)備而到達(dá)交換機B的端口y,稱交換機A的端口x和交換機B的端口y之間有直接連接;如果中途需要經(jīng)過其它的網(wǎng)絡(luò)設(shè)備才能到達(dá),那么稱A交換機的端口x和交換機B的端口y之間存在間接連接。例如,在圖3.4中,交換機A和B通過端口1和4直接連接。A的端口1和C的端口1之間存在間接連接。如果能判斷兩個交換機的不同端口之間是否有直接連接,就可以得出網(wǎng)絡(luò)中交換機的互聯(lián)關(guān)系,下一步發(fā)現(xiàn)交換機和主機的連接關(guān)系也變的相對容易了。由圖3.4可以觀察到,如果F1B和F1C都是完整的,即F1C={A,B,W,X,D,Z},F(xiàn)1B={C,Y}。得到,F(xiàn)1B∩F1C=ф,F(xiàn)1B∪F1C=N(N為全集,即圖3.4中所有設(shè)備的集合)。這并不是偶然的,因為如果兩個交換機的不同端口x,y直接連接,中間沒有任何其它設(shè)備,那么以相連處為中線,網(wǎng)絡(luò)中的設(shè)備可以劃分成兩局部,一局部在端口x所對的一側(cè),即FxA,另一局部在端口y所對的一側(cè),即FyB。所以,F(xiàn)xA∪直接連接定理[6]:如果FxA和FyB都是完整的,那么交換機A的端口x和交換機B的端口y直接相連的充要條件是FxA∩FyB=ф且FxA∪FyB=N。根據(jù)直接連接定理,可以遍歷局域網(wǎng)中交換機的轉(zhuǎn)發(fā)數(shù)據(jù)庫〔FDB〕,對不同交換機端口的轉(zhuǎn)發(fā)集作“并〞操作,如果結(jié)果為全集且“交〞操作的結(jié)果為空,那么這兩個端口就是直接連接的。但是,直接連接方法最大的缺陷就是要求交換機端口的轉(zhuǎn)發(fā)集是完整的。當(dāng)網(wǎng)絡(luò)的規(guī)模很大時候,獲得完整的轉(zhuǎn)發(fā)集幾乎是不可能的。在一個擁有上百,甚至上千個節(jié)點的網(wǎng)絡(luò)中,某個時刻總會有一些節(jié)點因為軟件或者硬件的原因而處在非活動狀態(tài)。這時候,相應(yīng)的交換機端口的轉(zhuǎn)發(fā)集就不會是完整的,上述方法就不適用了。2)間接連接定理為了克服這個缺點,參考文獻(xiàn)[7]中提出了一種能夠利用非完整的轉(zhuǎn)發(fā)集就能判斷交換機直接連接的方法。該方法的根本思想是,利用反證法,排除不可能的連接關(guān)系。圖3.5是一個利用反證法來判斷交換機之間連接的例子。假設(shè)交換機A和B通過某兩個端口間接連接,然后判斷該連接是否和交換機A、B的FDB中已有信息相矛盾。如果找不到矛盾,那么這個連接是可能存在的;如果矛盾,那么這條連接是肯定不存在的。在圖3.5中,交換機A和交換機B的連接關(guān)系可能有六種,如圖3.6所示。AAB12321{Z}{Y}{X}{Y,Z}{X}圖3.5交換機A和B通過不同的端口連接例如假設(shè)交換機A的端口1和交換機B的端口1間接相連,如圖3.6的第一種情況所示。如前文所述,以太局域網(wǎng)中交換機連接成一個樹狀結(jié)構(gòu),不存在環(huán)路。所以,此時的網(wǎng)絡(luò)可以分成三局部。第一局部是交換機A的端口2和3所連接的設(shè)備;第二局部是交換機B的端口2所連接的設(shè)備;第三局部是交換機A、交換機B,以及位于二者中間的設(shè)備。實際上,第一局部是F2A∪F3A,第二局部是F2B,這兩局部不應(yīng)該有交集。但是,〔F2A∪F3A〕∩F2B≠ф利用這種方法來判斷交換機之間的連接關(guān)系并不需要交換機端口的轉(zhuǎn)發(fā)集是完整的,只要所有的信息能夠排除掉所有不存在的連接關(guān)系就足夠了。參考文獻(xiàn)[7]中給出了可以利用該方法得出交換機連接關(guān)系的最小要求,稱之為間接連接定理。間接連接定理:只要滿足以下3個條件之一,就可以確定交換機A和B通過x和y端口間接相連。設(shè)交換機A在x端口上學(xué)習(xí)到的MAC地址的集合為FxA。1.FxA和FyB中同時存在著對方的MAC地址;2.FxA中存在B的MAC地址,并且A上存在一個端口k〔k≠x〕,使得FyB∩FkA≠ф;3.在B上存在兩個端口i,j,使得FxA∩FiB≠ф且FxA∩FjB≠ф,并且A上存在端口k〔k≠x〕,使得FkA∩FyB≠ф。圖3.6交換機A與B的六種可能的連接關(guān)系由于交換機之間很少通信,所以條件1和2中要求的交換機A的FxA中存在B的MAC地址很難滿足,可以利用IP欺騙的方法盡量地使條件滿足。具體做法是:對于子網(wǎng)中的每個交換機Si,利用IP欺騙方法,以Si的IP地址為源地址,向子網(wǎng)中的其他交換機發(fā)送ICMPECHO消息。在Si收到回應(yīng)后,將導(dǎo)致Si的FDB中保存有其他交換機的MAC地址。3)基于間接連接確定直接連接根據(jù)子網(wǎng)內(nèi)交換機之間的間接連接關(guān)系,就可以確定交換機之間的直接連接關(guān)系。設(shè)子網(wǎng)內(nèi)的所有交換機構(gòu)成的集合為G。根據(jù)STP協(xié)議,交換機之間將構(gòu)成一棵樹。任選其中一個交換機Si為根,假設(shè)Si通過n個端口與其他交換機構(gòu)成間接連接,那么可以將G-{Si}構(gòu)成一個劃分Πi,劃分中包含n個元素,每個元素是與Si的某個端口p相間接連接的交換機的集合,設(shè)為Gp。在Gp中任選一個交換機Sj,那么Sj必然通過某個端口q與Si的端口p間接連接,如果Sj不通過端口q與Gp中的其他交換機間接連接,那么可以判定Sj通過端口q與Si的端口p直接連接。3.2算法的具體描述基于SNMP的鏈路層拓?fù)浒l(fā)現(xiàn)算法主要任務(wù)是發(fā)現(xiàn)以太網(wǎng)的子網(wǎng)中設(shè)備以及連接關(guān)系。本文所描述的算法以給定的子網(wǎng)號和掩碼地址作為輸入,以交換機對象鏈表pSwList,網(wǎng)段對象鏈表pSegList,打印機對象鏈表pPrtList和2層連接對象鏈表pL2ConnList為算法的輸出。給定子網(wǎng)的拓?fù)湫畔⑷堪谏鲜龅娜齻€鏈表中。1〕算法的第一局部首先根據(jù)子網(wǎng)地址和子網(wǎng)掩碼計算出子網(wǎng)的范圍,然后掃描該范圍內(nèi)的所有IP地址,并通過.3節(jié)所給出的方法判斷設(shè)備的類型以及其它信息。該過程用偽代碼表示如下:for〔子網(wǎng)范圍內(nèi)的每一個地址ipAddr〕{ if〔存在某個設(shè)備的IP地址為ipAddr〕 { deviceType=getTypeofDevice〔ipAddr〕; if〔deviceType==switch〕 生成交換機對象,添加到pSwList鏈表中; elseif〔deviceType==printer〕 生成打印機對象,添加到pPtrList鏈表中; else 生成主機對象,添加到pHostList中; } }2)找到子網(wǎng)內(nèi)所有主機的MAC地址。3)遍歷子網(wǎng)中所有的交換機,下載交換機的FDB表。同時為交換機的每個端口生成一個相應(yīng)的網(wǎng)段對象SegNode,該網(wǎng)段中包含對應(yīng)端口轉(zhuǎn)發(fā)集中的所有在本子網(wǎng)范圍內(nèi)的主機。4〕基于每個交換機的FDB表,利用.1所描述的方法計算交換機之間的連接關(guān)系。5〕重新調(diào)整子網(wǎng)內(nèi)的所有網(wǎng)段。對有直接連接的兩個端口對應(yīng)的網(wǎng)段作“與〞操作,如果結(jié)果為空,那么刪除這兩個網(wǎng)段;如果非空,那么刪除原來的兩個網(wǎng)段,生成一個新的網(wǎng)段,該網(wǎng)段內(nèi)的主機為“與〞操作的結(jié)果。6〕把網(wǎng)段和交換機的連接關(guān)系構(gòu)造成對象,添加到2層連接對象鏈表L2ConnList中。在算法的第〔2〕步,之所以要找到物理地址是因為交換機FDB中的地址是MAC地址,在為主機劃分網(wǎng)段時,要用到這些MAC地址。找到主機MAC地址的方法有兩種。第一種是利用主機的MIBII中的inferfaces組中的ifPhysAddress對象,另一種是利用與該子網(wǎng)相連的路由器中的ipNetToMediaTable來找到該子網(wǎng)內(nèi)的所有主機的MAC地址。但是后者并不能保障找到所有的主機的MAC地址,但是它能找到那些不支持SNMP主機的MAC地址。4小結(jié)本節(jié)按照不同層次描述了基于SNMP的拓?fù)浒l(fā)現(xiàn)方法。在網(wǎng)絡(luò)層,主要利用MIBII的IP組中的路由表來發(fā)現(xiàn)網(wǎng)絡(luò)中的路由器和子網(wǎng)的連接關(guān)系;在鏈路層,主要利用網(wǎng)橋MIB〔BridgeMib〕來發(fā)現(xiàn)交換機和交換機直接的連接關(guān)系。SNMP標(biāo)準(zhǔn)協(xié)議是拓?fù)浒l(fā)現(xiàn)的一個重要工具,正是SNMP的存在,才使得耗時巨大的拓?fù)浒l(fā)現(xiàn)過程的變得迅速快捷。附錄AXML文件格式定義<?xmlversion="1.0"encoding="UTF-8"?><xs:schemaxmlns:xs=":///2001/XMLSchema"elementFormDefault="qualified"attributeFormDefault="unqualified"> <xs:elementname="Internet"type="InternetType"><xs:annotation> <xs:documentation>Commentdescribingyourrootelement</xs:documentation> </xs:annotation> </xs:element> <xs:complexTypename="InternetType"> <xs:sequence> <xs:elementname="subnetList"type="subnetListType"/> <xs:elementname="l3ConnList"type="l3ConnListType"/><xs:elementname="gwList"type="gwListType"/> </xs:sequence> </xs:complexType> <xs:complexTypename="gwListType"> <xs:annotation> <xs:documentation>thegatewaylist</xs:documentation> </xs:annotation> <xs:sequence> <xs:elementname="gwNode"type="gwNodeType"/> </xs:sequence> </xs:complexType> <xs:complexTypename="gwNodeType"> <xs:annotation> <xs:documentation>gatewaynode</xs:documentation> </xs:annotation> <xs:sequence> <xs:elementname="ObjectInstance"type="xs:string"/> <xs:elementname="ObjectFatherInstance"type="xs:string"/> <xs:elementname="gwName"type="xs:string"/> <xs:elementname="gwAddr"type="xs:string"/> <xs:elementname="RInterface"type="RInterfaceType"minOccurs="0"maxOccurs="unbounded"/> <xs:elementname="age"type="xs:integer"/> </xs:sequence> </xs:complexType> <xs:complexTypename="subnetNodeType"> <xs:sequence> <xs:elementname="objectinstance"type="xs:string"/> <xs:elementname="objectfatherinstance"type="xs:string"/> <xs:elementname="subnetAddr"type="xs:string"/> <xs:elementname="subnetMask"type="xs:string"/> <xs:elementname="age"type="xs:integer"/> <xs:elementname="swNode"type="swNodeType"maxOccurs="unbounded"/> <xs:elementname="L2ConNode"type="l2ConNodeType"maxOccurs="unbounded"/> <xs:elementname="segNode"type="segNodeType"maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> <xs:complexTypename="subnetListType"> <xs:sequence> <xs:elementname="subnetNode"type="subnetNodeType"/> </xs:sequence> </xs:complexType> <xs:complexTypename="l3ConnListType"> <xs:annotation> <xs:documentation>connectionobjectinnetworklayer</xs:documentation> </xs:annotation> <xs:sequence> <xs:elementname="ObjectInstance"type="xs:string"/> <xs:elementname="ObjectFatherInstance"type="xs:string"/> <xs:elementname="sourceInstance"type="xs:string"/> <xs:elementname="linkName"type="xs:string"/> <xs:elementname="linkType"type="xs:integer"/> <xs:elementname="age"type="xs:integer"/> </xs:sequence> </xs:complexType> <xs:complexTypename="swNodeType"> <xs:sequence> <xs:elementname="objectinstance"type="xs:string"/> <xs:elementname="objectfatherinstance"type="xs:string"/> <xs:elementname="swName"type="xs:string"/> <xs:elementname="swAddr"type="xs:string"/> <xs:elementname="commuStr"type="xs:string"/> <xs:elementname="age"type="xs:integer"/> <xs:elementname="SInterface"type="SInterfaceType"minOccurs="0"maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> <xs:complexTypename="SInterfaceType"> <xs:sequence> <xs:elementname="objectinstance"type="xs:string"/> <xs:elementname="objectfatherinstance"type="xs:string"/> <xs:elementname="Mac"type="xs:string"/> <xs:elementname="ifType"type="xs:integer"/> <xs:elementname="ifIndex"type="xs:integer"/> <xs:elementname="age"type="xs:integer"/> </xs:sequence> </xs:complexType> <xs:complexTypename="l2ConNodeType"> <xs:annotation> <xs:documentation>connectionobjectinlinklayer</xs:documentation> </xs:annotation> <xs:sequence> <xs:elementname="objectinstance"type="xs:string"/> <xs:elementname="objectfatherinstance"type="xs:string"/> <xs:elementname="sourceInstance"type="xs:string"/> <xs:elementname="destInstance"type="xs:string"/> <xs:elementname="age"type="xs:integer"/> </xs:sequence> </xs:complexType> <xs:complexTypename="segNodeType"> <xs:sequence> <xs:elementname="objectinstance"type="xs:string"/> <xs:elementname="objectfatherinstance"type="xs:string"/> <xs:elementname="swName"type="xs:string"/> <xs:elementname="hostNode"type="hostNodeType"maxOccurs="unbounded"/> <xs:elementname="age"type="xs:integer"/> </xs:sequence> </xs:complexType> <xs:complexTypename="hostNodeType"> <xs:sequence> <xs:elementname="objectinstance"type="xs:string"/> <xs:elementname="objectfatherinstance"type="xs:string"/> <xs:elementname="hostAddr"type="xs:string"/> <xs:elementname="hostMask"type="xs:string"/> <xs:elementname="hostOperateSysType"type="xs:string"/> <xs:elementname="age"type="xs:integer"/> <xs:elementname="netCard"type="netCardType"maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> <xs:complexTypename="RInterfaceType"> <xs:sequence> <xs:elementname="objectinstance"type="xs:string"/> <xs:elementname="objectfatherinstance"type="xs:string"/> <xs:elementname="ifIndex"type="xs:integer"/> <xs:elementname="ifType"type="xs:integer"/> <xs:elementname="age"type="xs:integer"/> <xs:elementname="ipAddr"type="ipAddrType"minOccurs="0"maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> <xs:complexTypename="ipAddrType"> <xs:sequence> <xs:elementname="addr"type="xs:string"maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> <xs:complexTypename="netCardType"> <xs:sequence> <xs:elementname="objectinstance"type="xs:string"/> <xs:elementname="objectfatherinstance"type="xs:string"/> <xs:elementname="IPAddr"type="xs:string"/> <xs:elementname="MAC"type="xs:string"/> <xs:elementname="age"type="xs:integer"/> </xs:sequence> </xs:complexType></xs:schema>附錄B相關(guān)SNMPMIB表結(jié)構(gòu)及其說明C.1ipAddrTableipAddrTableOBJECT–TYPESYNTAXSEQUENCEOFipAddrEntryipAddrEntry::=SEQUENCE{ ipAdEntAddrIpAddress,ipAdEntIfIndexINTEGER,ipAdEntNetMaskIpAddress,ipAdEnBcastAddrINTEGER...}說明如下:ipAdEntAddr:設(shè)備的一個IP地址。ipAdEntIfIndex:該IP地址所屬物理接口的索引,可根據(jù)此值來判斷該IP地址所屬的物理接口。ipAdEntNetMask:該IP地址對應(yīng)的掩碼。ipAdEnBcastAddr:該IP地址對應(yīng)的播送地址。 通過表ipAddrTable,可以找到被管設(shè)備所有的IP地址,同時結(jié)合interfaces組的ifTable表,可以把接口和其IP地址一一對應(yīng)起來。C.2ipRouteTableipRouteTableOBJECT-TYPESYNTAXSEQUENCEOFipRouteEntryIpRouteEntry::=SEQUENCE{ipRouteDest IpAddress,ipRouteIfIndex INTEGER,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論