本發(fā)明涉及計算機(jī)網(wǎng)絡(luò)子網(wǎng)識別領(lǐng)域,尤其涉及面向分布式網(wǎng)絡(luò)仿真平臺中虛擬化網(wǎng)絡(luò)子網(wǎng)識別和節(jié)點地址分配相關(guān)領(lǐng)域,具體為一種基于網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)的可擴(kuò)展的子網(wǎng)識別方法。
背景技術(shù):
在傳統(tǒng)的計算機(jī)網(wǎng)絡(luò)環(huán)境中,為網(wǎng)絡(luò)中節(jié)點分配ip地址的方法最初是根據(jù)網(wǎng)絡(luò)節(jié)點的數(shù)量分配有類ip地址。但隨著ip地址短缺的情況越來越嚴(yán)重,開始將一個有類的網(wǎng)絡(luò)地址劃分成若干個小的網(wǎng)段,將這些小的網(wǎng)段稱為子網(wǎng)。此時的ip地址分配方法也變成了首先找到網(wǎng)絡(luò)中的所有子網(wǎng)并根據(jù)子網(wǎng)中節(jié)點的數(shù)量確定子網(wǎng)掩碼的位數(shù),然后為每個子網(wǎng)分配一個專門的網(wǎng)段。子網(wǎng)的存在能夠縮減網(wǎng)絡(luò)流量、優(yōu)化網(wǎng)絡(luò)性能、簡化管理、靈活地形成大規(guī)模網(wǎng)絡(luò)。
在分布式網(wǎng)絡(luò)仿真平臺中,虛擬網(wǎng)絡(luò)的規(guī)模少則上千節(jié)點,多則千萬甚至上億節(jié)點,如何為虛擬網(wǎng)絡(luò)合理分配ip地址成為問題。而解決該問題的關(guān)鍵就在于子網(wǎng)識別,通過找到所有子網(wǎng),并根據(jù)每個子網(wǎng)中需要分配ip地址的網(wǎng)卡數(shù)量,即可完成分布式網(wǎng)絡(luò)仿真平臺中的虛擬網(wǎng)絡(luò)ip地址分配。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于提供一種面向分布式網(wǎng)絡(luò)仿真平臺的子網(wǎng)識別方法,以提高ip地址利用率和ip地址分配效率,確保ip地址分配在支持節(jié)點網(wǎng)絡(luò)類型和節(jié)點連接關(guān)系方面靈活可擴(kuò)展,解決分布式網(wǎng)絡(luò)仿真平臺中ip地址合理且高效分配的問題。
為解決上述技術(shù)問題,本發(fā)明采用如下技術(shù)方案:
一種面向分布式網(wǎng)絡(luò)仿真平臺的子網(wǎng)識別方法,步驟包括:
1.預(yù)處理階段:
根據(jù)輸入文件中所含的每塊網(wǎng)卡的對端節(jié)點的nodeid(節(jié)點編號)找到對端網(wǎng)卡的interfaceid(網(wǎng)卡編號),并將該interfaceid寫入該文件中;
2.子網(wǎng)識別階段:
2-1.讀取經(jīng)上述步驟處理的輸入文件,獲取所有節(jié)點的網(wǎng)絡(luò)類型及網(wǎng)卡信息;
2-2.從節(jié)點的網(wǎng)絡(luò)類型及網(wǎng)卡信息中獲取每條鏈路的兩端節(jié)點的網(wǎng)絡(luò)類型,識別兩端網(wǎng)卡所屬的子網(wǎng)。
進(jìn)一步地,步驟1)具體方法為:
1.遍歷輸入文件中每塊網(wǎng)卡,獲取當(dāng)前節(jié)點nodeid及其網(wǎng)卡interfaceid和對端節(jié)點nodeid,并根據(jù)當(dāng)前節(jié)點nodeid和對端節(jié)點nodeid組成的字符串(當(dāng)前節(jié)點nodeid在前,對端節(jié)點nodeid在后,中間以逗號分隔)作為索引關(guān)鍵字,以當(dāng)前網(wǎng)卡interfaceid作為對應(yīng)值,存儲于名為nismap的map中(此處及后面出現(xiàn)的map為計算機(jī)編程語言c++中的stl容器);
2.再次遍歷每塊網(wǎng)卡,根據(jù)每一網(wǎng)卡中當(dāng)前節(jié)點nodeid和對端節(jié)點nodeid組成的字符串(對端節(jié)點nodeid在前,當(dāng)前節(jié)點nodeid在后,中間以逗號分隔)創(chuàng)建索引關(guān)鍵字,從nismap中找到對端節(jié)點的interfaceid;將從當(dāng)前網(wǎng)卡中獲取的linknode指針地址作為關(guān)鍵字,對端節(jié)點的interfaceid作為對應(yīng)值的鍵值對存儲于名為linknodes的map中;
3.遍歷linknodes中的每個鍵值對,獲取其關(guān)鍵字linknode及對應(yīng)值,為每個linknode創(chuàng)建屬性dst_if(目的網(wǎng)卡編號)。
進(jìn)一步地,輸入文件為以xml格式描述的拓?fù)湮募?/p>
進(jìn)一步地,步驟2-1中獲取網(wǎng)絡(luò)類型信息的方法是:注冊節(jié)點類型識別器,根據(jù)每個節(jié)點的xml格式nodename找到該節(jié)點的網(wǎng)絡(luò)類型。
進(jìn)一步地,網(wǎng)絡(luò)類型包括:主機(jī)、服務(wù)器、交換機(jī)、路由器、防火墻、入侵防御系統(tǒng)(ips,intrusionpreventionsystem)、入侵檢測系統(tǒng)(ids,intrusiondetectionsystems)以及其他后期根據(jù)需要添加的新節(jié)點網(wǎng)絡(luò)類型。
進(jìn)一步地,步驟2-2中識別子網(wǎng)的方法是:注冊子網(wǎng)識別器,根據(jù)每條鏈路兩端節(jié)點的網(wǎng)絡(luò)類型找到對應(yīng)的子網(wǎng)識別器。
進(jìn)一步地,將獲取的節(jié)點信息保存到名為nodemap的map中,將獲得的網(wǎng)卡信息保存到名為interfacemap的map中。
與現(xiàn)有方法相比,本方法的創(chuàng)新之處在于:針對分布式網(wǎng)絡(luò)仿真平臺中虛擬網(wǎng)絡(luò)拓?fù)涞慕Y(jié)構(gòu)信息,實現(xiàn)在節(jié)點網(wǎng)絡(luò)類型和節(jié)點連接關(guān)系方面靈活擴(kuò)展的子網(wǎng)識別方法,具體體現(xiàn)在:
1.本方法只需要在輸入文件中增加針對新增節(jié)點網(wǎng)絡(luò)類型的識別接口,即可實現(xiàn)新節(jié)點網(wǎng)絡(luò)類型的支持,對于節(jié)點連接關(guān)系同理,增加節(jié)點連接關(guān)系的子網(wǎng)查找接口(子網(wǎng)識別器)并實現(xiàn)簡單的處理即可完成新增節(jié)點連接關(guān)系的支持。
2.針對分布式網(wǎng)絡(luò)仿真平臺中支持的虛擬網(wǎng)絡(luò)規(guī)模從個位數(shù)到上億這個范圍,本方法將子網(wǎng)識別過程的時間復(fù)雜度從o(n2)降為o(nlogn)級別,有效降低了處理過程對虛擬網(wǎng)絡(luò)規(guī)模的敏感性,處理時間也明顯縮短。
本方法解決了分布式網(wǎng)絡(luò)仿真平臺環(huán)境中虛擬網(wǎng)絡(luò)的子網(wǎng)識別問題,并為虛擬網(wǎng)絡(luò)ip地址自動分配提供了直接結(jié)果。當(dāng)然子網(wǎng)劃分的結(jié)果也可以用于其他方面,而不是局限于網(wǎng)絡(luò)節(jié)點ip地址分配。在網(wǎng)絡(luò)拓?fù)湟?guī)模較大或者非常大的情況下,本方法仍然能夠高效地完成子網(wǎng)識別處理過程,經(jīng)測試,在分布式網(wǎng)絡(luò)仿真平臺中,十萬節(jié)點的拓?fù)淦渥泳W(wǎng)識別處理過程耗時僅為數(shù)秒。在擴(kuò)展性方面,本方法能夠通過簡單的擴(kuò)展,即可支持新的節(jié)點網(wǎng)絡(luò)類型或者節(jié)點連接關(guān)系,在分布式網(wǎng)絡(luò)仿真平臺的完善過程中,這點尤為重要。
附圖說明
圖1為實施例中的子網(wǎng)識別方法流程圖。
圖2為判斷鏈路兩端網(wǎng)絡(luò)類型并進(jìn)行子網(wǎng)識別的流程圖。
具體實施方式
為使本發(fā)明的上述特征和優(yōu)點能更明顯易懂,下文特舉實施例,并配合所附圖作詳細(xì)說明如下。
本實施例提供一種面向分布式網(wǎng)絡(luò)仿真平臺的子網(wǎng)識別方法,其實際處理過程分為兩個階段:第一個階段為預(yù)處理階段,此階段解決輸入文件中節(jié)點之間連接關(guān)系的查找問題;第二個階段為子網(wǎng)識別階段,此階段根據(jù)預(yù)處理的結(jié)果,找到給定拓?fù)渲兴泄?jié)點的所有網(wǎng)卡以及網(wǎng)卡之間的連接關(guān)系信息,并根據(jù)這兩部分信息,針對每條鏈路兩端網(wǎng)卡所屬節(jié)點網(wǎng)絡(luò)類型的不同,為這些網(wǎng)卡找到所屬的子網(wǎng),如圖1所示。
本方法的輸入文件為拓?fù)湮募詘ml格式描述,交換機(jī)的描述格式如下:
主機(jī)的描述格式如下所示:
路由器節(jié)點的拓?fù)涓袷饺缦滤荆?/p>
一、預(yù)處理階段
由于輸入文件中只給出了每個節(jié)點的網(wǎng)卡連接的某個對端節(jié)點nodeid,但并未給出對端網(wǎng)卡interfaceid。預(yù)處理階段根據(jù)每塊網(wǎng)卡的對端節(jié)點nodeid,找到其對端網(wǎng)卡的interfaceid,并將此信息寫入輸入文件中對應(yīng)的網(wǎng)卡中。也就是在<linktype="emu_switch">405703</link>這個xml標(biāo)簽中添加一個屬性dst_if,修改之后為<linktype="emu_switch"dst_if="0">405703</link>。如此,能夠減少后續(xù)處理過程中對端網(wǎng)卡interfaceid的查找時間。
預(yù)處理階段分為三個步驟:
第一步,掃描輸入文件中的所有interface的xml標(biāo)簽,獲取每塊網(wǎng)卡的nodeid、interfaceid和對端節(jié)點的nodeid,并將兩節(jié)點nodeid作為索引,網(wǎng)卡interfaceid作為數(shù)據(jù)存儲到內(nèi)存中,處理過程如下偽代碼描述:
第二步,遍歷所有interface節(jié)點,同樣獲取當(dāng)前網(wǎng)卡的nodeid、interfaceid和對端節(jié)點的nodeid,以和第一步相反的順序,即對端節(jié)點nodeid和當(dāng)前節(jié)點nodeid組成的字符串從nismap中找到對端節(jié)點的interfaceid,以當(dāng)前節(jié)點的linknode指針地址為關(guān)鍵字,對端節(jié)點的interface為值,存儲到linknodes(map)中。
第三步,遍歷linknodes這個map,為每個linknode創(chuàng)建屬性“dst_if,值為linknode關(guān)鍵字在linknodes中對應(yīng)的值。
二、子網(wǎng)識別階段
從上述預(yù)處理之后的拓?fù)湮募姓业剿械墓?jié)點和網(wǎng)卡,根據(jù)節(jié)點和網(wǎng)卡信息恢復(fù)節(jié)點連接關(guān)系。從網(wǎng)絡(luò)拓?fù)鋱D的角度而言,每兩塊網(wǎng)卡之間的連線作為圖中的一條邊(鏈路),每條邊及其兩端網(wǎng)卡都只能屬于某一個子網(wǎng)。每條邊的兩端節(jié)點網(wǎng)絡(luò)類型都是不同的,當(dāng)一條邊的某一個端點為終端節(jié)點,那么這條邊中的另外一個端點應(yīng)該是網(wǎng)絡(luò)的中間節(jié)點(交換機(jī)或者路由器,或者類似功能的節(jié)點)。換言之,本方法要求拓?fù)渲兴薪K端節(jié)點之間必須通過中間節(jié)點來連接,否則,兩個終端節(jié)點直連,只能兩點之間通信,無法組成網(wǎng)絡(luò)。
定義兩個實體對象,interface表示網(wǎng)絡(luò)中節(jié)點的網(wǎng)卡,包含網(wǎng)卡的所有有效信息;subnet表示子網(wǎng),是以interface為組成元素,二者是一對多的關(guān)系,即每個interface只能屬于一個subnet,每個subnet會包含多個interface。二者的結(jié)構(gòu)定義如下:
第一步,注冊節(jié)點類型識別器,根據(jù)每個節(jié)點的xml格式nodename找到這個節(jié)點的實際網(wǎng)絡(luò)類型;注冊子網(wǎng)識別器,根據(jù)每條鏈路兩端節(jié)點的網(wǎng)絡(luò)類型,找到對應(yīng)的子網(wǎng)識別器;
第二步,讀取預(yù)處理之后的輸入文件,獲取其中的所有節(jié)點網(wǎng)絡(luò)類型信息保存到nodemap中;獲取輸入文件中所有網(wǎng)卡信息,并保存到interfacemap中;
第三步,遍歷interfacemap,根據(jù)每個interface當(dāng)前及對端兩端節(jié)點的網(wǎng)絡(luò)類型(即根據(jù)不同的鏈路或節(jié)點連接關(guān)系),從第一步中注冊的子網(wǎng)識別器中找到對應(yīng)的子網(wǎng)識別器,識別當(dāng)前interface及其對端interface所屬的子網(wǎng);具體識別過程如下,如圖2所示:
1)交換機(jī)與主機(jī)(或者交換機(jī)與服務(wù)器)相連
根據(jù)交換機(jī)的switchid查找緩存是否存在subnet,如果找到,那么直接將host網(wǎng)卡添加到這個subnet;否則創(chuàng)建新的subnet,并添加host網(wǎng)卡,同時記錄switchid與subnet的對應(yīng)關(guān)系。
2)路由器與交換機(jī)相連
對于一端是路由器網(wǎng)卡,一端是交換機(jī)網(wǎng)卡的情況,根據(jù)交換機(jī)的nodeid查找是否已經(jīng)創(chuàng)建了subnet,如果是,那么將路由器網(wǎng)卡添加到subnet;否則,創(chuàng)建新的subnet,將路由器網(wǎng)卡添加到此subnet,并且記錄switchid與subnet之間的對應(yīng)關(guān)系。
3)交換機(jī)與交換機(jī)相連
交換機(jī)和交換機(jī)直連的情況,首先根據(jù)兩個交換機(jī)的nodeid,查找是否存在已經(jīng)分配的subnet,如果沒有創(chuàng)建新的subnet,并且記錄兩個switchid與此subnet之間的對應(yīng)關(guān)系,返回此subnet指針;如果其中一個switchid找到對應(yīng)的subnet,那么將另一個switchid與此subnet的對應(yīng)關(guān)系記錄下來,返回null;如果兩個switchid都存在對應(yīng)的subnet,那么判斷這兩個subnet是否為同一個,如果不是,拋出異常,報錯;否則不作處理,返回null。
4)路由器與防火墻相連
路由器連接防火墻管理口的情況,直接拋出異常,提示不允許此類連接。路由器連接防火墻內(nèi)網(wǎng)口和外網(wǎng)口的情況,都是單獨的一個子網(wǎng)。
5)路由器與ips相連
ips的內(nèi)外網(wǎng)口不需要分配ip地址,因此對于路由器ips的連接,首先將路由器的網(wǎng)卡添加到subnet中,其次將對應(yīng)的ips添加到臨時緩存中,等到下次再遇到端點為此ips的連接,將對端需要分配ip地址的網(wǎng)卡添加到當(dāng)前的subnet中;當(dāng)然需要每次創(chuàng)建新的subnet之前,查找是否在緩存中記錄了此ips對應(yīng)的subnet。
6)路由器與路由器相連
本端和對端都是路由器的網(wǎng)卡,那么直接組成一個subnet。
7)交換機(jī)與ips相連
由于switch和ips的內(nèi)外網(wǎng)口都不需要分配ip地址,因此需要記錄此兩者對應(yīng)的subnet;對于switch與ips管理口的連接,其中ips管理口需要分配ip地址,而且是gateway。
8)交換機(jī)與ids相連
交換機(jī)和ids相連的情況,根據(jù)當(dāng)前的網(wǎng)卡找到交換機(jī)id和ids的網(wǎng)卡,根據(jù)交換機(jī)id查找緩存中是否已經(jīng)存在此交換機(jī)相關(guān)的subnet,如果存在,則將ids網(wǎng)卡添加到這個subnet中;否則,創(chuàng)建新的subnet,并添加ids網(wǎng)卡。
9)交換機(jī)與防火墻相連
交換機(jī)與防火墻的三個網(wǎng)口(內(nèi)外管)都可能連接,而且三個口分別屬于一個子網(wǎng)但交換機(jī)只能屬于一個子網(wǎng),換言之,三個網(wǎng)口至少對應(yīng)三個交換機(jī),而不可能是其中兩個或者多個網(wǎng)口對應(yīng)一個交換機(jī)。