亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

多分支Trie樹的遍歷方法

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


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