本申請涉及路由查找技術(shù)領(lǐng)域,尤其涉及IP路由查找方法及裝置。
背景技術(shù):
網(wǎng)絡(luò)之間進行通信就要實現(xiàn)數(shù)據(jù)的傳遞轉(zhuǎn)發(fā),所以網(wǎng)絡(luò)設(shè)備的主要職能之一就是進行高效率的數(shù)據(jù)轉(zhuǎn)發(fā),而其在因特網(wǎng)協(xié)議的基本數(shù)據(jù)平面的功能是路由查找,即根據(jù)路由表中的前綴信息,對每一個到來的數(shù)據(jù)包決定它的下一跳及出端口。由于路由表中通配符以及CIDR(Classless Inter-Domain Routing,基于無類域間路由)的LPM(Longest Prefix Matching,最長前綴匹配)問題使得路由查找變得非常復(fù)雜?;贚PM的路由查找算法除了需要高性能外,還要滿足如下幾個需求:
一、IPv4和IPv6雙棧
現(xiàn)有解決LPM的算法大都針對IPv4的32位地址設(shè)計,不能直接移植或者擴展到IPv6,這就需要根據(jù)IPv6的特點,設(shè)計出適合128位IP地址的高效的路由查找算法。
二、多VPN(Virtual Private Network,虛擬專網(wǎng))實例支持
當(dāng)前網(wǎng)絡(luò)設(shè)備需要支持VRF(VPN Routing Forwarding Instance,VPN路由轉(zhuǎn)發(fā)實例),VRF是指在一臺路由器上需要同時支持多個路由轉(zhuǎn)發(fā)表實例,各路由轉(zhuǎn)發(fā)表間獨立。使用VRF可以用路由隔離不同的VPN用戶。
當(dāng)前中、高端路由器已經(jīng)普遍支持4K或8K VPN,也就是說設(shè)備內(nèi)部需要同時支持4K或8K個VRF轉(zhuǎn)發(fā)表,支持多VPN實例對路由算法的整體架構(gòu)具有很大的影響。
三、大規(guī)格路由數(shù)量
對于IP路由來說,網(wǎng)絡(luò)設(shè)備需要支持遠(yuǎn)大于當(dāng)前現(xiàn)網(wǎng)路由的規(guī)格。圖1所示為2002~2009年Internet IPv4路由分布示意圖,從圖1中可以看到8年間IPv4路由數(shù)量增加了一倍以上;圖2所示為Internet IPv6路由分布示意圖。
另外由于網(wǎng)絡(luò)設(shè)備需要支持多VPN實例,每個VPN實例都需要維護一套獨立的路由表,當(dāng)網(wǎng)絡(luò)設(shè)備支持較多VPN實例時,網(wǎng)絡(luò)設(shè)備整體路由表條目會很大。例如8K個VPN實例,每個VPN實例有512條路由,則整個網(wǎng)絡(luò)設(shè)備需要支持4M條路由。
當(dāng)前中、高端路由器設(shè)備,IPv4普遍要求大于4M條路由,IPv6普遍要求大于1M條路由,大規(guī)格的路由表數(shù)量對路由算法的整體架構(gòu)具有很大的影響,尤其對算法所選擇的內(nèi)存類型具有決定作用。
四、快速更新
路由更新性能是網(wǎng)絡(luò)設(shè)備一個非常關(guān)鍵的指標(biāo),路由更新速度慢會嚴(yán)重影響整網(wǎng)路由收斂的速度,導(dǎo)致整網(wǎng)不停地路由震蕩;隨著現(xiàn)網(wǎng)路由數(shù)量的增加、以及整網(wǎng)VPN和VPN路由數(shù)量的增加,對路由更新性能提出了更高的要求。
技術(shù)實現(xiàn)要素:
本申請?zhí)峁㊣P路由查找方法及裝置,以提高IP路由查找效率。
本申請的技術(shù)方案是這樣實現(xiàn)的:
一種IP路由查找方法,該方法包括:
分別針對每個VPN中的IP前綴的路由分布,構(gòu)建一棵Multibit Trie;
采用前綴擴展的方法將Multibit Trie的高1~m級IP前綴上的路由擴展到m+1級IP前綴上,m為大于1的整數(shù);
將所述Multibit Trie的m+1級IP前綴的每一個分支作為一個Branch_Tree,保存每個Branch_Tree的數(shù)據(jù)結(jié)構(gòu)信息;
當(dāng)對一VPN內(nèi)的一IP地址進行路由查找時,根據(jù)該IP地址的高m+1bit 在該VPN對應(yīng)的Multibit Trie中查找到對應(yīng)的Branch_Tree,在該Branch_Tree中查找對應(yīng)的路由。
一種IP路由查找裝置,該裝置包括:
Multibit Trie建立模塊:分別針對每個VPN中的IP前綴的路由分布,構(gòu)建一棵Multibit Trie;采用前綴擴展的方法將Multibit Trie的高1~m級IP前綴上的路由擴展到m+1級IP前綴上,m為大于1的整數(shù);將所述Multibit Trie的m+1級IP前綴的每一個分支作為一個Branch_Tree,保存每個Branch_Tree的數(shù)據(jù)結(jié)構(gòu)信息;
路由查找模塊:當(dāng)對一VPN內(nèi)的一IP地址進行路由查找時,根據(jù)該IP地址的高m+1位bit在該VPN對應(yīng)的Multibit Trie中查找到對應(yīng)的Branch_Tree,在該Branch_Tree中查找對應(yīng)的路由。
可見,本申請中,針對每個VPN中的所有IP前綴的路由分布,構(gòu)建一棵Multibit Trie,且將Multibit Trie的高1~m級IP前綴上的路由擴展到m+1級IP前綴上,將m+1級IP前綴的每一個分支作為一個Branch_Tree,這樣,當(dāng)對一VPN內(nèi)的一IP地址進行路由查找時,先查找到該VPN對應(yīng)的Multibit-Trie,然后根據(jù)該IP地址的高m+1bit查找到對應(yīng)的Branch_Tree,在該Branch_Tree中查找對應(yīng)的路由,從而簡化了IP路由的查找過程,提高了IP路由查找效率。
附圖說明
圖1為2002~2009年Internet IPv4路由分布示意圖;
圖2為現(xiàn)有的Internet IPv6路由分布示意圖;
圖3為Unibit Trie示例圖;
圖4為Unibit Trie到Multibit Trie的轉(zhuǎn)換過程示例圖;
圖5為圖4中的Level 1的結(jié)構(gòu);
圖6為本申請一實施例提供的基于Multibit Trie的IP路由查找方法流程 圖;
圖7為本申請一實施例提供的基于Multibit Trie的IPv4路由查找方法流程圖;
圖8為本申請實施例針對一個VPN(VPN m)中的IPv4前綴的路由分布建立的Multibit Trie的結(jié)構(gòu)示例圖;
圖9-1為本申請實施例提供的以圖3所示的Unibit Trie為例,將/0級前綴的路由擴展到/1級前綴上的示例圖;
圖9-2為本申請實施例提供的以圖3所示的Unibit Trie為例,將/1級前綴的路由擴展到/2級前綴上的示例圖;
圖9-3為本申請實施例提供的以圖3所示的Unibit Trie為例,將/2級前綴的路由擴展到/3級前綴上的示例圖;
圖10為本申請實施例提供的將Sub_Trie節(jié)點劃分為8個Segmented Sub_Trie節(jié)點的示例圖;
圖11為本申請實施例提供的基于Multibit Trie的IP路由查找裝置的組成示意圖;
圖12為本申請實施例提供的包含IP路由查找裝置的設(shè)備的硬件架構(gòu)示意圖。
具體實施方式
Tree Bitmap(樹位圖)是基于Multibit Trie(多位字典樹)的經(jīng)典路由查找算法,該算法應(yīng)用于CRS系列高端路由器上。為了深入了解Tree Bitmap,首先介紹Unibit Trie(單位字典樹)和Multibit Trie。
圖3為Unibit Trie示例圖,如圖3所示,共有9條IPv4前綴P1~P9分布。其中,Unibit Trie的最高前綴節(jié)點P1代表前綴*,之后,P1的下一級的左分支表示的前綴Q1為0*,P1的下一級的右分支表示的前綴P2為1*,Q1的下一級的左分支表示的前綴P3為00*,P2的下一級的左分支表示的前綴 Q2為01*,P2的下一級的右分支表示的前綴Q3為11*,依此類推;也就是說,對于Unibit Trie中的任一節(jié)點P,該節(jié)點P的下一級的左分支表示的前綴PL為0P,該節(jié)點P的下一級的右分支表示的前綴PR為1P。
在Unibit Trie結(jié)構(gòu)中,●節(jié)點代表有路由分布,○表示沒有路由分布。如圖3中,P1~P9代表有路由分布,Q1~Q8代表沒有路由分布。
Unibit Trie中基于LPM的路由查找過程如下:
對于一個待查找LPM路由的IPv4前綴,以該IPv4前綴的從高到低bit的順序,每次在Unibit Trie中查找該IPv4前綴的1bit,如果該bit為“0”,則進入Unibit Trie的下一級的左分支,如果該bit為“1”,則進入Unibit Trie的下一級的右分支;依此類推,一直查找到Unibit Trie的樹底,最后經(jīng)過的●節(jié)點的路由為該IPv4前綴的LPM路由。
例如:要在圖3所示的Unibit Trie中查找IPv4前綴:10000110的LPM路由,則具體過程如下:
步驟01:先找出該IPv4前綴:10000110的最高的bit,即“1”,則從Unibit Trie的P1進入下一級的右分支P2,表示為P1->P2;
步驟02:再找出IPv4前綴:10000110的次高bit,即“0”,則從Unibit Trie的P2進入下一級的左分支Q2,表示為:P2->Q2;
步驟03:再找出IPv4前綴:10000110的第三高bit,即“0”,則從Unibit Trie的Q2進入下一級的左分支Q4,表示為:Q2->Q4;
步驟04:再找出IPv4前綴:10000110的第四高bit,即“0”,則從Unibit Trie的Q4進入下一級的左分支P6,表示為:Q4->P6;
步驟05:再找出IPv4前綴:10000110的第五高bit,即“0”,則從Unibit Trie的P6進入下一級的左分支Q6,表示為:P6->Q6;
步驟06:再找出IPv4前綴:10000110的第六高bit,即“1”,則從Unibit Trie的Q6進入下一級的右分支Q8,表示為:Q6->Q8;
步驟07:再找出IPv4前綴:10000110的第七高,即次低bit,即“1”, 則從Unibit Trie的Q8進入下一級的右分支P9,表示為:Q8->P9,此時,已經(jīng)到達Unitbit Trie的樹底,則查找結(jié)束,P9的路由為IPv4前綴:10000110的LPM路由。
也就是說,采用Unibit Trie查找IPv4前綴“10000110”的LPM路由,需要通過P1->P2->Q2->Q4->P6->Q6->Q8->P9,共七次節(jié)點查找。
Multibit Trie是在Unibit Trie的基礎(chǔ)上,每次LPM路由查找時,查找多個bit。圖4所示為Unibit Trie到Multibit Trie的轉(zhuǎn)換過程,圖4中每次LPM路由查找要查找3個bit,即LPM路由查找步長為3。
Tree Bitmap是在Multibit Trie基礎(chǔ)上,對節(jié)點數(shù)據(jù)結(jié)構(gòu)進行優(yōu)化,使之更適合基于SRAM(Static Random Access Memory,靜態(tài)隨機存取存儲器)和DRAM(Dynamic Random Access Memory,動態(tài)隨機存取存儲器)的大訪問粒度架構(gòu)的硬件流水線實現(xiàn)。Multibit Trie可根據(jù)預(yù)設(shè)LPM路由查找步長劃分為多個Level,如圖4所示的Multibit Trie以LPM路由查找步長3劃分為3個Level:Level 1、Level 2和Level3。
圖5給出了圖3中的Level 1的結(jié)構(gòu)。
在Multibit Trie中,對于每個Level,將該Level劃分為多個Tree Bitmap節(jié)點,每個Tree Bitmap節(jié)點為該Level的最高一級的一個前綴及其該前綴的子孫前綴構(gòu)成的sub_Trie。
其中,設(shè)Multibit Trie以LPM路由查找步長S劃分為N個Level,分別為Level 1~N,則Level 1中包含一個Tree Bitmap節(jié)點,Level 2的最高一級前綴最多有2s個,則該2s個前綴中的每個前綴與其子孫前綴分別構(gòu)成一棵sub_Trie,則Level 2中最后包含2s個Tree Bitmap節(jié)點,通用地,Level m(1≤m≤N)中最多包含2(m-1)s個Tree Bitmap節(jié)點。
以圖4為例,Level 1中包含一個Tree Bitmap節(jié)點,Level 2中包含3個Tree Bitmap節(jié)點,Level 3中包含2個Tree Bitmap節(jié)點。
在描述Tree Bitmap節(jié)點時,每個Tree Bitmap節(jié)點可采用如下四個參數(shù) 來描述:
1)Internal Tree Bitmap(內(nèi)部樹位圖)
Internal Tree Bitmap表示Tree Bitmap節(jié)點內(nèi)部的前綴的路由分布,假設(shè)LPM路由查找步長為S,則該Tree Bitmap節(jié)點內(nèi)部最多有(2S-1)個前綴,從而Internal Tree Bitmap為(2S-1)位,每一位代表該Tree Bitmap節(jié)點內(nèi)部的一個前綴上是否有路由分布,若該前綴上有路由分布,則該位取值為“1”,否則,該位取值為“0”。
例如:圖5所示的Leve 1中的Tree Bitmap節(jié)點,由于LPM路由查找步長S=3,則Level 1中的Tree Bitmap節(jié)點的Internal Tree Bitmap為23-1=7位,表示為1_01_1000,其中,“1”表示對應(yīng)前綴上有路由分布,“0”表示對應(yīng)前綴上沒有路由分布。
2)Extending Paths Bitmap(擴展路徑位圖)
Extending Paths Bitmap表示Tree Bitmap節(jié)點的下一級Tree Bitmap節(jié)點的分布,假設(shè)LPM路由查找步長為S,則一個Tree Bitmap節(jié)點最多有2S個分支,即該Tree Bitmap節(jié)點的下一級最多有2S個Tree Bitmap節(jié)點,因此Extending Paths Bitmap為2S位,每一位代表該Tree Bitmap節(jié)點的一個分支是否有下一級Tree Bitmap節(jié)點,若該分支有下一級Tree Bitmap節(jié)點,則該位取值為“1”,否則,該位取值為“0”。
例如:圖5所示的Level 1的Tree Bitmap節(jié)點,由于LPM路由查找步長S=3,則該Tree Bitmap節(jié)點最多23=8個分支,即該Tree Bitmap節(jié)點的Extending Tree Bitmap為23=8位,表示為00001101,其中,“1”表示該Tree Bitmap節(jié)點的對應(yīng)分支有下一級Tree Bitmap節(jié)點,“0”表示該Tree Bitmap節(jié)點的對應(yīng)分支沒有下一級Tree Bitmap節(jié)點。從圖4可以看出:Level 1的Tree Bitmap節(jié)點有3個下一級Tree Bitmap節(jié)點。
3)Result Array Pointer(結(jié)果數(shù)組指針)
Result Array Pointer是指Tree Bitmap節(jié)點內(nèi)部有路由分布的前綴對應(yīng)的 RA(Result Array,結(jié)果數(shù)組)頭指針,RA中依次存儲了Tree Bitmap節(jié)點內(nèi)部有路由分布的各前綴的路由信息,路由信息包括:Next Hop(下一跳)信息、FEC(Forwarding Equivalence Class,轉(zhuǎn)發(fā)等價類)信息等。
通過Internal Tree Bitmap可以知道一個Tree Bitmap節(jié)點內(nèi)部包含多少個有路由分布的前綴,RA按照先后順序存儲這些前綴的路由信息。以圖5所示的Level 1的Tree Bitmap節(jié)點為例,該Tree Bitmap節(jié)點的Result Array Pointer指向的RA順序存儲了P1、P2和P3的路由信息,Result Array Pointer指向P1的路由信息。
4)Child Node Pointer(子節(jié)點指針)
Child Node Pointer是指Tree Bitmap節(jié)點的下一級Tree Bitmap節(jié)點信息的頭指針。
通過Extending Paths Bitmap可以知道Tree Bitmap節(jié)點的下一級Tree Bitmap節(jié)點的分布,也就是說該Tree Bitmap節(jié)點的哪些分支上有下一級Tree Bitmap節(jié)點。Tree Bitmap節(jié)點的所有下一級“有效”Tree Bitmap節(jié)點的信息在內(nèi)存中是按照順序存儲的,這里的“有效”即對應(yīng)的Extending Paths Bitmap位為“1”。
以圖5所示的Level 1的Tree Bitmap節(jié)點為例,該Tree Bitmap節(jié)點有3個下一級Tree Bitmap節(jié)點,Child Array Pointer指向的內(nèi)存按照先后順序存儲該3個Tree Bitmap節(jié)點的信息,其中,每個Tree Bitmap節(jié)點的信息都由上述提到的1)Internal Tree Bitmap、2)Extending Paths Bitmap、3)Result Array Pointer和4)Child Node Pointer描述。
同樣以IPv4前綴“100_001_10”為例,在圖4所示的Multibit Trie中查找該前綴的LPM路由的具體過程如下:
步驟01:由于圖4中的LPM路由查找步長為3,則首先讀取IPv4前綴的最高3bit“100”,在Level 1的Tree Bitmap節(jié)點的Internal Tree Bitmap中查找與“100”匹配的前綴,確定P1和P2匹配上,由于P2是更長的前綴匹 配,因此在Level1上P2是最長前綴匹配結(jié)果;
同時,根據(jù)最高3bit“100”在Extending Paths Bitmap中查找對應(yīng)的bit(最高3bit“100”對應(yīng)Tree Bitmap節(jié)點的第5個分支,則應(yīng)該在Extending Paths Bitmap中查找第5個bit),該bit為“1”,則確定最高3bit“100”對應(yīng)的分支有下一級Tree Bitmap節(jié)點,且該Tree Bitmap節(jié)點為Child Node Pointer指向的第一個Tree Bitmap節(jié)點(即Level 2中的第一個Tree Bitmap節(jié)點21),通過Child Node Pointer從內(nèi)存中讀取Tree Bitmap節(jié)點21的信息,包括:Internal Tree Bitmap、Extending Paths Bitmap和Child Node Pointer。
步驟02:然后讀取IPv4前綴的中間3bit“001”,在Tree Bitmap節(jié)點21的Internal Tree Bitmap節(jié)點中查找與“001”匹配的前綴,確定P6是最長前綴匹配結(jié)果;
根據(jù)中間3bit“001”在Tree Bitmap節(jié)點21的Extending Paths Bitmap中查找對應(yīng)bit(中間3bit“001”對應(yīng)Tree Bitmap21節(jié)點的第2個分支,則應(yīng)該在Tree Bitmap節(jié)點21的Extending Paths Bitmap中查找第2個bit),該bit取值為“1”,則確定Tree Bitmap節(jié)點21有下一級Tree Bitmap節(jié)點,且確定該下一級Tree Bitmap節(jié)點為Tree Bitmap節(jié)點21的Child Node Pointer指向的第一個Tree Bitmap節(jié)點(即Tree Bitmap節(jié)點31),則通過Tree Bitmap節(jié)點21的Child Node Pointer從內(nèi)存中讀取Tree Bitmap節(jié)點31的信息,包括:Internal Tree Bitmap、Extending Paths Bitmap、Child Node Pointer。
步驟03:由于Tree Bitmap節(jié)點31節(jié)點位于樹底,只有Internal Tree Bitmap,則使用IPv4前綴的最低2bit“10”,查找Tree Bitmap節(jié)點31節(jié)點的Internal Tree Bitmap,得到最長前綴匹配是P9。
可見,采用Multibit Trie可以大大減少LPM路由查找時的節(jié)點查找次數(shù)。例如:在圖4所示的Multibit Trie中查找IPv4前綴“10000110”的LPM路由,只需要通過Tree Bitmap 1->Tree Bitmap 21->Tree Bitmap 31三次節(jié)點查找。
上述Tree Bitmap 1->Tree Bitmap 21->Tree Bitmap 31查找過程中,需要把每級節(jié)點得到的LPM信息傳遞給后級節(jié)點,后級節(jié)點根據(jù)前級節(jié)點的LPM信息得到本級節(jié)點的LPM信息并繼續(xù)傳遞給下一級節(jié)點。例如:Tree Bitmap1得到的LPM是P2,將P2傳遞給Tree Bitmap 21;Tree Bitmap 21得到的LPM是P6,P6比Tree Bitmap 1傳遞的P2是更長的LPM,因此P6被傳遞給Tree Bitmap 31;Tree Bitmap 31得到的LPM是P9,P9是比P6更長的LPM,因此P9作為最終的LPM結(jié)果。
通過Tree Bitmap 31的Internal Tree Bitmap和Result Array Pointer,得到P9對應(yīng)的RA指針,從內(nèi)存中讀取RA作為最終的LPM路由。
上述查找過程需要查找Tree Bitmap 1、Tree Bitmap 21、Tree Bitmap 31的內(nèi)存信息和RA共4次內(nèi)存查找操作。
申請人對基于Multibit Trie的Tree Bitmap算法進行分析發(fā)現(xiàn):
一)Tree Bitmap算法沒有實現(xiàn)多VPN實例支持,而在現(xiàn)今的網(wǎng)絡(luò)設(shè)備中多VPN實例支持是一個非常重要的功能,其對路由算法的整體架構(gòu)有很大的影響。
二)基于Multibit Trie的Tree Bitmap算法每次查找多bit,因此Tree Bitmap節(jié)點的數(shù)據(jù)結(jié)構(gòu)較大,每個Tree Bitmap節(jié)點的數(shù)據(jù)結(jié)構(gòu)包括:Internal Tree Bitmap、Extending Paths Bitmap、Result Array Pointer和Child Node Pointer,查找速度較慢。
圖6為本申請一實施例提供的基于Multibit Trie的IP路由查找方法流程圖,其具體步驟如下:
步驟601:分別針對每個VPN中的IP前綴的路由分布,構(gòu)建一棵Multibit Trie。
步驟602:采用前綴擴展的方法將Multibit Trie的高1~m級IP前綴上的路由擴展到m+1級IP前綴上,m為大于1的整數(shù)。
步驟603:將Multibit Trie的m+1級IP前綴的每一個分支作為一個Branch_Tree(分支樹),保存每個Branch_Tree的數(shù)據(jù)結(jié)構(gòu)信息。
步驟604:當(dāng)對一VPN內(nèi)的一IP地址進行路由查找時,根據(jù)該IP地址的高m+1bit在該VPN對應(yīng)的Multibit Trie中查找到對應(yīng)的Branch_Tree,在該Branch_Tree中查找對應(yīng)的路由。
一種實施例中,在所述Multibit Trie中,0級前綴的默認(rèn)路由存儲在片外存儲空間的預(yù)定區(qū)域;
且,步驟603中,所述保存每個Branch_Tree的數(shù)據(jù)結(jié)構(gòu)信息為:將每個Branch_Tree的數(shù)據(jù)結(jié)構(gòu)信息保存在片外存儲空間的空閑區(qū)域中。
一種實施例中,步驟603中,所述保存每個Branch_Tree的數(shù)據(jù)結(jié)構(gòu)信息進一步包括:
針對Branch_Tree維護VRB(VPN Root Bitmap,虛擬專網(wǎng)入口位圖)Table(表),該VRB Table包含CEPB(Compressed Extending Path Bitmap,壓縮擴展路徑位圖)和CNP(Child Node Pointer,子節(jié)點指針),其中,所述CEPB共2m+1/2d bit,每2d個連續(xù)的Branch_Tree對應(yīng)CEPB的一個bit,當(dāng)2d個連續(xù)的Branch_Tree中存在分布路由的Branch_Tree時,則對應(yīng)的CEPB位有效,d為正整數(shù);所述CNP表示第一個CEPB有效bit對應(yīng)的2d個Branch_Tree的第一個Branch_Tree的指針;
且,步驟604中,所述根據(jù)該IP地址的高m+1bit查找到對應(yīng)的Branch_Tree,在該Branch_Tree中查找對應(yīng)的路由包括:
讀取該IP地址的高m+1bit,根據(jù)該IP地址的高m+1-d bit在該Multibit-Trie的VRB Table的CEPB中查找到對應(yīng)的bit;若查找到的bit有效,則根據(jù)該IP地址的高m+1bit中的低d bit確定對應(yīng)的CNP,根據(jù)該CNP查找到對應(yīng)的Branch_Tree的數(shù)據(jù)結(jié)構(gòu)信息;根據(jù)該Branch_Tree的數(shù)據(jù)結(jié)構(gòu)信息查找該IP地址的路由。
一種實施例中,步驟602中,所述采用前綴擴展的方法將Multibit Trie 的高1~m級IP前綴上的路由擴展到m+1級IP前綴上之前進一步包括:
按照路由分布較多的IP前綴段位于Level底部的原則,將每棵Multibit Trie的/0~/8級IP前綴劃分到Level 0,將最低7級IP前綴劃分到最后一個Level,將中間的IP前綴以步長8劃分為多個Level(層);
且,步驟602中,所述采用前綴擴展的方法將Multibit Trie的高1~m級IP前綴上的路由擴展到m+1級IP前綴上包括:
采用前綴擴展的方法將Multibit Trie的1~8級IP前綴上的路由擴展到9級IP前綴上。
一種實施例中,步驟603中,所述保存每個Branch_Tree的數(shù)據(jù)結(jié)構(gòu)信息包括:
對于每個Branch_Tree中除Level 0外的每個Level中的每個Sub_Trie(子字典樹),采用前綴擴展的方式將該Sub_Trie的0、1、2級上的IP前綴的路由擴展到3級IP前綴上;將每個Sub_Trie均勻劃分成8個分段Sub_Trie,保存每個分段Sub_Trie的數(shù)據(jù)結(jié)構(gòu)信息,其中,每個分段Sub_Trie以該子Sub_Trie的高3級IP前綴為索引;
且,步驟604中,所述在該Branch_Tree中查找對應(yīng)的路由包括:
當(dāng)查找到一Level時,根據(jù)該IP地址在本Level中對應(yīng)的8bit或7bit的高3bit,在本Level的Sub_Trie中索引到對應(yīng)的分段Sub_Trie,然后根據(jù)該分段Sub_Trie的數(shù)據(jù)結(jié)構(gòu)信息進行路由查找。
一種實施例中,步驟603中,所述保存每個Branch_Tree的數(shù)據(jù)結(jié)構(gòu)信息包括:
對于最后一個Level內(nèi)的每個Sub_Trie,該Sub_Trie的數(shù)據(jù)結(jié)構(gòu)信息包括:
1)q個Prefix Key(前綴密鑰):每個Prefix key代表該Sub_Trie中的其中一個有路由分布的IP前綴的IP地址的最低7bit,其中,q為預(yù)設(shè)的該Sub_Trie中的有路由分布的IP前綴的最大數(shù)量;
2)Result Array ptr(結(jié)果數(shù)組指針);
且,步驟604中,所述在該Branch_Tree中查找對應(yīng)的路由時,當(dāng)查找到最后一個Level時,將該IP地址的最低7bit與最后一個Level的各Sub_Trie的數(shù)據(jù)結(jié)構(gòu)信息中的Prefix Key匹配,若匹配上,則根據(jù)對應(yīng)的Result Array ptr直接確定路由。
一種實施例中,步驟604中,所述在該Branch_Tree中查找對應(yīng)的路由進一步包括:
若未查找到,則從所述片外存儲空間的預(yù)定區(qū)域中讀取默認(rèn)路由,將默認(rèn)路由作為最終查找到的路由。
圖7為本申請一實施例提供的基于Multibit Trie的IPv4路由查找方法流程圖,其具體步驟如下:
步驟701:分別針對每個VPN中的所有IPv4前綴的路由分布,構(gòu)建一棵Multibit Trie。所有VPN的Multibit Trie的結(jié)構(gòu)相同。其中,每棵Multibit Trie共有四個Level:Level 0~3,Level 0由0/~8/級前綴構(gòu)成,Level 1、Level2的步長都為8,Level 3的步長為7。
即,有多少個VPN就建立多少棵Multibit Trie。
圖8給出了本申請實施例針對一個VPN(VPN m)中的IPv4前綴的路由分布建立的Multibit Trie的結(jié)構(gòu)示例圖,如圖8所示,Multibit Trie共有32級前綴:/0~/31,其中,Level 0中的前綴為:/0~/8級(對應(yīng)IPv4地址的高9bit),Level 1中的前綴為:/9~/16(對應(yīng)IPv4地址的次高8bit),Level 2中的前綴為:/17~/24(對應(yīng)IPv4地址的次低8bit),Level 3中的前綴為:/25~/31(對應(yīng)IPv4地址的低7bit)。
本申請實施例中,在對Multibit Trie的/9~/31級前綴進行分層時,采用的步長為8、8、7,這樣可以保證包含有較多的有路由分布的前綴段:prefix16、prefix24分布在Level 1和Level 2的底部,這樣從整體上來看會使得Multibit Trie中的sub_Trie節(jié)點的數(shù)量最少。
步驟702:針對每個VPN的Multibit Trie,采用前綴擴展的方法將該Multibit Trie的/1~/8級前綴上的路由擴展到/9級前綴上。
前綴擴展(Prefix Expansion)是指將掩碼長度短的前綴的路由等價擴展到多個掩碼長度長的前綴上。
以圖4所示的Multibit Trie為例,可以將該Multibit Trie的/0、/1、/2級前綴的路由擴展到/3級前綴上,擴展時所遵循的原則是“對于/3級前綴,取其最臨近的/2、/1、/0級前綴的路由”,具體如下:
1)將/0級前綴的路由擴展到/1級前綴上
/0級前綴P1的路由可以擴展到/1級前綴Q1和P2上,但是,由于P2已有路由分布,且P2已有路由的優(yōu)先級高于P1的路由,則只需將P1的路由擴展到Q1上,如圖9-1所示。
2)將/1級前綴的路由擴展到/2級前綴上
/1級有兩個前綴Q1和P2,則:
Q1的路由可以擴展到/2級前綴P3和Q9上,但是,由于P3已有路由分布,且P3已有路由的優(yōu)先級高于Q1的路由,則只需將Q1的路由擴展到Q9上,如圖9-2所示;
P2的路由可以擴展到/2級前綴Q2和Q3上,如圖9-2所示。
3)將/2級前綴的路由擴展到/3級前綴上
/2級有四個前綴P3、Q9、Q2和Q3,則:
P3的路由可以擴展到/3級前綴Q10和Q11上,如圖9-3所示;
Q9的路由可以擴展到/3級前綴Q12和Q13上,如圖9-3所示;
Q2的路由可以擴展到/3級前綴Q4和P4上,但是,由于P4已有路由分布,且P4已有路由的優(yōu)先級高于Q2的路由,則只需將Q2的路由擴展到Q4上,如圖9-3所示;
Q3上的路由可以擴展到/3級的前綴Q14和P5上,但是,由于P5上已 有路由分布,且P5上已有路由的優(yōu)先級高于Q3上的路由,則只需將Q3上的路由擴展到Q14上,如圖9-3所示。
步驟703:將0/級前綴的默認(rèn)路由存儲在DRAM的固定位置。
每個VPN通常有默認(rèn)路由0.0.0.0/0,考慮到:如果將默認(rèn)路由也采用前綴擴展的方式擴展到Multibit Trie的/9級前綴上,則每棵Multibit Trie固定會有512個有效的Branch_Tree,這樣對于多VPN路由表會形成大量的冗余Branch_Tree。
步驟704:將Level 0的29=512個下一級分支中的每一個分支作為一個Branch_Tree。
則每個Branch_Tree都由步長為8的Level 1、Level 2和步長為7的Level3的三層Sub_Trie組成。
步驟705:針對每個Branch_Tree,在DRAM中保存該Branch_Tree的數(shù)據(jù)結(jié)構(gòu)信息,其中,該Branch_Tree的數(shù)據(jù)結(jié)構(gòu)信息由該Branch_Tree在Level1、Level 2和Level 3中的所有Sub_Trie節(jié)點的數(shù)據(jù)結(jié)構(gòu)信息組成。
其中,Level 1、Level 2中的每個Sub_Trie節(jié)點的數(shù)據(jù)結(jié)構(gòu)信息都分別由Internal Tree Bitmap、Extending Paths Bitmap、Result Array Pointer和Child Node Pointer組成,Level 3中的每個Sub_Trie節(jié)點由于都沒有下一級分支,則都分別由Internal Tree Bitmap和Result Array Pointer組成。
根據(jù)Multibit Trie固有結(jié)構(gòu)特點可知:
Level 0中始終只包含1個Sub_Trie節(jié)點(設(shè)為Sub_Trie節(jié)點1);
設(shè)Sub_Trie節(jié)點1有p個分支有下一級Sub_Trie節(jié)點,則Level 1中就包含p個Sub_Trie節(jié)點;
設(shè)Level 1中的p個Sub_Trie節(jié)點共有q個分支有下一級Sub_Trie節(jié)點,則Level 2中就包含q個Sub_Trie節(jié)點;
設(shè)Level 2中的q個Sub_Trie節(jié)點共有r個分支有下一級Sub_Trie節(jié)點,則Level 3中就包含r個Sub_Trie節(jié)點。
在一個Branch_Tree中,Level 1中最多有512個Sub_Trie,Level 2中最多有64K個Sub_Trie,Level 3中最多有16M個Sub_Trie。
步驟706:針對該29=512個Branch_Tree維護VRB Table,該VRB Table包含CEPB和CNP兩部分,其中,
CEPB:用于表示512個Branch_Tree的路由分布情況,共64bit;每8個連續(xù)的Branch_Tree對應(yīng)CEPB的一個bit,該8個連續(xù)的Branch_Tree中只要有一個Branch_Trees上有路由分布,則對應(yīng)的CEPB位有效(即為“1”)。
CNP:表示第一個CEPB有效bit對應(yīng)的8個Branch_Tree的第一個Branch_Tree的指針(即第一個Branch_Tree的數(shù)據(jù)結(jié)構(gòu)信息在內(nèi)存中的起始地址)。
可見,通過CEPB和CNP可以計算得到任意一個有效的Branch_Tree(即有路由分布的Branch_Tree)的指針。
步驟707:當(dāng)對一VPN內(nèi)的一IPv4地址進行LPM路由查找時,先查找到該VPN對應(yīng)的Multibit-Trie的VRB Table。
步驟708:讀取該IPv4地址的高9bit,先計算該IPv4地址的高6bit對應(yīng)的十進制值,設(shè)該值為v,在步驟707查找到的VRB Table中查找第v bit。
IPv4地址的高6bit對應(yīng)的十進制值v的取值范圍為:0~(26-1),即,0~63。
步驟709:判斷該第v bit的取值為0還是1,若為0,則將DRAM的固定位置處存儲的默認(rèn)路由作為本次LPM路由查找結(jié)果,本流程結(jié)束;若為1,執(zhí)行步驟710。
步驟710:計算該IPv4地址的高9bit中的低3bit對應(yīng)的十進制值,設(shè)該值為w,則確定應(yīng)該在該VPN的VRB Table的第v bit對應(yīng)的8個Branch_Tree中的第w個Branch_Tree中進行LPM路由查找,則根據(jù)CNP查找到該Branch_Tree的數(shù)據(jù)結(jié)構(gòu)信息,根據(jù)該Branch_Tree的數(shù)據(jù)結(jié)構(gòu)信息查找該IPv4地址的LPM路由。
IPv4地址的高9bit的低3bit對應(yīng)的十進制值w的取值范圍為:0~(23-1),即,0~7。
本步驟710執(zhí)行完后,若未在確定的Branch_Tree中查找到該IPv4地址的LPM路由,則在步驟703存儲的DRAM的固定位置中查找到/0級前綴的默認(rèn)路由,將該默認(rèn)路由作為該IPv4地址的LPM路由。
在實際應(yīng)用中,對于每個VPN對應(yīng)的Multibit Trie,除Level 0之外的其它Level中的Sub_Trie節(jié)點的數(shù)據(jù)結(jié)構(gòu)信息都存儲在外部DRAM中,Sub_Trie節(jié)點的數(shù)據(jù)結(jié)構(gòu)的大小直接影響DRAM的訪問性能。本申請實施例中,一個Sub_Trie節(jié)點的步長為8或7,Sub_Trie節(jié)點的數(shù)據(jù)結(jié)構(gòu)包括:
Internal Tree Bitmap(設(shè)長度為255bit)
Extending Paths Bitmap(設(shè)長度為256bit)
Result Array Pointer(設(shè)長度為24bit)
Child Node Pointer(設(shè)長度為24bit)
則一個Sub_Trie節(jié)點的數(shù)據(jù)結(jié)構(gòu)共559bit。
為了進一步減少Sub_Trie節(jié)點的數(shù)據(jù)結(jié)構(gòu)所占用的存儲空間,本申請實施例對除Level 0之外的其它Level中的每個Sub_Trie節(jié)點進行如下優(yōu)化:
步驟01:對于每個Sub_Trie,采用前綴擴展的方式將該Sub_Trie的/0、/1、/2級前綴的路由擴展到/3級前綴上。
圖10中的Sub_Trie節(jié)點即將一個Sub_Trie的/0、/1、/2級前綴的路由擴展到/3級前綴上后的示例圖。
步驟02:將每個Sub_Trie節(jié)點均勻劃分成8個Segmented(分段)Sub_Trie節(jié)點,將每個Segmented Sub_Trie節(jié)點的數(shù)據(jù)結(jié)構(gòu)信息保存在DRAM中,其中,每個Segmented Sub_Trie節(jié)點的數(shù)據(jù)結(jié)構(gòu)信息以該Segmented Sub_Trie節(jié)點的高3bit IP地址為索引。
如圖10中的Segmented Sub_Trie節(jié)點0~7,其中:Segmented Sub_Trie 0的索引為000,Segmented Sub_Trie 1的索引為001,Segmented Sub_Trie 2的索引為010,Segmented Sub_Trie 3的索引為011,Segmented Sub_Trie 4的索引為100,Segmented Sub_Trie 5的索引為101,Segmented Sub_Trie 6的索引為110,Segmented Sub_Trie 7的索引為111。
從圖10可以看出,每個Segmented Sub_Trie節(jié)點的數(shù)據(jù)結(jié)構(gòu)的大小為原Sub_Trie節(jié)點的數(shù)據(jù)結(jié)構(gòu)的1/8。
步驟710中,當(dāng)在確定的該Branch_Tree中查找該IPv4地址的LPM路由時,當(dāng)查找到一Level時,根據(jù)該IPv4地址在本Level中對應(yīng)的8bit或7bit,先根據(jù)該8bit或7bit的高3bit在本Level中索引到對應(yīng)的Segmented Sub_Trie節(jié)點,然后根據(jù)該Segmented Sub_Trie節(jié)點的數(shù)據(jù)結(jié)構(gòu)信息進行后續(xù)LPM路由查找過程??梢?,大大提高了LPM路由查找速度。
另外,由于在一個Branch_Tree中,Level 1最多有512個Sub_Trie節(jié)點,Level 2最多有64K個Sub_Trie節(jié)點,Level 3最多有16M個Sub_Trie節(jié)點,…,即,Level中的Sub_Trie節(jié)點的數(shù)量依次增加,因此,通常情況下,最后一個Level中的Sub_Trie節(jié)點數(shù)量最多;但是,通過觀察Internet路由和數(shù)據(jù)中心路由分布發(fā)現(xiàn):通常情況下最后一個Level中的每個Sub_Trie節(jié)點內(nèi)的路由一般都小于4個?;诖?,對最后一個Level內(nèi)的Sub_Trie節(jié)點的數(shù)據(jù)結(jié)構(gòu)進行如下優(yōu)化:
首先,為了將最后一個Level內(nèi)的Sub_Trie節(jié)點的數(shù)據(jù)結(jié)構(gòu)與其它Sub_Trie節(jié)點進行區(qū)分,將最后一個Level內(nèi)的Sub_Trie節(jié)點的數(shù)據(jù)結(jié)構(gòu)稱為:Compressed(壓縮)Sub_Trie節(jié)點數(shù)據(jù)結(jié)構(gòu),其主要包括如下兩部分:
1)4個Prefix Key:每個Prefix key代表最后一個Level的該Sub_Trie節(jié)點中一個有路由分布的IP前綴的IP地址的最后7bit。
一個Prefix Key的長度為7bit,4個Prefix Key共28bit。
可見,Prefix Key取代了通常的Internal Tree Bitmap。
2)Result Array ptr(24bit)
可見,一個Compressed Sub_Trie節(jié)點的數(shù)據(jù)結(jié)構(gòu)共52bit。
步驟710中,當(dāng)在確定的該Branch_Tree中查找該IPv4地址的LPM路由時,當(dāng)查找到最后一個Level(即Level 3)時,直接將該IPv4地址在本Level中對應(yīng)的7bit(即最低7bit)與Level 3的各Compressed Sub_Trie節(jié)點的數(shù)據(jù)結(jié)構(gòu)中的Prefix Key匹配即可,若匹配上,則根據(jù)對應(yīng)的Result Array ptr直接確定LPM路由??梢?,LPM路由查找速度進一步提高了。
本申請實施例的有益技術(shù)效果如下:
一)支持多VPN實例的IPv4和IPv6路由;
二)通過將Multibit-Trie劃分為512個Branch_Tree,提高了路由查找速度;
三)將默認(rèn)路由單獨存儲,而不擴展到Level 1,減少了Multibit-Trie的冗余節(jié)點,進一步提高了路由查找速度;
四)對Sub_Trie節(jié)點內(nèi)部進行前綴擴展后劃分為8個Segmented Sub_Trie節(jié)點,進一步提高了路由查找速度;
五)簡化最后一級Level的Sub_Trie節(jié)點的數(shù)據(jù)結(jié)構(gòu),進一步提高了路由查找速度。
圖11為本申請實施例提供的基于Multibit Trie的IP路由查找裝置的組成示意圖,該裝置主要包括:
Multibit Trie建立模塊:分別針對每個VPN中的IP前綴的路由分布,構(gòu)建一棵Multibit Trie;采用前綴擴展的方法將Multibit Trie的高1~m級IP前綴上的路由擴展到m+1級IP前綴上,m為大于1的整數(shù);將所述Multibit Trie的m+1級IP前綴的每一個分支作為一個Branch_Tree,保存每個Branch_Tree 的數(shù)據(jù)結(jié)構(gòu)信息;
路由查找模塊:當(dāng)對一VPN內(nèi)的一IP地址進行路由查找時,根據(jù)該IP地址的高m+1位bit在該VPN對應(yīng)的Multibit Trie中查找到對應(yīng)的Branch_Tree,在該Branch_Tree中查找對應(yīng)的路由。
一種實施例中,Multibit Trie建立模塊進一步用于,在所述Multibit Trie中,0級前綴的默認(rèn)路由存儲在片外存儲空間的預(yù)定區(qū)域;
且,Multibit Trie建立模塊保存每個Branch_Tree的數(shù)據(jù)結(jié)構(gòu)信息為:將每個Branch_Tree的數(shù)據(jù)結(jié)構(gòu)信息保存在片外存儲空間的空閑區(qū)域中。
一種實施例中,Multibit Trie建立模塊保存每個Branch_Tree的數(shù)據(jù)結(jié)構(gòu)信息進一步用于,
針對Branch_Tree維護VRB Table,該VRB Table包含CEPB和CNP,其中,所述CEPB共2m+1/2d bit,每2d個連續(xù)的Branch_Tree對應(yīng)CEPB的一個bit,當(dāng)2d個連續(xù)的Branch_Tree中存在分布路由的Branch_Tree時,則對應(yīng)的CEPB位有效,d為正整數(shù);所述CNP表示第一個CEPB有效bit對應(yīng)的2d個Branch_Tree的第一個Branch_Tree的指針;
且,路由查找模塊根據(jù)該IP地址的高m+1bit查找到對應(yīng)的Branch_Tree,在該Branch_Tree中查找對應(yīng)的路由包括:
讀取該IP地址的高m+1bit,根據(jù)該IP地址的高m+1-d bit在該Multibit-Trie的VRB Table的CEPB中查找到對應(yīng)的bit;若查找到的bit有效,則根據(jù)該IP地址的高m+1bit中的低d bit確定對應(yīng)的CNP,根據(jù)該CNP查找到對應(yīng)的Branch_Tree的數(shù)據(jù)結(jié)構(gòu)信息;根據(jù)該Branch_Tree的數(shù)據(jù)結(jié)構(gòu)信息查找該IP地址的路由。
一種實施例中,Multibit Trie建立模塊采用前綴擴展的方法將Multibit Trie的高1~m級IP前綴上的路由擴展到m+1級IP前綴上之前進一步用于,
按照路由分布較多的IP前綴段位于Level底部的原則,將每棵Multibit Trie的/0~/8級IP前綴劃分到Level 0,將最低7級IP前綴劃分到最后一個 Level,將中間的IP前綴以步長8劃分為多個Level;
且,Multibit Trie建立模塊采用前綴擴展的方法將Multibit Trie的高1~m級IP前綴上的路由擴展到m+1級IP前綴上包括:
采用前綴擴展的方法將Multibit Trie的1~8級IP前綴上的路由擴展到9級IP前綴上。
一種實施例中,Multibit Trie建立模塊保存每個Branch_Tree的數(shù)據(jù)結(jié)構(gòu)信息包括:
對于每個Branch_Tree中除Level 0外的每個Level中的每個Sub_Trie,采用前綴擴展的方式將該Sub_Trie的0、1、2級上的IP前綴的路由擴展到3級IP前綴上;將每個Sub_Trie均勻劃分成8個分段Sub_Trie,保存每個分段Sub_Trie的數(shù)據(jù)結(jié)構(gòu)信息,其中,每個分段Sub_Trie以該子Sub_Trie的高3級IP前綴為索引;
且,路由查找模塊在該Branch_Tree中查找對應(yīng)的路由包括:
當(dāng)查找到一Level時,根據(jù)該IP地址在本Level中對應(yīng)的8bit或7bit的高3bit,在本Level的Sub_Trie中索引到對應(yīng)的分段Sub_Trie,然后根據(jù)該分段Sub_Trie的數(shù)據(jù)結(jié)構(gòu)信息進行路由查找。
一種實施例中,Multibit Trie建立模塊保存每個Branch_Tree的數(shù)據(jù)結(jié)構(gòu)信息包括:
對于最后一個Level內(nèi)的每個Sub_Trie,該Sub_Trie的數(shù)據(jù)結(jié)構(gòu)信息包括:
1)q個Prefix Key:每個Prefix key代表該Sub_Trie中的其中一個有路由分布的IP前綴的IP地址的最低7bit,其中,q為預(yù)設(shè)的該Sub_Trie中的有路由分布的IP前綴的最大數(shù)量;
2)結(jié)果數(shù)組指針Result Array ptr;
且,路由查找模塊在該Branch_Tree中查找對應(yīng)的路由時,當(dāng)查找到最后一個Level時,直接將該IP地址的最低7bit與最后一個Level的各Sub_Trie 的數(shù)據(jù)結(jié)構(gòu)信息中的Prefix Key匹配,若匹配上,則根據(jù)對應(yīng)的Result Array ptr直接確定路由。
一種實施例中,路由查找模塊在該Branch_Tree中查找對應(yīng)的路由進一步用于,若未查找到,則從所述片外存儲空間的預(yù)定區(qū)域中讀取默認(rèn)路由,將默認(rèn)路由作為最終查找到的路由。
本申請實施例還提供包含IP路由查找裝置的設(shè)備,該設(shè)備可以是軟硬件結(jié)合的可編程設(shè)備,從硬件層面而言,該設(shè)備的硬件架構(gòu)示意圖具體可以參見圖12。該設(shè)備中包括:機器可讀存儲介質(zhì)、CPU和其它硬件,其中:
機器可讀存儲介質(zhì):存儲指令代碼;所述指令代碼被CPU執(zhí)行時完成的操作主要為上述IP路由查找裝置完成的功能。
CPU:與機器可讀存儲介質(zhì)通信,讀取和執(zhí)行機器可讀存儲介質(zhì)中存儲的所述指令代碼,完成上述IP路由查找裝置完成的功能。
當(dāng)上述IP路由查找裝置作為一個邏輯意義上的裝置時,其是通過CPU運行機器可讀存儲介質(zhì)中對應(yīng)的計算機程序指令形成的。當(dāng)對應(yīng)的計算機程序指令被執(zhí)行時,形成的IP路由查找裝置用于按照上述實施例中的IP路由查找方法執(zhí)行相應(yīng)操作。
機器可讀存儲介質(zhì)可以是任何電子、磁性、光學(xué)或其它物理存儲裝置,可以包含或存儲信息,如可執(zhí)行指令、數(shù)據(jù),等等。例如,機器可讀存儲介質(zhì)可以是:RAM(Radom Access Memory,隨機存取存儲器)、易失存儲器、非易失性存儲器、閃存、存儲驅(qū)動器(如硬盤驅(qū)動器)、固態(tài)硬盤、任何類型的存儲盤(如光盤、dvd等),或者類似的存儲介質(zhì),或者它們的組合。
本申請所描述的任一機器可讀存儲介質(zhì)都可以被認(rèn)為是非暫時性的。
以上所述僅為本申請的較佳實施例而已,并不用以限制本申請,凡在本 申請的精神和原則之內(nèi),所做的任何修改、等同替換、改進等,均應(yīng)包含在本申請保護的范圍之內(nèi)。