欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種快速查找ipv6路由的系統(tǒng)及方法

文檔序號(hào):7550123閱讀:192來(lái)源:國(guó)知局
專(zhuān)利名稱(chēng):一種快速查找ipv6路由的系統(tǒng)及方法
技術(shù)領(lǐng)域
本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,尤其涉及一種快速查找IPV6路由的方法。
背景技術(shù)
近年來(lái),隨著計(jì)算機(jī)網(wǎng)絡(luò)規(guī)模的不斷擴(kuò)大,互聯(lián)網(wǎng)絡(luò)的迅猛發(fā)展,路由技術(shù)在網(wǎng)絡(luò)技術(shù)中已逐漸成為關(guān)鍵部分,路由器也隨之成為最重要的網(wǎng)絡(luò)設(shè)備之一。它的處理速度是網(wǎng)絡(luò)通信的主要瓶頸之一,其性能則直接影響著網(wǎng)絡(luò)互聯(lián)的質(zhì)量。高效的路由表查找算法是影響路由器轉(zhuǎn)發(fā)效率的重要因素。隨著Internet網(wǎng)絡(luò)規(guī)模的擴(kuò)大,路由表的大小與日俱增,隨著無(wú)分類(lèi)域間路由(Classless Inter Domain Routing, CIDR)的引入,IP地址查找從一個(gè)精確匹配的問(wèn)題轉(zhuǎn)變成為一個(gè)最優(yōu)匹配的問(wèn)題,必須采用最長(zhǎng)前綴匹配(LongestPrefix Match, LPM)算法解決,從而大大增加了 IP地址查找的復(fù)雜性。特別是IPv6協(xié)議帶來(lái)了巨大的地址空間和更長(zhǎng)的地址格式,這些都對(duì)提高路由表查找算法效率提出了挑戰(zhàn)。因此,必須研究適合IPv6的路由查找算法。目前,針對(duì)IPv6的路由查找方法主要有基于trie樹(shù)的方法、基于多分支trie樹(shù)的方法、基于前綴長(zhǎng)度的二分查找(binary SearchonPrefix Lengths)以及基于TCMA的算法等。(I)基于Trie樹(shù)的方法,用二進(jìn)制Trie結(jié)構(gòu)來(lái)表示地址前綴是一個(gè)常用的方法。Trie采用一種基于樹(shù)的數(shù)據(jù)結(jié)構(gòu),通過(guò)前綴中每一位的值來(lái)決定樹(shù)的分支用二進(jìn)制Trie結(jié)構(gòu)表示的地址前綴表,樹(shù)中每個(gè)節(jié)點(diǎn)最多有兩個(gè)孩子節(jié)點(diǎn)。在Trie樹(shù)中,處于第L層的節(jié)點(diǎn)代表了一個(gè)地址前L比特均相同的地址空間,并且這L個(gè)比特串就是由從根節(jié)點(diǎn)到這個(gè)節(jié)點(diǎn)路徑上的L比特組成。該方法的缺點(diǎn)是存儲(chǔ)空間浪費(fèi)較多,Trie樹(shù)中間結(jié)點(diǎn)可以進(jìn)行壓縮和優(yōu)化,因此有路徑壓縮的Trie樹(shù)方法。(2)多分支Trie樹(shù)設(shè)計(jì)的關(guān)鍵是步寬的選擇。較大的步寬產(chǎn)生深度較淺的Trie樹(shù),但需要消耗較多的表項(xiàng)存儲(chǔ)空間,前綴更新涉及的節(jié)點(diǎn)也比較多,因此步寬的選擇也就是在算法查找速度、存儲(chǔ)空間和更新復(fù)雜度之間的折衷。(3)按前綴長(zhǎng)度進(jìn)行二分查找(binary Search on Prefix Lengths)的算法,該算法將最長(zhǎng)前綴匹配按前綴長(zhǎng)度分解成一系列的精確匹配,并將前綴按長(zhǎng)度分別存儲(chǔ)在不同Hash表中,地址查找時(shí),按前綴長(zhǎng)度對(duì)所有的Hash表進(jìn)行二分查找。該算法查找的平均次數(shù)為0(log2W),存儲(chǔ)空間復(fù)雜度為0(Nlog2W)。該算法具有良好的擴(kuò)展性,但引入了大量的標(biāo)記來(lái)進(jìn)行二分查找以避免回溯,因此增加了存儲(chǔ)的復(fù)雜度。(4) TCAM是一種基于硬件的方法,TCAM中每一個(gè)表項(xiàng)以〈地址,掩碼 > 序偶的形式保存。假設(shè)地址的長(zhǎng)度范圍從I到W,則地址和掩碼分別占用W比特。若某個(gè)地址前綴的長(zhǎng)度為Y,則其掩碼的前Y個(gè)比特為I,其它比特為O,而地址的后W-Y個(gè)比特可為I或O。查找時(shí)TCAM判斷查找關(guān)鍵字的前Y比特是否與目的地址的前Y比特相等,若相等則表示關(guān)鍵字與該表項(xiàng)匹配,否則不匹配?;赥CAM的查找方案的最大優(yōu)點(diǎn)是速度快,實(shí)現(xiàn)簡(jiǎn)單。完成一次查找只需三步操作:查找TCAM、查找下一跳(next-hop)索引表和查找next-hop映射表。若應(yīng)用流水線技 術(shù),可以進(jìn)一步提高查找速度。缺點(diǎn)是TCAM容量小,代價(jià)高,功耗大,更新復(fù)雜。

