專利名稱:一種檢索ip地址的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種檢索IP地址的方法。
背景技術(shù):
給路由設(shè)備配置IP地址時(shí),出于安全性的考慮一般都要檢測配置的IP地址與現(xiàn)有的IP地址是否沖突。如果沖突則配置不成功并提示用戶,若不沖突則接納配置的IP地址并生成相應(yīng)的路由。對于沖突檢測,可以分成兩類問題分別解決1)沖突檢測的策略;2)IP地址的定位。
所謂沖突檢測的策略,不同的產(chǎn)品對此有不同的要求,例如,有的產(chǎn)品不允許IP子網(wǎng)之間相互包含,而有的產(chǎn)品則允許其任意包含。這種策略只與產(chǎn)品的需求相關(guān),而與IP地址的組織結(jié)構(gòu)沒有關(guān)系。對于沖突檢測就是檢查新配置的IP地址和子網(wǎng)是否與以前曾經(jīng)配置過的IP地址和子網(wǎng)之間存在可能導(dǎo)致歧義的關(guān)系。例如新配置的IP地址與以前的IP地址完全一樣,它違背了IP地址的唯一性;或者在不同接口上配置了具有相同子網(wǎng)的IP地址,使得相同子網(wǎng)跨越了多個(gè)不同接口,從而導(dǎo)致進(jìn)行IP路由最長匹配查找時(shí)無法得到唯一結(jié)果,等等。實(shí)際配置IP地址時(shí)不但需要指明IP地址本身,而且還需要規(guī)定它所在的子網(wǎng)掩碼,例如255.255.0.0,它是由連續(xù)的“1”和“0”組成的與IP地址等長的數(shù)值,通過IP地址與掩碼相“與”即可得到所謂的IP子網(wǎng)。理論上說,具有相同IP子網(wǎng)的地址所代表的主機(jī)在物理上應(yīng)該處于一個(gè)連通的二層廣播域中,即好象它們是通過一個(gè)共享介質(zhì)的Ethernet相連一樣。因?yàn)橹挥羞@樣現(xiàn)在通用的IP最長匹配的查表算法才能根據(jù)目的地址正確地轉(zhuǎn)發(fā)報(bào)文。由此可見,正是有了上述的種種限制,使得在配置IP地址時(shí)如果不加沖突檢測,就可能由于配置的錯誤導(dǎo)致系統(tǒng)轉(zhuǎn)發(fā)的異常,特別是在配置復(fù)雜時(shí)更是如此。而增加沖突檢測機(jī)制實(shí)際上就是通過系統(tǒng)內(nèi)置的檢查機(jī)制對幾種常見的配置錯誤進(jìn)行檢查,在用戶沒有意識到錯誤時(shí)給用戶以提示,預(yù)防錯誤的發(fā)生。
所謂的IP地址的定位,是指從大量的IP地址中找出與當(dāng)前配置地址相關(guān)的地址集合,只需要在這個(gè)地址集合中檢測沖突即可。確定這個(gè)地址集合與沖突檢測的策略沒有關(guān)系,而與地址的組織結(jié)構(gòu)則密切相關(guān)。其實(shí),這種定位IP地址地址的操作不但在沖突檢測中用到,而且在系統(tǒng)運(yùn)行過程中象路由協(xié)議的啟動,靜態(tài)路由的生成等這樣的操作也都需要頻繁的使用,所以其效率的高低將直接關(guān)系到系統(tǒng)的性能。特別對于交換機(jī)產(chǎn)品,因?yàn)樗С諺LAN接口,而VLAN接口數(shù)目很多(2-4094個(gè)),每個(gè)VLAN接口上最多可以配置10個(gè)IP地址,這樣IP地址的數(shù)目將可能很大。如果不能從大量的地址中將那些與新配置的地址毫無關(guān)系的地址剔除掉,則定位IP地址的過程將是低效的。只有剔除更多無關(guān)的地址才能最大限度的縮小搜索的范圍,從而提高效率,減少無用操作。
現(xiàn)有技術(shù)一的技術(shù)方案解決沖突檢測和檢索地址的一個(gè)最直接的方法就是遍歷全局地址鏈,即將本設(shè)備配置的所有的IP地址全部串在一跟鏈表上。如圖1所示配置IP地址時(shí),首先沿著這條鏈表遍歷其中每個(gè)節(jié)點(diǎn),對每個(gè)節(jié)點(diǎn)使用特定的沖突檢測策略進(jìn)行判定。發(fā)現(xiàn)沖突,則立刻返回并提示用戶出錯,否則就在這個(gè)鏈表的末尾增加一個(gè)節(jié)點(diǎn),其中保存配置的IP地址和子網(wǎng)掩碼。這個(gè)鏈表有一個(gè)表頭節(jié)點(diǎn)。
一開始其前后向指針都指向自己,隨著地址的不斷加入,這個(gè)鏈表不斷增長,但總是一個(gè)雙向循環(huán)鏈表,最后一個(gè)節(jié)點(diǎn)的后繼指針指向表頭節(jié)點(diǎn),所以插入和刪除都很方便。
在該方案中,IP地址是按照配置的先后順序加入鏈表的,沒有考慮IP地址之間內(nèi)在的相互關(guān)系,因此定位IP地址時(shí)無法剔除那些不相關(guān)的地址,只有將當(dāng)前已經(jīng)配置的所有IP地址都遍歷一遍,對其中的每個(gè)IP地址都要按照預(yù)先定義的沖突檢測策略進(jìn)行判斷,因此執(zhí)行效率很低,當(dāng)頻繁使用這個(gè)方法定位IP地址時(shí)將非常耗時(shí)。
現(xiàn)有技術(shù)二的技術(shù)方案
要想實(shí)現(xiàn)快速定位,可以參照數(shù)據(jù)庫中的做法——按照數(shù)據(jù)某種聯(lián)系建立索引結(jié)構(gòu)。通過搜索按地址之間關(guān)系建立的索引,可以快速查到相關(guān)的地址集合,并在此基礎(chǔ)上判定該IP地址與新配置的IP地址之間是否存在沖突。由此可見,建立索引結(jié)構(gòu)有以下兩個(gè)方面的需求(1)索引結(jié)構(gòu)的搜索功能強(qiáng)大,定位速度快;(2)索引結(jié)構(gòu)的維護(hù)盡量簡單,時(shí)間與空間開銷小。平衡二差樹(AVL)就是這樣一種索引結(jié)構(gòu)。
平衡二差樹(AVL)一個(gè)顯著的特點(diǎn)是AVL中任何一個(gè)子樹(包括其本身)的左右子樹的高度差的絕對值不超過1。這樣在相同葉子節(jié)點(diǎn)的情況下,樹的深度是最小的,也就是說,查詢的次數(shù)是最少的,其時(shí)間復(fù)雜度為O(log2N)?,F(xiàn)在已有方案與標(biāo)準(zhǔn)的平衡二差樹的基礎(chǔ)上改進(jìn)后的方案。標(biāo)準(zhǔn)的AVL算法只要求左右子樹的高度差不超過1,但在葉子節(jié)點(diǎn)為偶數(shù)時(shí),左右子樹的高度將會差1,相應(yīng)地沿不同子樹的搜索路徑也會存在微小的差異。而改進(jìn)后AVL算法能夠作到左右子樹完全對稱,無論沿什么路徑走過的深度是一樣的。其實(shí),改進(jìn)后的AVL嚴(yán)格說來應(yīng)該算作三差樹,即它在左右子樹的中間還有一個(gè)指針,專門用來存放IP地址個(gè)數(shù)為偶數(shù)時(shí)多出的一個(gè)IP地址。這樣當(dāng)IP地址為奇數(shù)時(shí),則是一個(gè)左右子樹高度差為0的標(biāo)準(zhǔn)二差樹;而當(dāng)個(gè)數(shù)為偶數(shù)時(shí),將多余的一個(gè)IP地址掛在中間的一個(gè)指針上以平衡左右子樹。
參閱圖3,無論是標(biāo)準(zhǔn)的AVL還是改進(jìn)的AVL,它們的一個(gè)特點(diǎn)就是只能進(jìn)行數(shù)值的精確比較,對于IP地址而言只能進(jìn)行32比特的精確匹配,不能象查路由表那樣進(jìn)行最長匹配。因此,如果只想確定新配置的IP地址本身是否已經(jīng)配置,使用AVL樹可以很方面的查找到。但由于IP地址的沖突檢測的策略中除了上面提到的IP地址本身不能相等外,IP子網(wǎng)也不能相同。所以在比較了IP地址的AVL樹之外,還需要搜索IP子網(wǎng)的AVL樹。因?yàn)椋琁P子網(wǎng)掩碼地取值從1到31(實(shí)際上最大只能取到30),相應(yīng)地,在內(nèi)部除了保存IP地址地AVL樹之外還需要保存31棵子網(wǎng)的AVL樹。實(shí)際檢索時(shí),先不考慮子網(wǎng)掩碼用IP地址檢查地址的AVL樹,如果沒有發(fā)現(xiàn)沖突,則將IP地址與掩碼向“與”取出網(wǎng)絡(luò)部分,根據(jù)掩碼的長度到相應(yīng)的子網(wǎng)AVL樹中搜索是否存在相同子網(wǎng),如果也找不到相同的節(jié)點(diǎn),則認(rèn)為不沖突。也就是說,判定一個(gè)IP地址是否沖突,最多需要查詢兩次AVL樹,參閱圖3所示流程圖。因?yàn)?,這種方案的任何左右子樹的高度差為0,因此在增加或刪除一個(gè)IP地址時(shí),可能涉及整個(gè)AVL樹的變動,而每級子樹的變動算法相同,因此,實(shí)現(xiàn)時(shí)采用遞歸的方法。具體過程如下(1)插入時(shí),如果新增加的IP地址比當(dāng)前節(jié)點(diǎn)的數(shù)值相等,則表明該節(jié)點(diǎn)在AVL樹中已經(jīng)存在不必插入,立刻返回,否則轉(zhuǎn)(2)(2)如果本節(jié)點(diǎn)存在中間節(jié)點(diǎn),轉(zhuǎn)(5);否則轉(zhuǎn)(3)(3)如果新增IP地址比當(dāng)前節(jié)點(diǎn)數(shù)值小,轉(zhuǎn)(4),否則用右子樹節(jié)點(diǎn)為根節(jié)點(diǎn)遞歸調(diào)用本函數(shù)。遞歸返回后,再從右子樹中摘除最小數(shù)值的IP地址,將其放到當(dāng)前根節(jié)點(diǎn)上,而將根節(jié)點(diǎn)中的IP地址掛到中間節(jié)點(diǎn)上。結(jié)束(4)用左子樹節(jié)點(diǎn)為根節(jié)點(diǎn)遞歸調(diào)用本函數(shù)。遞歸返回后,再從左子樹中摘除最大數(shù)值的IP地址,將其掛到中間節(jié)點(diǎn)上。結(jié)束(5)如果新增IP地址比當(dāng)前節(jié)點(diǎn)數(shù)值小,轉(zhuǎn)(6),否則用右子樹節(jié)點(diǎn)為根節(jié)點(diǎn)遞歸調(diào)用本函數(shù)。遞歸返回后,用左子樹節(jié)點(diǎn)為根節(jié)點(diǎn)再次遞歸調(diào)用本函數(shù)將中間節(jié)點(diǎn)插入左子樹中,結(jié)束(6)用左子樹節(jié)點(diǎn)為根節(jié)點(diǎn)遞歸調(diào)用本函數(shù)。遞歸返回后,將中間節(jié)點(diǎn)放到當(dāng)前根節(jié)點(diǎn)上,而將當(dāng)前節(jié)點(diǎn)上的IP地址插入右子樹中,結(jié)束。
就單個(gè)的數(shù)值比較而言,AVL樹無疑是最快速的。但因?yàn)锳VL樹的本質(zhì)只能進(jìn)行數(shù)值的精確匹配,而不能進(jìn)行包含關(guān)系的比較,而IP地址本身是一種層次化的編址方案,它天生就具有相互包含的關(guān)系。因此,用AVL樹進(jìn)行IP地址的沖突檢測必然會存在一些問題。例如,(1)它除了比較IP地址本身之外,還需要用IP子網(wǎng)再次查找AVL樹以確定是否存在一致的子網(wǎng);(2)AVL樹只能檢測出IP地址相等和子網(wǎng)相等,而不能檢測出子網(wǎng)包含關(guān)系,而對于某些產(chǎn)品而言,可能它就是不允許子網(wǎng)包含的。另外,AVL樹沒有利用IP地址之間的包含關(guān)系,使得它在支持一些新的需求方面顯得力不從心,例如如果想要檢索出本設(shè)備在某個(gè)范圍內(nèi)配置的所有IP地址等。從上面維護(hù)AVL樹的定位過程可以看出,那是一個(gè)復(fù)雜的遞歸過程,每增加或刪除一個(gè)IP地址可能帶來整個(gè)AVL樹的變動。而且,它需要同時(shí)維護(hù)一個(gè)IP地址的AVL樹和31棵子網(wǎng)的AVL樹,無論從時(shí)間還是空間方面的開銷都是較大的。當(dāng)IP地址數(shù)目不大時(shí),還可以承受,但對于象交換機(jī)等支持VLAN接口的產(chǎn)品而言,開銷非常巨大。其根本原因也是將IP地址與子網(wǎng)割裂開來,導(dǎo)致不能同時(shí)維護(hù)IP地址及其子網(wǎng)。
發(fā)明內(nèi)容
針對現(xiàn)有技術(shù)的不足,本發(fā)明的目的在于提供一種檢索IP地址的方法。
本發(fā)明的技術(shù)方案一種檢索IP地址的方法,根據(jù)提供的當(dāng)前IP地址至少從IP地址集中搜索相關(guān)的IP地址,所述IP地址集中的IP地址形成全局地址鏈表,該方法包含下述步驟a、獲得待處理的IP地址的掩碼長度;b、從以IP地址的掩碼長度為節(jié)點(diǎn)按遞升順序形成的樹索引結(jié)構(gòu)的根節(jié)點(diǎn)開始,將節(jié)點(diǎn)代表的掩碼長度與當(dāng)前IP地址的掩碼長度進(jìn)行比較,如果找到第一個(gè)大于或等于當(dāng)前IP地址的掩碼長度的當(dāng)前節(jié)點(diǎn),則繼續(xù)步驟c;否則轉(zhuǎn)步驟e;c、比較當(dāng)前IP地址與當(dāng)前節(jié)點(diǎn)對應(yīng)的IP地址的子網(wǎng)是否相同,如果相同則進(jìn)行步驟d,如果不相同則進(jìn)行步驟e;d、取得當(dāng)前節(jié)點(diǎn)的頭指針和尾指針之間從全局地址鏈表中所截取的所有IP地址,并采用判斷沖突的策略對每一個(gè)IP地址進(jìn)行判斷;如果發(fā)現(xiàn)沖突則提示并結(jié)束檢索,否則進(jìn)行步驟e;e、確認(rèn)當(dāng)前IP地址與現(xiàn)有IP地址不沖突或/和將當(dāng)前IP地址加入到所述全局地址鏈表中。
一種檢索IP地址的方法,從IP地址集中搜索到當(dāng)前IP地址后刪除,所述IP地址集中的IP地址形成全局地址鏈表,該方法包含下述步驟a、獲得當(dāng)前IP地址的掩碼長度;b、從以IP地址的掩碼長度為節(jié)點(diǎn)按遞升順序形成的樹索引結(jié)構(gòu)的根節(jié)點(diǎn)開始,將節(jié)點(diǎn)代表的掩碼長度與當(dāng)前IP地址的掩碼長度進(jìn)行比較,找到當(dāng)前IP地址的掩碼小于或等于節(jié)點(diǎn)代表的掩碼長度的當(dāng)前節(jié)點(diǎn);c、比較當(dāng)前IP地址與當(dāng)前節(jié)點(diǎn)對應(yīng)的IP地址的子網(wǎng)是否相同,如果相同則進(jìn)行步驟d,如果不相同則提示沒有當(dāng)前IP地址并結(jié)束;d、取得當(dāng)前節(jié)點(diǎn)的頭指針和尾指針從全局地址鏈表中所截取的所有IP地址,從這些IP地址中查找當(dāng)前IP地址,如果找到則刪除該當(dāng)前IP地址,并進(jìn)行步驟e;如果未找到則提示無待刪除的IP地址并結(jié)束;e、根據(jù)全局地址鏈表中當(dāng)前IP地址中保存的回指索引樹內(nèi)部節(jié)點(diǎn)的指針找到相應(yīng)的節(jié)點(diǎn),并對該節(jié)點(diǎn)進(jìn)行處理。
其中所述的樹索引結(jié)構(gòu)為一種可以實(shí)現(xiàn)最長匹配的二叉樹的數(shù)據(jù)結(jié)構(gòu)。
所述全局地址鏈表按IP地址的包含關(guān)系排序,樹索引結(jié)構(gòu)中節(jié)點(diǎn)的頭指針和尾指針從該全局地址鏈表中所截取的所有IP地址被該節(jié)點(diǎn)所代表的IP子網(wǎng)所包含。
本發(fā)明通過組織radix樹和IP地址鏈表,可以很方便地定位需要的IP地址集合。因?yàn)樗阉鲿r(shí),先查詢r(jià)adix樹,它的時(shí)間復(fù)雜度為O(log2N)。無論配置多少個(gè)IP地址,最多只需要查詢32次即可找到需要的IP地址結(jié)構(gòu)。給出任何一個(gè)IP子網(wǎng)就可以快速找出當(dāng)前系統(tǒng)中所有被其包含的IP地址集合,而不必搜索整個(gè)地址鏈。這一點(diǎn)是AVL樹所不具備的。
AVL樹不能提供查詢IP子網(wǎng)之間包含關(guān)系的功能。如果某個(gè)產(chǎn)品不允許IP地址相互包含的話,則AVL樹就無能為力了。而radix樹本身就是用包含關(guān)系組織的,越靠近根的節(jié)點(diǎn)代表的子網(wǎng)范圍越大,父節(jié)點(diǎn)子網(wǎng)必然包含子節(jié)點(diǎn)對應(yīng)的子網(wǎng)。因此,本發(fā)明自然就支持檢測IP地址的包含關(guān)系。這樣,通過查詢一棵樹就可以同時(shí)完成IP地址檢測和IP子網(wǎng)檢測以及子網(wǎng)包含的多種功能,而不象AVL算法要查詢多棵樹。
在維護(hù)索引結(jié)構(gòu)方面,在增加和刪除IP地址時(shí)維護(hù)一棵radix樹的開銷比AVL算法的維護(hù)兩棵樹要低。而且,僅就維護(hù)一棵樹的開銷來說,radix樹也比AVL樹要低。這是因?yàn)閞adix樹并不要求樹結(jié)構(gòu)的完全對稱,它修改的范圍僅僅局限在一個(gè)節(jié)點(diǎn)的上下兩層而與樹中其他節(jié)點(diǎn)沒有關(guān)系,因此radix樹的算法是一個(gè)不斷向下搜索的單向過程;而AVL樹的結(jié)構(gòu)則要嚴(yán)格的多,修改一個(gè)節(jié)點(diǎn)可能導(dǎo)致整棵樹結(jié)構(gòu)的變動,因此AVL樹需要通過一個(gè)遞歸過程完成各層節(jié)點(diǎn)的修改。增加IP地址時(shí),radix樹最多需要遍歷32層節(jié)點(diǎn)就可以找到插入節(jié)點(diǎn)的地方,然后更新上下兩級節(jié)點(diǎn)的指針即可,而不象AVL的遞歸算法那樣,增加一個(gè)節(jié)點(diǎn)需要考慮給上下各個(gè)層面上節(jié)點(diǎn)帶來的變化,雖然不一定所有節(jié)點(diǎn)都變化,但至少需要將整棵樹全部遍歷一遍。刪除IP地址時(shí),因?yàn)樵诘刂方Y(jié)構(gòu)中有回指radix樹節(jié)點(diǎn)的指針,因此根本就不需要搜索radix樹就可以確定需要刪除的內(nèi)部節(jié)點(diǎn),同樣刪除一個(gè)內(nèi)部節(jié)點(diǎn)也只需要修改上下兩級節(jié)點(diǎn)的指針即可。
圖1為現(xiàn)有技術(shù)一的技術(shù)方案的鏈表結(jié)構(gòu)示意圖;圖2為現(xiàn)有技術(shù)二的技術(shù)方案的索引結(jié)構(gòu)示意圖;圖3為現(xiàn)有技術(shù)二檢測IP地址的流程圖;圖4為交換式路由器結(jié)構(gòu)框圖;圖5為本發(fā)明中IP地址的全局鏈表和索引結(jié)構(gòu)關(guān)聯(lián)示意圖;圖6為本發(fā)明的流程圖。
具體實(shí)施例方式
參閱圖4所示,為了提高路由器的轉(zhuǎn)發(fā)速率,交換式路由器采用了轉(zhuǎn)發(fā)和控制相分離的結(jié)構(gòu)。流量從入接口卡進(jìn)入后由網(wǎng)絡(luò)處理器或ASIC硬件電路查詢轉(zhuǎn)發(fā)表后經(jīng)過交換網(wǎng)交換到出接口卡上轉(zhuǎn)發(fā)出去,這一切工作大部分由硬件完成,不需要路由處理部件的參與,可以達(dá)到很高的轉(zhuǎn)發(fā)速率。路由處理部件中運(yùn)行著路由器的主控軟件,主要負(fù)責(zé)接收用戶的配置命令,通過路由協(xié)議生成轉(zhuǎn)發(fā)表項(xiàng)下發(fā)到網(wǎng)絡(luò)處理器或ASCIC硬件電路中供轉(zhuǎn)發(fā)使用。而要生成轉(zhuǎn)發(fā)表項(xiàng)的首要前提就是給路由器的接口配置IP地址和掩碼,其它路由器配置的IP地址被本設(shè)備通過路由協(xié)議學(xué)到就形成了到達(dá)目的網(wǎng)段的轉(zhuǎn)發(fā)表項(xiàng)。IP地址配置的正確與否直接關(guān)系到流量能否正確地到達(dá)目的地,因此配置IP地址時(shí)需要做一些檢測工作,以防新配置的IP地址與原有的IP地址發(fā)生沖突,將問題盡量控制在源頭上,以免將錯誤的信息擴(kuò)散到整個(gè)網(wǎng)絡(luò)中引起混亂。
IP地址與掩碼有密切的關(guān)系,判定沖突檢測時(shí),不但需要判定IP地址是否相同,而且還需要判定子網(wǎng)是否相同,甚至某些產(chǎn)品還不允許子網(wǎng)的包含以及更為復(fù)雜的策略。而這些策略與采用哪一種索引結(jié)構(gòu)無關(guān),只是需要對所有可能的IP地址都進(jìn)行上述的策略判斷,不要遺漏即可。
參閱圖5,虛線中的部分就是本發(fā)明的樹索引結(jié)構(gòu),該樹為一種可以實(shí)現(xiàn)最長匹配的二叉樹的數(shù)據(jù)結(jié)構(gòu)(簡稱radix樹),用于快速定位IP地址及其集合。而全局地址鏈表中的IP地址按照其包含關(guān)系排序。
radix樹是這樣組織的根據(jù)配置的IP地址的掩碼長度,在radix樹中插入一個(gè)內(nèi)部節(jié)點(diǎn),其中的KEY值就是IP地址掩碼的長度。同時(shí)將該IP地址對應(yīng)的數(shù)據(jù)結(jié)構(gòu)按照IP子網(wǎng)的大小插入全局地址鏈表中,并用該內(nèi)部節(jié)點(diǎn)上的頭指針begin_ptr和尾指針end_ptr同時(shí)指向全局地址鏈表中的IP地址結(jié)構(gòu)。這兩個(gè)指針從全局地址鏈表上截取的一段地址集合全部都被該內(nèi)部節(jié)點(diǎn)所代表的IP子網(wǎng)所包含,即這段IP地址的掩碼都比該內(nèi)部節(jié)點(diǎn)指定的KEY值長,而且它們IP地址通過KEY值代表的掩碼相“與”后的網(wǎng)絡(luò)部分都相同。例如有一個(gè)內(nèi)部節(jié)點(diǎn)所代表的IP子網(wǎng)為10.1.0.0/255.255.0.0,則其KEY值為16,那么它的頭指針begin和尾指針end指針括住的IP地址都是如下形式,10.1.X.X/255.255.X.X,其中X可以為0,也可以不為0,也就是所謂的被子網(wǎng)10.1.0.0/255.255.0.0所包含。
檢索時(shí)通過搜索radix樹可以快速定位到內(nèi)部節(jié)點(diǎn),再通過內(nèi)部節(jié)點(diǎn)中的頭指針begin_ptr和尾指針end_ptr指針可以直接獲取需要的IP地址結(jié)構(gòu)。另外,為了避免刪除IP地址時(shí)再次搜索radix樹,在IP地址結(jié)構(gòu)中增加一個(gè)反向指向radix樹內(nèi)部節(jié)點(diǎn)的指針,這樣刪除時(shí)通過該指針可以直接找到需要刪除的內(nèi)部節(jié)點(diǎn),如果該節(jié)點(diǎn)上沒有其它相同子網(wǎng)的IP地址時(shí)就可以直接刪除內(nèi)部節(jié)點(diǎn)(刪除內(nèi)部節(jié)點(diǎn)的詳細(xì)過程在下面介紹)。如果配置了多個(gè)掩碼長度相等,且子網(wǎng)相同的IP地址時(shí),因?yàn)樗鼈兌蓟刂赶騬adix樹中同一個(gè)內(nèi)部節(jié)點(diǎn),所以將它們插在全局鏈表中緊鄰的位置上,頭尾位置分別由radix樹內(nèi)部節(jié)點(diǎn)的頭指針begin_ptr和尾指針end_ptr指定。例如在ethernetl上配置了10.1.1.1/255.255.255.0的主IP地址,然后又在同樣接口上配置了10.1.1.2/255.255.255.0的從IP地址,則這兩個(gè)IP地址中的反向指針指向同一個(gè)內(nèi)部節(jié)點(diǎn),它們按插入的先后順序排在全局鏈表的相連位置上,頭指針begin_ptr指向10.1.1.1/255.255.255.0,尾指針end_ptr指向10.1.1.2/255.255.255.0。
在被頭指針begin_ptr和尾指針end_ptr括住的IP地址集合不但整體上有這樣的特點(diǎn),而且在其內(nèi)部也是按照一定的規(guī)則排序的。重新排序后的IP全局鏈表有這樣的特點(diǎn)任何一個(gè)節(jié)點(diǎn)左右指針括住的IP地址集合有如下的三個(gè)子集組成[根節(jié)點(diǎn)上配置的所有IP地址][左子樹中節(jié)點(diǎn)配置的IP地址][右子樹節(jié)點(diǎn)配置的IP地址]。其中所謂[根節(jié)點(diǎn)上配置的所有IP地址]就是上面提到的配置在根節(jié)點(diǎn)上的掩碼相等、子網(wǎng)相同的地址鏈表;而所謂的[左右子樹配置的IP地址集合]就是分別以左右兒子節(jié)點(diǎn)為根形成的子樹所截取IP地址段,它們也是按照這樣的順序組織,也就是說這個(gè)關(guān)系是一種遞歸的順序,直到葉子節(jié)點(diǎn)為止。例如,當(dāng)前系統(tǒng)中包含以下三個(gè)IP地址10.1.1.1/255.255.0.0、10.1.127.1/255.255.255.0和10.1.129.1/255.255.255.0。那么radix樹中就存在三個(gè)節(jié)點(diǎn),根節(jié)點(diǎn)KEY值為16,代表10.1.1.1/255.255.0.0;左節(jié)點(diǎn)的KEY值為24,代表10.1.127.1/255.255.255.0;而右兒子的KEY值也是24,代表10.1.129.1/255.255.255.0。這樣,根節(jié)點(diǎn)的頭指針begin_ptr和尾指針end_ptr所截取的IP地址鏈即按如下順序組織[10.1.1.1/255.255.0.0][10.1.127.1/255.255.255.0…][10.1.129.1/255.255.255.0…]。
當(dāng)然,這個(gè)集合不一定完全包含這三個(gè)部分,例如,如果當(dāng)前節(jié)點(diǎn)沒有左子樹,則沒有第二部分;沒有右子樹,則沒有第三部分;而根節(jié)點(diǎn)上沒有配置IP地址,則沒有第一部分;左右子樹都沒有時(shí),則begin_ptr和end_ptr就指向配置的掩碼等于內(nèi)部節(jié)點(diǎn)KEY值的IP地址上,如果這樣的IP地址只配置了一個(gè),則begin_ptr和end_ptr指針都指向該IP地址。相應(yīng)地,若radix樹的某個(gè)部分被刪除了,節(jié)點(diǎn)的左右指針也需要做相應(yīng)調(diào)整。例如將一個(gè)節(jié)點(diǎn)上配置的所有IP地址刪除后,該節(jié)點(diǎn)的頭指針begin_ptr就需要重新調(diào)整為其左兒子或右兒子的頭指針begin_ptr。
檢測沖突的的過程也就是定位該IP地址在radix樹中具體位置的過程,檢測完成后其實(shí)就已經(jīng)找到了插入radix的準(zhǔn)確位置。它是以欲檢測沖突的IP地址為操作對象,沿著從radix根節(jié)點(diǎn)向葉子節(jié)點(diǎn)的方向持續(xù)推進(jìn)。每經(jīng)過一個(gè)radix節(jié)點(diǎn)都可以得到一個(gè)該節(jié)點(diǎn)指定的KEY值,將這個(gè)KEY值與當(dāng)前操作的IP地址的掩碼進(jìn)行比較。如果KEY值大于等于當(dāng)前操作的IP掩碼而且該radix節(jié)點(diǎn)上配置了IP地址,則標(biāo)明當(dāng)前操作的IP地址肯定應(yīng)該插在該radix節(jié)點(diǎn)的上面(因?yàn)閞adix樹自上往下,KEY值是不斷遞增的),不再需要再往下推進(jìn)了;否則以這個(gè)KEY值為序號(該序號從0開始)檢測操作對象上對應(yīng)比特的數(shù)值。如果該比特為0,則繼續(xù)向當(dāng)前radix的左子樹進(jìn)發(fā);否則向右子樹進(jìn)發(fā)。就這樣,在不斷的推進(jìn)和檢測中直至走到葉子節(jié)點(diǎn)為止。例如,配置如下的IP地址10.1.1.1/255.255.255.0。在當(dāng)前的radix樹中有四個(gè)節(jié)點(diǎn),它們的KEY值分別為8、16、24和32。這樣在推進(jìn)的路徑上首先遇到KEY值為8的節(jié)點(diǎn),比較后發(fā)現(xiàn)KEY值(8)比當(dāng)前地址的掩碼(255.255.255.0)小,則表明需要繼續(xù)推進(jìn)。然后以KEY為序號檢測第9個(gè)比特(因?yàn)镵EY值是以0開始的,因此實(shí)際是第9比特),結(jié)果發(fā)現(xiàn)是0,則沿著左子樹進(jìn)發(fā)。第二個(gè)節(jié)點(diǎn)依次類推,直到第三個(gè)節(jié)點(diǎn)。此時(shí)它的KEY值也是24,與IP掩碼相等而且配置了IP地址,則不再往下尋找。接下來就是比較當(dāng)前操作的IP地址與第三個(gè)節(jié)點(diǎn)對應(yīng)的IP地址逐個(gè)比特進(jìn)行比較,找出第一個(gè)不同比特所在的序號diff_bit,該序號diff_bit<=MIN(當(dāng)前IP地址掩碼,當(dāng)前節(jié)點(diǎn)的KEY值)。根據(jù)序號diff_bit的不同數(shù)值,需要進(jìn)行不同的處理。參閱6所示具體流程如下步驟10獲得配置的當(dāng)前IP地址的掩碼長度;
步驟20取radix樹的根節(jié)點(diǎn)為當(dāng)前節(jié)點(diǎn);步驟30如果配置的子網(wǎng)掩碼比當(dāng)前節(jié)點(diǎn)KEY值小或相等,則轉(zhuǎn)步驟40;否則判斷當(dāng)前配置的IP地址在當(dāng)前節(jié)點(diǎn)KEY值所指定的比特處取值。如果為1,則取右子節(jié)點(diǎn)為當(dāng)前節(jié)點(diǎn);否則取左子節(jié)點(diǎn)為當(dāng)前節(jié)點(diǎn),然后在轉(zhuǎn)步驟30重新比較,直至轉(zhuǎn)步驟40;步驟40比較當(dāng)前節(jié)點(diǎn)對應(yīng)的IP地址與新配置的IP地址同掩碼相“與”后得到的子網(wǎng)部分是否相等,如果相等轉(zhuǎn)步驟50;否則找出第一個(gè)不等的比特diff_bit,轉(zhuǎn)步驟60,此時(shí)表明新配置的IP地址所形成的子網(wǎng)沒有包含任何已有的子網(wǎng),但仍然可能被更大的子網(wǎng)所包含,diff_bit就是當(dāng)前IP地址插入radix樹時(shí)需要分叉的內(nèi)部節(jié)點(diǎn)的KEY值。
步驟50表明以前配置相同子網(wǎng)的IP地址,此時(shí)只需要在該節(jié)點(diǎn)的頭指針begin_ptr與尾指針end_ptr括住的地址集合中查找,對其中的每個(gè)IP地址調(diào)用判斷沖突的策略函數(shù)即可。如果發(fā)現(xiàn)沖突,提示IP地址配置錯誤并返回;在比較完集合中的IP地址后沒有發(fā)現(xiàn)沖突,則可以認(rèn)為該地址合法。
步驟60根據(jù)第一個(gè)不等比特和新配置的掩碼與當(dāng)前節(jié)點(diǎn)比特的關(guān)系,可以分成三種情況a、如果不等的比特diff_bit等于當(dāng)前節(jié)點(diǎn)KEY值,則將新配置的IP地址作為當(dāng)前節(jié)點(diǎn)的子樹;b、如果不等的比特diff_bit等于新配置IP地址的掩碼長度,則將當(dāng)前節(jié)點(diǎn)作為新配置的IP地址的子樹;c、如果不等比特diff_bit比當(dāng)前節(jié)點(diǎn)KEY值和新配置IP地址的掩碼長度都小,則新建一個(gè)節(jié)點(diǎn)作為分叉節(jié)點(diǎn),當(dāng)前節(jié)點(diǎn)與新配置的IP地址互為兄弟,都作為分叉節(jié)點(diǎn)的左右子樹。
無論哪一種情況,都需要根據(jù)不同檢測沖突的策略自下而上的檢測各級父節(jié)點(diǎn)的IP地址是否與新配置的地址沖突。例如,如果允許子網(wǎng)包含,則只需要檢測IP地址本身是否相同即可,否則除了IP地址本身外還需要檢測IP子網(wǎng)是否相同或包含。
從上面的結(jié)構(gòu)可以看出,radix樹的出發(fā)點(diǎn)是維護(hù)IP地址之間的包含關(guān)系,它提供了最為詳細(xì)的系統(tǒng)內(nèi)IP地址之間的內(nèi)在聯(lián)系。無論各個(gè)產(chǎn)品的沖突檢測有什么特殊需求,只需要改變策略函數(shù)即可,而不必改變r(jià)adix樹的結(jié)構(gòu)。這主要是因?yàn)镮P地址是一種層次化的地址,本身就隱含著這種包含關(guān)系,這與某些地址系統(tǒng)中非層次化的編址方法是不同的。在IP地址族更加關(guān)注IP子網(wǎng)而不是IP地址,因?yàn)榭梢詫蝹€(gè)的IP地址看作是具有32位全1掩碼的IP子網(wǎng),因此Internet中也將IP子網(wǎng)作為其邏輯組成的基本單位,每增加一個(gè)網(wǎng)絡(luò)時(shí)就需要新分配一個(gè)IP子網(wǎng)的網(wǎng)段。單單就IP地址本身而言是難以準(zhǔn)確描述它所代表的全部含義的,只有通過掩碼形成不同的子網(wǎng)結(jié)構(gòu)才能發(fā)揮IP地址的巨大用處,例如路由表中的路由就是通過IP地址加掩碼才唯一確定的。radix樹正是符合了這一點(diǎn)才能適應(yīng)各個(gè)不同的需求,而AVL卻正是沒有考慮IP地址與掩碼之間的聯(lián)系,只單純地比較兩個(gè)數(shù)值的大小才使得支持不同產(chǎn)品的需求變得很困難。
檢查無沖突時(shí),就需要將新配置的IP地址根據(jù)掩碼長度插入到radix樹中,其方法與上面提到的沖突檢測的方法基本相同,這里不再贅述,同時(shí)根據(jù)其對應(yīng)的radix內(nèi)部節(jié)點(diǎn)中的指針begin_ptr和指針end_ptr位置將其插入到全局地址鏈表中。
刪除一個(gè)IP地址時(shí)需要做相反的動作,將IP地址從全局地址鏈表和radix樹摘除。從全局鏈表是一個(gè)雙向鏈表,摘除其中一個(gè)節(jié)點(diǎn)非常簡單;而從radix樹上摘除首先需要找到對應(yīng)的內(nèi)部節(jié)點(diǎn),此時(shí)就需要用到IP地址中保存的回指radix樹內(nèi)部節(jié)點(diǎn)的指針。根據(jù)該指針立刻可以找到需要刪除的節(jié)點(diǎn),然后分為三種情況分別處理1)如果節(jié)點(diǎn)同時(shí)存在左右子樹,則本節(jié)點(diǎn)需要保留作為分叉節(jié)點(diǎn),可以立刻返回2)如果節(jié)點(diǎn)左右子樹都沒有,則刪除本節(jié)點(diǎn)。將父節(jié)點(diǎn)的指向本節(jié)點(diǎn)中指針清空。如果此時(shí)父節(jié)點(diǎn)還有IP地址與之相連,則父節(jié)點(diǎn)需要保留立刻返回,否則取父節(jié)點(diǎn)為當(dāng)前節(jié)點(diǎn),轉(zhuǎn)3);3)如果只有左子樹或只有右子樹,則刪除本節(jié)點(diǎn),同時(shí)將左子樹或右子樹掛到本節(jié)點(diǎn)在其父節(jié)點(diǎn)的相應(yīng)指針上。
無論是上述哪一種情況,在處理完內(nèi)部節(jié)點(diǎn)后,需要檢查是否需要移動父節(jié)點(diǎn)的頭指針begin_ptr和尾指針end_ptr的指針。究竟是否需要移動可以參照下面的原則進(jìn)行(1)如果待刪除的IP地址既沒有被內(nèi)部節(jié)點(diǎn)的頭指針begin_ptr指向也沒有被尾指針end_ptr指向,則無須調(diào)整這兩個(gè)指針,即可返回。
(2)如果僅僅被頭指針begin_ptr指向,則表明該IP地址是其所在子網(wǎng)的第一個(gè)IP地址,此時(shí)只需要將尾指針begin_ptr指針移向后一個(gè)IP地址。如果當(dāng)前節(jié)點(diǎn)位于其父節(jié)點(diǎn)的左子樹上,則將父節(jié)點(diǎn)作為當(dāng)前節(jié)點(diǎn)重復(fù)執(zhí)行該原則,否則直接返回。
(3)如果僅僅被尾指針end_ptr指向,則表明該IP地址是其所在子網(wǎng)的最后一個(gè)IP地址,此時(shí)只需要將尾指針end_ptr移向前一個(gè)IP地址。如果當(dāng)前節(jié)點(diǎn)位于其父節(jié)點(diǎn)的右子樹上,則將父節(jié)點(diǎn)作為當(dāng)前節(jié)點(diǎn)重復(fù)執(zhí)行該原則,否則直接返回。
(4)如果同時(shí)被頭指針begin_ptr和尾指針end_ptr指向,則表明它是該子網(wǎng)中配置的唯一一個(gè)IP地址,此時(shí)需要將內(nèi)部節(jié)點(diǎn)一并刪除,并調(diào)整其父節(jié)點(diǎn)的首尾指針。此時(shí)將父節(jié)點(diǎn)設(shè)為當(dāng)前節(jié)點(diǎn),再次使用該原則即可。
由此可見,無論插入還是刪除都很簡單,最多只需要修改父子兩級節(jié)點(diǎn)中的指針,而不涉及其他節(jié)點(diǎn),從而將修改限制在一個(gè)很小的范圍之內(nèi),這與AVL樹的遞歸算法又很大的不同,這也是radix算法的優(yōu)點(diǎn)之一。
radix樹本身就是一種層次化的結(jié)構(gòu),特別適合組織象IP地址這樣需要最長匹配的地址結(jié)構(gòu)。但radix樹的算法只定義了樹的內(nèi)部節(jié)點(diǎn),而對樹的外部節(jié)點(diǎn)沒有規(guī)定。這就給radix樹的使用者以極大的靈活性來組織外部數(shù)據(jù)。本方案通過頭指針begin_ptr和尾指針end_ptr兩個(gè)指向全局鏈表的指針將一個(gè)子網(wǎng)中包含的所有IP地址囊括在內(nèi),從而實(shí)現(xiàn)快速定位相關(guān)地址集合的目的,相應(yīng)地遍歷相關(guān)地址集合中的IP地址時(shí)只需要掃描頭指針begin_ptr和尾指針end_ptr定義的一段鏈表即可。除本方法之外,還可以存在別的方法組織radix樹的外部節(jié)點(diǎn)。例如,可以在全局IP地址鏈表之外,另外分配結(jié)構(gòu)保存IP地址和掩碼,同時(shí)將具有相同子網(wǎng)號的這些數(shù)據(jù)結(jié)構(gòu)串成一個(gè)鏈表掛到radix的內(nèi)部節(jié)點(diǎn)上。這樣的方法同樣可以完成地址沖突檢測功能,但需要占用額外內(nèi)存,而且遍歷相關(guān)地址集合中的IP地址時(shí)需要采用遍歷radix樹的方法,比本方案中的遍歷雙向鏈表的方法復(fù)雜。
權(quán)利要求
1 一種檢索IP地址的方法,根據(jù)提供的當(dāng)前IP地址至少從IP地址集中搜索相關(guān)的IP地址,所述IP地址集中的IP地址形成全局地址鏈表,其特征在于該方法包含下述步驟a、獲得待處理的IP地址的掩碼長度;b、從以IP地址的掩碼長度為節(jié)點(diǎn)按遞升順序形成的樹索引結(jié)構(gòu)的根節(jié)點(diǎn)開始,將節(jié)點(diǎn)代表的掩碼長度與當(dāng)前IP地址的掩碼長度進(jìn)行比較,如果找到第一個(gè)大于或等于當(dāng)前IP地址的掩碼長度的當(dāng)前節(jié)點(diǎn),繼續(xù)步驟c;否則進(jìn)行步驟e;c、比較當(dāng)前IP地址與當(dāng)前節(jié)點(diǎn)對應(yīng)的IP地址的子網(wǎng)是否相同,如果相同則進(jìn)行步驟d,如果不相同則進(jìn)行步驟e;d、取得當(dāng)前節(jié)點(diǎn)的頭指針和尾指針之間從全局地址鏈表中所截取的所有IP地址,并采用判斷沖突的策略對每一個(gè)IP地址進(jìn)行判斷;如果發(fā)現(xiàn)沖突則提示并結(jié)束檢索,否則進(jìn)行步驟e;e、確認(rèn)當(dāng)前IP地址與現(xiàn)有IP地址不沖突或/和將當(dāng)前IP地址加入到所述全局地址鏈表中。
2.如權(quán)利要求1所述的方法,其特征在于,所述的樹索引結(jié)構(gòu)為一種可以實(shí)現(xiàn)最長匹配的二叉樹的數(shù)據(jù)結(jié)構(gòu)。
3.如權(quán)利要求1或2所述的方法,其特征在于,所述全局地址鏈表按IP地址的包含關(guān)系排序,樹索引結(jié)構(gòu)中節(jié)點(diǎn)的頭指針和尾指針從該全局地址鏈表中所截取的所有IP地址被該節(jié)點(diǎn)所代表的IP子網(wǎng)所包含。
4.如權(quán)利要求3所述的方法,其特征在于,如果全局地址鏈表中有多個(gè)掩碼長度相等并且子網(wǎng)相同的IP地址,則該多個(gè)IP地址在全局鏈表中連續(xù)排列。
5.如權(quán)利要求1所述的方法,其特征在于,步驟b中,當(dāng)前IP地址的掩碼長度比當(dāng)前節(jié)點(diǎn)代表的掩碼長度大時(shí),判斷當(dāng)前IP地址在當(dāng)前節(jié)點(diǎn)值所指定位置的比特值,如果為1則取右子節(jié)點(diǎn)為當(dāng)前節(jié)點(diǎn)繼續(xù)比較,否則取左子節(jié)點(diǎn)為當(dāng)前節(jié)點(diǎn)繼續(xù)比較。
6.如權(quán)利要求1所述的方法,其特征在于,步驟c中,當(dāng)前IP地址與當(dāng)前節(jié)點(diǎn)對應(yīng)的IP地址的子網(wǎng)不相同時(shí),確定第一個(gè)不等比特的序號,并根據(jù)該序號與當(dāng)前IP地址的掩碼和當(dāng)前節(jié)點(diǎn)比特的關(guān)系分別處理(1)如果所述序號等于當(dāng)前節(jié)點(diǎn)代表的掩碼長度,則將當(dāng)前IP地址作為當(dāng)前節(jié)點(diǎn)的子樹;(2)如果所述序號等于當(dāng)前IP地址的掩碼長度,則將當(dāng)前節(jié)點(diǎn)作為當(dāng)前IP地址的子樹;(3)如果所述序號比當(dāng)前節(jié)點(diǎn)代表的掩碼長度和當(dāng)前IP地址的掩碼長度都小,則新建一個(gè)節(jié)點(diǎn)作為分叉節(jié)點(diǎn),當(dāng)前節(jié)點(diǎn)與當(dāng)前IP地址互為兄弟,都作為分叉節(jié)點(diǎn)的左右子樹。
7.一種檢索IP地址的方法,從IP地址集中搜索到當(dāng)前IP地址后刪除,所述IP地址集中的IP地址形成全局地址鏈表,其特征在于該方法包含下述步驟a、獲得當(dāng)前IP地址的掩碼長度;b、從以IP地址的掩碼長度為節(jié)點(diǎn)按遞升順序形成的樹索引結(jié)構(gòu)的根節(jié)點(diǎn)開始,將節(jié)點(diǎn)代表的掩碼長度與當(dāng)前IP地址的掩碼長度進(jìn)行比較,找到當(dāng)前IP地址的掩碼小于或等于節(jié)點(diǎn)代表的掩碼長度的當(dāng)前節(jié)點(diǎn);c、比較當(dāng)前IP地址與當(dāng)前節(jié)點(diǎn)對應(yīng)的IP地址的子網(wǎng)是否相同,如果相同則進(jìn)行步驟d,如果不相同則提示沒有當(dāng)前IP地址并結(jié)束;d、取得當(dāng)前節(jié)點(diǎn)的頭指針和尾指針從全局地址鏈表中所截取的所有IP地址,從這些IP地址中查找當(dāng)前IP地址,如果找到則刪除該當(dāng)前IP地址,并進(jìn)行步驟e;如果未找到則提示無待刪除的IP地址并結(jié)束;e、根據(jù)全局地址鏈表中當(dāng)前IP地址中保存的回指索引樹內(nèi)部節(jié)點(diǎn)的指針找到相應(yīng)的節(jié)點(diǎn),并對該節(jié)點(diǎn)進(jìn)行處理。
8.如權(quán)利要求7所述的方法,其特征在于,所述的樹索引結(jié)構(gòu)為一種可以實(shí)現(xiàn)最長匹配的二叉樹的數(shù)據(jù)結(jié)構(gòu)。
9.如權(quán)利要求7所述的方法,其特征在于,所述全局地址鏈表按IP地址的包含關(guān)系排序,樹索引結(jié)構(gòu)中節(jié)點(diǎn)的頭指針和尾指針從該全局地址鏈表中所截取的所有IP地址被該節(jié)點(diǎn)所代表的IP子網(wǎng)所包含。
10.如權(quán)利要求7所述的方法,其特征在于,如果全局地址鏈表中有多個(gè)掩碼長度相等并且子網(wǎng)相同的IP地址,則該多個(gè)IP地址在全局鏈表中連續(xù)排列。
11.如權(quán)利要求7所述的方法,其特征在于,步驟b中,當(dāng)前IP地址的掩碼長度比當(dāng)前節(jié)點(diǎn)代表的掩碼長度大時(shí),判斷當(dāng)前IP地址在當(dāng)前節(jié)點(diǎn)值所指定位置的比特值,如果為1則取右子節(jié)點(diǎn)為當(dāng)前節(jié)點(diǎn)繼續(xù)比較,否則取左子節(jié)點(diǎn)為當(dāng)前節(jié)點(diǎn)繼續(xù)比較。
12.如權(quán)利要求7所述的方法,其特征在于,步驟e中按下述情況分別對節(jié)點(diǎn)進(jìn)行處理(1)如果節(jié)點(diǎn)同時(shí)存在左右子樹,則該節(jié)點(diǎn)保留作為分叉節(jié)點(diǎn),結(jié)束處理;(2)如果節(jié)點(diǎn)沒有子樹,則刪除本節(jié)點(diǎn),將父節(jié)點(diǎn)的指向本節(jié)點(diǎn)中指針清空;如果此時(shí)父節(jié)點(diǎn)還有IP地址與之相連,則結(jié)束處理,否則取父節(jié)點(diǎn)為當(dāng)前節(jié)點(diǎn),進(jìn)行步驟(3)(3)如果節(jié)點(diǎn)只有左子樹或只有右子樹,則刪除本節(jié)點(diǎn),同時(shí)將左子樹或右子樹掛到本節(jié)點(diǎn)在其父節(jié)點(diǎn)的相應(yīng)指針上。
13.如權(quán)利要求12所述的方法,其特征在于,處理節(jié)點(diǎn)后還包括對節(jié)點(diǎn)的頭指針和尾指針按下述情況進(jìn)行處理(1)如果刪除的IP地址僅被節(jié)點(diǎn)的頭指針指向,則將頭指針移向后一個(gè)IP地址;(2)如果刪除的IP地址僅僅被尾指針指向,則將尾指針移向前一個(gè)IP地址;(3)如果刪除的IP地址同時(shí)被頭指針和尾指針指向,則刪除頭指針和尾指針。
全文摘要
本發(fā)明公開了一種檢索IP地址的方法,用于從IP地址集中搜索與配置的當(dāng)前IP地址相關(guān)的地址;IP地址形成的全局地址鏈表按包含關(guān)系排序,并以IP地址的掩碼長度為節(jié)點(diǎn)按遞升順序形成樹索引結(jié)構(gòu),節(jié)點(diǎn)的頭指針和尾指針指向所述全局地址鏈表中的IP地址,該兩個(gè)指針從全局地址鏈表上截取的一段地址集合全部被該節(jié)點(diǎn)所代表的IP子網(wǎng)所包含;檢測時(shí)根據(jù)配置的當(dāng)前IP地址的掩碼長度從樹索引結(jié)構(gòu)中查找到相應(yīng)的節(jié)點(diǎn),并從該節(jié)點(diǎn)頭指針和尾指針從全局鏈表中括住的IP地址中進(jìn)行沖突判斷等操作。
文檔編號H04L12/24GK1581846SQ0315413
公開日2005年2月16日 申請日期2003年8月12日 優(yōu)先權(quán)日2003年8月12日
發(fā)明者王軍 申請人:華為技術(shù)有限公司