国产精品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>

      多分支Trie樹的遍歷方法

      文檔序號:7646604閱讀:1402來源:國知局
      專利名稱:多分支Trie樹的遍歷方法
      技術(shù)領域
      本發(fā)明涉及網(wǎng)絡技術(shù),特別涉及IP地址査找方法。
      技術(shù)背景隨著Internet的迅猛發(fā)展,用于主干網(wǎng)絡互聯(lián)的核心路由器的接 口速率己經(jīng)達到了 2.5Gbit/s到10Gbit/s。這一速率要求核心路由器能 夠每秒鐘轉(zhuǎn)發(fā)幾百萬到上千萬個以上的分組。分組轉(zhuǎn)發(fā)的重要一步就 是查找路由表,因此快的IP地址查找算法是實現(xiàn)高分組轉(zhuǎn)發(fā)的關鍵 技術(shù)。IP地址查找需要實現(xiàn)最長前綴匹配。傳統(tǒng)的二進制Trie樹和 路徑壓縮Trie樹的不足之處在于查找過程需要大量的存儲器訪問操 作。近幾年來,隨著對路由器研究的逐步深入以及對于路由器性能要 求的不斷提高,人們提出了多分支Trie樹査找算法,與二進制Trie 樹和路徑壓縮Trie樹等傳統(tǒng)的地址前綴査找方法相比,這個算法在查 找性能方面有了很大的提高。如果把每一次査找中需要檢查的比特數(shù)稱為査找步寬,那么二分 支Trie樹實際上就是查找步寬為1的Trie樹,多分支Trie樹(或稱 為m-trie樹)是査找步寬大于1的Trie樹。多分支Trie樹算法是基于前綴長度空間內(nèi)的線性查找思想,但是 由于多分支Trie樹采用大于1的步寬,所以查找性能得到了很大的提 高。假設多分支Trie樹的每一步步寬均為K,當查找地址長度為W 時,查找過程的算法復雜度為(W/K)。多分支Trie樹的每一個中間 結(jié)點都需要包含2K個分支,最差情況下每加入一個新前綴,需要在 Trie樹中加入W/K個中間結(jié)點,從而需要占用存儲空間為(2KX W/K),所以N個前綴多分支Trie樹的存儲容量為(2KXNXW/K)。 對多分支Trie樹來說,查找速度與存儲容量是一對互相矛盾的性能指 標。當步寬K較大時,Trie樹的深度相對較大,查找性能較差,但是 存儲空間的需求小。因此可以根據(jù)實際系統(tǒng)的軟、硬件條件選擇多分支Trie樹的步寬K值。由于多分支Trie樹査找過程中的每一步需要檢查多個比特,因此 它不能支持任意長度的地址前綴。為了能夠用多分支Trie樹來進行前 綴查找,路由表中的地址前綴需要轉(zhuǎn)換成多分支Trie樹查找能夠允許 的地址前綴才行,最直接的方法就是前綴擴展法。如前綴1*所覆 蓋的地址范圍既可以擴展為10*, 11*,也可以擴展為 畫*,101*,110*, 111*。當用m-trie樹組織IP前綴表時,有時需要遍歷整個m-trie樹, 而由于m-trie的節(jié)點是擴展過的,可能多個節(jié)點存儲的信息都是同一 個IP前綴,故在遍歷時需要從各個節(jié)點中恢復出原來的IP前綴,針 對真實的IP前綴做需要的處理,而不是針對每個節(jié)點做處理,以免 針對一個IP前綴處理多次。遍歷的一般的做法是記錄己處理過的前 綴項,與后續(xù)需要處理的節(jié)點中的前綴進行比較,這通常需要消耗大 量的內(nèi)存,性能也較低。另一種做法是在各個IP前綴的具體信息中 增加字段,使整個表中的IP前綴鏈起來成為線性表,這種方法遍歷 性能較高,但會使本已很龐大的m-trie樹占用更多內(nèi)存,而且此方法 存在另一個問題是,其處理前綴時沒有順序,按加入的順序處理, 當在顯示前綴項時,其輸出的IP前綴項是沒有順序的,這不利于檢 査和問題定位,若要改進其無序的問題,則會增加更新m-trie樹的復 雜度。 發(fā)明內(nèi)容本發(fā)明所要解決的技術(shù)問題,就是提供一種多分支Trie樹的遍歷 方法,以提高遍歷性能,并降低內(nèi)存消耗。本發(fā)明解決所述技術(shù)問題,采用的技術(shù)方案是,多分支Trie樹的 遍歷方法,包括以下步驟a. 從根節(jié)點開始遍歷,每次遍歷一個塊;b. 判斷節(jié)點是否為有效節(jié)點,對有效節(jié)點計算其前綴和掩碼;c. 根據(jù)計算得到的前綴和掩碼,判斷節(jié)點對應的前綴是否已經(jīng) 處理過;若是,則遍歷下一個節(jié)點,否則用遍歷時傳入的處理函數(shù)處理此前綴;d.處理完一個節(jié)點,記錄此節(jié)點對應的前綴、掩碼、所在級數(shù)、 節(jié)點的位置信息以及位置存儲的前綴、掩碼和塊首指針信息。進一步的,步驟C中,下列判斷結(jié)果為是,則所述節(jié)點對應的前 綴己處理過判斷節(jié)點的前綴與上次處理過的節(jié)點的前綴是否相等或較??; 判斷節(jié)點的掩碼與上次處理過的節(jié)點的掩碼是否相等或較小。 特別的,步驟C中,所述處理函數(shù)為輸出函數(shù),所述處理此前綴 是指輸出此前綴。本發(fā)明的有益效果是,在遍歷過程中僅保存最近處理過的一個節(jié) 點對應的位置信息、IP前綴信息和其位置相關的最多四個前綴掩碼信 息,不需要分配和釋放內(nèi)存,也不需要緩存本級其它的IP前綴信息, 也不需要與本級其它的IP前綴比較,遍歷性能高。而且由于采用先 根遍歷方式,故可以保證處理順序。


      圖l是本發(fā)明的程序流程圖;圖2是判斷節(jié)點對應的IP前綴是否處理過的示意圖。
      具體實施方式
      以下結(jié)合附圖及實施例,詳細描述本發(fā)明的技術(shù)方案。 本發(fā)明可用于路由器、包交換系統(tǒng)或者其它通信或計算機系統(tǒng)中,當使用m-trie樹存儲IP前綴時,對m-trie樹遍歷的方法。 本發(fā)明中涉及的術(shù)語含義為 級數(shù)——是指m-trie樹從根到此節(jié)點的深度; 有效節(jié)點——節(jié)點中的valid標志為1,且含有路由信息,也即掩碼長度不為0的節(jié)點;葉節(jié)點——是指該節(jié)點下一級指針為空;內(nèi)節(jié)點——是指該節(jié)點下一級指針不為空,有兒子節(jié)點;處理函數(shù)——是指用于處理節(jié)點的函數(shù),如輸出函數(shù),設置標志的函數(shù)等;塊——包含2K個相鄰節(jié)點,是一個節(jié)點的所有兒子節(jié)點的集合。 本發(fā)明的核心思想是采取由小到大的先根遍歷方式,在處理一個 節(jié)點時,先與上次處理過的記錄相比較,若已處理過則遍歷下一個節(jié) 點,否則用處理函數(shù)處理此節(jié)點。在處理完一個節(jié)點后,記錄此節(jié)點 的位置信息、其位置對應的IP前綴信息以及其各級祖先的塊指針和 IP前綴信息。下面以用m-trie樹存儲的IPv4路由表為例進行詳細描述。遍歷 中使用固定步長K二8,也就是此m-trie樹是8 — 8 —8 —8的四級結(jié)構(gòu), 每級有28 二256個節(jié)點。這里的處理函數(shù)以輸出函數(shù)為例,也即以顯 示路由表為例說明本發(fā)明的遍歷方法。參見圖1,由于采用遞歸方式實現(xiàn),在步驟10中先判斷此次遍 歷是由于遞歸進入的,還是從外部調(diào)入的;若是遞歸進入的,則從遞 歸參數(shù)中得到本次遍歷的塊指針,否則就是m-trie樹的樹根。在步驟40中計算當前級數(shù),并計算當前級對應的前綴值。由于 m-trie樹中路徑對應的就是其bit位的信息,故需要將路徑轉(zhuǎn)換為前 綴值。在步驟50中從塊首開始依次遍歷28個節(jié)點。判斷是否完成本塊 的遍歷。如果完成本塊遍歷,就在步驟60中對級數(shù)減1,并結(jié)束本塊的 遍歷,并從遞歸中退出,當完成整棵樹的遍歷時,也是在此處退出。 在步驟70中判斷此節(jié)點是否是有效節(jié)點,若不是則繼續(xù)下一個節(jié)點 的遍歷。在步驟80中判斷此節(jié)點是否有掩碼,若有說明此節(jié)點包含IP前 綴信息,計算此節(jié)點對應的前綴信息。在步驟90中判斷此節(jié)點是否是葉節(jié)點,如果不是,說明是內(nèi)節(jié)點。在步驟150中找到此內(nèi)節(jié)點對應的IP前綴的任意一個葉節(jié)點。 在步驟100中判斷這個葉節(jié)點對應的IP前綴是否己輸出過。具體判斷方法如下參見圖2,假設a.b.c.d是上一次輸出的前綴的位置,prefixl/maskl 是其前綴和掩碼。首先判斷當前塊是否是己輸出過的a.b.c.d所在的塊。如前綴g.h 中h所在塊就不是上次輸出的前綴所在的塊,此時將h的前綴和掩碼 與prefixl/maskl相比較,如果兩者均小,則說明h所表示的前綴已 輸出過,否則說明此前綴是未輸出過的,需要輸出。如果是a.b.c.d所在的塊,如前綴a..b.e,此時需要先將e點的前 綴prefix與prefixl相比,若prefix小于prefixl,則再看e點的掩碼 mask。如果mask是8的倍數(shù),則說明此節(jié)點前綴已輸出過,否則如 果e有父節(jié)點(也即b有對應的前綴和掩碼),且mask等于父節(jié)點的 掩碼,則說明e的前綴已輸出過,如果沒有父節(jié)點,但從此前綴所在 第一個位置開始查,直到當前位置,如果有相同掩碼的節(jié)點,說明也 輸出過。如果不是如上情況則說明是新前綴需要輸出處理。如果是a.b.c.d所在的塊,且prefix等于prefixl ,再比較掩碼。如 果e點的掩碼mask等于maskl,則說明此前綴已輸出過,否則如果 mask小于maskl,并且此節(jié)點處于L1,則說明此前綴已輸出過,否 則如果此節(jié)點掩碼等于父節(jié)點掩碼,也說明此前綴輸出過,否則就是 新前綴,未輸出過需要輸出處理。如果是a.b.c.d所在的塊,且prefix大于prefixl ,則說明此前綴是 新前綴,需要輸出處理。在步驟110中,對未輸出過的節(jié)點對應的IP前綴進行輸出。在步驟120中,記錄此IP前綴對應的位置、級數(shù)、前綴和掩碼 信息,和此節(jié)點的父節(jié)點,各祖先節(jié)點的塊首指針、前綴和掩碼信息。 當此節(jié)點位于第一級時,只需要記錄一個節(jié)點的信息。當此節(jié)點位于 第二級時,需要記錄兩個節(jié)點的信息,依此類推,四級的m-trie樹, 最多只需要記錄四個節(jié)點的信息。圖2中,當IP前綴是a.b.c.0/24時, 需要記錄a點的前綴,掩碼,塊首指針pO, b點的前綴,掩碼,塊首 指針pl, c點的前綴,掩碼,塊首指針p2,以及位置信息,是位于第三級,也即L3的a,b.c。在步驟130中,判斷是否是葉節(jié)點,如果是,就繼續(xù)本塊的下一 個節(jié)點的遍歷。如果是內(nèi)節(jié)點,在步驟140中,準備遞歸參數(shù),也即記錄此節(jié)點 的前綴和記錄此內(nèi)節(jié)點的下一級塊首指針,也即子塊的首指針。然后 遞歸調(diào)用此遍歷函數(shù)進入下一級子塊的遍歷。在從遞歸調(diào)用退出后, 繼續(xù)本塊的下一個節(jié)點的遍歷,也即進入步驟50。
      權(quán)利要求
      1. 多分支Trie樹的遍歷方法,包括以下步驟a.從根節(jié)點開始遍歷,每次遍歷一個塊;b.判斷節(jié)點是否為有效節(jié)點,對有效節(jié)點計算其前綴和掩碼;c.根據(jù)計算得到的前綴和掩碼,判斷節(jié)點對應的前綴是否已經(jīng)處理過;若是,則遍歷下一個節(jié)點,否則用遍歷時傳入的處理函數(shù)處理此前綴;d.處理完一個節(jié)點,記錄此節(jié)點對應的前綴、掩碼、所在級數(shù)、節(jié)點的位置信息以及位置存儲的前綴、掩碼和塊首指針信息。
      2. 根據(jù)權(quán)利要求l所述的多分支Trie樹的遍歷方法,其特征在 于,步驟c中,下列判斷結(jié)果為是,則所述節(jié)點對應的前綴已處理過:判斷節(jié)點的前綴與上次處理過的節(jié)點的前綴是否相等或較小; 判斷節(jié)點的掩碼與上次處理過的節(jié)點的掩碼是否相等或較小。
      3. 根據(jù)權(quán)利要求l所述的多分支Trie樹的遍歷方法,其特征在 于,步驟c中,所述處理函數(shù)為輸出函數(shù),所述處理此前綴是指輸出 此前綴。
      全文摘要
      本發(fā)明涉及網(wǎng)絡技術(shù),特別涉及IP地址查找方法。本發(fā)明為解決多分支Trie樹遍歷性能與內(nèi)存消耗的矛盾,公開了一種多分支Trie樹的遍歷方法,以提高遍歷性能,并降低內(nèi)存消耗。本發(fā)明的技術(shù)方案是,采取由小到大的先根遍歷方式,在處理一個節(jié)點時,先與上次處理過的記錄相比較,若已處理過則遍歷下一個節(jié)點,否則用處理函數(shù)處理此節(jié)點;在處理完一個節(jié)點后,記錄此節(jié)點的位置信息、其位置對應的IP前綴信息以及其各級祖先的塊指針和IP前綴信息。本發(fā)明的有益效果是,減少了存儲量,不需要分配和釋放內(nèi)存,也不需要緩存本級其它的IP前綴信息,也不需要與本級其它的IP前綴比較,遍歷性能高。而且由于采用先根遍歷方式,故可以保證處理順序。
      文檔編號H04L12/56GK101277252SQ20071004878
      公開日2008年10月1日 申請日期2007年3月30日 優(yōu)先權(quán)日2007年3月30日
      發(fā)明者劉寶琴 申請人:邁普(四川)通信技術(shù)有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1