發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問(wèn)題是針對(duì)現(xiàn)有技術(shù)的不足,提供一種查找速度快、效率高、穩(wěn)定性好的快速查找IPV6路由的系統(tǒng)及方法。本發(fā)明解決上述技術(shù)問(wèn)題的技術(shù)方案如下:一種快速查找IPV6路由的系統(tǒng),包括一個(gè)路由存儲(chǔ)表,所述路由存儲(chǔ)表包括一個(gè)一級(jí)線性索引表和一個(gè)以上的存儲(chǔ)模塊;所述一級(jí)線性索引表用于存儲(chǔ)一個(gè)以上的索引值,每個(gè)索引值對(duì)應(yīng)一個(gè)存儲(chǔ)模塊;其中,每個(gè)索引值為一個(gè)路由前綴的第4-16比特的值;所述存儲(chǔ)模塊用于存儲(chǔ)17比特之后的路由前綴。在上述技術(shù)方案的基礎(chǔ)上,本發(fā)明還可以做如下改進(jìn)。進(jìn)一步,所述存儲(chǔ)模塊包括一個(gè)或一個(gè)以上的存儲(chǔ)單元,存儲(chǔ)單元包括一個(gè)單獨(dú)的多比特樹(shù)或一個(gè)以上的無(wú)沖突哈希表,每個(gè)無(wú)沖突哈希表附帶若干個(gè)多比特樹(shù)。進(jìn)一步,所述無(wú)沖突哈希表的種類(lèi)包括hash32、hash40和hash48表。進(jìn)一步,所述每個(gè)無(wú)沖突哈希表包括一個(gè)一級(jí)哈希表和若干個(gè)二級(jí)哈希表;一級(jí)哈希表包含若干個(gè)表項(xiàng),每個(gè)表項(xiàng)包含三個(gè)單元,第一單元存儲(chǔ)二級(jí)哈希表可存儲(chǔ)元素個(gè)數(shù)m,第二單元存儲(chǔ)調(diào)節(jié)參數(shù)a的值,第三單元存儲(chǔ)指向二級(jí)哈希表的數(shù)組指針P ;二級(jí)哈希表包含若干個(gè)存儲(chǔ)單元,用于存儲(chǔ)路由前綴。本發(fā)明解決上述技術(shù)問(wèn)題的另一技術(shù)方案如下:一種快速查找IPV6路由的方法,包括如下步驟:步驟1:初始化路由前綴層次關(guān)系為一棵層次樹(shù);步驟2:讀取一條IPV6路由,計(jì)算其第4至16比特的值;步驟3:判斷該值在一級(jí)線性索引表中是否已存在,如果存在則進(jìn)入步驟4 ;否則創(chuàng)建該索引值對(duì)應(yīng)的存儲(chǔ)模塊,進(jìn)入步驟4 ;步驟4:根據(jù)IPV6路由前綴的層次關(guān)系和IPV6路由前綴長(zhǎng)度的分布規(guī)律將17比特之后的路由如綴添加到相應(yīng)存儲(chǔ)I吳塊中;步驟5:查找路由時(shí),根據(jù)目的地址的前綴的第4至16比特的值在一級(jí)線性索引表中找到對(duì)應(yīng)的存儲(chǔ)模塊;步驟6:根據(jù)存儲(chǔ)模塊包含存儲(chǔ)單元的情況查找下一跳路由。在上述技術(shù)方案的基礎(chǔ)上,本發(fā)明還可以做如下改進(jìn)。進(jìn)一步,所述步驟4中將17比特之后的路由前綴添加到相應(yīng)的存儲(chǔ)模塊中的具體步驟如下:步驟4.1:讀取IPV6路由前綴長(zhǎng)度,記為x ;步驟4.2:根據(jù)X值的大小進(jìn)行如下操作,若16〈x〈32,將路由前綴的17至x比特存入步寬為4,深度為4的多比特樹(shù)的中;若x=32,將路由前綴的17至32比特存入哈希表hash32中;若32〈x〈40,將路由前綴的17至32比特存入哈希表hash32中,33至x比特存入hash32對(duì)應(yīng)的步寬為2,深度為4的多比特樹(shù)中;
若x=40,判斷該路由信息是否處于層次樹(shù)的最底層,且無(wú)父節(jié)點(diǎn),如果是則將路由前綴的17至40比特存入哈希表hash40中;否則將路由前綴的17至32比特存入hash32中,將17至40比特存入hash40中;若40〈x〈48,判斷該路由信息是否處于層次樹(shù)最底層,且無(wú)父節(jié)點(diǎn),如果是則將路由前綴的17至40比特存入哈希表hash40中,41至x比特存入hash40對(duì)應(yīng)的步寬為2,深度為4的多比特樹(shù)中;否則將路由前綴的17至32比特存入hash32中,將17至40比特存入hash40中,將41至x比特存入hash40對(duì)應(yīng)的多比特樹(shù)中;x=48,判斷該路由信息是否處于層次樹(shù)的最底層,且無(wú)父節(jié)點(diǎn),如果是則將路由前綴的17至48比特存入哈希表hash48中;否則將路由前綴的17至32比特存入hash32中,將17至40比特存入hash40中,將17至48比特存入hash48中;若x>48,判斷該路由信息是否處于層次樹(shù)的最底層,且無(wú)父節(jié)點(diǎn),如果是則將路由前綴的17至48比特存入哈希表hash48中,49至x比特存入步寬為4的多比特樹(shù)中;否則將路由前綴的17至32比特存入hash32中,將17至40比特存入hash40中,將17至48比特存入hash48中,將49至X比特存入hash48對(duì)應(yīng)的多比特樹(shù)中。進(jìn)一步,將路由前綴存入hash32、hash40和hash48表的具體步驟如下:步驟4.2.1:初始化無(wú)沖突哈希表,每個(gè)無(wú)沖突表包含一級(jí)哈希表和二級(jí)哈希表表;一級(jí)哈希表包含若干個(gè)表項(xiàng),每個(gè)表項(xiàng)包含三個(gè)單元:第一單元存儲(chǔ)二級(jí)哈希表可存儲(chǔ)元素個(gè)數(shù)m,第二單元存儲(chǔ)調(diào)節(jié)參數(shù)a的值,第三單元存儲(chǔ)指向二級(jí)哈希表的數(shù)組指針。步驟4.2.2:將路由前綴的17至X (x可取32、40或48)比特分成兩部分,分別為xl和x2,對(duì)xl進(jìn)行hash運(yùn)算,將運(yùn)算得到的值作為一級(jí)索引值,指向二級(jí)哈希表;步驟4.2.3:對(duì)x2+a的值進(jìn)行hash運(yùn)算,得到的值用于確定前綴在二級(jí)哈希表中的存儲(chǔ)的位置;步驟4.2.4:判斷步驟4.2.3所得的值確定的二級(jí)哈希表的位置是否為空,如果該位置為空,則將前綴17至X比特的值存儲(chǔ)在該位置中,進(jìn)入步驟4.2.6 ;如果不為空則發(fā)生了哈希碰撞,進(jìn)入步驟4.2.5 ;步驟4.2.5:調(diào)整a的值(a取不同的素?cái)?shù)值),返回步驟4.2.3 ;步驟4.2.6:將一級(jí)哈希表第一存儲(chǔ)單元中的m值加I,同時(shí)調(diào)整二級(jí)哈希表的長(zhǎng)度,其中二級(jí)哈希表的長(zhǎng)度為2*m。進(jìn)一步,所述步驟6根據(jù)存儲(chǔ)模塊包含存儲(chǔ)單元的情況查找下一跳路由的具體步驟:步驟6.1:查看所述存儲(chǔ)模塊中是否存儲(chǔ)有數(shù)據(jù),如果有則進(jìn)入步6.2,否則進(jìn)入步驟6.8 ;步驟6.2:根據(jù)所述存儲(chǔ)模塊中包含存儲(chǔ)單元的情況,進(jìn)行如下操作:對(duì)于只包含一個(gè)單獨(dú)的多比特樹(shù)的,則直接進(jìn)入該多比特樹(shù)中進(jìn)行查找,找到則返回下一跳路由,否則跳至6.8 ;對(duì)于包含hash32表的,則以hash32表為入口地址,進(jìn)入步驟6.3 ;對(duì)于不包含hash32表、包含hash40表的,則以hash40表為入口地址,進(jìn)入步驟
6.5 ;對(duì)于只包含hash48表的,則以hash48表為入口地址,進(jìn)入步驟6.7 ;
步驟6.3:以hash32表為入口地址,查找路由前綴的前32比特的值在hash32表中是否存在,如果存在則進(jìn)入步驟6.4 ;否則進(jìn)入步驟6.8 ;步驟6.4:查看路由前綴是否處于層次樹(shù)的根節(jié)點(diǎn)處,且該根節(jié)點(diǎn)不包含葉子節(jié)點(diǎn),如果是則在本哈希表中進(jìn)行查找,否則進(jìn)入步驟6.5或步驟6.7 ;步驟6.5:以hash40表為入口地址,查找前40比特的值在hash40表中是否存在,如果存在則進(jìn)入步驟6.6 ;否則進(jìn)入步驟6.8 ;步驟6.6:查看路由前綴是否處于層次樹(shù)的根節(jié)點(diǎn)處,且該根節(jié)點(diǎn)不包含葉子節(jié)點(diǎn),如果是則在本哈希表中進(jìn)行查找,否則進(jìn)入步驟6.7 ;步驟6.7:以hash48表為入口地址,查找前48比特的值在hash48表中是否存在,如果存在則在本哈希表中進(jìn)行查找;否則進(jìn)入步驟6.8 ;步驟6.8:跳轉(zhuǎn)至默認(rèn)路由。進(jìn)一步,所述步驟6.4、6.6和6.7中所述在本哈希表中查找的具體步驟為:步驟a:根據(jù)無(wú)沖突哈希表的結(jié)構(gòu),在無(wú)沖突哈希表的二級(jí)索引表中查找,若找到進(jìn)入步驟b;否則進(jìn)入步驟c ;步驟b:查看本哈希表對(duì)應(yīng)的多比特樹(shù)是否為空,為空則將本哈希表中的值作為下一跳的路由返回,否則進(jìn)入本哈希表對(duì)應(yīng)的多比特樹(shù)中繼續(xù)查找,找到則返回下一跳路由,否則進(jìn)入步驟c ;步驟c:跳至默認(rèn)路由。進(jìn)一步,所述在多比特樹(shù)中查找的步寬為2或4。本發(fā)明的有益效果是:1)本法明提供了一個(gè)一級(jí)的線性索引,提高了路由查找的效率;2)根據(jù)路由前綴長(zhǎng)度的分布規(guī)律選擇無(wú)沖突哈希表,與骨干網(wǎng)中真實(shí)的IPv6數(shù)據(jù)相吻合,依據(jù)前綴層次關(guān)系對(duì)路由信息進(jìn)行劃分,減少比較次數(shù);3)對(duì)于前綴長(zhǎng)度不是32、40和48比特的前綴,對(duì)其取模,所得到的多余的比特存儲(chǔ)在多比特樹(shù)中,對(duì)樹(shù)的步寬和深度做了權(quán)衡,提高查找速度;4)隨著IPv6的普及和子網(wǎng)化的深入,該算法的穩(wěn)定性較好


