專利名稱:IPv6路由表快速查找和更新的方法
技術領域:
本發(fā)明涉及計算機網絡技術領域,特別是一種基于IPv6地址實現快速路由表查找和更新的方法。
背景技術:
路由表查找方法是路由器轉發(fā)系統(tǒng)中的關鍵技術,查找效率的高低在很大程度上影響了路由器的轉發(fā)效率。路由表查找的基本思想是,給定一個地址關鍵字,需要在路由表中查找到匹配這個地址關鍵字的最長的地址前綴,根據地址前綴的下一跳端口號進行后續(xù)的處理。與傳統(tǒng)的只能完成對關鍵字精確匹配的查找相比,路由表查找的難度和復雜度大大增加。
目前針對IPv4路由器開展研究的路由查找方法已有很多,最廣泛應用的包括兩大類查找方法,分別為基于trie樹的方法和基于地址前綴長度的二分查找法。但是,隨著IPv6網絡的進一步普及,這些路由表查找方法都遇到了各自的局限。
基于trie樹的查找方法是這樣的,trie是一種樹結構,它利用地址前綴中的每一位bit的值來構造樹的分支。trie的一種優(yōu)化方法為多分支trie樹,它采用地址前綴中的多個bit構造樹的每一個節(jié)點,這樣可以減小查找深度,卻也帶來了負面的影響。它的主要問題集中在步寬的選擇上,步寬大,方法效率高,內存占用大;步寬小,方法效率低,內存占用少。人們雖然已經使用了各種壓縮方法來試圖解決這個問題,但是,在IPv4網絡中,由于地址位數少,步寬的選擇范圍有限,這個問題還不是特別突出,IPv6 128位的網絡地址使得它的問題凸顯出來,造成該方法查找性能嚴重下降。
相比較而言,基于地址前綴長度的二分查找法在IPv6網絡中是性能效率比較好的一種查找方法,這個方法是在基于哈希表的線性查找方法基礎上發(fā)展起來的。它的基本思想是將路由表根據不同的前綴長度進行分類,將具有相同長度的前綴組成一個哈希表,這樣整個路由表將由多個哈希表組成。之后根據地址關鍵字的長度對這些哈希表進行二分查找,再根據哈希查找法直接定位到最長匹配的前綴。該方法的實施過程中會遇到一些細節(jié)的問題,例如對于前綴表1*,00*,111*,如果要查找的地址關鍵字為111,首先二分查找11*,在2位的哈希表中只有00*,沒有11*,這時需要引入一個機制,在2位哈希表中添加一個marker 11*,這個marker不是實際的地址前綴,只是為了查找過程的需要。找到11*后,在前綴表的后面繼續(xù)查找,此時可以找到111*。雖然IPv6地址長度的增加對該方法的影響不大,但是該方法的更新效率較差,由于前綴與前綴之間,前綴與marker之間的依賴關系較大,當一個前綴遇到添加、刪除、更新等操作時,需要改動多個前綴或者marker的信息,如何找到這些需要改動的前綴或者marker是非常困難的。此外,這些更新操作,即使是通過優(yōu)化,也需要在一段時間之后重構整個hash表集合。
發(fā)明內容
本發(fā)明所要解決的技術問題在于提出一種適用于IPv6網絡路由器的路由表查找和更新方法,特別是在保證了路由表查找效率的同時,有效的提高路由表的更新效率。該方法可以用于IPv6網絡路由器轉發(fā)系統(tǒng)中路由表的查找與更新。
本發(fā)明是這樣實現的一種基于IPv6地址實現快速路由表查找和更新的方法,其特征在于首先建立三種數據結構(1)線性索引表,其中的每一個表項對應了零個、一個或者多個長度等于或者小于16的地址前綴;(2)HTL(Hash Table List,哈希表列表),將路由表中所有長度小于等于16的前綴按照長度分類存儲在不同的hash表中,這些hash表的集合構成了HTL;
(3)B-HTL(Binary tree-Hash Table List,基于二分查找樹組織的哈希表列表),將路由表中所有長度大于16的前綴按照長度分類存儲在不同的hash表中,這些hash表通過二分查找樹組織起來構成B-HTL;當一個IPv6協議的數據分組進入路由器之后,取出目的地址的高16bit,作為索引值定位到線性索引表的對應表項,如果該表項的標志位為0,則直接取出表項中的下一跳端口作為轉發(fā)端口;否則,根據表項中存儲的信息,在對應的B-HTL中利用二分查找樹進行查找;利用HTL中存儲的數據對線性索引表進行更新操作。
所述的基于IPv6地址實現快速路由表查找和更新的方法,所述線性索引表固定為64k個表項,每一個表項長度為3個字節(jié),劃分為3個部分,其中高16bit為第一部分,用來表示前綴長度或者指向B-HTL的指針;接下來的一個bit為標志位,用來表示第一部分所存儲內容的含義;第三部分為最后7bit,表示該表項對應的下一跳路由端口;每一個線性索引表的表項唯一的對應了一個B-HTL。
所述線性索引表第一部分,當用來表示前綴長度時,其16bit的長度每一位都置1或者置0;當一個長度為n的地址前綴對應到某個線性索引表項時,該表項第一部分的第n位置1,否則置0。
在所述線性索引表中執(zhí)行更新操作時,如果要更新的前綴長度L小于等于16,先將表項第一部分中第L位置1,隨后判斷在高于L的位中是否存在為1的位,如果不存在,則根據標記位將線性索引表表項的第三部分改寫為要更新前綴的端口號;在所述線性索引表中執(zhí)行刪除操作時,如果要刪除的前綴長度L小于等于16,先將表項第一部分中第L位置置0,隨后判斷高于L的位中是否存在為1的位,如果存在,則在HTL對應前綴長度的hash表中刪除該前綴;如果不存在,則在低于L的那些位中查找最高的值為1的位,并根據該位的位置在HTL中查找對應的前綴,將線性索引表表項第三部分改寫為所查找到前綴的端口號。
所述的基于IPv6地址實現快速路由表查找和更新的方法,執(zhí)行路由表查找的操作包括如下步驟5A、取出IPv6分組目的地址的前16bit作為索引值,在線性索引表中查找對應的表項;5B、如果該表項的標記位為1,執(zhí)行5D;5C、取得該表項對應的輸出端口,執(zhí)行5F;5D、取出IPv6分組目的地址的后112bit;5E、在線性索引表的表項中取得B-HTL指針,在對應的B-HTL中利用后112bit地址執(zhí)行二分查找,取得對應的輸出端口;5F、結束。
所述B-HTL的二分查找樹的每一個節(jié)點都指向一個hash表;hash表中每一個表項包括以下幾個部分(1)長度為16byte的IPv6地址;(2)長度為7bit的下一跳端口號;(3)長度為1bit的標記位,用于表示該表項是否對應了一條長度大于16的地址前綴;(4)長度為1bit的標記位,用于表示該表項是否對應一個marker;(5)長度為8bit的BMP(Best Matched Prefix,最長匹配前綴),用于表示該表項對應的的最長地址前綴長度;(6)長度為16bit的marker計數器,用于統(tǒng)計該表項上疊加的marker數量;(7)expand指針,指向一個BMP_tree(最長匹配地址前綴樹)的根節(jié)點;(8)next_level指針,指向BMP_tree中的下級節(jié)點;(9)same_level指針,指向BMP_tree中的同級節(jié)點。
所述BMP_tree由B-HTL中hash表的表項組成,每一個表項的expand指針唯一對應一棵BMP_tree,BMP_tree中的每一個節(jié)點都以該表項為前綴,并且根據節(jié)點中前綴的長度由低到高設置該節(jié)點在BMP_tree中的層次,具有同樣前綴長度的節(jié)點處于BMP_tree的同一層;當對B-HTL進行添加、刪除、更新操作時,通過BMP_tree查找那些需要改變的hash表表項。
所述的基于IPv6地址實現快速路由表查找和更新的方法,對B-HTL添加一個前綴P2時,執(zhí)行如下步驟
8A、在B-HTL中查找P2的最長地址前綴節(jié)點P1;8B、在P1的BMP-tree中,遍歷所有層次高于P2的前綴節(jié)點,分別執(zhí)行8C、8D、8E;8C、如果遍歷沒有結束,那么執(zhí)行8D,否則,執(zhí)行8F;8D、如果P2是該節(jié)點的前綴,那么執(zhí)行8E,否則遍歷到下一個節(jié)點,執(zhí)行8C;8E、從P1的BMP-tree中取出該節(jié)點,移動到P2的BMP-tree中,遍歷到下一個節(jié)點,執(zhí)行8C;8F、為P2在B-HTL中添加marker;8G、將P2添加到P1的BMP-tree中;8H、結束。
所述的基于IPv6地址實現快速路由表查找和更新的方法,對B-HTL刪除一個前綴P2時,執(zhí)行如下步驟9A、在B-HTL中查找P2的最長地址前綴節(jié)點P1;9B、在P1的BMP-tree中,遍歷所有層次高于P2的前綴節(jié)點,分別執(zhí)行9C、9D、9E;9C、如果遍歷沒有結束,那么執(zhí)行9D,否則,執(zhí)行9F;9D、如果該節(jié)點是P2的前綴,那么執(zhí)行9E,否則遍歷到下一個節(jié)點,執(zhí)行9C;9E、修改該節(jié)點數據結構存儲的信息,遍歷到下一個節(jié)點,執(zhí)行9C;9F、取出P2的BMP-tree,并入P1的BMP-tree;9G、刪除P2的前綴信息;9H、結束。
所述B-HTL中每一個hash表對應了唯一的地址前綴長度,B-HTL中所有的hash表對應了一個地址前綴長度區(qū)間;所述二分查找樹在這個前綴長度區(qū)間范圍內構建,二分查找樹的每一個節(jié)點覆蓋B-HTL的一部分地址前綴長度區(qū)間,該節(jié)點對應的hash表的前綴長度也在這部分地址前綴長度區(qū)間中,并且將這部分地址前綴長度區(qū)間劃分為兩個子區(qū)間,該兩個子區(qū)間分別對應該節(jié)點的左右兩個子節(jié)點;在任意一個節(jié)點對應的地址前綴長度區(qū)間中,選擇表項數量最多的一個hash表作為所述任意節(jié)點對應的hash表。
所述B-HTL中每一個hash表對應了唯一的地址前綴長度,B-HTL中所有的hash表對應了一個地址前綴長度區(qū)間;所述二分查找樹在這個前綴長度區(qū)間范圍內構建,二分查找樹的每一個節(jié)點覆蓋B-HTL的一部分地址前綴長度區(qū)間,該節(jié)點對應的hash表的前綴長度也在這部分地址前綴長度區(qū)間中,并且將這部分地址前綴長度區(qū)間劃分為兩個子區(qū)間,分別對應該節(jié)點的左右兩個子節(jié)點;在任意一個節(jié)點對應的地址前綴長度區(qū)間中,選擇一個hash表,用這個hash表將地址前綴長度區(qū)間劃分為兩個子區(qū)間,使得第一個子區(qū)間中hash表表項數量和與第二個子區(qū)間中hash表表項數量和最接近,則這個hash表作為該節(jié)點對應的hash表。
本發(fā)明采用兩級查找和三種數據結構的模式,通過一級線性索引,將整個地址空間劃分為64k個部分,在保證了原有的基于地址前綴的二分查找法效率的同時,每一次路由表的更新操作只需要在64k個地址空間中的一個里面進行,而無需改動其它地址空間中的路由表,提高了路由表更新和重構的效率。同時,在基于地址前綴的二分查找法的數據結構B-HTL中,增加了被稱為BMP_tree的數據組織方式,通過這種數據組織方式,減少了路由表更新操作中所需要訪問的hash表表項,進一步提高了路由表更新的效率。
圖1是IPv6地址格式示意圖。
圖2是本發(fā)明所使用數據結構的相互關系圖。
圖3是線性索引表表項結構示意圖。
圖4是應用本發(fā)明進行路由表查找的流程圖。
圖5是本發(fā)明中BMP-tree結構示意圖。
圖6(a)是在B-HTL中添加前綴P2的流程圖。
圖6(b)是在B-HTL中刪除前綴P2的流程圖。
圖7(a)是IPv4路由表中地址前綴按照長度的分布統(tǒng)計圖。
圖7(b)是IPv6路由表中地址前綴按照長度的分布統(tǒng)計圖。
具體實施例方式
下面結合附圖和實施例,對本發(fā)明做進一步的詳細闡述.
在RFC2373、RFC2374中提出了可聚集的全球單播地址格式方案,該方案將IPv6地址劃分為若干段,其中前64位為網絡ID,后64位為接口ID。在網絡ID中,又劃分出若干網絡層次,不同的子網地址由不同的互聯網機構負責分配。因此,本發(fā)明取路由表地址前綴的前16位,即頂極聚集標識符所對應的范圍,作為一級線性索引的索引值,并且構建HTL,再根據剩余的112位地址組成B-HTL,在其中進行二分法查找,如圖1所示數據結構示意圖如圖2所示。其主要分為三種數據結構線性索引表、HTL以及B-HTL。其中,B-HTL由一組hash表組成,每一個B-HTL對應線性索引表中的一個表項。B-HTL來源于基于地址前綴空間的二分查找發(fā)所使用的數據結構,只不過它的hash表中存儲的地址前綴前16位都相同,都是對應的線性索引表表項的索引值。
線性索引表每個表項的結構如圖3所示,它有兩種格式當標記位為0時,表示在路由表中不存在以這個16位地址前綴為起始的長度大于16的其它的地址前綴,此時表項前16位用來表示掩碼長度,即指示出有多少不同長度的前綴都對應到該表項;表項后7位為輸出端口,也就是對應到該表項中前綴長度最長的一個路由表前綴的輸出端口。
當標記位為1時,表示存在長度大于16的地址前綴,此時表項前16位用來作為指針指向一個B-HTL,以便在其中執(zhí)行基于地址前綴長度的二分查找法查找最長匹配前綴;表項后7位此時沒有意義,需置0。
由于線性索引表查找的效率遠遠大于hash查找,而且,如果能將該一級索引表放置于緩存中,其查找時間更可以忽略不計。最重要的是,線性索引表將地址前綴空間劃分為若干個子空間,對每一個子空間內地址前綴的添加、刪除和重構數據結構,都不會影響到其它子空間的地址前綴。
當一個IPv6的分組進入路由器之后,路由表查找方法流程圖如圖4所示。首先取出IPv6分組的目的地址的前16bit,用這16bit的內容作為索引值,假設這個值為N,直接定位到線性索引表的第N個表項上。如果該表項的標記位為0,說明在路由表中,沒有以這16bit內容開頭的長度大于16的前綴,此時直接取出該表項的第三部分輸出端口,作為這個IPv6分組的轉發(fā)端口,結束一次查找;如果該表項的標記位為1,說明在路由表中存在以這16bit內容開頭的長度大于16的前綴,為了找到這個前綴,需要取出該表項的第一部分,當標記位為1時,第一部分存放著B-HTL的指針,由這個指針定位到對應的B-HTL,在B-HTL中根據IPv6目的地址的后112bit的內容進行二分法查找。此后與基于地址前綴長度的二分查找方法類似,直到找到最長匹配的路由表前綴,取出對應的下一跳端口號,結束一次查找。
原始的基于地址前綴的二分查找法更新效率很低,時間復雜度達到了O(N*logW)。在路由表很大的情況下,由于網絡中路由表更新的頻繁發(fā)生,這樣的效率無法接受。原始查找方法中影響更新效率的關鍵因素在于如何找到那些需要進行更新的marker。
對marker的更新包括如下幾種情況。
●替換一個地址前綴時,由于不影響該前綴節(jié)點的marker,所以只需簡單替換即可。
●插入一個地址前綴時,需要為該前綴添加查找時需要的marker,同時需要將以該前綴作為BMP(Best Matched Prefix)的所有marker的BMP改寫為該前綴。
●刪除一個前綴時,需要刪除該前綴所對應的marker,注意如果某個marker有復用的情況,則不能被刪除,同時需要將以該前綴作為BMP的所有marker的BMP改寫為該前綴的BMP。
通過分析可知,更新一條地址前綴記錄p/l時(p為前綴地址,l為前綴長度),原始查找方法需要更新兩類marker,第一類是長度小于l的marker,這類marker供二分查找時使用;第二類是其BMP為p/l的marker,這類marker的作用是為了避免回溯。對第一類marker的更新較為簡單,因為p的地址是已知的,它所對應的第一類marker可以直接通過在對應長度的hash表中進行hash查找獲得。而第二類marker代表了p/l的前綴擴展,由于并不知道p/l在路由表中有哪些前綴擴展,因此需要遍歷所有長度大于l的hash表,或者是在所有長度大于l的hash表中對前綴為p/l的完備集合進行hash查找,這個效率十分低下。
一個簡單的方法是,在構建數據結構的時候,將每個前綴表項的第二類marker通過線性鏈表鏈接起來,這樣可以大大縮小查找的范圍。但是,這樣的查找方法執(zhí)行效率仍有提高的空間。因此,本發(fā)明使用樹型數據結構,BMP-tree,用來組織具有同樣BMP的表項。
并不是所有的marker都有最長匹配前綴。為了一致性,在hash表中添加了兩個偽前綴hash表項,在本實施例中,這兩個偽前綴表項添加在長度為17的hash表中。假設這個hash表列表中所有的表項都有共同的前綴p/16,那么添加的兩個偽前綴表項分別為{p,0}/17和{p,1}/17。
如圖5(a)所示為BMP-tree數據結構示意圖。其中圖5(a)是前綴P2刪除前(或添加后),圖5(b)是前綴P2刪除后(或添加前)。左邊為二分搜索樹,表明了各hash表之間的關系。右邊為hash表列表以及hash表中各表項組成的BMP-tree,其中p表示該表項為純前綴,m表示該表項為純marker,b表示該表項既是一個前綴,也是一個marker,它們使用同一個hash表項。
對于一個hash表項而言,如果它代表了一個前綴,即標記為p或者b,那么它有一個指針指向它所對應的BMP-tree,BMP-tree中的每一個節(jié)點都是以該前綴作為BMP(最長匹配前綴)的hash表項。對BMP-tree中每一個父節(jié)點來說,它的左子節(jié)點的前綴長度大于父節(jié)點的前綴長度,而它的右子節(jié)點的前綴長度等于父節(jié)點的前綴長度。將從根節(jié)點開始,將所有左子節(jié)點組成的唯一一條路徑稱作該BMP-tree的主干,將主干上某一節(jié)點開始所有右節(jié)點組成的路徑成為該BMP-tree的長度為l的支干,其中l(wèi)為該支干上所有節(jié)點的前綴長度。
圖中標記為P1的表項對應了一棵BMP-tree,用淺色節(jié)點表示。標記為P2的表項對應了另外一棵BMP-tree,用深色節(jié)點表示??芍琍2的BMP是P1。刪除表項P2時,首先更新P2的第一類marker,如果該marker需要被刪除,則在P1的BMP-tree中搜索那些長度小于P2的前綴長度的支干。然后更新P2的第二類marker,此時只需將P2的BMP-tree中所有節(jié)點的BMP都改寫為P1,然后把P2的BMP-tree合并到P1的BMP-tree中即可,合并后的數據結構如圖5(b)所示,其流程圖見圖6(a)。
添加路由前綴的操作與刪除操作類似。例如在圖5(b)所示的數據結構中添加前綴P2,首先要添加P2的第一類marker,如果涉及到新增表項的操作,那么要在P2的BMP,也就是P1的BMP-tree中對應長度的支干上添加節(jié)點。然后要構造P2的BMP-tree,在P1的BMP-tree中長度大于P2的前綴長度的支干中線性搜索,查找那些以P2為前綴的節(jié)點,將其BMP改寫為P2,并且把它們從P1的BMP-tree中剪切出來,添加到P2的BMP-tree中即可。添加前綴的流程圖見圖6(b)。
通過引入BMP-tree,前綴表項的刪除操作變得十分快捷,如果使用雙向鏈表,那么刪除操作的時間復雜度可以控制在O(kWlogW),其中k為單次操作鏈表所需內存訪問次數,比起原有的需要線性搜索的方法來說效率大大提高。而添加路由表項的操作效率還不是太好,但是相比原有的方法來說,引入BMP-tree之后,可以根據地址前綴的長度,排除大量的備選表項,也在一定程度上提高了效率。
圖6(a)是在B-HTL中添加前綴P2的流程圖。圖7(a)所示為IPv4主干網路由器中路由前綴按照長度分布的統(tǒng)計直方圖。在圖中可以看到,不同長度的前綴在路由表中的數量是不同的,有特定的分布特征。如果充分利用這些特征,可以有效改善查找方法的平均效率。圖6(b)是在B-HTL中刪除前綴P2的流程圖。類似的,如圖7(b)所示為IPv6主干網路由器的路由前綴按長度分布統(tǒng)計直方圖(僅顯示了前64位網絡地址)。
為了簡化說明,以IPv4路由表為例來說明采用不同的二分搜索樹對于查找效率的影響,如圖7所示,圖7(a)是IPv4路由表中地址前綴按照長度的分布統(tǒng)計圖。
圖7(b)是IPv6路由表中地址前綴按照長度的分布統(tǒng)計圖。如果使用平衡二分搜索樹進行查找,雖然一些hash表的前綴數量占有優(yōu)勢,但是它所處的位置位于搜索樹較深的層次,對于大部分的搜索任務來說,需要更多的內存訪問才能完成一次查找。而如果通過對二分搜索路徑進行設計,將擁有前綴數量較多的hash表置于較高的層次,雖然增加了樹的最大深度,使得最大搜索深度增加,但是改善了平均效率。
此外,傳統(tǒng)的基于地址前綴長度的二分查找法對marker的引入必然帶來內存的額外消耗。由于一些marker可以與真正的路由前綴信息復用同樣的內存空間,marker對空間效率的影響在一定程度上是可以控制的。為此,本實施例使用了兩種不同的搜索樹結構方案,盡量減少marker對內存空間的占用。
方案一使用包含前綴數量較多的hash表構成搜索樹的上層節(jié)點,可以使marker有最大的可能與真正的路由前綴信息復用內存空間;方案二出于這樣的考慮,對于二分搜索樹中的某個節(jié)點,它的右子樹中的前綴信息會在這個節(jié)點生成一個marker,如果能夠盡量縮減右子樹的大小,會大大降低marker的數量。一個極限情況是這棵二叉樹中每一個節(jié)點只有左子節(jié)點,這樣不需要額外的marker的存儲,但是二叉樹退化到線性搜索。為此,方案二采用了平衡左右子樹的方法,在選擇父節(jié)點時,其左右子樹中前綴的數量盡可能相等,最好是左節(jié)點中前綴數量略大于右節(jié)點中前綴數量。
兩種構造搜索樹結構的方案都在很大程度上提高了搜索方法的效率,并且減少了marker的存儲。
由上可知,本發(fā)明在基于地址前綴長度的二分查找法基礎上,使用了兩級的查找模式,通過第一級的線性索引表分隔了地址前綴空間,減小了不同子空間內地址前綴更新時的相互影響,也保證了查找的效率;在基于地址前綴長度的二分查找法所使用的數據結構中增加了一種數據組織方式BMP-tree,進一步減少了路由表更新時的開銷;最后,本發(fā)明提供了兩種不同的二分查找樹組織方式,減小了存儲的開銷。
權利要求
1,一種基于IPv6地址實現快速路由表查找和更新的方法,其特征在于首先建立三種數據結構(1)線性索引表,其中的每一個表項對應了零個、一個或者多個長度等于或者小于16的地址前綴;(2)HTL,將路由表中所有長度小于等于16的前綴按照長度分類存儲在不同的hash表中,這些hash表的集合構成了HTL;(3)B-HTL,將路由表中所有長度大于16的前綴按照長度分類存儲在不同的hash表中,這些hash表通過二分查找樹組織起來構成B-HTL;當一個IPv6協議的數據分組進入路由器之后,取出目的地址的高16bit,作為索引值定位到線性索引表的對應表項,如果該表項的標志位為0,則直接取出表項中的下一跳端口作為轉發(fā)端口;否則,根據表項中存儲的信息,在對應的B-HTL中利用二分查找樹進行查找;利用HTL中存儲的數據對線性索引表進行更新操作。
2,根據權利要求1所述的基于IPv6地址實現快速路由表查找和更新的方法,其特征在于所述線性索引表固定為64k個表項,每一個表項長度為3個字節(jié),劃分為3個部分,其中高16bit為第一部分,用來表示前綴長度或者指向B-HTL的指針;接下來的一個bit為標志位,用來表示第一部分所存儲內容的含義;第三部分為最后7bit,表示該表項對應的下一跳路由端口;每一個線性索引表的表項唯一的對應了一個B-HTL。
3,根據權利要求2所述的基于IPv6地址實現快速路由表查找和更新的方法,其特征在于所述線性索引表第一部分,當用來表示前綴長度時,其16bit的長度每一位都置1或者置0;當一個長度為n的地址前綴對應到某個線性索引表項時,該表項第一部分的第n位置1,否則置0。
4,根據權利要求1或3所述的基于IPv6地址實現快速路由表查找和更新的方法,其特征在于在所述線性索引表中執(zhí)行更新操作時,如果要更新的前綴長度L小于等于16,先將表項第一部分中第L位置1,隨后判斷在高于L的位中是否存在為1的位,如果不存在,則根據標記位將線性索引表表項的第三部分改寫為要更新前綴的端口號;在所述線性索引表中執(zhí)行刪除操作時,如果要刪除的前綴長度L小于等于16,先將表項第一部分中第L位置置0,隨后判斷高于L的位中是否存在為1的位,如果存在,則在HTL對應前綴長度的hash表中刪除該前綴;如果不存在,則在低于L的那些位中查找最高的值為1的位,并根據該位的位置在HTL中查找對應的前綴,將線性索引表表項第三部分改寫為所查找到前綴的端口號。
5,根據權利要求2所述的基于IPv6地址實現快速路由表查找和更新的方法,其特征在于執(zhí)行路由表查找的操作包括如下步驟5A、取出IPv6分組目的地址的前16bit作為索引值,在線性索引表中查找對應的表項;5B、如果該表項的標記位為1,執(zhí)行5D;5C、取得該表項對應的輸出端口,執(zhí)行5F;5D、取出IPv6分組目的地址的后112bit;5E、在線性索引表的表項中取得B-HTL指針,在對應的B-HTL中利用后112bit地址執(zhí)行二分查找,取得對應的輸出端口;5F、結束。
6,根據權利要求1所述的基于IPv6地址實現快速路由表查找和更新的方法,其特征在于所述B-HTL的二分查找樹的每一個節(jié)點都指向一個hash表;hash表中每一個表項包括以下幾個部分(1)長度為16byte的IPv6地址;(2)長度為7bit的下一跳端口號;(3)長度為1bit的標記位,用于表示該表項是否對應了一條長度大于16的地址前綴;(4)長度為1bit的標記位,用于表示該表項是否對應一個marker;(5)長度為8bit的BMP,用于表示該表項對應的的最大地址前綴長度;(6)長度為16bit的marker計數器,用于統(tǒng)計該表項上疊加的marker數量;(7)expand指針,指向一個BMP_tree的根節(jié)點;(8)next_level指針,指向BMP_tree中的下級節(jié)點;(9)same_level指針,指向BMP_tree中的同級節(jié)點。
7,根據權利要求6所述的基于IPv6地址實現快速路由表查找和更新的方法,其特征在于所述BMP_tree由B-HTL中hash表的表項組成,每一個表項的expand指針唯一對應一棵BMP_tree,BMP_tree中的每一個節(jié)點都以該表項為前綴,并且根據節(jié)點中前綴的長度由低到高設置該節(jié)點在BMP_tree中的層次,具有同樣前綴長度的節(jié)點處于BMP_tree的同一層;當對B-HTL進行添加、刪除、更新操作時,通過BMP_tree查找那些需要改變的hash表表項。
8,根據權利要求6或7所述的基于IPv6地址實現快速路由表查找和更新的方法,其特征在于對B-HTL添加一個前綴P2時,執(zhí)行如下步驟8A、在B-HTL中查找P2的最長地址前綴節(jié)點P1;8B、在P1的BMP-tree中,遍歷所有層次高于P2的前綴節(jié)點,分別執(zhí)行8C、8D、8E;8C、如果遍歷沒有結束,那么執(zhí)行8D,否則,執(zhí)行8F;8D、如果P2是該節(jié)點的前綴,那么執(zhí)行8E,否則遍歷到下一個節(jié)點,執(zhí)行8C;8E、從P1的BMP-tree中取出該節(jié)點,移動到P2的BMP-tree中,遍歷到下一個節(jié)點,執(zhí)行8C;8F、為P2在B-HTL中添加marker;8G、將P2添加到P1的BMP-tree中;8H、結束。
9,根據權利要求6或7所述的基于IPv6地址實現快速路由表查找和更新的方法,其特征在于對B-HTL刪除一個前綴P2時,執(zhí)行如下步驟9A、在B-HTL中查找P2的最長地址前綴節(jié)點P1;9B、在P1的BMP-tree中,遍歷所有層次高于P2的前綴節(jié)點,分別執(zhí)行9C、9D、9E;9C、如果遍歷沒有結束,那么執(zhí)行9D,否則,執(zhí)行9F;9D、如果該節(jié)點是P2的前綴,那么執(zhí)行9E,否則遍歷到下一個節(jié)點,執(zhí)行9C;9E、修改該節(jié)點數據結構存儲的信息,遍歷到下一個節(jié)點,執(zhí)行9C;9F、取出P2的BMP-tree,并入P1的BMP-tree;9G、刪除P2的前綴信息;9H、結束。
10,據權利要求1或6所述的基于IPv6地址實現快速路由表查找和更新的方法,其特征在于所述B-HTL中每一個hash表對應了唯一的地址前綴長度,B-HTL中所有的hash表對應了一個地址前綴長度區(qū)間;所述二分查找樹在這個前綴長度區(qū)間范圍內構建,二分查找樹的每一個節(jié)點覆蓋B-HTL的一部分地址前綴長度區(qū)間,該節(jié)點對應的hash表的前綴長度也在這部分地址前綴長度區(qū)間中,并且將這部分地址前綴長度區(qū)間劃分為兩個子區(qū)間,該兩個子區(qū)間分別對應該節(jié)點的左右兩個子節(jié)點;在任意一個節(jié)點對應的地址前綴長度區(qū)間中,選擇表項數量最多的一個hash表作為所述任意節(jié)點對應的hash表。
11,根據權利要求1或6所述的基于IPv6地址實現快速路由表查找和更新的方法,其特征在于所述B-HTL中每一個hash表對應了唯一的地址前綴長度,B-HTL中所有的hash表對應了一個地址前綴長度區(qū)間;所述二分查找樹在這個前綴長度區(qū)間范圍內構建,二分查找樹的每一個節(jié)點覆蓋B-HTL的一部分地址前綴長度區(qū)間,該節(jié)點對應的hash表的前綴長度也在這部分地址前綴長度區(qū)間中,并且將這部分地址前綴長度區(qū)間劃分為兩個子區(qū)間,分別對應該節(jié)點的左右兩個子節(jié)點;在任意一個節(jié)點對應的地址前綴長度區(qū)間中,選擇一個hash表,用這個hash表將地址前綴長度區(qū)間劃分為兩個子區(qū)間,使得第一個子區(qū)間中hash表表項數量和與第二個子區(qū)間中hash表表項數量和最接近,則這個hash表作為該節(jié)點對應的hash表。
全文摘要
本發(fā)明涉及計算機網絡技術領域,提供一種對IPv6路由表進行快速查找和更新的方法。其中路由表快速查找的方法包括使用一級線性索引表和二級的由二分查找樹組織的hash表集合,進行兩階段的查找;路由表快速更新的方法包括使用BMP-tree重新組織數據結構中各前綴之間關系,改善更新效率;為了減小存儲空間,設計了兩種二分查找樹構建方法;本發(fā)明與傳統(tǒng)的多重查找表以及基于地址前綴長度的二分查找法相比,具有更加適用于IPv6網絡、更快的查找和更新效率等優(yōu)點。
文檔編號H04L29/06GK1964311SQ20051008684
公開日2007年5月16日 申請日期2005年11月10日 優(yōu)先權日2005年11月10日
發(fā)明者孫慶南, 魯士文 申請人:中國科學院計算技術研究所