專利名稱::基于snmp的ip網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及網(wǎng)絡(luò)管理的方法,更具體地說,涉及IP網(wǎng)絡(luò)拓?fù)涞陌l(fā)現(xiàn)方法。
背景技術(shù):
:按照OSI開放系統(tǒng)互聯(lián)模型(OpenSystemInterconnectionReferenceModel)的定義,網(wǎng)絡(luò)管理主要包括五個功能域故障管理、配置管理、性能管理、安全管理和計費管理。在五大功能域中,配置管理是基礎(chǔ),它的主要功能包括發(fā)現(xiàn)網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)、監(jiān)視和管理網(wǎng)絡(luò)設(shè)備的配置情況。網(wǎng)絡(luò)拓?fù)涔芾砟繕?biāo)是分層顯示運營網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu),為性能、告警、配置數(shù)據(jù)的處理提供支持,從而全面、動態(tài)地反映網(wǎng)絡(luò)的運行狀況,為用戶監(jiān)視整個網(wǎng)絡(luò)提供強有力手段。網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)的主要目的是獲取和維護網(wǎng)絡(luò)節(jié)點的存在性信息和它們之間的連接關(guān)系信息,并在此基礎(chǔ)上繪制出整個網(wǎng)絡(luò)拓?fù)鋱D。網(wǎng)絡(luò)管理人員通過拓?fù)浣Y(jié)構(gòu)信息還能對網(wǎng)絡(luò)故障進(jìn)行定位,發(fā)現(xiàn)網(wǎng)絡(luò)瓶頸,從而優(yōu)化整個網(wǎng)絡(luò)。根據(jù)OSI的定義,網(wǎng)絡(luò)分為七層結(jié)構(gòu),如圖1所示,從低到高分別為物理層、數(shù)據(jù)鏈路層、IP層、傳輸層、會話層、表示層、應(yīng)用層。網(wǎng)絡(luò)拓?fù)淇梢苑殖刹煌倪壿嫼臀锢韺哟巍T趯嶋H的物理網(wǎng)絡(luò)中,網(wǎng)絡(luò)拓?fù)渲械墓?jié)點應(yīng)該是由電纜相連的各種設(shè)備端口。物理網(wǎng)絡(luò)拓?fù)溆謱?yīng)著不同抽象層次的邏輯拓?fù)浣Y(jié)構(gòu)。在IP網(wǎng)絡(luò)層,拓?fù)浒l(fā)現(xiàn)的對象是路由器、子網(wǎng)和IP主機,包括三者之間互相的鏈接關(guān)系。網(wǎng)絡(luò)層的拓?fù)浒l(fā)現(xiàn)算法比較成熟。物理鏈路層的拓?fù)浒l(fā)現(xiàn)對象是交換機和網(wǎng)段,以及交換機和交換機、交換機和網(wǎng)段間的鏈接關(guān)系。相對而言,各研究機構(gòu)在方面所做的工作很少。隨著大量的交換機被部署到網(wǎng)絡(luò)中,網(wǎng)絡(luò)層拓?fù)浒l(fā)現(xiàn)所不能發(fā)現(xiàn)的部分越來越多。另外,在網(wǎng)絡(luò)管理中,僅僅發(fā)現(xiàn)網(wǎng)絡(luò)拓?fù)涫遣粔虻?,因為網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)不斷在變化。比如增加一臺路由器、減少一臺主機、甚至修改一臺網(wǎng)絡(luò)設(shè)備的配置信息都會導(dǎo)致網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)發(fā)生變化。為了如實的反映網(wǎng)絡(luò)的變化,拓?fù)浒l(fā)現(xiàn)軟件必須具備實時更新的能力,而現(xiàn)在大多數(shù)網(wǎng)管軟件基本都不支持這種需求。該發(fā)明針對基于判斷交換機互聯(lián)的直接連接定理和間接連接定理,提出了一種完整的基于SNMP(SimpleNetworkManagementProtocol簡單網(wǎng)絡(luò)管理協(xié)議)的拓?fù)浒l(fā)現(xiàn)算法,設(shè)計并實現(xiàn)了一個自上而下的拓?fù)浒l(fā)現(xiàn)框架結(jié)構(gòu)。SNMP采用“管理進(jìn)程/代理進(jìn)程”模型來監(jiān)視和控制各種可管理網(wǎng)絡(luò)設(shè)備。其核心思想是在每個網(wǎng)絡(luò)節(jié)點上設(shè)置一個管理信息庫MIB(ManageInformationBase),由節(jié)點上的代理負(fù)責(zé)維護,管理進(jìn)程通過應(yīng)用層協(xié)議對這些信息庫進(jìn)行訪問。圖2說明了SNMP網(wǎng)絡(luò)管理框架的一般體系結(jié)構(gòu),它由四個主要部件構(gòu)成,分別是通信網(wǎng)絡(luò)、網(wǎng)絡(luò)協(xié)議、網(wǎng)絡(luò)管理進(jìn)程和被管網(wǎng)絡(luò)實體。網(wǎng)絡(luò)管理應(yīng)用向網(wǎng)絡(luò)管理進(jìn)程內(nèi)的SNMPManager(SNMP管理者)發(fā)出Get、Get-Next或Set三種消息,經(jīng)底層協(xié)議到達(dá)被管理網(wǎng)絡(luò)實體的SNMPAgent(SNMP代理),由Agent將這三種消息傳達(dá)給SNMP管理對象。當(dāng)SNMP管理對象被觸發(fā)相應(yīng)操作后,便向SNMPAgent發(fā)送Get-Response或Event兩種應(yīng)答,通過底層協(xié)議傳送給網(wǎng)絡(luò)管理進(jìn)程的SNMPManager,由Manager向SNMP網(wǎng)絡(luò)管理應(yīng)用通告操作的完成情況。
發(fā)明內(nèi)容本發(fā)明的目的在于提供一種基于SNMP協(xié)議的自動地發(fā)現(xiàn)網(wǎng)絡(luò)的物理布局以及網(wǎng)絡(luò)節(jié)點間的相互連接關(guān)系的IP網(wǎng)絡(luò)拓?fù)涞陌l(fā)現(xiàn)方法。利用該方法可自動探測整個網(wǎng)絡(luò),發(fā)現(xiàn)網(wǎng)絡(luò)設(shè)備以及之間的連接關(guān)系,最后繪制出網(wǎng)絡(luò)拓?fù)鋱D。本發(fā)明提供的基于SNMP的網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)方法包括建立SNMP網(wǎng)絡(luò)管理運行的環(huán)境的步驟;在目標(biāo)網(wǎng)絡(luò)的每個網(wǎng)絡(luò)節(jié)點上設(shè)置一個管理信息庫MIB(ManageInformationBase)的步驟;網(wǎng)絡(luò)管理進(jìn)程通過應(yīng)用層協(xié)議對SNMP管理信息庫進(jìn)行訪問的步驟;網(wǎng)絡(luò)管理應(yīng)用向網(wǎng)絡(luò)管理進(jìn)程內(nèi)發(fā)出的信息,經(jīng)底層協(xié)議到達(dá)被管理網(wǎng)絡(luò)實體的步驟;網(wǎng)絡(luò)層的拓?fù)浒l(fā)現(xiàn)的步驟,其包括如下步驟(a)識別默認(rèn)網(wǎng)關(guān)并確認(rèn)其IP地址,并判斷該默認(rèn)網(wǎng)關(guān)是否為路由設(shè)備;(b)查找獲取其路由表。(c)根據(jù)前一步發(fā)現(xiàn)的路由器的路由表,識別直接連接在路由器上的子網(wǎng);(d)識別網(wǎng)絡(luò)層的子網(wǎng)與路由設(shè)備之間的鏈路,獲取網(wǎng)絡(luò)層拓?fù)浣Y(jié)構(gòu)信息;(e)根據(jù)路由表中標(biāo)識的下一跳地址信息,發(fā)現(xiàn)新的路由器,重復(fù)b、c、d三步,直到發(fā)現(xiàn)不了新的路由器為止。數(shù)據(jù)鏈路層的拓?fù)浒l(fā)現(xiàn)的步驟,包括如下步驟(1)識別當(dāng)前子網(wǎng)的網(wǎng)絡(luò)設(shè)備并獲取APR緩存;(2)遍歷子網(wǎng)內(nèi)所有交換機,下載所有交換機的轉(zhuǎn)發(fā)數(shù)據(jù)庫;(3)計算交換機間的直接和間接連接關(guān)系;(4)重新調(diào)整子網(wǎng)內(nèi)的網(wǎng)段,把網(wǎng)段和交換機的連接關(guān)系構(gòu)造成鏈路對象,添加到子網(wǎng)的2層連接對象鏈表L2ConnList中;其中網(wǎng)絡(luò)層的拓?fù)浒l(fā)現(xiàn)的步驟(a)包括訪問拓?fù)浒l(fā)現(xiàn)程序所在計算機的SNMPMIBII中的ipRouteTable,如果發(fā)現(xiàn)有ipRouteDest值為0.0.0.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è)備,否則不是。其中所述的網(wǎng)絡(luò)層的拓?fù)浒l(fā)現(xiàn)的步驟(b)包括查詢路由器MIBII的IP管理組中管理對象ipRouteDest下的所有對象,ipRouteType字段的值,若該值為3,則表明這條路由為直接路由,若該值為4,則為間接路由;根據(jù)直接相連的網(wǎng)絡(luò)號及其網(wǎng)絡(luò)掩碼(ipRouteMask),其中所述的網(wǎng)絡(luò)層的拓?fù)浒l(fā)現(xiàn)的步驟(c)包括在發(fā)現(xiàn)與路由器直接相連的子網(wǎng)時利用SNMP協(xié)議得到子網(wǎng)和路由器的連接關(guān)系的步驟。其中所述的網(wǎng)絡(luò)層的拓?fù)浒l(fā)現(xiàn)的步驟(e)包括查詢默認(rèn)網(wǎng)關(guān)MIBII的IP管理組路由表中類型為間接路由的路由表項,得到路由的下一跳地址(ipRouteNextHop),利用遞歸方法搜索下一跳的路由設(shè)備的路由表,根據(jù)該路由表確定與該路由器存在連接關(guān)系的路由設(shè)備。其中數(shù)據(jù)鏈路層的拓?fù)浒l(fā)現(xiàn)步驟中所述識別當(dāng)前子網(wǎng)的網(wǎng)絡(luò)設(shè)備屬于何種類型是通過特定的MIB組進(jìn)行判別實現(xiàn)的,其判斷標(biāo)準(zhǔn)如下如果MIB組中的ipForwarding對象(OID號為“1.3.6.1.2.1.4.1”)值為1,判定該設(shè)備為路由器。如果MIB組中的dotldFdpTable組(OID號為1.3.6.1.2.1.17.4.3)為非空,判斷該設(shè)備為交換機。如果MIB組中的printmib組(OID號為1.3.6.1.2.1.43)為非空,則判斷該設(shè)備為打印機。其中數(shù)據(jù)鏈路層的拓?fù)浒l(fā)現(xiàn)中所述獲取其物理地址的步驟包括通過MIB組的IpNetToMedia組(OID號為1.3.6.1.2.1.4.22)獲得該路由器的IP報文所對應(yīng)的物理地址的映射表。其中所述的數(shù)據(jù)鏈路層的拓?fù)浒l(fā)現(xiàn)步驟中計算交換機間的直接和間接連接關(guān)系是通過以下準(zhǔn)則進(jìn)行判斷的設(shè)交換機A在x端口上學(xué)習(xí)到的MAC地址的集合為FxA,交換機B在y端口上學(xué)習(xí)到的MAC地址的集合為FyB;若FxA和FyB中同時存在著對方的MAC地址;或FxA中存在B的MAC地址,并且A上存在一個端口k(k≠x),使得FyB∩FkA≠φ;則可確定交換機A和B通過x和y端口間接相連。其中數(shù)據(jù)鏈路層的拓?fù)浒l(fā)現(xiàn)所述的計算交換機間的直接和間接連接關(guān)系判斷方法,包括(1)在進(jìn)行交換機鏈接發(fā)現(xiàn)之前,拓?fù)浒l(fā)現(xiàn)服務(wù)器選定一臺交換機向其它交換機發(fā)送回聲請求(EchoRequest)報文,使每臺交換機可學(xué)習(xí)到其他交換機的物理地址;(2)拓?fù)浒l(fā)現(xiàn)服務(wù)器下載每臺交換機的轉(zhuǎn)發(fā)數(shù)據(jù)庫后,對每臺交換機構(gòu)造一個二維鏈表。在網(wǎng)絡(luò)管理中,采用本發(fā)明的基于SNMP的網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)方法具備實時更新的能力,可探測網(wǎng)絡(luò)拓?fù)湟约皵?shù)據(jù)鏈路層的拓?fù)浣Y(jié)構(gòu),獲取和維護網(wǎng)絡(luò)節(jié)點的存在性信息和連接關(guān)系信息,在此基礎(chǔ)上繪制出整個網(wǎng)絡(luò)拓?fù)鋱D。網(wǎng)絡(luò)管理人員通過拓?fù)浣Y(jié)構(gòu)信息還能對網(wǎng)絡(luò)故障進(jìn)行定位,發(fā)現(xiàn)網(wǎng)絡(luò)瓶頸,從而優(yōu)化整個網(wǎng)絡(luò)。圖1為OSI開放系統(tǒng)互聯(lián)模型分層結(jié)構(gòu)示意圖;圖2所示為簡單網(wǎng)絡(luò)管理協(xié)議(SNMP)體系結(jié)構(gòu);圖3所示為網(wǎng)絡(luò)對象樹型結(jié)構(gòu)圖;圖4所示為設(shè)備鏈表數(shù)據(jù)結(jié)構(gòu)示意圖;圖5所示為各類對象關(guān)系圖;圖6所示為拓?fù)浒l(fā)現(xiàn)總體流程;圖7所示為網(wǎng)絡(luò)層拓?fù)浒l(fā)現(xiàn)總體流程;圖8為遍歷路由表發(fā)現(xiàn)新子網(wǎng)和路由器的算法流程圖;圖9所示為鏈路層網(wǎng)絡(luò)模型圖;圖10所示為鏈路層拓?fù)浒l(fā)現(xiàn)的流程圖;圖11所示為設(shè)備類型的判別算法流程圖;圖12所示為設(shè)備物理地址的采集算法流程圖;圖13為在交換機間偽造地址發(fā)送EchoRequest的算法流程圖;圖14所示為交換機轉(zhuǎn)發(fā)數(shù)據(jù)庫二維鏈表;圖15為間接連接定理的條件一判定算法流程圖;圖16所示為拓?fù)浞?wù)器偽造ping報文的源地址的示意圖;圖17所示為標(biāo)識間接連接關(guān)系的二維鏈表;圖18為間接連接定理的條件二判定算法流程圖;圖19為交換機端口間直接連接關(guān)系的發(fā)現(xiàn)算法流程圖;圖20所示為交換機的直接連接鏈表;圖21所示為根據(jù)本發(fā)明的基于SNMP的網(wǎng)絡(luò)層拓?fù)浒l(fā)現(xiàn)結(jié)果一;圖22所示為根據(jù)本發(fā)明的基于SNMP的網(wǎng)絡(luò)層拓?fù)浒l(fā)現(xiàn)結(jié)果二;圖23所示為根據(jù)本發(fā)明的基于SNMP的數(shù)據(jù)鏈路層拓?fù)浒l(fā)現(xiàn)結(jié)果。具體實施例方式本發(fā)明將每個網(wǎng)絡(luò)設(shè)備都看作一個對象。這些對象不僅包括各種物理對象(如路由器,交換機,主機等),還包括各種邏輯對象(如網(wǎng)段,子網(wǎng),連接等)。網(wǎng)絡(luò)對象存在著固定的父子關(guān)系。比如,被管網(wǎng)絡(luò)(Network)對象的子對象有路由器對象(Router)、子網(wǎng)對象(Subnet)、路由器和子網(wǎng)之間的連接對象(L3Link)。網(wǎng)絡(luò)中所有的設(shè)備對象組成一棵以Network對象為根的樹,如圖3所示。各種對象的含義是Network被管理網(wǎng)絡(luò);Router路由器;RInterface路由器端口;Subnet子網(wǎng);L3Link三層鏈路,包括路由器和路由器間鏈接,路由器和子網(wǎng)間鏈接;Switch交換機;SInterface交換機端口;Segment網(wǎng)段;L2Link第二層鏈路,包括交換機和交換機間鏈接,交換機和網(wǎng)段間鏈接;HostIP主機;Netcard網(wǎng)卡;Printer打印機。拓?fù)浒l(fā)現(xiàn)的對象可以分為三層拓?fù)浜投油負(fù)鋬刹糠帧F渲?,三層拓?fù)溆蒊P層拓?fù)浒l(fā)現(xiàn)方法負(fù)責(zé)生成;二層拓?fù)溆蓴?shù)據(jù)鏈路層拓?fù)浒l(fā)現(xiàn)方法負(fù)責(zé)生成。我們所關(guān)心的各種網(wǎng)絡(luò)對象屬性如下[三層拓?fù)鋆1)路由器屬性路由器在線狀態(tài)、路由器生產(chǎn)廠商和型號、路由器的IP地址、操作系統(tǒng)類型,端口數(shù)量,路由條數(shù),OSPF和BGP協(xié)議狀態(tài)。2)子網(wǎng)屬性子網(wǎng)地址和子網(wǎng)掩碼3)路由器端口屬性各個端口的端口索引號,端口物理類型(以太網(wǎng),串口,光纖口等),端口IP地址和子網(wǎng)掩碼,端口物理地址,端口帶寬,端口工作狀態(tài)(Up或Down)。1)交換機屬性路由器在線狀態(tài)、路由器生產(chǎn)廠商和型號、路由器的IP地址、操作系統(tǒng)類型,端口數(shù)量。2)網(wǎng)段屬性接入交換機IP和端口索引。3)交換機端口屬性各個端口的端口索引號,端口物理類型(以太網(wǎng),串口,光纖口等),端口IP地址和子網(wǎng)掩碼,端口物理地址,端口帶寬,端口工作狀態(tài)(Up或Down)。4)網(wǎng)段中的主機以及主機的屬性主機在線狀況,主機名、操作系統(tǒng)類型、IP地址、子網(wǎng)掩碼,主機的CPU索引,內(nèi)存索引,磁盤索引,接入交換機的IP和端口號。5)主機中的網(wǎng)卡以及網(wǎng)卡屬性網(wǎng)卡索引號、網(wǎng)卡IP地址和子網(wǎng)掩碼,網(wǎng)卡帶寬。鏈路鏈路本端設(shè)備IP,對端設(shè)備IP,本端端口索引號,對端端口索引號。配置信息在計算機內(nèi)存中的存放格式和相互的從屬關(guān)系。所有網(wǎng)絡(luò)設(shè)備都以雙向鏈表形式保存于其父節(jié)點的結(jié)構(gòu)體中,如圖4所示。List類具體定義如下單個設(shè)備節(jié)點classNode{publicNode*prev,*next;//指向鏈表中的前一個和后一個設(shè)備節(jié)點Tobj;//節(jié)點數(shù)據(jù)信息,類型可以是任意的};多個節(jié)點構(gòu)成的鏈表classList{publicNode<T>*head,*tail;//該鏈表的頭指針和尾指針unsignedintsize;//鏈表的節(jié)點數(shù)};Object類(實體類)是網(wǎng)絡(luò)中所有物理設(shè)備和邏輯設(shè)備的共同基類,所有的物理設(shè)備和邏輯設(shè)備都具有Object類包含的屬性。ClassObject{public/*指向該設(shè)備的父對象的指針*/Object*p_parent_obj;/*設(shè)備名*/charobj_name[MAX_OBJ_NAME+1];//設(shè)備信息描述charobj_desc[MAX_OBJ_DESC+1];//設(shè)備當(dāng)前狀態(tài),例如正常節(jié)點、不在線節(jié)點或新發(fā)現(xiàn)節(jié)點intstatus//以該設(shè)備對象為一端的鏈路列表List<Link*>linkPLst;}Device類(設(shè)備類)是交換機類(Switch)、路由器(Router)類和主機類(Host)類公共的父類,集合了這三種網(wǎng)絡(luò)設(shè)備對象的共有屬性,并繼承了Object類。classDevicepublicObject{public//該設(shè)備的主IP地址ip_addr_v4main_ip_addr;//該設(shè)備上所配置的所有IP地址//List<ip_addr_v4>ip_entr_list//IP地址所對應(yīng)的端口索引號*/List<unsignedint>ip_entr_ifindex;//該設(shè)備所具有的端口列表List<Interface>if_list;//設(shè)備所支持的最大SNMP版本號intmax_snmp_ver;//該設(shè)備所需要的SNMP口令字charcommunity[MAX_COMMUNITY_LEN+1];//設(shè)備廠商型號IDcharenterprise_id[50];//該設(shè)備是否存在于多個子網(wǎng)boolbMulSubnet;}Router類保存的是單臺路由器所具有的配置信息,繼承了Device類的屬性,并具有某些獨有的屬性。ClassRouterPublicDevice{public//OSPF路由狀態(tài)表List<ospf_status>ospf_list;//BGP路由狀態(tài)表List<bgp_status>bgp_list;//路由器路由表List<route_table>route_table_list;}ospf_status和bgp_status類分別用來保存單條OSPF和BGP路由信息。classospf_status{public//鄰居路由器地址charNbrAddr[20];//OSPF狀態(tài)(full,close或connect)into_status;};classbgp_status{public//鄰居路由器地址charNbrAddr[20];//BGP狀態(tài)(established或active)intb_status;};route_table類保存單條路由信息,classroute_table{public//下一跳目標(biāo)地址ip_addr_v4dest;//接口地址charinterface_addr[20];//路由類型,直接路由或間接路由inttype;}Switch類保存的是單臺交換機所具有的配置信息,繼承了Device類,并具有一些獨有的屬性。classSwitchpublicDevice{public//保存該交換機的鏈路轉(zhuǎn)發(fā)表List<port>port_list;//表明該設(shè)備是否為無線接入點boolbWirelessSw;}port類型用來保存鏈路轉(zhuǎn)發(fā)表信息,每個port對象保存一個交換機端口的轉(zhuǎn)發(fā)表,具體定義如下classport{public//該port對象所屬交換機對象的指針Switch*p_sw;//該port對象所對應(yīng)的交換機端口序號unsignedintif_index;//該port對象所具有的轉(zhuǎn)發(fā)表List<fwd_addr>fwd_addr_list;};Host類保存的是單臺主機所具有的配置信息,繼承了Device類,并具有一些獨有的屬性。classHostpublicDevice{public//操作系統(tǒng)類型charoperate_sys_type[MAX_HST_SYSTYPE+1];//CPU序號charCpuIndex[MAX_HST_CPU+1];//磁盤序號charDskIndex[MAX_HST_DSK+1];//磁盤名charDskLabel[MAX_HST_DSK+1];//內(nèi)存序號charMemIndex[MAX_HST_MEM+1];//主機默認(rèn)網(wǎng)關(guān)chargateway_ip[MAX_ADDR_STR+1];};Interface類保存單個設(shè)備端口的配置信息,繼承了Object類,端口包括路由器端口、交換機端口和網(wǎng)卡。classInterfacepublicObject{publicDevice*p_dev;//所屬設(shè)備的指針unsignedintif_index;//端口的索引號unsignedintif_type;//端口的類型,例如以太網(wǎng)口、串口、光纖口等unsignedlongif_speed;//端口速度union{charether_mac[6];}if_phy_addr;//端口的物理地址intif_status;//端口的工作狀態(tài),(Up或Down)charif_descr[256];//端口描述charport_ip[MAX_DEV_IP+1];//端口所配置的IP地址charmain_ip[MAX_ADDR_STR+1];//端口的主IP地址charport_mask[MAX_DEV_IP+1];//端口所配置IP地址的子網(wǎng)掩碼}Link類保存單條鏈路的信息,繼承了Object類。classLinkpublicObject{public//鏈路本端設(shè)備對象和端口索引Object*p_obj1;unsignedintif1;//鏈路對端設(shè)備對象和端口索引Object*p_obj2;unsignedintif2;};Segment類保存單個網(wǎng)段的配置信息和子節(jié)點信息,繼承了Object類。classSegmentpublicObject{public//網(wǎng)段對應(yīng)的交換機轉(zhuǎn)發(fā)表單個端口列表List<switch_port_pair>spp_list;//網(wǎng)段內(nèi)的所有主機List<Host>host_list;//該網(wǎng)段對應(yīng)的物理地址轉(zhuǎn)發(fā)列表List<fwd_addr>__temp_fwd_addr_list;//與該網(wǎng)段相連的交換機端口Interface*p_if;//與網(wǎng)段相連交換機的IP地址unsignedlongswitch_ip;}Subnet類保存單個子網(wǎng)的配置信息和子節(jié)點信息,繼承了Object類。classSubnetpublicObject{public//該子網(wǎng)的網(wǎng)絡(luò)地址和子網(wǎng)掩碼unsignedlongnet_addr;unsignedlongnet_mask;//子網(wǎng)內(nèi)的交換機列表List<Switch>sw_list;//子網(wǎng)內(nèi)的網(wǎng)段列表List<Segment>seg_list;//子網(wǎng)內(nèi)的第二層鏈路列表List<L2link>l2link_list;//該子網(wǎng)內(nèi)設(shè)備的“物理地址——IP地址”轉(zhuǎn)換表CMap<LONGLONG,LONGLONG&,u_long,u_long&>arptable;}Network類保存整個局域網(wǎng)的子節(jié)點信息,繼承了Object類。classNetworkpublicObject{public//該局域網(wǎng)內(nèi)的路由器列表List<Router>router_list;//該局域網(wǎng)內(nèi)的子網(wǎng)列表List<Subnet>subnet_list;//該局域網(wǎng)內(nèi)的第三層鏈路列表List<L3link>l3link_list;//該局域網(wǎng)內(nèi)的“交換機——路由器”鏈接列表List<LRSlink>lrsLinkList;}各種類之間存在著父子或兄弟關(guān)系,如圖5所示整個拓?fù)浒l(fā)現(xiàn)算法可以表述為圖6可表述為①拓?fù)浒l(fā)現(xiàn)程序先獲得拓?fù)浒l(fā)現(xiàn)服務(wù)器(運行拓?fù)浒l(fā)現(xiàn)程序的主機)所配置的默認(rèn)網(wǎng)關(guān);②然后以該網(wǎng)關(guān)為起點進(jìn)行網(wǎng)絡(luò)層的拓?fù)浒l(fā)現(xiàn),將得到網(wǎng)絡(luò)內(nèi)的路由器,網(wǎng)絡(luò)層鏈路和子網(wǎng)信息;③根據(jù)上一步得到的子網(wǎng)信息,對每個子網(wǎng)進(jìn)行數(shù)據(jù)鏈路層的拓?fù)浒l(fā)現(xiàn)。網(wǎng)絡(luò)層的拓?fù)浒l(fā)現(xiàn)網(wǎng)絡(luò)層拓?fù)浒l(fā)現(xiàn)所需要的SNMPMIB組支持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組(OID號為1.3.6.1.2.1.1)OID(ObjectIdentifier)按照ASN.1標(biāo)準(zhǔn)(國際電信聯(lián)盟和國際標(biāo)準(zhǔn)化組織開發(fā)的標(biāo)準(zhǔn)化語言)規(guī)定的類型標(biāo)識符,用來規(guī)定SNMP管理框架(SMI)內(nèi)的各種對象。該組內(nèi)包含七個對象,分別為sysDescr、sysObjectID、sysUpTime、sysContact、sysName、sysLocation和sysServices。其中sysDescr描述了設(shè)備的相關(guān)信息,一般包括廠商,型號等。SysName為設(shè)備的名字,算法中會用這個對象來判斷不同的IP地址是否屬于同一個設(shè)備2)Interfaces組(OID號為1.3.6.1.2.1.2)該組包含兩個對象ifNumber和ifTable。其中,ifNumber對象表示該設(shè)備所具有的接口數(shù)量。該組的另一個元素ifTable是一張表,表內(nèi)的每一個字段都是某一個接口的一個屬性,包括接口索引(ifindex),接口類型(ifType),接口速度(ifSpeed)和接口物理地址(ifPhysAddress)等。3)IP組(OID號為1.3.6.1.2.1.4)該組的元素較多,其中有三個表和一個對象對拓?fù)浒l(fā)現(xiàn)來說比較重要,分別是ipAddrTable,ipRouteTable和ipNetToMediaTable和對象ipForwarding。通過對象ipForwarding的值,可以判斷被訪問對象是否為路由器為1,是路由器;為2,不是路由器。通過1表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.0.0.0,說明該路由為缺省路由。通往同一個目的地的路由可能有多個,路由的選擇依賴于所使用的路由協(xié)議。IpRouteNextHop路由的下一跳路由器地址。ipRouteMask路由目的地的子網(wǎng)掩碼。提取IP數(shù)據(jù)包中的目的地地址,與ipRouteMask進(jìn)行按位“與”運算,得到的結(jié)果與ipRouteDest比較,如相同則應(yīng)選擇該路由。如果ipRouteDest為0.0.0.0,則規(guī)定ipRouteMask也為0.0.0.0。ipRouteType路由的類型,包括直接路由(direct)和間接路由(indirect)兩種。網(wǎng)絡(luò)層對象的發(fā)現(xiàn)方法1)默認(rèn)網(wǎng)關(guān)的發(fā)現(xiàn)首先,訪問拓?fù)浒l(fā)現(xiàn)程序所在計算機的SNMPMIBII中的ipRouteTable,如果發(fā)現(xiàn)有ipRouteDest值為0.0.0.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字段的值。若該值為3(direct),則表明這條路由為直接路由,若該值為4(indirect),則為間接路由。間接路由表明在通往目的網(wǎng)絡(luò)或目的主機的路徑上還要經(jīng)過其它路由器,而直接路由表明目的網(wǎng)絡(luò)或目的主機與該路由設(shè)備直接相連,這樣就得到了與路由器直接相連的網(wǎng)絡(luò)號。再以這組網(wǎng)絡(luò)號中的每個為索引,查詢其路由掩碼(ipRouteMask)。根據(jù)路由掩碼,就可以確定這組網(wǎng)絡(luò)中每一個的IP地址范圍。例如,已知路由器的IP地址為192.168.4.1,且路由器支持SNMP協(xié)議。利用SNMP協(xié)議可以得到以下與路由器直接相連的子網(wǎng),如圖7所示。網(wǎng)絡(luò)號網(wǎng)絡(luò)掩碼地址范圍159.226.204.128255.255.255.192159.226.204.129~192192.168.0.0255.255.255.0192.168.0.1~255192.168.4.0255.255.254.0192.168.4.1~192.168.5.255192.168.6.0255.255.255.0192.168.6.1~255192.168.7.0255.255.255.0192.168.7.1~2553)其他路由設(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è)備,利用遞歸方法搜索這個新發(fā)現(xiàn)路由器的路由表。例如,有下列路由表IpRouteDestIpRouteMaskIpRouteNexthop159.226.204.128255.255.255.192159.226.204.7l92.168.4.0255.255.254.0192.168.4.1192.168.6.0255.255.255.0192.168.6.1192.168.7.0255.255.255.0192.168.7.1根據(jù)該路由器的路由表,可以認(rèn)為可能有159.226.204.7,192.168.4.1,192.168.6.1,192.168.7.1這四臺路由器與該路由器存在連接關(guān)系。4)網(wǎng)絡(luò)層的鏈路對象網(wǎng)絡(luò)層拓?fù)渲饕缸泳W(wǎng)和路由器之間的連接關(guān)系。子網(wǎng)和路由器的連接關(guān)系可以在發(fā)現(xiàn)與路由器直接相連的子網(wǎng)時得到,如圖7的例子,可以得到下面這五條鏈路192.168.4.1~159.22.204.128/26192.168.4.1~192.168.0.0/16192.168.4.1~192.168.4.0/23192.168.4.1~192.168.6.0/24192.168.4.1~192.168.7.0/24網(wǎng)絡(luò)層拓?fù)浒l(fā)現(xiàn)算法網(wǎng)絡(luò)層拓?fù)浒l(fā)現(xiàn)的總體流程如圖9所示(1)判斷拓?fù)浒l(fā)現(xiàn)服務(wù)器配置的默認(rèn)網(wǎng)關(guān)是不是路由器如果是的話,將其加入路由器隊列,到第2步;如果否的話,程序結(jié)束。(2)對指針進(jìn)行初始化,將其置于路由器隊列頭部。(3)判斷指針是否已到達(dá)隊列尾部如果是,程序結(jié)束;否,轉(zhuǎn)到第4步。(4)采集指針指向的那臺路由器的路由表。(5)遍歷路由表的每一項,將新發(fā)現(xiàn)的鏈路加入網(wǎng)絡(luò)層鏈路隊列;新發(fā)現(xiàn)路由器加入路由器隊列;新發(fā)現(xiàn)子網(wǎng)加入子網(wǎng)隊列。(該步將在下文做詳細(xì)介紹)(6)采集指針?biāo)赶虻穆酚善鞯呐渲眯畔ⅲㄔ撆_路由器上的端口配置信息(配置信息種類見上文)。(7)指針指向路由器隊列的下一個節(jié)點,轉(zhuǎn)到第3步。對算法第五步的詳細(xì)描述如下圖10。(1)判斷當(dāng)前路由器的路由表項是否已處理完畢是,則結(jié)束遍歷路由表的操作;否,轉(zhuǎn)入第2步。(2)判斷當(dāng)前路由表項是否為直接路由是,轉(zhuǎn)入第3步;否,指向第5步。(3)判斷當(dāng)前路由表項的RouteMask是否為255.255.255.255是轉(zhuǎn)向第5步;否,轉(zhuǎn)向第4步。(4)將RouteDest和RouteMask所標(biāo)示的子網(wǎng)加入子網(wǎng)隊列,將當(dāng)前路由器和該子網(wǎng)間的鏈接加入網(wǎng)絡(luò)層鏈路隊列(5)判斷RouteNextHop標(biāo)示的路由器是否已存在于路由器隊列否,在路由器隊列中加入該路由器;否,轉(zhuǎn)入第6步。(6)指向下一條路由表項,轉(zhuǎn)到第1步。數(shù)據(jù)鏈路層的拓?fù)浒l(fā)現(xiàn)在大多數(shù)情況下,僅僅發(fā)現(xiàn)網(wǎng)絡(luò)層的拓?fù)浣Y(jié)構(gòu)是不夠的,還需要發(fā)現(xiàn)數(shù)據(jù)鏈路層的拓?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)系。其他設(shè)備和交換機端口之間的連接關(guān)系以及交換機端口之間的連接關(guān)系是數(shù)據(jù)鏈路層拓?fù)浒l(fā)現(xiàn)的難點和重點,也是本發(fā)明最具創(chuàng)新性之處。數(shù)據(jù)鏈路層拓?fù)浒l(fā)現(xiàn)的復(fù)雜性在于交換機硬件的內(nèi)在透明性網(wǎng)絡(luò)用戶感覺不到網(wǎng)絡(luò)中交換機的存在。這些交換機設(shè)備僅僅在執(zhí)行生成樹協(xié)議(spanningtreeprotocol使用生成樹算法的網(wǎng)橋協(xié)議。該協(xié)議使一個自學(xué)習(xí)網(wǎng)橋能夠在網(wǎng)絡(luò)中動態(tài)解決環(huán)路問題。網(wǎng)橋與其他網(wǎng)橋交換網(wǎng)橋協(xié)議數(shù)據(jù)單元以檢測環(huán)路,并通過關(guān)閉選擇的網(wǎng)橋端口來消除環(huán)路。)時才和鄰居設(shè)備交換信息。交換機能保留的唯一狀態(tài)是它的轉(zhuǎn)發(fā)數(shù)據(jù)庫,它的作用是把收到的數(shù)據(jù)包轉(zhuǎn)發(fā)到適當(dāng)?shù)亩丝谏先?。轉(zhuǎn)發(fā)數(shù)據(jù)庫可以通過SNMP訪問,該組的名稱為dotldTpFdbTable,OID號是“1.3.6.1.2.1.17.4.3”,該組包含三個對象。dotldTpFdbAddress標(biāo)識轉(zhuǎn)發(fā)數(shù)據(jù)庫中保存的學(xué)習(xí)到的報文源或目的物理地址,OID號是“1.3.6.1.2.1.17.4.3.1.1”。dotldTpFdbPort標(biāo)識對應(yīng)的物理地址是從哪個交換機端口學(xué)到的。dotldTpFdbStatus標(biāo)識對應(yīng)交換機端口是否處于“Learn”狀態(tài)。數(shù)據(jù)鏈路層拓?fù)浒l(fā)現(xiàn)的基本原理圖9為鏈路層的網(wǎng)絡(luò)模型圖,其中的節(jié)點包括交換機和主機。交換機通過它們的端口相連,主機通過局域網(wǎng)或者集線器和交換機的端口相連。當(dāng)兩個不同的節(jié)點互相連接,并且在它們之間不存在任何其它設(shè)備時,稱該連接為直接連接。當(dāng)兩個不同的節(jié)點通過中間其它設(shè)備連接在一起時,稱該連接為間接連接。由網(wǎng)橋(交換)設(shè)備組成的局域網(wǎng)中的設(shè)備可以被劃分為網(wǎng)橋集合B和端點集合E。如圖11所示,B={A,B,C,D}。E={W,X,Y,Z}。交換機通過不同的端口把網(wǎng)絡(luò)中的其它各種設(shè)備連接起來。以太網(wǎng)中還包括集線器(圖11中與A相連),該設(shè)備用來把幾臺主機連接在交換機的同一個端口上;共享網(wǎng)段(圖11中和C相連);啞交換機,即不支持SNMP的交換機(圖11中和B相連)。交換機和其它交換機之間的連接不應(yīng)出現(xiàn)環(huán)路,即使物理上有環(huán)路,交換機也會利用生成樹算法(spanningtreeprotocol)在所有連接中構(gòu)成一個無環(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ù)涞淖兓兓?,同時由于記錄有生存時間,所以該集合還隨著時間而變化。當(dāng)該集合中包含該端口下連接的所有設(shè)備時,該集合稱為完整的,F(xiàn)1C是完整的。在網(wǎng)絡(luò)內(nèi)所有交換機轉(zhuǎn)發(fā)集都是完整的情況下,如果兩個交換機的不同端口x,y直接連接,中間沒有任何其它設(shè)備,那么以相連處為中線,網(wǎng)絡(luò)中的設(shè)備可以劃分成兩部分,一部分在端口x所對的一側(cè),即FxA,另一部分在端口y所對的一側(cè),即FyB。所以,F(xiàn)xA∪FyB=N,且FxA∩FyB=φ??梢钥偨Y(jié)為直接連接定理如果FxA和FyB都是完整的,那么交換機A的端口x和交換機B的端口y直接相連的充要條件是FxAFyB=φ且FxAFyB=N。但是在一個擁有上百,甚至上千個節(jié)點的網(wǎng)絡(luò)中,某個時刻總會有一些節(jié)點處在非活動狀態(tài)。因此當(dāng)網(wǎng)絡(luò)的規(guī)模很大時候,獲得完整的轉(zhuǎn)發(fā)集幾乎是不可能的。因此,必須在交換機轉(zhuǎn)發(fā)庫不完整的情況下獲得數(shù)據(jù)鏈路層的連接關(guān)系。根據(jù)圖論原理,可以證明如下間接連接定理間接連接定理只要滿足以下2個條件之一,就可以確定交換機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≠φ;由于交換機之間很少通信,所以條件1和2中要求的交換機A的FxA中存在B的MAC地址很難滿足,可以利用IP欺騙的方法盡量地使條件滿足。具體做法是對于子網(wǎng)中的每個交換機Si,利用IP欺騙方法,以Si的IP地址為源地址,向子網(wǎng)中的其他交換機發(fā)送ICMPEcho(ICMP回聲請求)消息。在Si收到回應(yīng)后,Si的轉(zhuǎn)發(fā)數(shù)據(jù)庫中將保存有其他交換機的MAC地址。當(dāng)交換機間的間接連接關(guān)系確定后,就可以計算得到交換機間的直接連接關(guān)系。設(shè)子網(wǎng)內(nèi)的所有交換機構(gòu)成的集合為G。根據(jù)生成樹協(xié)議,交換機之間將構(gòu)成一棵樹。任選其中一個交換機Si為根,假設(shè)Si通過n個端口與其他交換機構(gòu)成間接連接,則可以將G-{Si}構(gòu)成一個劃分IIi,劃分中包含n個元素,每個元素是與Si的某個端口p相間接連接的交換機的集合,設(shè)為Gp。在Gp中任選一個交換機Sj,則Sj必然通過某個端口q與Si的端口p間接連接,如果Sj不通過端口q與Gp中的其他交換機間接連接,則可以判定Sj通過端口q與Si的端口p直接連接。數(shù)據(jù)鏈路層拓?fù)浒l(fā)現(xiàn)算法數(shù)據(jù)鏈路層拓?fù)浒l(fā)現(xiàn)流程圖,如圖121、計算當(dāng)前子網(wǎng)的IP地址范圍。2、對IP地址空間內(nèi)的所有IP地址發(fā)送EchoRequest報文,將那些存在應(yīng)答的設(shè)備構(gòu)成一個臨時設(shè)備隊列。3、遍歷臨時設(shè)備隊列,如果當(dāng)前指針指向設(shè)備支持SNMP,則判斷該設(shè)備是交換機、主機還是打印機,并將新發(fā)現(xiàn)設(shè)備添加入對應(yīng)的設(shè)備隊列。(該步下文詳細(xì)說明)4、獲得子網(wǎng)內(nèi)所有設(shè)備的物理地址。(該步下文詳細(xì)說明)5、遍歷子網(wǎng)內(nèi)所有交換機,下載所有交換機的轉(zhuǎn)發(fā)數(shù)據(jù)庫。6、為每個交換機端口生成一個新的網(wǎng)段對象,網(wǎng)段中包含物理地址在該端口轉(zhuǎn)發(fā)集內(nèi)的主機。7、按照間接連接定理,計算交換機間的直接和間接連接關(guān)系。(該步下文詳細(xì)說明)8、重新調(diào)整子網(wǎng)內(nèi)的所有網(wǎng)段。對有直接連接的兩個端口對應(yīng)的網(wǎng)段作“與”操作,如果結(jié)果為空,則刪除這兩個網(wǎng)段;如果非空,則刪除原來的兩個網(wǎng)段,生成一個新的網(wǎng)段,新網(wǎng)段內(nèi)的主機為“與”操作的結(jié)果。9、把網(wǎng)段和交換機的連接關(guān)系構(gòu)造成鏈路對象,添加到子網(wǎng)的2層連接對象鏈表L2ConnList中。設(shè)備類型的判別算法交換機、路由器、打印機均可以通過特定的MIB組加以判別,如果某臺設(shè)備既不是交換機,也不是路由器和打印機,就將它判斷為主機。判斷標(biāo)準(zhǔn)如下如果MIB組中的ipForwarding對象(OID號為“1.3.6.1.2.1.4.1”)值為1,判定該設(shè)備為路由器。如果MIB組中的dotldFdpTable組(OID號為1.3.6.1.2.1.17.4.3)為非空,判斷該設(shè)備為交換機。如果MIB組中的printmib組(OID號為1.3.6.1.2.1.43)為非空,則判斷該設(shè)備為打印機。判別算法表述如下,如圖121.將指針指向臨時設(shè)備列表的頭部。2.如果指針到達(dá)了鏈表的尾部,則算法退出。3.判斷指針指向的設(shè)備是否支持SNMP否,轉(zhuǎn)向第6步;是,到第4步。4.判斷指針指向的設(shè)備是否為新交換機是,將其加入交換機隊列;否,到第5步。5.判斷指針指向的設(shè)備是否為新打印機是,將其加入打印機隊列;否,到第6步。6.判斷指針指向的設(shè)備是否為新主機是,將其加入主機隊列;否,到第7步。7.指針指向臨時設(shè)備隊列的下一節(jié)點,轉(zhuǎn)到第2步。設(shè)備所連接交換設(shè)備APR表緩存的采集算法網(wǎng)絡(luò)中的每臺路由器會保留一張經(jīng)過該路由器的IP報文所對應(yīng)的物理地址的映射表。這可以通過MIB組的IpNetToMedia組(OID號為1.3.6.1.2.1.4.22)來獲得。算法描述為,示意圖見圖13。1、將指針指向臨時設(shè)備隊列的頭部。2、判斷指針是否到達(dá)設(shè)備隊列的末尾是,轉(zhuǎn)向第5步;否,繼續(xù)。3、判斷指針指向的設(shè)備是否支持SNMP是,采集該設(shè)備上所有端口的物理地址;否,繼續(xù)。4、指針指向臨時設(shè)備隊列的下一節(jié)點,轉(zhuǎn)到第2步。5、將指針指向網(wǎng)絡(luò)內(nèi)路由器隊列的頭部。6、判斷指針是否到達(dá)隊列的尾部是,繼續(xù);否,結(jié)束本算法。7、采集指針指向的路由器的IpNetToMedia組,得到各臺路由器的ARP(ARP一種網(wǎng)絡(luò)層的協(xié)議,用途是將IP地址映射為物理地址。)緩沖區(qū)映射表。8、搜尋映射表中包含的IP地址所對應(yīng)的設(shè)備,如果該設(shè)備不支持SNMP,將該IP所對應(yīng)的物理地址,作為該臺設(shè)備可能的物理地址。9、指針指向路由器隊列的下一節(jié)點,轉(zhuǎn)到第6步。交換機間接鏈接的發(fā)現(xiàn)算法在執(zhí)行交換機鏈接發(fā)現(xiàn)算法之前,拓?fù)浒l(fā)現(xiàn)服務(wù)器必須用源地址為某臺交換機的IP地址,向已發(fā)現(xiàn)的所有交換機發(fā)送EchoRequest報文。從而使每臺交換機都有機會學(xué)習(xí)到其他交換機的物理地址。如圖16所示,拓?fù)浒l(fā)現(xiàn)服務(wù)器偽造由自己發(fā)出的ping報文的源地址。例如拓?fù)浒l(fā)現(xiàn)服務(wù)器自己的IP地址是x,交換機的IP地址是y1,y2....yn。服務(wù)器先偽造y1作為ping報文的源地址,y2~yn為目標(biāo)地址,向這n-1臺交換機分別發(fā)送ping報文;因此n-l臺交換機將各自向y1發(fā)送應(yīng)答,而不是向x應(yīng)答;這時y1將會包含y2-yn的MAC地址;立刻采集y1的APR表。然后服務(wù)器再將ping報文的源地址偽造為y2,向y1、y3-yn發(fā)送ping報文,應(yīng)答到來后采集y2的APR表。以此類推,直到服務(wù)器完成偽造ping報文源地址為全部n臺交換機的操作。算法描述如下1.將指針指向交換機隊列的頭部。2.判斷指針當(dāng)前指向的節(jié)點是否到達(dá)交換機隊列的尾部。是,此部分算法結(jié)束;否,繼續(xù)第3步。3.以指針指向的那臺交換機的地址為源地址,交換機隊列中的其它交換機地址為目標(biāo)地址,發(fā)送EchoRequest報文。立刻采集這臺交換機的APR表,盡量得到盡可能多的其他交換機的MAC地址。4.指針指向交換機隊列的下一節(jié)點,并轉(zhuǎn)到第2步。隨后下載每臺交換機的轉(zhuǎn)發(fā)數(shù)據(jù)庫后,對每臺交換機構(gòu)造一個二維鏈表。鏈表每一行的一個節(jié)點,是該行對應(yīng)交換機端口的轉(zhuǎn)發(fā)數(shù)據(jù)庫的內(nèi)容,為網(wǎng)絡(luò)內(nèi)某個設(shè)備接口的物理地址。如圖14所示。然后按照間接連接定理的二個條件,分別檢查是否存在端口間的間接連接。條件一‘FxA和FyB中同時存在著對方的MAC地址’的算法流程圖,如圖17所示。算法描述(1)交換機指針指向交換機隊列頭部。(2)交換機指針是否指向交換機隊列尾部是,退出本算法;否,繼續(xù)。(3)交換機端口指針指向交換機端口隊列頭部。(4)交換機端口指針是否指向交換機端口隊列尾部是,到第12步;否,繼續(xù)。(5)轉(zhuǎn)發(fā)庫指針指向當(dāng)前交換機端口x的轉(zhuǎn)發(fā)數(shù)據(jù)庫隊列頭部。(6)轉(zhuǎn)發(fā)庫指針是否指向轉(zhuǎn)發(fā)庫隊列尾部是,到第11步;否,繼續(xù)。(7)當(dāng)前的轉(zhuǎn)發(fā)表項是否是網(wǎng)絡(luò)中某個交換機端口y的物理地址是,繼續(xù);否,到第10步(8)上一步找到的那個交換機端口的轉(zhuǎn)發(fā)庫中,是否包含本端口x的物理地址是,繼續(xù);否,到第10步。(9)保存兩個端口x和y間存在間接連接關(guān)系。(10)數(shù)據(jù)表項指針指向下一數(shù)據(jù)表項,轉(zhuǎn)第6步。(11)交換機端口指針指向下一交換機端口,轉(zhuǎn)第4步。(12)交換機指針指向下一交換機,轉(zhuǎn)第2步。條件二的算法流程圖,如圖18所示。算法描述1、交換機指針指向交換機隊列頭部。2、交換機指針是否指向交換機隊列尾部是,退出本算法;否,繼續(xù)。3、交換機端口一號指針指向交換機端口隊列頭部。4、交換機端口一號指針是否指向交換機端口隊列尾部是,到第16步;否,繼續(xù)。5、轉(zhuǎn)發(fā)庫指針指向一號指針?biāo)赶蚨藊的轉(zhuǎn)發(fā)數(shù)據(jù)庫隊列頭部。6、轉(zhuǎn)發(fā)庫指針是否指向交換機端口x的轉(zhuǎn)發(fā)庫隊列尾部是,到第15步;否,繼續(xù)。7、當(dāng)前的轉(zhuǎn)發(fā)表項是否是網(wǎng)絡(luò)中某個交換機端口y的物理地址是,繼續(xù);否,到第14步8、創(chuàng)建一個新的交換機端口指針(二號指針),重新指向本交換機的端口隊列頭部。9、交換機端口二號指針是否指向交換機端口隊列尾部是,到第14步,否,繼續(xù)。10、交換機端口二號指針是否與交換機端口一號指針指向的端口序號相同。是,到第12步;否,繼續(xù)。11、交換機端口二號指針的指向端口的轉(zhuǎn)發(fā)數(shù)據(jù)集與y的轉(zhuǎn)發(fā)集是否相交是,到第13步;否,繼續(xù)。12、交換機端口二號指針指向端口隊列中的下一節(jié)點。13、判定兩個端口x和y間存在間接連接關(guān)系。14、數(shù)據(jù)表項指針指向下一數(shù)據(jù)表項,轉(zhuǎn)第6步。15、交換機端口一號指針指向下一交換機端口,轉(zhuǎn)第4步。16、交換機指針指向下一交換機,轉(zhuǎn)第2步。當(dāng)交換機端口的間接連接關(guān)系確定后,就可以判定交換機端口之間直接連接關(guān)系。交換機端口間的間接連接關(guān)系可以以如圖的二維鏈表方式保存。每臺交換機保存這樣一張間接連接關(guān)系表。二維鏈表的每一行隊列,表示的是與該行頭節(jié)點標(biāo)識的交換機端口存在間接連接關(guān)系的端口集合。每一行的頭節(jié)點,構(gòu)成了該交換機的端口隊列。交換機直接鏈接的發(fā)現(xiàn)算法不在圖18所示的數(shù)據(jù)結(jié)構(gòu)上,可以執(zhí)行直接連接定理的判斷算法。算法描述,如圖191、交換機指針指向交換機隊列頭部。2、交換機指針是否指向交換機隊列尾部是,退出本算法;否,繼續(xù)。3、交換機端口指針指向交換機端口隊列頭部。4、交換機端口指針是否指向交換機端口隊列尾部是,到第11步;否,繼續(xù)。5、間接連接指針指向當(dāng)前交換機端口Xi的間接連接隊列頭部。6、間接連接指針是否指向間接連接隊列尾部是,到第10步;否,繼續(xù)。7、當(dāng)前的間接連接表項指示的某個交換機端口Yij的間接連接隊列中是否保留著與Xi的間接連接關(guān)系否,繼續(xù);是,到第9步8、保存兩個端口Xi和Yij間存在間接連接關(guān)系。9、間接連接表指針指向下一間接連接表項Yij+1,轉(zhuǎn)第6步。10、交換機端口指針指向下一交換機端口,轉(zhuǎn)第4步。11、交換機指針指向下一交換機,轉(zhuǎn)第2步。得到交換機端口間的直接連接關(guān)系后,以如圖20的數(shù)據(jù)結(jié)構(gòu)保存。每臺交換機保存一個這樣的鏈表。由于每個交換機端口只可能與一個其他端口直接連接;因此,只需保存如圖20的二元組鏈表。構(gòu)造完交換機直接連接鏈表后,就可以執(zhí)行合并網(wǎng)段的流程了,以下的算法在4.2.1節(jié)中已經(jīng)有過論述。根據(jù)本發(fā)明的基于SNMP拓?fù)浒l(fā)現(xiàn)的結(jié)果拓?fù)浒l(fā)現(xiàn)的結(jié)果是按照父子關(guān)系保存在數(shù)據(jù)庫中的數(shù)據(jù)集合。是經(jīng)過網(wǎng)絡(luò)層拓?fù)浒l(fā)現(xiàn)和數(shù)據(jù)鏈路層拓?fù)浒l(fā)現(xiàn)后的最終結(jié)果。利用上層界面顯示后的結(jié)果如圖21,圖22,圖23所示。權(quán)利要求1.一種基于SNMP的網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)方法,該方法包括建立SNMP網(wǎng)絡(luò)管理運行的環(huán)境的步驟;在目標(biāo)網(wǎng)絡(luò)的每個網(wǎng)絡(luò)節(jié)點上設(shè)置一個管理信息庫MIB(ManageInformationBase)的步驟;網(wǎng)絡(luò)管理進(jìn)程通過應(yīng)用層協(xié)議對SNMP管理信息庫進(jìn)行訪問的步驟;網(wǎng)絡(luò)管理應(yīng)用向網(wǎng)絡(luò)管理進(jìn)程內(nèi)發(fā)出的信息,經(jīng)底層協(xié)議到達(dá)被管理網(wǎng)絡(luò)實體的步驟;網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)方法,其步驟為識別默認(rèn)網(wǎng)關(guān)并確認(rèn)其IP地址,并判斷該默認(rèn)網(wǎng)關(guān)是否為路由設(shè)備;由網(wǎng)關(guān)為拓?fù)浒l(fā)現(xiàn)的起點,進(jìn)行網(wǎng)絡(luò)層拓?fù)浒l(fā)現(xiàn);得到一系列的子網(wǎng)信息,對每個子網(wǎng)進(jìn)行數(shù)據(jù)鏈路層拓?fù)浒l(fā)現(xiàn);其中網(wǎng)絡(luò)層的拓?fù)浒l(fā)現(xiàn),通過獲得拓?fù)浒l(fā)現(xiàn)起點路由器的路由表,根據(jù)路由表的信息,發(fā)現(xiàn)與之直接相連的子網(wǎng)或路由器,并獲得下一跳的路由器地址;針對發(fā)現(xiàn)的下一跳路由器,采集其路由表,以廣度優(yōu)先遍歷的原則,采用與(a)相同的處理方式,不斷發(fā)現(xiàn)新的子網(wǎng)、路由器和網(wǎng)絡(luò)層的鏈路關(guān)系;并遞歸該步驟,直到?jīng)]有新的路由器和子網(wǎng)被發(fā)現(xiàn);基于上述步驟的網(wǎng)絡(luò)層的拓?fù)浒l(fā)現(xiàn)方法,其包括如下步驟(a)識別默認(rèn)網(wǎng)關(guān)并確認(rèn)其IP地址,并判斷該默認(rèn)網(wǎng)關(guān)是否為路由設(shè)備;(b)查找獲取其路由表(c)根據(jù)前一步發(fā)現(xiàn)的路由器的路由表,識別直接連接在路由器上的子網(wǎng);(d)識別網(wǎng)絡(luò)層的子網(wǎng)與路由設(shè)備之間的鏈路,獲取網(wǎng)絡(luò)層拓?fù)浣Y(jié)構(gòu)信息;(e)根據(jù)路由表中標(biāo)識的下一跳地址信息,發(fā)現(xiàn)新的路由器,重復(fù)b、c、d三步,直到發(fā)現(xiàn)不了新的路由器為止;基于上述步驟的數(shù)據(jù)鏈路層的拓?fù)浒l(fā)現(xiàn)方法,包括如下步驟(1)識別當(dāng)前子網(wǎng)的網(wǎng)絡(luò)設(shè)備并獲取其APR緩存表;(2)遍歷子網(wǎng)內(nèi)所有交換機,下載所有交換機的轉(zhuǎn)發(fā)數(shù)據(jù)庫;(3)計算交換機間的直接和間接連接關(guān)系;(4)重新調(diào)整子網(wǎng)內(nèi)的網(wǎng)段,把網(wǎng)段和交換機的連接關(guān)系構(gòu)造成鏈路對象,添加到子網(wǎng)的2層連接對象鏈表L2ConnList中。2.如權(quán)利要求1所述網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)方法,其中網(wǎng)絡(luò)層的拓?fù)浒l(fā)現(xiàn)的步驟(a)包括訪問拓?fù)浒l(fā)現(xiàn)程序所在計算機的SNMPMIBII中的ipRouteTable,如果發(fā)現(xiàn)有ipRouteDest值為0.0.0.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è)備,否則不是。3.如權(quán)利要求1所述網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)方法,其中所述的網(wǎng)絡(luò)層的拓?fù)浒l(fā)現(xiàn)的步驟(b)包括查詢路由器MIBII的IP管理組中管理對象ipRouteDest下的所有對象,ipRouteType字段的值,若該值為3,則表明這條路由為直接路由,若該值為4,則為間接路由;根據(jù)直接相連的網(wǎng)絡(luò)號及其網(wǎng)絡(luò)掩碼(ipRouteMask),得到子網(wǎng)的地址范圍。4.如權(quán)利要求1所述網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)方法,其中所述的網(wǎng)絡(luò)層的拓?fù)浒l(fā)現(xiàn)的步驟(c)包括查詢默認(rèn)網(wǎng)關(guān)MIBII的IP管理組路由表中類型為間接路由的路由表項,得到路由的下一跳地址(ipRouteNextHop),利用遞歸方法搜索下一跳的路由設(shè)備的路由表,根據(jù)該路由表確定與該路由器存在連接關(guān)系的路由設(shè)備。5.如權(quán)利要求1所述網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)方法,其中所述的網(wǎng)絡(luò)層的拓?fù)浒l(fā)現(xiàn)的步驟(d)包括在發(fā)現(xiàn)與路由器直接相連的子網(wǎng)時利用SNMP協(xié)議得到子網(wǎng)和路由器的連接關(guān)系的步驟。6.如權(quán)利要求1所述網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)方法,其中數(shù)據(jù)鏈路層的拓?fù)浒l(fā)現(xiàn)步驟中所述識別當(dāng)前子網(wǎng)的網(wǎng)絡(luò)設(shè)備是通過特定的MIB組進(jìn)行判別實現(xiàn)的,其判斷標(biāo)準(zhǔn)如下如果MIB組中的ipForwarding對象(OID號為“1.3.6.1.2.1.4.1”)值為1,判定該設(shè)備為路由器;如果MIB組中的dotldFdpTable組(OID號為1.3.6.1.2.1.17.4.3)為非空,判斷該設(shè)備為交換機;如果MIB組中的printmib組(OID號為1.3.6.1.2.1.43)為非空,則判斷該設(shè)備為打印機。7.如權(quán)利要求1所述網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)方法,其中數(shù)據(jù)鏈路層的拓?fù)浒l(fā)現(xiàn)中所述獲取其物理地址的步驟包括通過MIB組的IpNetToMedia組(OID號為1.3.6.1.2.1.4.22)獲得該路由器的IP報文所對應(yīng)的物理地址的映射表。8.如權(quán)利要求1所述網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)方法,其中所述的數(shù)據(jù)鏈路層的拓?fù)浒l(fā)現(xiàn)步驟中計算交換機間的直接和間接連接關(guān)系是通過以下準(zhǔn)則進(jìn)行判斷的設(shè)交換機A在x端口上學(xué)習(xí)到的MAC地址的集合為FxA,交換機B在y端口上學(xué)習(xí)到的MAC地址的集合為FyB;若FxA和FyB中同時存在著對方的MAC地址;或FxA中存在B的MAC地址,并且A上存在一個端口k(k≠x),使得FyB∩FkA≠ф;則可確定交換機A和B通過x和y端口間接相連,并建立間接連接表;并通過所得到的間接連接表進(jìn)一步計算是否為直接連接,其步驟包括查驗當(dāng)前交換機端口(Xi)的間接連接表項指示的某個交換機端口(Yij)的間接連接隊列,若Xi與Yij存在間接連接關(guān)系,而Yij與Xi不存在間接連接關(guān)系,則判斷當(dāng)前交換機端口(Xi)與某個交換機端口(Yij)直接連接。9.如權(quán)利要求1所述網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)方法,其中數(shù)據(jù)鏈路層的拓?fù)浒l(fā)現(xiàn)所述的計算交換機間的直接和間接連接關(guān)系判斷方法,包括(1)發(fā)現(xiàn)服務(wù)器偽造拓?fù)浒l(fā)現(xiàn)服務(wù)器先以某一交換機地址作為ping報文的源地址,向交換機分別發(fā)送ping報文;交換機發(fā)送應(yīng)答;拓?fù)浒l(fā)現(xiàn)服務(wù)器采集的各交換機的APR表,得到盡量多交換機的MAC地址;(2)拓?fù)浒l(fā)現(xiàn)服務(wù)器下載每臺交換機的轉(zhuǎn)發(fā)數(shù)據(jù)庫后,對每臺交換機構(gòu)造一個二維鏈表,來標(biāo)識交換機端口和轉(zhuǎn)發(fā)數(shù)據(jù)庫表項的對應(yīng)關(guān)系。全文摘要一種基于SNMP協(xié)議的自動地發(fā)現(xiàn)網(wǎng)絡(luò)的物理布局以及連接關(guān)系的IP網(wǎng)絡(luò)拓?fù)涞陌l(fā)現(xiàn)方法。該方法包括如下步驟建立SNMP網(wǎng)絡(luò)管理運行的環(huán)境;在目標(biāo)網(wǎng)絡(luò)的每個網(wǎng)絡(luò)節(jié)點上設(shè)置一個管理信息庫(MIB);網(wǎng)絡(luò)管理進(jìn)程通過應(yīng)用層協(xié)議對SNMP管理信息庫進(jìn)行訪問;網(wǎng)絡(luò)管理應(yīng)用向網(wǎng)絡(luò)管理進(jìn)程內(nèi)發(fā)出的信息,經(jīng)底層協(xié)議到達(dá)被管理網(wǎng)絡(luò)實體;網(wǎng)絡(luò)層的拓?fù)浒l(fā)現(xiàn);數(shù)據(jù)鏈路層的拓?fù)浒l(fā)現(xiàn)。在網(wǎng)絡(luò)管理中,采用本發(fā)明的方法可探測網(wǎng)絡(luò)層及數(shù)據(jù)鏈路層的拓?fù)浣Y(jié)構(gòu),獲取和維護網(wǎng)絡(luò)節(jié)點的存在性信息和連接關(guān)系信息,并繪制出整個網(wǎng)絡(luò)拓?fù)鋱D。網(wǎng)管人員通過拓?fù)浣Y(jié)構(gòu)信息可對網(wǎng)絡(luò)故障進(jìn)行定位,發(fā)現(xiàn)網(wǎng)絡(luò)瓶頸,從而優(yōu)化整個網(wǎng)絡(luò)。文檔編號H04L29/06GK1756189SQ20041008113公開日2006年4月5日申請日期2004年9月30日優(yōu)先權(quán)日2004年9月30日發(fā)明者沈曾偉,李未,郎昕培,周剛申請人:北京航空航天大學(xué)