圖1為本發(fā)明所述一種快速查找IPV6路由的系統(tǒng)結(jié)構(gòu)圖;圖2為無(wú)沖突哈希表的結(jié)構(gòu)圖;圖3為本發(fā)明所述一種快速查找IPV6路由的方法流程圖;圖4為步驟4的流程圖;圖5為步驟4.2的流程圖;圖6為步驟6的流程圖。附圖中,各標(biāo)號(hào)所代表的部件列表如下:1、一級(jí)線性索引表,2、存儲(chǔ)模塊,101、一級(jí)哈希表,102、二級(jí)哈希表。
具體實(shí)施例方式以下結(jié)合附圖對(duì)本發(fā)明的原理和特征進(jìn)行描述,所舉實(shí)例只用于解釋本發(fā)明,并非用于限定本發(fā)明的范圍。如圖1所示,一種快速查找IPV6路由的系統(tǒng),包括一個(gè)路由存儲(chǔ)表,所述路由存儲(chǔ)表包括一個(gè)一級(jí)線性索引表I和一個(gè)以上的存儲(chǔ)模塊2 ;所述一級(jí)線性索引表I用于存儲(chǔ)一個(gè)以上的索引值,每個(gè)索引值對(duì)應(yīng)一個(gè)存儲(chǔ)模塊;其中,每個(gè)索引值為一個(gè)路由前綴的第4-16比特的值;所述存儲(chǔ)模塊2用于存儲(chǔ)17比特之后的路由前綴。其中,所述存儲(chǔ)模塊2包括一個(gè)或一個(gè)以上的存儲(chǔ)單元,存儲(chǔ)單元包括一個(gè)單獨(dú)的多比特樹(shù)或一個(gè)以上的無(wú)沖突哈希表,每個(gè)無(wú)沖突哈希表附帶若干個(gè)多比特樹(shù)。其中,所述無(wú)沖突哈希表的種類(lèi)包括hash32、hash40和hash48表。如圖2所示,所述每個(gè)無(wú)沖突哈希表包括一個(gè)一級(jí)哈希表101和若干個(gè)二級(jí)哈希表 102 ;—級(jí)哈希表101包含若干個(gè)表項(xiàng),每個(gè)表項(xiàng)包含三個(gè)單元,第一單元存儲(chǔ)二級(jí)哈希表可存儲(chǔ)元素個(gè)數(shù)m,第二單元存儲(chǔ)調(diào)節(jié)參數(shù)a的值,第三單元存儲(chǔ)指向二級(jí)哈希表的數(shù)組指針P ;二級(jí)哈希表102包含若干個(gè)存儲(chǔ)單元,用于存儲(chǔ)路由前綴。如圖3所示:一種快速查找IPV6路由的方法,包括如下步驟:步驟1:初始化路由前綴層次關(guān)系為一棵層次樹(shù);其中,前綴層次關(guān)系體現(xiàn)在一棵層次關(guān)系樹(shù)中,父節(jié)點(diǎn)的前綴區(qū)間覆蓋其子孫節(jié)點(diǎn)的前綴區(qū)間;同一層的節(jié)點(diǎn),前綴區(qū)間沒(méi)有交集;步驟2:讀取一條IPV6路由,計(jì)算其第4至16比特的值;以路由前綴的第4_16比特的值作為索引表中的索引值,每個(gè)索引值對(duì)應(yīng)一個(gè)存儲(chǔ)模塊,可包含8192個(gè)存儲(chǔ)模塊;步驟3:判斷該值在一級(jí)線性索引表中是否已存在,如果存在則進(jìn)入步驟4 ;否則創(chuàng)建該索引值對(duì)應(yīng)的存儲(chǔ)模塊,進(jìn)入步驟4 ;步驟4:根據(jù)IPV6路由前綴的層次關(guān)系和IPV6路由前綴長(zhǎng)度的分布規(guī)律將17比特之后的路由如綴添加到相應(yīng)存儲(chǔ)I吳塊中;步驟5:查找路由時(shí),根據(jù)目的地址的前綴的第4至16比特的值在一級(jí)線性索引表中找到對(duì)應(yīng)的存儲(chǔ)模塊;步驟6:根據(jù)存儲(chǔ)模塊包含存儲(chǔ)單元的情況查找下一跳路由。如圖4所示,所述步驟4中將17比特之后的路由前綴添加到相應(yīng)的存儲(chǔ)模塊中的具體步驟如下:步驟4.1:讀取IPV6路由前綴長(zhǎng)度,記為x ;步驟4.2:根據(jù)X值的大小進(jìn)行如下操作,若16〈x〈32,將路由前綴的17至X比特存入步寬為4,深度為4的多比特樹(shù)的中;若x=32,將路由前綴的17至32比特存入哈希表hash32中;若32〈x〈40,將路由前綴的17至32比特存入哈希表hash32中,33至x比特存入hash32對(duì)應(yīng)的步寬為2,深度為4的多比特樹(shù)中;若x=40,判斷該路由信息是否處于層次樹(shù)的最底層,且無(wú)父節(jié)點(diǎn),如果是則將路由前綴的17至40比特存入哈希表hash40中;否則將路由前綴的17至32比特存入hash32中,將17至40比特存入hash40中;若40〈x〈48,判斷該路由信息是否處于層次樹(shù)的最底層,且無(wú)父節(jié)點(diǎn),如果是則將路由前綴的17至40比特存入哈希表hash40中,41至x比特存入hash40對(duì)應(yīng)的步寬為2,深度為4的多比特樹(shù)中;否則將路由前綴的17至32比特存入hash32中,將17至40比特存入hash40中,將41至X比特存入hash40對(duì)應(yīng)的多比特樹(shù)中;x=48,判斷該路由信息是否處于層次樹(shù)的最底層,且無(wú)父節(jié)點(diǎn),如果是則將路由前綴的17至48比特存入哈希表hash48中;否則將路由前綴的17至32比特存入hash32中,將17至40比特存入hash40中,將17至48比特存入hash48中;若x>48,判斷該路由信息是否處于層次樹(shù)的最底層,且無(wú)父節(jié)點(diǎn),如果是則將路由前綴的17至48比特存入哈希表hash48中,49至x比特存入步寬為4的多比特樹(shù)中;否則將路由前綴的17至32比特存入hash32中,將17至40比特存入hash40中,將17至48比特存入hash48中,將49至X比特存入hash48對(duì)應(yīng)的多比特樹(shù)中。如圖5所示,將路由前綴存入hash32、hash40和hash48表的具體步驟如下:步驟4.2.1:初始化無(wú)沖突哈希表,每個(gè)無(wú)沖突表包含一級(jí)哈希表和二級(jí)哈希表表;一級(jí)哈希表包含若干個(gè)表項(xiàng),每個(gè)表項(xiàng)包含三個(gè)單元:第一單元存儲(chǔ)二級(jí)哈希表可存儲(chǔ)元素個(gè)數(shù)m,第二單元存儲(chǔ)調(diào)節(jié)參數(shù)a的值,第三單元存儲(chǔ)指向二級(jí)哈希表的數(shù)組指針。步驟4.2.2:將路由前綴的17至X (x可取32、40或48)比特分成兩部分,分別為xl和x2,對(duì)xl進(jìn)行hash運(yùn)算,將運(yùn)算得到的值作為一級(jí)索引值,指向二級(jí)哈希表;步驟4.2.3:對(duì)x2+a的值進(jìn)行hash運(yùn)算,得到的值用于確定前綴在二級(jí)哈希表中的存儲(chǔ)的位置;步驟4.2.4:判斷步驟4.2.3所得的值確定的二級(jí)哈希表的位置是否為空,如果該位置為空,則將前綴17至X比特的值存儲(chǔ)在該位置中,進(jìn)入步驟4.2.6 ;如果不為空則發(fā)生了哈希碰撞,進(jìn)入步驟4.2.5 ;步驟4.2.5:調(diào)整a的值(a取不同的素?cái)?shù)值),返回步驟4.2.3 ;步驟4.2.6:將一級(jí)哈希表第一存儲(chǔ)單元中的m值加I,同時(shí)調(diào)整二級(jí)哈希表的長(zhǎng)度,其中二級(jí)哈希表的長(zhǎng)度為2*m。其中,當(dāng)發(fā)生沖突時(shí),即當(dāng)路由前綴X古Y,Hashl(X) =Hashl(Y)且Hash2 (X+ a ) =Hash2 (Υ+ α ),調(diào)整算法因子 α 使得 Hash2 (X+α )關(guān) Hash2 (Υ+ α ),即使第二層的hash不發(fā)生碰撞。為了提高查找速度,Hashl和Hash2的計(jì)算復(fù)雜度不能太高,應(yīng)該盡可能的簡(jiǎn)單高效,算法因子α每個(gè)表項(xiàng)都不相同,經(jīng)驗(yàn)值取不同的素?cái)?shù)。如圖6所示,所述步驟6根據(jù)存儲(chǔ)模塊包含存儲(chǔ)單元的情況查找下一跳路由的具體步驟:步驟6.1:查看所述存儲(chǔ)模塊中是否存儲(chǔ)有數(shù)據(jù),如果有則進(jìn)入步6.2,否則進(jìn)入步驟6.8 ;步驟6.2:根據(jù)所述存儲(chǔ)模塊中包含存儲(chǔ)單元的情況,進(jìn)行如下操作:對(duì)于只包含一個(gè)單獨(dú)的多比特樹(shù)的,則直接進(jìn)入該多比特樹(shù)中進(jìn)行查找,找到則返回下一跳路由,否則跳至6.8 ;對(duì)于包含hash32表的,則以hash32表為入口地址,進(jìn)入步驟6.3 ;對(duì)于不包含hash32表、包含hash40表的,則以hash40表為入口地址,進(jìn)入步驟
6.5 ;對(duì)于只包含hash48表的,則以hash48表為入口地址,進(jìn)入步驟6.7 ;步驟6.3:以hash32表為入口地址,查找路由前綴的前32比特的值在hash32表中是否存在,如果存在則進(jìn)入步驟6.4 ;否則進(jìn)入步驟6.8 ;步驟6.4:查看路由前綴是否處于層次樹(shù)的根節(jié)點(diǎn)處,且該根節(jié)點(diǎn)不包含葉子節(jié)點(diǎn),如果是則在本哈希表中進(jìn)行查找,否則進(jìn)入步驟6.5或步驟6.7 ;步驟6.5:以hash40表為入口地址,查找前40比特的值在hash40表中是否存在,如果存在則進(jìn)入步驟6.6 ;否則進(jìn)入步驟6.8 ;步驟6.6:查看路由前綴是否處于層次樹(shù)的根節(jié)點(diǎn)處,且該根節(jié)點(diǎn)不包含葉子節(jié)點(diǎn),如果是則在本哈希表中進(jìn)行查找,否則進(jìn)入步驟6.7 ;步驟6.7:以hash48表為入口地址,查找前48比特的值在hash48表中是否存在,如果存在則在本哈希表中進(jìn)行查找;否則進(jìn)入步驟6.8 ;步驟6.8:跳轉(zhuǎn)至默認(rèn)路由。其中,所述步驟6.4,6.6和6.7中所述在本哈希表中查找的具體步驟為:步驟a:根據(jù)無(wú)沖突哈希表的結(jié)構(gòu),在無(wú)沖突哈希表的二級(jí)索引表中查找,若找到進(jìn)入步驟b;否則進(jìn)入步驟c ;步驟b:查看本哈希表對(duì)應(yīng)的多比特樹(shù)是否為空,為空則將本哈希表中的值作為下一跳的路由返回,否則進(jìn)入本哈希表對(duì)應(yīng)的多比特樹(shù)中繼續(xù)查找,找到則返回下一跳路由,否則進(jìn)入步驟c ;步驟c:跳至默認(rèn)路由。其中在哈希表中的查找過(guò)程與向哈希表中添加路由的過(guò)程一致:I)將路由前綴的17至X (X可取32、40或48)比特分成兩部分,分別為xl和x2,對(duì)xl進(jìn)行hash運(yùn)算,將運(yùn)算得到的值作為一級(jí)索引值,指向二級(jí)哈希表;2)對(duì)x2+a的值進(jìn)行hash運(yùn)算,得到的值用于確定前綴在二級(jí)哈希表中的存儲(chǔ)的位置,進(jìn)而進(jìn)行相應(yīng)查找;其中a值與添加時(shí)的值一致。其中,所述在多比特樹(shù)中查找的步寬為2或4。以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種快速查找IPV6路由的系統(tǒng),其特征在于,包括一個(gè)路由存儲(chǔ)表,所述路由存儲(chǔ)表包括一個(gè)一級(jí)線性索引表和一個(gè)以上的存儲(chǔ)模塊; 所述一級(jí)線性索引表用于存儲(chǔ)一個(gè)以上的索引值,每個(gè)索引值對(duì)應(yīng)一個(gè)存儲(chǔ)模塊;其中,每個(gè)索引值為一個(gè)路由前綴的第4-16比特的值; 所述存儲(chǔ)模塊用于存儲(chǔ)17比特之后的路由前綴。
2.根據(jù)權(quán)利要求1所述一種快速查找IPV6路由的系統(tǒng),其特征在于,所述存儲(chǔ)模塊包括一個(gè)或一個(gè)以上的存儲(chǔ)單元,存儲(chǔ)單元包括一個(gè)單獨(dú)的多比特樹(shù)或一個(gè)以上的無(wú)沖突哈希表,每個(gè)無(wú)沖突哈希表附帶若干個(gè)多比特樹(shù)。
3.根據(jù)權(quán)利要求2所述一種快速查找IPV6路由的系統(tǒng),其特征在于,所述無(wú)沖突哈希表的種類(lèi)包括hash32、hash40和hash48表。
4.根據(jù)權(quán)利要求2所述一種快速查找IPV6路由的系統(tǒng),其特征在于,所述每個(gè)無(wú)沖突哈希表包括一個(gè)一級(jí)哈希表和若干個(gè)二級(jí)哈希表; 一級(jí)哈希表包含若干個(gè) 表項(xiàng),每個(gè)表項(xiàng)包含三個(gè)單元,第一單元存儲(chǔ)二級(jí)哈希表可存儲(chǔ)元素個(gè)數(shù)m,第二單元存儲(chǔ)調(diào)節(jié)參數(shù)a的值,第三單元存儲(chǔ)指向二級(jí)哈希表的數(shù)組指針P ; 二級(jí)哈希表包含若干個(gè)存儲(chǔ)單元,用于存儲(chǔ)路由前綴。
5.一種快速查找IPV6路由的方法,其特征在于,包括如下步驟: 步驟1:初始化路由前綴層次關(guān)系為一棵層次樹(shù); 步驟2:讀取一條IPV6路由,計(jì)算其第4至16比特的值; 步驟3:判斷該值在一級(jí)線性索引表中是否已存在,如果存在則進(jìn)入步驟4 ;否則創(chuàng)建該索引值對(duì)應(yīng)的存儲(chǔ)模塊,進(jìn)入步驟4 ; 步驟4:根據(jù)IPV6路由前綴的層次關(guān)系和IPV6路由前綴長(zhǎng)度的分布規(guī)律將17比特之后的路由如綴添加到相應(yīng)存儲(chǔ)I吳塊中; 步驟5:查找路由時(shí),根據(jù)目的地址的前綴的第4至16比特的值在一級(jí)線性索引表中找到對(duì)應(yīng)的存儲(chǔ)模塊; 步驟6:根據(jù)存儲(chǔ)模塊包含存儲(chǔ)單元的情況查找下一跳路由。
6.根據(jù)權(quán)利要求5所述一種快速查找IPV6路由的方法,其特征在于,所述步驟4中將17比特之后的路由前綴添加到相應(yīng)的存儲(chǔ)模塊中的具體步驟如下: 步驟4.1:讀取IPV6路由前綴長(zhǎng)度,記為X ; 步驟4.2:根據(jù)X值的大小進(jìn)行如下操作, 若16〈x〈32,將路由前綴的17至X比特存入步寬為4,深度為4的多比特樹(shù)的中; 若x=32,將路由前綴的17至32比特存入哈希表hash32中; 若32〈x〈40,將路由前綴的17至32比特存入哈希表hash32中,33至x比特存入hash32對(duì)應(yīng)的步寬為2,深度為4的多比特樹(shù)中; 若x=40,判斷該路由信息是否處于層次樹(shù)的最底層,且無(wú)父節(jié)點(diǎn),如果是則將路由前綴的17至40比特存入哈希表hash40中;否則將路由前綴的17至32比特存入hash32中,將17至40比特存入hash40中; 若40〈x〈48,判斷該路由信息是否處于層次樹(shù)的最底層,且無(wú)父節(jié)點(diǎn),如果是則將路由前綴的17至40比特存入哈希表hash40中,41至x比特存入hash40對(duì)應(yīng)的步寬為2,深度為4的多比特樹(shù)中;否則將路由前綴的17至32比特存入hash32中,將17至40比特存入hash40中,將41至x比特存入hash40對(duì)應(yīng)的多比特樹(shù)中; x=48,判斷該路由信息是否處于層次樹(shù)的最底層,且無(wú)父節(jié)點(diǎn),如果是則將路由前綴的17至48比特存入哈希表hash48中;否則將路由前綴的17至32比特存入hash32中,將17至40比特存入hash40中,將17至48比特存入hash48中; 若x>48,判斷該路由信息是否處于層次樹(shù)的最底層,且無(wú)父節(jié)點(diǎn),如果是則將路由前綴的17至48比特存入哈希表hash48中,49至x比特存入步寬為4的多比特樹(shù)中;否則將路由前綴的17至32比特存入hash32中,將17至40比特存入hash40中,將17至48比特存入hash48中,將49至X比特存入hash48對(duì)應(yīng)的多比特樹(shù)中。
7.根據(jù)權(quán)利要求6所述一種快速查找IPV6路由的方法,其特征在于,將路由前綴存入hash32、hash40和hash48表的具體步驟如下: 步驟4.2.1:初始化無(wú)沖突哈希表,每個(gè)無(wú)沖突表包含一級(jí)哈希表和若干個(gè)二級(jí)哈希表;一級(jí)哈希表包含若干個(gè)表項(xiàng),每個(gè)表項(xiàng)包含三個(gè)單元,第一單元存儲(chǔ)二級(jí)哈希表可存儲(chǔ)元素個(gè)數(shù)m,第二單元存儲(chǔ)調(diào)節(jié)參數(shù)a的值,第三單元存儲(chǔ)指向二級(jí)哈希表的數(shù)組指針;步驟4.2.2:將路由前綴的17至x(x可取32、40或48)比特分成兩部分,分別為xl和x2,對(duì)xl進(jìn)行hash運(yùn)算,將運(yùn)算得到的值作為一級(jí)索引值,指向二級(jí)哈希表; 步驟4.2.3:對(duì)x2+a的值進(jìn)行hash運(yùn)算,得到的值用于確定前綴在二級(jí)哈希表中的存儲(chǔ)的位置; 步驟4.2.4:判斷步驟4.2.3所得的值確定的二級(jí)哈希表的位置是否為空,如果該位置為空,則將前綴17至X比特的值存儲(chǔ)在該位置中,進(jìn)入步驟4.2.6 ;如果不為空則發(fā)生了哈希碰撞,進(jìn)入步驟4.2.5 ; 步驟4.2.5:調(diào)整a的值(a取不同``的素?cái)?shù)值),返回步驟4.2.3 ; 步驟4.2.6:將一級(jí)哈希表第一存儲(chǔ)單元中的m值加I,同時(shí)調(diào)整二級(jí)哈希表的長(zhǎng)度,其中二級(jí)哈希表的長(zhǎng)度為2*m。
8.根據(jù)權(quán)利要求5所述一種快速查找IPV6路由的方法,其特征在于,所述步驟6根據(jù)存儲(chǔ)模塊包含存儲(chǔ)單元的情況查找下一跳路由的具體步驟: 步驟6.1:查看所述存儲(chǔ)模塊中是否存儲(chǔ)有數(shù)據(jù),如果有則進(jìn)入步6.2,否則進(jìn)入步驟6.8 ; 步驟6.2:根據(jù)所述存儲(chǔ)模塊中包含存儲(chǔ)單元的情況,進(jìn)行如下操作: 對(duì)于只包含一個(gè)單獨(dú)的多比特樹(shù)的,則直接進(jìn)入該多比特樹(shù)中進(jìn)行查找,找到則返回下一跳路由,否則跳至6.8 ; 對(duì)于包含hash32表的,則以hash32表為入口地址,進(jìn)入步驟6.3 ; 對(duì)于不包含hash32表、包含hash40表的,則以hash40表為入口地址,進(jìn)入步驟6.5 ; 對(duì)于只包含hash48表的,則以hash48表為入口地址,進(jìn)入步驟6.7 ; 步驟6.3:以hash32表為入口地址,查找路由前綴的前32比特的值在hash32表中是否存在,如果存在則進(jìn)入步驟6.4 ;否則進(jìn)入步驟6.8 ; 步驟6.4:查看路由前綴是否處于層次樹(shù)的根節(jié)點(diǎn)處,且該根節(jié)點(diǎn)不包含葉子節(jié)點(diǎn),如果是則在本哈希表中進(jìn)行查找,否則進(jìn)入步驟6.5或步驟6.7 ; 步驟6.5:以hash40表為入口地址,查找前40比特的值在hash40表中是否存在,如果存在則進(jìn)入步驟6.6 ;否則進(jìn)入步驟6.8 ; 步驟6.6:查看路由前綴是否處于層次樹(shù)的根節(jié)點(diǎn)處,且該根節(jié)點(diǎn)不包含葉子節(jié)點(diǎn),如果是則在本哈希表中進(jìn)行查找,否則進(jìn)入步驟6.7 ; 步驟6.7:以hash48表為入口地址,查找前48比特的值在hash48表中是否存在,如果存在則在本哈希表中進(jìn)行查找;否則進(jìn)入步驟6.8 ; 步驟6.8:跳轉(zhuǎn)至默認(rèn)路由。
9.根據(jù)權(quán)利 要求8所述一種快速查找IPV6路由的方法,其特征在于, 所述步驟6.4,6.6和6.7中所述在本哈希表中查找的具體步驟為: 步驟a:根據(jù)無(wú)沖突哈希表的結(jié)構(gòu),在無(wú)沖突哈希表的二級(jí)索引表中查找,若找到進(jìn)入步驟b;否則進(jìn)入步驟c; 步驟b:查看本哈希表對(duì)應(yīng)的多比特樹(shù)是否為空,為空則將本哈希表中的值作為下一跳的路由返回,否則進(jìn)入本哈希表對(duì)應(yīng)的多比特樹(shù)中繼續(xù)查找,找到則返回下一跳路由,否則進(jìn)入步驟c ; 步驟c:跳至默認(rèn)路由。
10.根據(jù)權(quán)利要求8或9所述一種快速查找IPV6路由的方法,其特征在于,所述在多比特樹(shù)中查找的步寬為2或4。
全文摘要
本發(fā)明涉及一種快速查找IPV6路由的系統(tǒng)及方法,包括一個(gè)路由存儲(chǔ)表,所述路由存儲(chǔ)表包括一個(gè)一級(jí)線性索引表和一個(gè)以上的存儲(chǔ)模塊;所述一級(jí)線性索引表用于存儲(chǔ)一個(gè)以上的索引值,每個(gè)索引值對(duì)應(yīng)一個(gè)存儲(chǔ)模塊;其中,每個(gè)索引值為一個(gè)路由前綴的第4-16比特的值;所述存儲(chǔ)模塊用于存儲(chǔ)17比特之后的路由前綴;所述方法根據(jù)IPV6路由前綴的層次關(guān)系和IPV6路由前綴長(zhǎng)度的分布規(guī)律將17比特之后的路由前綴添加到相應(yīng)存儲(chǔ)模塊中;本法明提供了一個(gè)一級(jí)的線性索引,提高了路由查找的效率;根據(jù)路由前綴長(zhǎng)度的分布規(guī)律和前綴層次關(guān)系選擇無(wú)沖突哈希表和多比特樹(shù),減少了比較次數(shù),且該方法的穩(wěn)定性較好。
文檔編號(hào)H04L12/741GK103107945SQ201310009618
公開(kāi)日2013年5月15日 申請(qǐng)日期2013年1月10日 優(yōu)先權(quán)日2013年1月10日
發(fā)明者云曉春, 張永錚, 杜飛, 郝志宇, 庹宇鵬 申請(qǐng)人:中國(guó)科學(xué)院信息工程研究所, 國(guó)家計(jì)算機(jī)網(wǎng)絡(luò)與信息安全管理中心
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
东源县| 潼关县| 巨野县| 云霄县| 青阳县| 南昌县| 元江| 龙南县| 定陶县| 靖西县| 施甸县| 乌恰县| 肃北| 正安县| 海原县| 和平区| 白朗县| 永定县| 毕节市| 连江县| 孙吴县| 札达县| 巴马| 阿拉善盟| 鄂伦春自治旗| 安国市| 潢川县| 周至县| 女性| 五原县| 南投县| 盘锦市| 霍山县| 卓资县| 泉州市| 探索| 徐汇区| 长治县| 连云港市| 临武县| 襄樊市|