国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      IPv6路由表快速查找和更新的方法

      文檔序號:7621152閱讀:461來源:國知局
      專利名稱:IPv6路由表快速查找和更新的方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及計算機網(wǎng)絡(luò)技術(shù)領(lǐng)域,特別是一種基于IPv6地址實現(xiàn)快速路由表查找和更新的方法。
      背景技術(shù)
      路由表查找方法是路由器轉(zhuǎn)發(fā)系統(tǒng)中的關(guān)鍵技術(shù),查找效率的高低在很大程度上影響了路由器的轉(zhuǎn)發(fā)效率。路由表查找的基本思想是,給定一個地址關(guān)鍵字,需要在路由表中查找到匹配這個地址關(guān)鍵字的最長的地址前綴,根據(jù)地址前綴的下一跳端口號進行后續(xù)的處理。與傳統(tǒng)的只能完成對關(guān)鍵字精確匹配的查找相比,路由表查找的難度和復(fù)雜度大大增加。
      目前針對IPv4路由器開展研究的路由查找方法已有很多,最廣泛應(yīng)用的包括兩大類查找方法,分別為基于trie樹的方法和基于地址前綴長度的二分查找法。但是,隨著IPv6網(wǎng)絡(luò)的進一步普及,這些路由表查找方法都遇到了各自的局限。
      基于trie樹的查找方法是這樣的,trie是一種樹結(jié)構(gòu),它利用地址前綴中的每一位bit的值來構(gòu)造樹的分支。trie的一種優(yōu)化方法為多分支trie樹,它采用地址前綴中的多個bit構(gòu)造樹的每一個節(jié)點,這樣可以減小查找深度,卻也帶來了負面的影響。它的主要問題集中在步寬的選擇上,步寬大,方法效率高,內(nèi)存占用大;步寬小,方法效率低,內(nèi)存占用少。人們雖然已經(jīng)使用了各種壓縮方法來試圖解決這個問題,但是,在IPv4網(wǎng)絡(luò)中,由于地址位數(shù)少,步寬的選擇范圍有限,這個問題還不是特別突出,IPv6 128位的網(wǎng)絡(luò)地址使得它的問題凸顯出來,造成該方法查找性能嚴重下降。
      相比較而言,基于地址前綴長度的二分查找法在IPv6網(wǎng)絡(luò)中是性能效率比較好的一種查找方法,這個方法是在基于哈希表的線性查找方法基礎(chǔ)上發(fā)展起來的。它的基本思想是將路由表根據(jù)不同的前綴長度進行分類,將具有相同長度的前綴組成一個哈希表,這樣整個路由表將由多個哈希表組成。之后根據(jù)地址關(guān)鍵字的長度對這些哈希表進行二分查找,再根據(jù)哈希查找法直接定位到最長匹配的前綴。該方法的實施過程中會遇到一些細節(jié)的問題,例如對于前綴表1*,00*,111*,如果要查找的地址關(guān)鍵字為111,首先二分查找11*,在2位的哈希表中只有00*,沒有11*,這時需要引入一個機制,在2位哈希表中添加一個marker 11*,這個marker不是實際的地址前綴,只是為了查找過程的需要。找到11*后,在前綴表的后面繼續(xù)查找,此時可以找到111*。雖然IPv6地址長度的增加對該方法的影響不大,但是該方法的更新效率較差,由于前綴與前綴之間,前綴與marker之間的依賴關(guān)系較大,當一個前綴遇到添加、刪除、更新等操作時,需要改動多個前綴或者marker的信息,如何找到這些需要改動的前綴或者marker是非常困難的。此外,這些更新操作,即使是通過優(yōu)化,也需要在一段時間之后重構(gòu)整個hash表集合。

      發(fā)明內(nèi)容
      本發(fā)明所要解決的技術(shù)問題在于提出一種適用于IPv6網(wǎng)絡(luò)路由器的路由表查找和更新方法,特別是在保證了路由表查找效率的同時,有效的提高路由表的更新效率。該方法可以用于IPv6網(wǎng)絡(luò)路由器轉(zhuǎn)發(fā)系統(tǒng)中路由表的查找與更新。
      本發(fā)明是這樣實現(xiàn)的一種基于IPv6地址實現(xiàn)快速路由表查找和更新的方法,其特征在于首先建立三種數(shù)據(jù)結(jié)構(gòu)(1)線性索引表,其中的每一個表項對應(yīng)了零個、一個或者多個長度等于或者小于16的地址前綴;(2)HTL(Hash Table List,哈希表列表),將路由表中所有長度小于等于16的前綴按照長度分類存儲在不同的hash表中,這些hash表的集合構(gòu)成了HTL;
      (3)B-HTL(Binary tree-Hash Table List,基于二分查找樹組織的哈希表列表),將路由表中所有長度大于16的前綴按照長度分類存儲在不同的hash表中,這些hash表通過二分查找樹組織起來構(gòu)成B-HTL;當一個IPv6協(xié)議的數(shù)據(jù)分組進入路由器之后,取出目的地址的高16bit,作為索引值定位到線性索引表的對應(yīng)表項,如果該表項的標志位為0,則直接取出表項中的下一跳端口作為轉(zhuǎn)發(fā)端口;否則,根據(jù)表項中存儲的信息,在對應(yīng)的B-HTL中利用二分查找樹進行查找;利用HTL中存儲的數(shù)據(jù)對線性索引表進行更新操作。
      所述的基于IPv6地址實現(xiàn)快速路由表查找和更新的方法,所述線性索引表固定為64k個表項,每一個表項長度為3個字節(jié),劃分為3個部分,其中高16bit為第一部分,用來表示前綴長度或者指向B-HTL的指針;接下來的一個bit為標志位,用來表示第一部分所存儲內(nèi)容的含義;第三部分為最后7bit,表示該表項對應(yīng)的下一跳路由端口;每一個線性索引表的表項唯一的對應(yīng)了一個B-HTL。
      所述線性索引表第一部分,當用來表示前綴長度時,其16bit的長度每一位都置1或者置0;當一個長度為n的地址前綴對應(yīng)到某個線性索引表項時,該表項第一部分的第n位置1,否則置0。
      在所述線性索引表中執(zhí)行更新操作時,如果要更新的前綴長度L小于等于16,先將表項第一部分中第L位置1,隨后判斷在高于L的位中是否存在為1的位,如果不存在,則根據(jù)標記位將線性索引表表項的第三部分改寫為要更新前綴的端口號;在所述線性索引表中執(zhí)行刪除操作時,如果要刪除的前綴長度L小于等于16,先將表項第一部分中第L位置置0,隨后判斷高于L的位中是否存在為1的位,如果存在,則在HTL對應(yīng)前綴長度的hash表中刪除該前綴;如果不存在,則在低于L的那些位中查找最高的值為1的位,并根據(jù)該位的位置在HTL中查找對應(yīng)的前綴,將線性索引表表項第三部分改寫為所查找到前綴的端口號。
      所述的基于IPv6地址實現(xiàn)快速路由表查找和更新的方法,執(zhí)行路由表查找的操作包括如下步驟5A、取出IPv6分組目的地址的前16bit作為索引值,在線性索引表中查找對應(yīng)的表項;5B、如果該表項的標記位為1,執(zhí)行5D;5C、取得該表項對應(yīng)的輸出端口,執(zhí)行5F;5D、取出IPv6分組目的地址的后112bit;5E、在線性索引表的表項中取得B-HTL指針,在對應(yīng)的B-HTL中利用后112bit地址執(zhí)行二分查找,取得對應(yīng)的輸出端口;5F、結(jié)束。
      所述B-HTL的二分查找樹的每一個節(jié)點都指向一個hash表;hash表中每一個表項包括以下幾個部分(1)長度為16byte的IPv6地址;(2)長度為7bit的下一跳端口號;(3)長度為1bit的標記位,用于表示該表項是否對應(yīng)了一條長度大于16的地址前綴;(4)長度為1bit的標記位,用于表示該表項是否對應(yīng)一個marker;(5)長度為8bit的BMP(Best Matched Prefix,最長匹配前綴),用于表示該表項對應(yīng)的的最長地址前綴長度;(6)長度為16bit的marker計數(shù)器,用于統(tǒng)計該表項上疊加的marker數(shù)量;(7)expand指針,指向一個BMP_tree(最長匹配地址前綴樹)的根節(jié)點;(8)next_level指針,指向BMP_tree中的下級節(jié)點;(9)same_level指針,指向BMP_tree中的同級節(jié)點。
      所述BMP_tree由B-HTL中hash表的表項組成,每一個表項的expand指針唯一對應(yīng)一棵BMP_tree,BMP_tree中的每一個節(jié)點都以該表項為前綴,并且根據(jù)節(jié)點中前綴的長度由低到高設(shè)置該節(jié)點在BMP_tree中的層次,具有同樣前綴長度的節(jié)點處于BMP_tree的同一層;當對B-HTL進行添加、刪除、更新操作時,通過BMP_tree查找那些需要改變的hash表表項。
      所述的基于IPv6地址實現(xiàn)快速路由表查找和更新的方法,對B-HTL添加一個前綴P2時,執(zhí)行如下步驟
      8A、在B-HTL中查找P2的最長地址前綴節(jié)點P1;8B、在P1的BMP-tree中,遍歷所有層次高于P2的前綴節(jié)點,分別執(zhí)行8C、8D、8E;8C、如果遍歷沒有結(jié)束,那么執(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、結(jié)束。
      所述的基于IPv6地址實現(xiàn)快速路由表查找和更新的方法,對B-HTL刪除一個前綴P2時,執(zhí)行如下步驟9A、在B-HTL中查找P2的最長地址前綴節(jié)點P1;9B、在P1的BMP-tree中,遍歷所有層次高于P2的前綴節(jié)點,分別執(zhí)行9C、9D、9E;9C、如果遍歷沒有結(jié)束,那么執(zhí)行9D,否則,執(zhí)行9F;9D、如果該節(jié)點是P2的前綴,那么執(zhí)行9E,否則遍歷到下一個節(jié)點,執(zhí)行9C;9E、修改該節(jié)點數(shù)據(jù)結(jié)構(gòu)存儲的信息,遍歷到下一個節(jié)點,執(zhí)行9C;9F、取出P2的BMP-tree,并入P1的BMP-tree;9G、刪除P2的前綴信息;9H、結(jié)束。
      所述B-HTL中每一個hash表對應(yīng)了唯一的地址前綴長度,B-HTL中所有的hash表對應(yīng)了一個地址前綴長度區(qū)間;所述二分查找樹在這個前綴長度區(qū)間范圍內(nèi)構(gòu)建,二分查找樹的每一個節(jié)點覆蓋B-HTL的一部分地址前綴長度區(qū)間,該節(jié)點對應(yīng)的hash表的前綴長度也在這部分地址前綴長度區(qū)間中,并且將這部分地址前綴長度區(qū)間劃分為兩個子區(qū)間,該兩個子區(qū)間分別對應(yīng)該節(jié)點的左右兩個子節(jié)點;在任意一個節(jié)點對應(yīng)的地址前綴長度區(qū)間中,選擇表項數(shù)量最多的一個hash表作為所述任意節(jié)點對應(yīng)的hash表。
      所述B-HTL中每一個hash表對應(yīng)了唯一的地址前綴長度,B-HTL中所有的hash表對應(yīng)了一個地址前綴長度區(qū)間;所述二分查找樹在這個前綴長度區(qū)間范圍內(nèi)構(gòu)建,二分查找樹的每一個節(jié)點覆蓋B-HTL的一部分地址前綴長度區(qū)間,該節(jié)點對應(yīng)的hash表的前綴長度也在這部分地址前綴長度區(qū)間中,并且將這部分地址前綴長度區(qū)間劃分為兩個子區(qū)間,分別對應(yīng)該節(jié)點的左右兩個子節(jié)點;在任意一個節(jié)點對應(yīng)的地址前綴長度區(qū)間中,選擇一個hash表,用這個hash表將地址前綴長度區(qū)間劃分為兩個子區(qū)間,使得第一個子區(qū)間中hash表表項數(shù)量和與第二個子區(qū)間中hash表表項數(shù)量和最接近,則這個hash表作為該節(jié)點對應(yīng)的hash表。
      本發(fā)明采用兩級查找和三種數(shù)據(jù)結(jié)構(gòu)的模式,通過一級線性索引,將整個地址空間劃分為64k個部分,在保證了原有的基于地址前綴的二分查找法效率的同時,每一次路由表的更新操作只需要在64k個地址空間中的一個里面進行,而無需改動其它地址空間中的路由表,提高了路由表更新和重構(gòu)的效率。同時,在基于地址前綴的二分查找法的數(shù)據(jù)結(jié)構(gòu)B-HTL中,增加了被稱為BMP_tree的數(shù)據(jù)組織方式,通過這種數(shù)據(jù)組織方式,減少了路由表更新操作中所需要訪問的hash表表項,進一步提高了路由表更新的效率。


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