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

下載本文檔

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

文檔簡(jiǎn)介

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

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論