本發(fā)明涉及計(jì)算機(jī)網(wǎng)絡(luò)通信,具體的講是跨網(wǎng)絡(luò)的動(dòng)態(tài)拓?fù)渚S護(hù)方法。
背景技術(shù):
隨著通信和計(jì)算機(jī)技術(shù)的不斷發(fā)展,計(jì)算機(jī)網(wǎng)絡(luò)在人們生活中應(yīng)用非常廣泛,對(duì)社會(huì)的發(fā)展起著越來(lái)越重要的作用。網(wǎng)絡(luò)中的設(shè)備數(shù)量和種類(lèi)逐漸增多,網(wǎng)絡(luò)規(guī)模越來(lái)越大,使得網(wǎng)絡(luò)管理越來(lái)越復(fù)雜。動(dòng)態(tài)拓?fù)渚S護(hù)方法作為網(wǎng)絡(luò)管理的基礎(chǔ),不僅能夠發(fā)現(xiàn)網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu),還能夠?yàn)榫W(wǎng)絡(luò)的故障管理、性能管理以及配置管理等提供支持。動(dòng)態(tài)拓?fù)渚S護(hù)方法能夠動(dòng)態(tài)、全面的顯示管理網(wǎng)絡(luò)的運(yùn)行情況,管理者能夠更加容易監(jiān)控和維護(hù)指定的網(wǎng)絡(luò)。
跨網(wǎng)絡(luò)的動(dòng)態(tài)拓?fù)渚S護(hù),指的是動(dòng)態(tài)維護(hù)指定網(wǎng)絡(luò)的拓?fù)洌O(jiān)控一個(gè)指定的網(wǎng)絡(luò)中的所有設(shè)備節(jié)點(diǎn)如主機(jī)、交換機(jī)以及路由器等找出來(lái)。通過(guò)分析設(shè)備中的信息如路由表、ARP表等,得到設(shè)備節(jié)點(diǎn)之間的連接情況。常用的拓?fù)渚S護(hù)方法主要有:基于DNS協(xié)議的網(wǎng)絡(luò)拓?fù)渚S護(hù)、基于RIP協(xié)議的網(wǎng)絡(luò)拓?fù)渚S護(hù)、基于OSPF協(xié)議的網(wǎng)絡(luò)拓?fù)渚S護(hù)以及基于ICMP協(xié)議的網(wǎng)絡(luò)拓?fù)渚S護(hù)等。基于DNS協(xié)議的網(wǎng)絡(luò)拓?fù)渚S護(hù)方法,主要利用DNS服務(wù)器中的域名到IP地址的映射獲取主機(jī)信息?;赗IP協(xié)議的網(wǎng)絡(luò)拓?fù)渚S護(hù)方法主要通過(guò)獲取路由表信息,得到路由器連接的設(shè)備與子網(wǎng)絡(luò),遍歷路由器連接的路由器,一直遞歸下去,直到遍歷完整個(gè)網(wǎng)絡(luò)?;贠SPF協(xié)議的網(wǎng)絡(luò)拓?fù)渚S護(hù)方法與RIP類(lèi)似,都是通過(guò)獲取和分析路由表信息,得到網(wǎng)絡(luò)中的設(shè)備信息以及設(shè)備的連接情況。基于ICMP協(xié)議的網(wǎng)絡(luò)拓?fù)渚S護(hù)使用ping和traceroute命令實(shí)現(xiàn),測(cè)試一個(gè)IP段里面的主機(jī)是否可達(dá),監(jiān)控和維護(hù)ip段內(nèi)網(wǎng)絡(luò)拓?fù)淝闆r。
上面幾種網(wǎng)絡(luò)拓?fù)渚S護(hù)方法,有著不同的應(yīng)用場(chǎng)景,且運(yùn)行效率、拓?fù)渚S護(hù)的正確率也存在不同程度的缺陷。主要表現(xiàn)在網(wǎng)絡(luò)負(fù)載、拓?fù)浣Y(jié)構(gòu)的正確性、發(fā)現(xiàn)拓?fù)浣Y(jié)構(gòu)的速度以及適用性等方面。如基于DNS協(xié)議的方法網(wǎng)絡(luò)負(fù)載低,但正確率較低?;赗IP協(xié)議的方法正確率較高,只是用于較少網(wǎng)絡(luò)?;贠SPF協(xié)議的方法正確率高,網(wǎng)絡(luò)負(fù)載也很高?;贗CMP協(xié)議的方法網(wǎng)絡(luò)負(fù)載較高且運(yùn)行速度緩慢。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供了一種跨網(wǎng)絡(luò)的動(dòng)態(tài)拓?fù)渚S護(hù)方法,使針對(duì)各種類(lèi)型的網(wǎng)絡(luò)都可以保證正確率和網(wǎng)絡(luò)負(fù)載低的方式進(jìn)行動(dòng)態(tài)拓?fù)渚S護(hù)。
本發(fā)明跨網(wǎng)絡(luò)的動(dòng)態(tài)拓?fù)渚S護(hù)方法,包括:
A.在指定網(wǎng)絡(luò)中根據(jù)主機(jī)路由表信息,獲取默認(rèn)網(wǎng)關(guān)路由器,將默認(rèn)網(wǎng)關(guān)路由器放入路由器隊(duì)列中;
B.獲取所述路由器隊(duì)列中的一個(gè)路由器對(duì)象,作為當(dāng)前路由器,遍歷當(dāng)前路由器的路由表信息,得到與其連接的子網(wǎng)和/或相鄰的路由器;
C.對(duì)步驟B獲取的路由器進(jìn)行判重處理;
D.對(duì)所述路由器隊(duì)列中的所有路由器對(duì)象執(zhí)行步驟B和C;
E.遍歷路由器隊(duì)列中的路由器對(duì)象后,獲取網(wǎng)絡(luò)中路由器和子網(wǎng)的拓?fù)湫畔ⅰ?/p>
進(jìn)一步的,步驟B中,根據(jù)當(dāng)前路由器的路由表信息獲取路由表當(dāng)前表項(xiàng)的下一跳地址,根據(jù)下一跳地址是否為直接交付分別處理。
具體來(lái)講,如果所述下一跳地址為直接交付,即下一跳地址為一個(gè)子網(wǎng)地址,則將所述下一跳地址關(guān)聯(lián)為子網(wǎng)對(duì)象;如果下一跳地址為間接交付,即下一跳地址為路由器,則判斷該路由器是否已經(jīng)遍歷過(guò),如果已經(jīng)遍歷過(guò)該路由器,更新當(dāng)前路由器和該路由器的連接信息,否則將該路由器放入路由器隊(duì)列中;判斷完下一跳地址的交付屬性后,繼續(xù)遍歷路由器表項(xiàng),直到遍歷完成。
進(jìn)一步的,步驟C的判重處理可避免對(duì)相同的路由器進(jìn)行重復(fù)遍歷,這樣能夠進(jìn)一步提高拓?fù)渑袛嗟恼_性,并且改善系統(tǒng)的運(yùn)行時(shí)間。步驟C所述的判重處理,是通過(guò)遍歷所述路由器隊(duì)列,獲取各路由器對(duì)象的路由表,如果路由器對(duì)象的路由表中有所獲取路由器對(duì)象的下一跳IP,則該路由器對(duì)象已經(jīng)遍歷過(guò),并將其從路由器隊(duì)列刪除后,否則將該路由器對(duì)象保持在路由器隊(duì)列中。
在此基礎(chǔ)上,步驟A還包括設(shè)置最大跳數(shù)閾值,表示了從起始路由器開(kāi)始到達(dá)目的路由器所經(jīng)過(guò)的路由器數(shù)目。如果在遍歷中到達(dá)了最大跳數(shù)閾值路由器隊(duì)列還沒(méi)有遍歷完,說(shuō)明網(wǎng)絡(luò)規(guī)模較大,在指定路由器跳數(shù)內(nèi)無(wú)法完整的發(fā)現(xiàn)指定網(wǎng)絡(luò)的網(wǎng)絡(luò)拓?fù)洌瑒t停止遍歷路由器隊(duì)列,繼續(xù)執(zhí)行下一個(gè)步驟。
為了使本發(fā)明的動(dòng)態(tài)拓?fù)渚S護(hù)方法能夠具有良好的跨網(wǎng)絡(luò)行,優(yōu)選的是在動(dòng)態(tài)拓?fù)渚S護(hù)中通過(guò)SNMP協(xié)議(簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議)進(jìn)行網(wǎng)絡(luò)通信。
本發(fā)明跨網(wǎng)絡(luò)的動(dòng)態(tài)拓?fù)渚S護(hù)方法,不僅能夠?qū)崟r(shí)監(jiān)控網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),有效降低網(wǎng)絡(luò)負(fù)載,并且拓?fù)浣Y(jié)構(gòu)的維護(hù)過(guò)程運(yùn)行速度快。明顯提高了網(wǎng)絡(luò)系統(tǒng)的拓?fù)渑袛嗾_性,滿(mǎn)足了網(wǎng)絡(luò)管理自動(dòng)監(jiān)控和維護(hù)指定網(wǎng)絡(luò)拓?fù)涞男枨蟆?/p>
以下結(jié)合實(shí)施例的具體實(shí)施方式,對(duì)本發(fā)明的上述內(nèi)容再作進(jìn)一步的詳細(xì)說(shuō)明。但不應(yīng)將此理解為本發(fā)明上述主題的范圍僅限于以下的實(shí)例。在不脫離本發(fā)明上述技術(shù)思想情況下,根據(jù)本領(lǐng)域普通技術(shù)知識(shí)和慣用手段做出的各種替換或變更,均應(yīng)包括在本發(fā)明的范圍內(nèi)。
附圖說(shuō)明
圖1為實(shí)施例中拓?fù)浣Y(jié)構(gòu)示意圖。
圖2為本發(fā)明跨網(wǎng)絡(luò)的動(dòng)態(tài)拓?fù)渚S護(hù)方法的流程圖。
圖3為圖2中判重處理的流程圖。
具體實(shí)施方式
通常一個(gè)網(wǎng)絡(luò)由不同的通信設(shè)備組成,如主機(jī)、路由器、交換機(jī)以及網(wǎng)橋等設(shè)備。設(shè)備之間相互連接,通過(guò)通信協(xié)議進(jìn)行通信。網(wǎng)絡(luò)拓?fù)渚S護(hù)就是監(jiān)控和維護(hù)網(wǎng)絡(luò)所有的通信設(shè)備,以及設(shè)備之間的連接情況。
如圖1所示的網(wǎng)絡(luò)模型,在這個(gè)網(wǎng)絡(luò)模型中有5臺(tái)主機(jī),分別用H1~H5表示,4臺(tái)路由器,分別用R1~R4表示,4個(gè)子網(wǎng)絡(luò),分別用N1~N4表示。
本實(shí)施例是從該網(wǎng)絡(luò)的主機(jī)H1開(kāi)始,最后完成整個(gè)網(wǎng)絡(luò)的拓?fù)浔O(jiān)控和維護(hù)。
如圖2所示本發(fā)明的跨網(wǎng)絡(luò)的動(dòng)態(tài)拓?fù)渚S護(hù)方法,步驟為:
A.在SNMP協(xié)議基礎(chǔ)上,獲取所述網(wǎng)絡(luò)模型中的默認(rèn)網(wǎng)關(guān),構(gòu)造路由器隊(duì)列。同時(shí)設(shè)置能夠發(fā)現(xiàn)的最大路由器跳數(shù)。
圖1中,主機(jī)H1使用SNMP協(xié)議的get-request操作獲取主機(jī)H1的IP路徑表。通過(guò)獲取所述IP路徑表中的內(nèi)容,得到主機(jī)H1的默認(rèn)網(wǎng)關(guān)為路由器R1。初始化路由器隊(duì)列,并將路由器R1放到路由器隊(duì)列中作為一個(gè)路由器對(duì)象。同樣的方法在路由器隊(duì)列中放入路由器R2~R4的路由器對(duì)象。其中每個(gè)路由器對(duì)象有一個(gè)IpList(路由表)對(duì)象,用于存放該路由器各個(gè)端口對(duì)應(yīng)的IP地址。
B.對(duì)路由器隊(duì)列進(jìn)行遍歷。獲取當(dāng)前隊(duì)列中的一個(gè)路由器對(duì)象作為當(dāng)前路由器對(duì)象。例如第一次遍歷時(shí)當(dāng)前路由器對(duì)象為路由器R1。然后遍歷當(dāng)前路由器對(duì)象(路由器R1)的路由表信息,獲取當(dāng)前路由器對(duì)象的每一條路由表表項(xiàng),即下一跳地址。例如圖1中,當(dāng)前路由器對(duì)象為路由器R1時(shí),下一跳地址分別為路由器R3和子網(wǎng)N1的地址。
根據(jù)當(dāng)前路由器對(duì)象的下一跳地址是否為直接交付分別處理:如果路由表中下一跳的ipRouteType字段的值表示為直接交付,則說(shuō)明目標(biāo)所在地址直接與當(dāng)前路由器對(duì)象相連,即下一跳地址是一個(gè)子網(wǎng)。構(gòu)造子網(wǎng)對(duì)象,設(shè)置子網(wǎng)信息,如子網(wǎng)掩碼等,并關(guān)聯(lián)到當(dāng)前路由器的網(wǎng)絡(luò)接口上。如遍歷到路由器R1時(shí),子網(wǎng)N1中的數(shù)據(jù)包為直接交付,則構(gòu)造子網(wǎng)對(duì)象N1,并將其關(guān)聯(lián)到路由器R1對(duì)象的網(wǎng)絡(luò)接口上。
如果當(dāng)前路由器對(duì)象的路由表中下一跳的ipRouteType字段的值表示為間接交付,說(shuō)明目標(biāo)地址所在的子網(wǎng)不是直接與當(dāng)前路由器相連的,必須至少再經(jīng)過(guò)一個(gè)路由器。即當(dāng)前路由器下一跳地址為一個(gè)路由器對(duì)象。判斷下一跳的路由器對(duì)象是否遍歷過(guò),如遍歷到路由器R3,下一跳地址包括路由器R1、路由器R2和路由器R4。這時(shí)判斷下一跳的路由器是否已經(jīng)遍歷過(guò),如果已經(jīng)遍歷過(guò),更新路由器表之間的的連接信息。如繼續(xù)遍歷到路由器R2時(shí),下一跳路由器地址為路由器R3。由于路由器R3之前已經(jīng)遍歷過(guò),不需要再遍歷,便設(shè)置路由器R2的相鄰路由器為路由器R3,即更新路由器之間的連接信息。連接信息更新完后,繼續(xù)遍歷當(dāng)前路由器對(duì)象的路由表。
如果下一跳是沒(méi)有遍歷過(guò)的路由器,則將該路由器對(duì)象放到路由器隊(duì)列中。
C.對(duì)下一跳路由器對(duì)象進(jìn)行判重處理,判斷下一跳路由器是否遍歷過(guò),避免重復(fù)遍歷。路由器判重處理如圖3所示:
C1:遍歷路由器隊(duì)列,獲取路由器隊(duì)列的第一個(gè)路由器對(duì)象為當(dāng)前路由器對(duì)象。
C2:判斷路由器隊(duì)列中每個(gè)路由器對(duì)象的路由表是否包含所獲取路由器對(duì)象的下一跳IP。
C3:如果某一路由器對(duì)象的路由表包含所獲取路由器對(duì)象的下一跳IP,說(shuō)明該路由器對(duì)象已經(jīng)遍歷過(guò),繼續(xù)遍歷其它路由器對(duì)象的路由表信息。
C4:如果某一路由器對(duì)象的路由表不包含所獲取路由器對(duì)象的下一跳IP,說(shuō)明該路由器對(duì)象沒(méi)有遍歷過(guò),構(gòu)造新的路由器對(duì)象R,獲取路由器的端口IP表,構(gòu)造路由器對(duì)象R的路由表。使用端口IP表內(nèi)容填充路由器對(duì)象R的路由表中。將構(gòu)造好的路由器對(duì)象R添加到路由器隊(duì)列最后。
D.判斷路由器隊(duì)列中是否還有沒(méi)有遍歷的路由器對(duì)象。如果還有沒(méi)有遍歷的路由器對(duì)象則重復(fù)執(zhí)行步驟B和C,繼續(xù)對(duì)路由器隊(duì)列中的路由器對(duì)象進(jìn)行遍歷。
如果遍歷次數(shù)到達(dá)設(shè)定的最大跳數(shù)閾值路由器隊(duì)列還沒(méi)有遍歷完,停止遍歷路由器隊(duì)列。說(shuō)明網(wǎng)絡(luò)規(guī)模較大,在指定路由器跳數(shù)內(nèi)無(wú)法完整的發(fā)現(xiàn)指定網(wǎng)絡(luò)的網(wǎng)絡(luò)拓?fù)洹?/p>
E.完成對(duì)路由器隊(duì)列遍歷后,即獲取到網(wǎng)絡(luò)拓?fù)渲械穆酚善餍畔⒑妥泳W(wǎng)信息等,以及獲取到子網(wǎng)中活動(dòng)主機(jī)的信息。
至此,完了對(duì)指定網(wǎng)絡(luò)的網(wǎng)絡(luò)拓?fù)浔O(jiān)控。其中節(jié)點(diǎn)、子網(wǎng)以及節(jié)點(diǎn)之間的連接信息,存放在路由器對(duì)象、子網(wǎng)對(duì)象以及主機(jī)對(duì)象中??梢酝ㄟ^(guò)控制臺(tái)輸出顯示出來(lái),也可以通過(guò)圖形化表示出來(lái)。