專利名稱:Ip查找的一種內(nèi)存回收方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種在網(wǎng)絡(luò)路由器上實現(xiàn)的IP查找方法,尤其涉及IP查找中的內(nèi)存回收方法。
本發(fā)明是在“擴充前綴方法”(以下簡稱CPE方法)的基礎(chǔ)上進行的,CPE方法是由Srinivasan提出的一種快速查找方法,論文名稱為“Faster IP Lookups using Controlled Prefix Expansion”,出自proc.ACM sigmetrics′98 conf.,madison,WI,第1-11頁。方法利用分段壓縮的思想減少方法的時間復(fù)雜度,使得查找速度大大增加,根據(jù)不同的配置,可以在3~32步之間查找完成,下面簡單介紹一下CPE方法。
自從1993年采用CIDR(無類域間路由)協(xié)議以來,IP路由就包含兩個部分<IP前綴,前綴的長度>,前綴的長度范圍在0~32之間。對于每一個輸入包,IP查找引擎需要查找出匹配的IP前綴集合,并從匹配的前綴集合中查找出最長匹配的前綴。最長匹配的前綴所指示的地址就是查找出來的下一跳的地址。關(guān)于CIDR,詳細可見RFC1519 Classless Inter-Domain Routing(CEIR)an AddressAssignment and Aggregation Strategy.V.Fuller,T.Li,J.Yu,&K.Varadhan.September 1993以及RFC1817 CIDR and ClassfulRouting.Y.Rekhter.August 1995。
路由表中的規(guī)則可以表示為前綴的形式,前綴的長度在8位和32位之間變化,IP查找方法即找出最長匹配的前綴,由于前綴長度的多樣性,是造成查找方法時間復(fù)雜度高的一個重要因素。對于前綴最大長度為W,NetBSD(NetBSD是一種標(biāo)準(zhǔn)的Unix操作系統(tǒng),該操作系統(tǒng)實現(xiàn)了TCP/IP協(xié)議棧,其中包含IP查找的實現(xiàn))中的二叉樹的方法復(fù)雜度為O(W),如果前綴最大長度減少為L(L<W),則方法復(fù)雜度將減少為O(L)。顯而易見,減少前綴的最大長度將提高方法的速度??刂魄熬Y擴充方法的基本思想是通過減少前綴長度的多樣性來增加方法的步長,從而減少了方法的復(fù)雜度,達到快速查找的目的。
任何前綴,可以擴充為指定長度的前綴集合,如對于前綴10*,可以擴充為長度為4的前綴集合{1000*,1001*,1010*,1011*},通過擴充前綴到指定的長度,可以歸一化前綴的長度,從而減少了前綴長度的多樣性。擴充前綴方法可以把擴充后歸一化的前綴長度分為幾級,每一級前綴的長度是一樣的,通過數(shù)組索引就可以找到該級別的節(jié)點。
擴充前綴tries樹把原來的1比特樹的32級結(jié)果壓縮為3級結(jié)構(gòu),查找次數(shù)縮短為3次,方法的時間復(fù)雜度為O(3)。從而達到快速查找的目的。假設(shè)P5=0*,P1=10*,P2=111*,P3=11001*,P4=1*,P6=1000*,P7=100000*,P8=1000000*,則典型的擴充前綴樹的結(jié)構(gòu)如
圖1所示。
但是在CPE方法中,CPE方法在刪除一個路由項后,如果路由項所在的節(jié)點數(shù)組中沒有其他的前綴存在,需要回收節(jié)點數(shù)組的內(nèi)存空間,即如果該節(jié)點以及節(jié)點以下的所有前綴都已經(jīng)刪除,則需要對該節(jié)點以及該節(jié)點以下的所有節(jié)點進行內(nèi)存回收。如何判斷節(jié)點中的前綴是否刪除完畢是一個問題,CPE方法沒有對這個問題進行討論,通常的做法是進行遍歷操作。遍歷操作將占用大量的內(nèi)存操作時間,并且修改頻繁時,需要大量的內(nèi)存,這在高速路由器的場合是不實用的。
本發(fā)明的目的就是要解決CPE方法中刪除路由項的內(nèi)存回收問題,減少內(nèi)存操作時間,減少內(nèi)存的占用。
為了實現(xiàn)以上目的,本發(fā)明提出了一種內(nèi)存回收方法,其特征在于包括以下步驟給每個節(jié)點數(shù)組設(shè)一個節(jié)點計數(shù)器;當(dāng)在當(dāng)前節(jié)點數(shù)組或當(dāng)前節(jié)點數(shù)組的下游節(jié)點數(shù)組中插入和刪除前綴時,節(jié)點計數(shù)器相應(yīng)加一或減一;以及當(dāng)節(jié)點計數(shù)器為零時,回收該節(jié)點數(shù)組以及其下游節(jié)點數(shù)組所占用的內(nèi)存。
本發(fā)明特別適用于CPE方法,但是本領(lǐng)域的普通技術(shù)人員將能夠容易將本發(fā)明的原理用到其它的方法中。
另外,本發(fā)明的方法還能與其它方法同時使用來進一步改進CPE方法,例如,可以先用LeafPush方法對CPE方法進行優(yōu)化,然后再應(yīng)用本發(fā)明?;蛘弑景l(fā)明的方法可以單獨使用。
從以上方法可以看出,當(dāng)前綴插入到一個節(jié)點時,該節(jié)點以及該節(jié)點的上游節(jié)點的節(jié)點計數(shù)器加一,當(dāng)前綴從一個節(jié)點刪除時,該節(jié)點以及該節(jié)點的上游節(jié)點的節(jié)點計數(shù)器減一。如果一個節(jié)點的計數(shù)器減為零,則可以刪除該節(jié)點以及以下的節(jié)點。這樣就完美的解決了節(jié)點刪除時的內(nèi)存回收問題。
下面將參照附圖對本發(fā)明進行更加詳細的描述,附圖中圖1是CPE方法中典型的擴充前綴樹的結(jié)構(gòu);圖2是根據(jù)本發(fā)明采用節(jié)點計數(shù)器實現(xiàn)的前綴的插入流程圖;圖3是根據(jù)本發(fā)明采用節(jié)點計數(shù)器實現(xiàn)的前綴的刪除流程圖。
下面參照圖2來描述根據(jù)本發(fā)明采用節(jié)點計數(shù)器實現(xiàn)的前綴的插入流程圖。首先對本發(fā)明的節(jié)點計數(shù)器進行描述。在本發(fā)明中,節(jié)點計數(shù)器保存每一個節(jié)點數(shù)組插入和刪除前綴的信息,在本發(fā)明中,對應(yīng)每一個節(jié)點數(shù)組有一個節(jié)點計數(shù)器,為P1所對應(yīng)的節(jié)點節(jié)點計數(shù)器可以放在節(jié)點數(shù)組前、后以及其它位置。在放置在其它位置的情況下,需要各計數(shù)器與對應(yīng)的節(jié)點數(shù)組之間的索引值。在優(yōu)選實施例中,節(jié)點計數(shù)器放在節(jié)點數(shù)組前。在本發(fā)明中,節(jié)點計數(shù)器用來記錄插入和刪除的前綴項,而不是用來記錄在當(dāng)前節(jié)點的插入和刪除次數(shù)。即只有插入和刪除引起前綴項的增加或減少時才引起計數(shù)器的增加或減少,如果插入和刪除只是引起節(jié)點數(shù)組的改變而不導(dǎo)致前綴項的增加或減少,則節(jié)點計數(shù)器不改變。在本發(fā)明中,在當(dāng)前節(jié)點數(shù)組中插入和刪除前綴時,節(jié)點計數(shù)器相應(yīng)加一和減一。在當(dāng)前節(jié)點數(shù)組的下游數(shù)組插入和刪除前綴時,節(jié)點計數(shù)器相應(yīng)的加一和減一。在當(dāng)前節(jié)點數(shù)組上游插入和刪除前綴時,節(jié)點計數(shù)器不變。當(dāng)節(jié)點計數(shù)器為零時,可以刪除該節(jié)點,即可以回收節(jié)點數(shù)組的內(nèi)存。
下面根據(jù)圖2描述根據(jù)本發(fā)明一個優(yōu)選實施例,插入前綴的操作流程圖。流程在方框201開始,對系統(tǒng)進行初始化。在圖1的情況下,為節(jié)點11設(shè)定一個計數(shù)器C11,為節(jié)點21設(shè)定計數(shù)器C21,為節(jié)點22設(shè)定計數(shù)器C22,為節(jié)點31設(shè)定計數(shù)器C31,根據(jù)本發(fā)明的計數(shù)器的原理,設(shè)定各計數(shù)器的初始值分別為C11=8(下面有8個前綴P1-P8),C21=3(有3個前綴P6,P7和P8),C22=2(有兩個前綴P2,和P3)以及C31=2(有兩個前綴P7和P8)。需要注意的是,這里為了描述的方便描述了初始化,實際中,不需要每次流程開始都需要進行初始化。只需要在系統(tǒng)的開始進行初始化。以后每次流程的開始只需將上次的結(jié)果作為初始值進行。接著,流程到達方框202。在方框202,取需要插入的前綴,例如,假設(shè)要插入的前綴為P9=1001*。接著,流程到達方框203,在此判斷出該前綴屬于節(jié)點21,所以流程接著到達方框204,在此,因為節(jié)點21是當(dāng)前節(jié)點,其上游節(jié)點是節(jié)點11,所以給節(jié)點計數(shù)器C21和C11都加1。之后,流程在方框205插入前綴P9并結(jié)束。在方框205可以用任何本領(lǐng)域的普通技術(shù)人員所熟悉的現(xiàn)有技術(shù)的方法來進行插入,例如這樣來進行先將P9用CPE擴充為10010*和10011*,接著找到10010和10011的位置,并寫入P9。
在其它情況下,增加前綴會引起節(jié)點的增加,此時,需要分配新的節(jié)點并為新的節(jié)點增加節(jié)點計數(shù)器。例如,假如在方框202得到要加入的前綴是010*,則在方框203將判斷出前綴不能放入任何已有節(jié)點,所以新建例如一個節(jié)點23,并為該節(jié)點分配一個計數(shù)器C23并且為該計數(shù)器設(shè)定初始值為0。到達方框204后,給計數(shù)器C23和C11都加1。最后插入該前綴并且流程結(jié)束。在優(yōu)選實施例中,給一個節(jié)點分配的內(nèi)存長度大小是2n,其中n是節(jié)點所在級別的長度。例如在圖1的情況下,若分配一個在第二級的節(jié)點,則所分配的內(nèi)存長度為23=8,因為第二級的長度是5-2=3。同理,分配的第三級的節(jié)點大小為27-5=4。
下面參照圖3描述根據(jù)本發(fā)明采用節(jié)點計數(shù)器實現(xiàn)的前綴的刪除流程圖。
圖3的流程在方框301開始,接著在方框302取需要刪除的前綴,例如,需要刪除的前綴是p8,接著判斷出P8是在第三級的節(jié)點C31,并且刪除該前綴P8。接著在方框303將該節(jié)點的計數(shù)器C31減一,在方框304判斷出該計數(shù)器不為0,接著到達方框306判斷是否已到達最后一級節(jié)點計數(shù)器,此時判斷的結(jié)果為否,所以流程繼續(xù)到方框303找到第二級的節(jié)點21并將該節(jié)點的計數(shù)器C21減1。接著,該流程又通過方框306和303。在這次循環(huán)過程中,沒有任何一個節(jié)點計數(shù)器到達零,所以不用刪除任何一個節(jié)點。接著假如還要刪除節(jié)點P7,則在這個過程中節(jié)點31的計數(shù)器C31變?yōu)?,所以將在方框305刪除節(jié)點31的數(shù)組,釋放內(nèi)存。
在圖3的實施例中,流程是給每個相關(guān)節(jié)點計數(shù)器減1后就馬上接著判斷其是否為0,并接著進行相應(yīng)的處理。在其它實施例中,可以將流程改為先將相關(guān)的所有計數(shù)器都減1,然后從最低一級的節(jié)點計數(shù)器開始判斷計數(shù)器是否為0,若遇到第一個不為0就可以退出循環(huán),因為在低級的節(jié)點計數(shù)器不為0的情況下,高級的節(jié)點計數(shù)器不會為0。例如在圖1的情況下,在計數(shù)器C31不為0的情況下,計數(shù)器C21和C11都肯定不會為0,所以可以直接退出循環(huán)。
權(quán)利要求
1.一種IP路由查找中的內(nèi)存回收方法,其特征在于包括以下步驟給每個節(jié)點數(shù)組設(shè)一個節(jié)點計數(shù)器;當(dāng)在當(dāng)前節(jié)點數(shù)組或當(dāng)前節(jié)點數(shù)組的下游節(jié)點數(shù)組中插入和刪除前綴時,節(jié)點計數(shù)器相應(yīng)加一或減一;以及當(dāng)節(jié)點計數(shù)器為零時,回收該節(jié)點數(shù)組以及其下游節(jié)點數(shù)組所占用的內(nèi)存。
2.如權(quán)利要求1所述的方法,其特征在于還包括當(dāng)插入的前綴不能放入現(xiàn)有節(jié)點中時,分配內(nèi)存以用于增加新節(jié)點的步驟。
3.如權(quán)利要求2所述的方法,其特征在于增加新節(jié)點的步驟包括設(shè)定增加的節(jié)點的大小為2n次的步驟,其中n為節(jié)點所在級的長度。
4.如權(quán)利要求1,2或3的任一項所述的方法,其特征在于給節(jié)點設(shè)定節(jié)點計數(shù)器的步驟包括將節(jié)點計數(shù)器設(shè)定在節(jié)點數(shù)組的開始的步驟。
全文摘要
IP快速查找方法,即最長前綴匹配方法是路由方法中的一個重要組成部分。本發(fā)明在“擴充前綴方法”的基礎(chǔ)上,針對路由項刪除時,空閑節(jié)點內(nèi)存回收困難的問題,提出“節(jié)點計數(shù)器”的思想。成功解決了路由修改內(nèi)存回收問題,達到很好的效果。
文檔編號H04L29/06GK1314760SQ0010256
公開日2001年9月26日 申請日期2000年3月21日 優(yōu)先權(quán)日2000年3月21日
發(fā)明者黃韜 申請人:華為技術(shù)有限公司