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

      路由項的修改方法及其裝置的制作方法

      文檔序號:7595038閱讀:213來源:國知局
      專利名稱:路由項的修改方法及其裝置的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及路由器技術(shù),尤其涉及一種在網(wǎng)絡路由器上實現(xiàn)的路由項修改方法及其裝置。
      現(xiàn)有技術(shù)中,網(wǎng)絡路由器中的IP查找通常使用CPE方法。CPE方法是由Srinivasan提出的一種快速查找方法,論文名稱為“FasterIP Lookups using Controlled Prefix Expansion”(出自proc.ACMsigmetrics′98 conf.,madison,WI,第1-11頁),該方法利用分段壓縮的思想減少方法的時間復雜度,使得查找速度大大增加,根據(jù)不同的配置,可以在3~32步之間查找完成。下面簡單介紹CPE方法。
      自從1993年采用CIDR(無類域間路由)協(xié)議以來,IP路由就包含兩個部分&lt;IP前綴,前綴的長度&gt;,前綴的長度范圍在0~32之間。對于每一個輸入包,IP查找邏輯需要查找出匹配的IP前綴集合,并從匹配的前綴集合中查找出最長匹配的前綴。最長匹配的前綴所指示的地址就是查找出來的下一跳的地址。關(guān)于CIDR的詳細內(nèi)容可見RFC1519 Classless Inter-Domain Routing(CIDR):an AddressAssignment and Aggregation Strategy.V.Fuller,T.Li,J.Yu,&amp;K.Varadhan.September 1993.以及RFC1817 CIDR and ClassfulRouting.Y.Rekhter.August1995。
      路由表中的規(guī)則可以表示為前綴的形式,前綴的長度在8位和32位之間變化,IP查找方法即找出最長匹配的前綴,由于前綴長度的多樣性,是造成查找方法時間復雜度高的一個重要因素。對于前綴最大長度為W,NetBSD(NetBSD是一種標準的unix操作系統(tǒng),該操作系統(tǒng)實現(xiàn)了TCP/IP協(xié)議棧,其中包含IP查找的實現(xiàn))中的二叉樹的方法復雜度為O(W),如果前綴最大長度減少為L(L<W),則方法復雜度將減少為O(L)。顯而易見,減少前綴的最大長度將提高方法的速度??刂魄熬Y擴充方法的基本思想是通過減少前綴長度的多樣性來增加方法的步長,從而減少了方法的復雜度,達到快速查找的目的。
      任何前綴,可以擴充為指定長度的前綴集合,如對于前綴10*,可以擴充為長度為4的前綴集合{1000*,1001*,1010*,1011*},通過擴充前綴到指定的長度,可以歸一化前綴的長度,從而減少了前綴長度的多樣性。擴充前綴方法可以把擴充后歸一化的前綴長度分為幾級,每一級前綴的長度是一樣的,通過數(shù)組索引就可以找到該級別的節(jié)點。
      擴充前綴tries樹把原來的1比特樹的32級結(jié)果壓縮為3級結(jié)構(gòu),查找次數(shù)縮短為3次,方法的時間復雜度為O(3)。從而達到快速查找的目的。在同一級別中,方法可以采用直接索引數(shù)組的方式找到需要的節(jié)點。由于采用的直接索引數(shù)組的方式,所以內(nèi)存占用較大,有很多的空間沒有元素,造成很大的浪費,方法需要進行優(yōu)化。
      典型的擴充前綴樹的結(jié)構(gòu)如

      圖1所示,其中原始前綴為P1=10*、P2=111*、P3=11001*、P4=1*、P5=0*、P6=1000*、P7=100000*、P8=1000000*。前綴分為3級,級別長度分別為2、5、7。
      前綴擴充方法可以在級別上進行優(yōu)化,由于級別的個數(shù)就是最壞查找的次數(shù)??梢韵氲郊墑e越小,查找的次數(shù)越少,內(nèi)存的占用也越大,綜合考慮查找次數(shù)和可實現(xiàn)的內(nèi)存占用,可以使用的級別為3、4、5級。
      每一級別中前綴的長度即每一級別的步長,也是可以優(yōu)化的參數(shù),可以清楚的看到,前綴長度的不同與內(nèi)存的占用有很大的關(guān)系,優(yōu)化的目標是在特定的前綴集合上選取最佳的步長,使得內(nèi)存的占用最少。
      可變步長也是一種優(yōu)化方法,由于每一級別中前綴可能沒有占滿,很多空間可能是浪費的。通過可變步長可以節(jié)約大概5%~10%的內(nèi)存,可變步長給前綴的插入和刪除造成麻煩,需要謹慎考慮。
      LeafPush是一種較好的優(yōu)化內(nèi)存的方法。擴充前綴tries樹的每一個節(jié)點,包含前綴和指向下一級的指針。如果把處在中間部分的前綴推到葉子的位置,那么在樹中的每一個節(jié)點要么是前綴,要么是指針。每一個節(jié)點可以用一個單元來表示。這樣可以節(jié)約大概一半的內(nèi)存。由于需要把前綴從中間部分推到葉子所以LeafPush方法在樹的插入和刪除上要花費一些時間。
      總之,現(xiàn)有技術(shù)中的CPE方法存在如下問題1.CPE方法在前綴分散的情況下,占用內(nèi)存較大,并且其最大的問題是路由修改在最壞情況下,一次路由修改需要改動262,144個單元,需要2.5ms的時間。在高速路由轉(zhuǎn)發(fā)的情況下是無法容忍的。
      2.CPE方法路由修改操作非常復雜,路由修改時需要借助一個“1-比特輔助樹”,并且在修改路由時需要進行復雜的遍歷和讀寫操作。而且路由修改都在I/O接口板中完成,對I/O接口板的性能要求更高。
      3.CPE方法的路由修改操作復雜,用硬件實現(xiàn)非常困難,或者說不可能實現(xiàn)。
      因此,本發(fā)明的一個目的就是為了在CPE方法中減少內(nèi)存占用,降低路由修改次數(shù)及路由修改的復雜度,使路由修改操作便于用硬件實現(xiàn),實現(xiàn)大容量路由項(前綴)的快速修改。
      本發(fā)明的還有一個目的是在路由修改時降低對I/O接口板的性能要求。
      本發(fā)明的還有一個目的是一種硬件實現(xiàn)的路由查找邏輯。
      為了達到以上目的,本發(fā)明提出了一種路由項的修改方法,該方法包括步驟對IP地址前綴進行分解,將其分解為多個原子前綴;及對多個原子前綴進行修改。
      優(yōu)選地,根據(jù)本發(fā)明,分解原子前綴的步驟包括下列步驟從需要分解的前綴開始遍歷節(jié)點的所有子樹;如果節(jié)點上有前綴,則停止該節(jié)點所有子樹的遍歷;如果節(jié)點上沒有前綴,并且節(jié)點有一個子樹為空,則對該節(jié)點分解。
      根據(jù)本發(fā)明的另一方面,將前綴的分解和對原子前綴的修改在不同的部件中完成。這樣降低了對I/O接口板的性能需求。
      在本發(fā)明的其它不同優(yōu)選實施例中,分別用遞歸和不遞歸的方法來實現(xiàn)原子前綴的分解。
      進一步,根據(jù)本發(fā)明,對IP地址進行前綴擴充及分級的步驟包括把前綴分為4級,各級位置分別為16,21,26和32。
      為了達到以上目的,本發(fā)明還提出了一種IP查找的快速修改裝置,包括對IP地址前綴進行分解的裝置,用于將前綴分解為多個原子前綴;對原子前綴進行修改的裝置。
      在本發(fā)明的優(yōu)選實施例中IP查找裝置包括將IP包輸入與一個mask相與的裝置,對相與裝置的輸出進行移位的裝置,將移位裝置的輸出與存儲器尋址基址相加的裝置及判斷相加裝置的最高位輸出是否為想要的路由地址的判斷裝置。
      通過對實際網(wǎng)絡路由器上實際路由數(shù)據(jù)的分析,發(fā)現(xiàn)路由前綴的長度在8~32之間,使得路由修改時,最壞情況下,路由修改的次數(shù)可以減少為256次。
      本發(fā)明提出“前綴分解”的概念,可以解決路由修改操作復雜以及硬件實現(xiàn)困難的問題。原子前綴的操作可以通過連續(xù)的內(nèi)存寫操作來完成。應用“前綴分解”的概念,可以大大減少路由修改的時間,并且可以把復雜的前綴,分解為原子前綴,分別進行操作,解決了路由修改影響查找操作的問題。前綴分解的概念還有助于進行硬件實現(xiàn),大大簡化了硬件實現(xiàn)方案。
      本發(fā)明依據(jù)“前綴分解”的思想,提出了一種硬件實現(xiàn)方案。這種硬件實現(xiàn)方案是為了解決高速路由器的路由查找操作而設(shè)計的,其修改和IP查找邏輯都很簡單。本發(fā)明還提供具體的硬件實現(xiàn)圖例。從硬件設(shè)計示意圖中可以看出,硬件設(shè)計邏輯比較簡單,可以很容易的實現(xiàn)。并且在采用前綴分解思想后,其路由的修改邏輯也非常簡單,完全可以用硬件實現(xiàn)。
      下面將參照附圖對本發(fā)明作更加詳細的描述。
      圖1示出了典型的擴充前綴樹的結(jié)構(gòu);
      圖2示出了前綴分解示意圖;圖3示出了前綴分解遞歸方法流程圖;圖4示出了前綴分解的非遞歸方法;圖5示出了硬件實現(xiàn)總體方案;圖6示出了2級數(shù)據(jù)結(jié)構(gòu)下的IP查找邏輯的硬件設(shè)計示意圖;圖7示出了路由修改邏輯示意圖。
      圖2是根據(jù)本發(fā)明的前綴分解示意圖。本發(fā)明首先分析了網(wǎng)絡路由器上的實際路由數(shù)據(jù),發(fā)現(xiàn)路由前綴的長度在8~32之間,即路由前綴的最小長度為8,對應于A類地址。從路由協(xié)議中也可以得到這個結(jié)論,所以前綴的長度范圍可以縮小。所以,假設(shè)將前綴分為4級,每級采用16、21、26、32的配置方式,最壞情況下,路由修改的次數(shù)可以減少為256次。根據(jù)擴充前綴方法,取決于實際中的具體需要,前綴的級數(shù)及各級的配置顯然可以有多種方法。并且,根據(jù)“Faster IPLookups using Controlled Prefix Expansion”的教導,可以動態(tài)地確定級數(shù)及每級長度。因為在該文獻中已有詳細描述,本說明書就不再重復。在此將該文獻合并至此以作參考。
      在具體描述前綴分解前,先介紹一下“前綴分解”的概念。為了解決路由修改操作復雜以及硬件實現(xiàn)困難的問題,“前綴分解”的基本思想就是把一個復雜的操作分解為多個簡單的操作。具體到本發(fā)明,就是把一個路由修改操作分解為多個原子操作。
      通過分析,發(fā)明人認為如果原子前綴具有以下特點,則顯然能簡化操作,并且便于用硬件實現(xiàn)1、原子前綴的插入和刪除在一段連續(xù)的內(nèi)存進行;2、原子前綴下游沒有其他的前綴存在,插入和刪除可以直接進行,不用判斷前綴的長度以及覆蓋關(guān)系。
      發(fā)明人仔細研究了前綴的結(jié)構(gòu),發(fā)現(xiàn)對于一個路由修改的前綴,根據(jù)前綴的覆蓋關(guān)系可以把前綴分解為多個原子前綴。有了原子前綴的思想,前綴的修改可以分為如下2個步驟1、分解前綴為原子前綴;2、原子前綴的插入和刪除操作。
      根據(jù)原子前綴的特點,原子前綴的分解如圖2所示。首先,前綴分解需要輔助1-比特樹。關(guān)于1-比特樹的生成和結(jié)構(gòu)是本領(lǐng)域技術(shù)人員的常識,在此不再詳細描述。在圖2的輔助1-比特樹中,(1)~(5)表示1-比特樹中的前綴,具有前綴的節(jié)點用實心點表示,沒有前綴的節(jié)點用空心點表示。1-比特樹的左節(jié)點表示0,右節(jié)點表示1,對于前綴(3),用1-比特樹表示其前綴為11001*。按照CPE的方法,可以將圖2中的1-比特樹分為例如2級,其中級別1包含2個比特,級別2包含3個比特。
      如圖2所示,不失一般性,這里考慮LeafPush的影響。如果需要修改前綴(4),根據(jù)前綴修改的原理,將影響(4)的下游前綴,包括前綴(1)、(2)、(3)。由于前綴(1)、(2)、(3)的長度比前綴(4)長,所以前綴(4)的修改不能覆蓋前綴(1)、(2)、(3),而只能修改附加的前綴P1、P2、P3。在常規(guī)CPE方法中,找到需要修改的位置是通過遍歷來實現(xiàn)的,關(guān)于這一點,在CPE方法中有詳細介紹,這里合并至此以作參考。但是根據(jù)上面描述的本發(fā)明的原子前綴的概念,可以得出這里P1、P2和P3即是需要修改的原子前綴,即P1、P2、P3不與另外的任何前綴有覆蓋關(guān)系。因此,如果能用簡單的方法分解出它們,則顯然能加快前綴的修改。根據(jù)本發(fā)明的一種實施例,原子前綴的一種分解方法包括如下步驟1.從需要分解前綴開始遍歷前綴節(jié)點的所有子樹;2.如果節(jié)點上有前綴,則停止該節(jié)點所有子樹的遍歷;3.如果節(jié)點上沒有前綴,并且節(jié)點至少有一個子樹為空,則該節(jié)點可以分解為相應的原子前綴,如圖2中的節(jié)點P1、P2、P3所對應的節(jié)點。
      根據(jù)上述原子前綴的分解方法,我們來分解圖2中的前綴(4)。首先從(4)所對應的節(jié)點開始,沿左分支進行到節(jié)點P1′,該節(jié)點P1′無前綴,且對應的1子樹為空,所述該節(jié)點P1′可分解,分解出的原子前綴為P1。按著沿P1′為非空的子樹0進行,到達(1),節(jié)點(1)為實心,所以有前綴,停止該節(jié)點子樹的遍歷。同樣可以得到前綴(4)的其它兩個原子前綴為P2和P3。這樣,得到了前綴(4)的三個原子前綴P1,P2和P3。
      原子前綴的分解是一個遞歸所有子樹的操作,遞歸操作可以通過堆棧轉(zhuǎn)化為非遞歸操作。
      圖3根據(jù)原子前綴的分解方法,示出了用遞歸方法分解的操作流程。
      圖3的流程從方框開始,進行到方框301,取需要分解的前綴,例如前綴(4)。接著到達判定方框302,確定左子樹是否不為空。如果判定結(jié)果為否,即左子樹為空,則左子樹為原子前綴,如方框303所示。接著進行到方框304,判斷右子樹是否不為空,如果判定結(jié)果為否,即右子樹為空,則右子樹為原子前綴,如方框305所示。接著,流程在310結(jié)束?;氐椒娇?02,若判定結(jié)果為是,即左子樹不為空,則判斷左子樹是否有前綴,如方框306所示。若左子樹有前綴,則流程從方框304開始繼續(xù)。如果方框306的判定結(jié)果為否,即左子樹無前綴,則到達方框307,對圖3所示的整個流程進行遞歸調(diào)用?;氐椒娇?04,若判定結(jié)果為是,即右子樹不空,則流程進行到方框308,確定右子樹是否有前綴,如果判定結(jié)果為是,則流程跳到方框310結(jié)束。若判定結(jié)果為否,則如方框309所示,遞歸調(diào)用圖3流程進行前綴分解。根據(jù)本發(fā)明的原理,顯然可以對圖3進行一些修改,如可以先判斷右子樹是否為空,然后再判斷左子樹是否為空。
      從遞歸方法流程圖中可以看出,前綴分解為原子前綴是根據(jù)前綴的上下覆蓋關(guān)系來確定的,一個前綴在級別中的剩余長度決定分解原子前綴的最多個數(shù)。如對于16、21、26、32配置的方式,長度為24的前綴,其原子前綴在級別21~26中的剩余長度為26-24=2,所以其分解的原子前綴個數(shù)最多為2+1=3個。對于剩余長度為n的前綴,最多分解的原子前綴個數(shù)如下所示Max Expansion_Number(n)=n*(n+1)/2由于遞歸方法效率不高,也可以用堆棧來實現(xiàn)非遞歸方法,前綴分解的非遞歸方法流程圖如圖4所示
      圖4的流程從方框400開始,進行到方框401,取出需要分解的前綴并將其壓棧。接著,流程進行到方框402,取出出堆棧中的前綴,并在方框403判斷左子樹是否不為空。若判斷結(jié)果為否,即左子樹為空,則左子樹為原子前綴。流程繼續(xù)到方框405,判斷右子樹是否不為空,若判斷結(jié)果為否,即右子樹為空,則在方框406將右子樹認定為是原子前綴。流程繼續(xù)到方框407,判定堆棧是否為空,如果是,流程結(jié)束,若為否,則回到方框402,取出堆棧中的前綴。回到方框403,若判斷結(jié)果為是,即左子樹不為空,則流程前進到方框408,判斷左子樹是否有前綴,若判斷結(jié)果為是,則說明不是原子前綴,流程到達方框405。若方框408的判斷為否,則說明該前綴需要繼續(xù)分解,所以在方框409將其壓?!,F(xiàn)在再看方框405,若判定結(jié)果為是,則到方框410接著判斷右子樹是否有前綴,若判斷結(jié)果為是,則表示右子樹不需要分解,也不是原子前綴,所以流程到達方框407判斷堆棧是否為空。若方框410的判斷結(jié)果為否,則表示該前綴需要繼續(xù)分解,所以在方框411將其壓入堆棧,并到達方框407判斷堆棧是否為空。在實際中,是先判斷左子樹還是右子樹的順序可以互換。另外,方框411執(zhí)行后,堆??隙ú粫榭眨詧?zhí)行方框411后流程可以直接到方框402。
      我們知道,對于16、21、26、32的配置,最壞情況下前綴的剩余長度為8(因為最短的IP前綴為8,如前面所分析的),所以最壞情況下,原子前綴的個數(shù)為8*(8+1)/2=36個。即最壞情況下,一個需要修改的前綴最多可以分解為36個原子前綴。
      因為以上實現(xiàn)的前綴分解的方法考慮了LeafPush的影響,所以前綴的分解需要把前綴從前綴所在的位置,分解到前綴節(jié)點以下的輔助1-比特樹的所有節(jié)點。如果不采用LeafPush算法,前綴分解算法可以進一步的簡化,前綴的分解可以只需要分解到前綴所在節(jié)點以下,在前綴所在當前級別以內(nèi)的所有節(jié)點。這樣可以大大減少分解的原子前綴的個數(shù)。
      在不用LeafPush的情況下,遞歸算法的流程圖與圖3的情況很相近,只是在圖3的方框301的步驟后還需要加入一個判斷步驟,用來判斷需要分解的前綴是否在當前級別內(nèi)。若需要分解的前綴不在當前級別內(nèi),則流程結(jié)束。其余處理過程與圖3一樣。
      在不用LeafPush的情況下,非遞歸算法的流程圖與圖4的流程也很相近,只是在圖4的方框408的判斷步驟中判斷條件改為“左子樹是否有前綴且是否在當前級別內(nèi)”以及在方框410的判斷步驟中判斷條件改為“右子樹是否有前綴且是否在當前級別內(nèi)”。
      圖5示出了本發(fā)明的硬件實現(xiàn)總體方案。從原子前綴的特點可以知道,原子前綴的修改可以轉(zhuǎn)化為連續(xù)的內(nèi)存寫操作。所以對于16、21、26、32的配置,前綴的修改操作最壞情況下可以轉(zhuǎn)化為36次連續(xù)內(nèi)存的寫操作,即可完成路由修改。在當今內(nèi)存的burst模式下,完全可以滿足高速路由轉(zhuǎn)發(fā)的需求。
      前綴分解為原子前綴后,特別適用于路由修改的硬件實現(xiàn)。我們知道硬件實現(xiàn)查表和遍歷操作是非常復雜而且不現(xiàn)實。如果把復雜的路由修改操作分解為原子前綴的修改操作,路由修改可以簡化為連續(xù)內(nèi)存的寫操作,前綴修改可以在同樣一種硬件指令下完成,不需要其他額外的指令和邏輯,大大簡化了硬件實現(xiàn)方案。
      本發(fā)明依據(jù)“前綴分解”的思想,結(jié)合一種具體的路由器提出了一種硬件實現(xiàn)方案。如圖5所示,這種硬件實現(xiàn)方案是為了解決高速路由器的路由查找操作而設(shè)計的,不失一般性,這里假設(shè)高速路由器包含路由處理板和轉(zhuǎn)發(fā)接口板兩個部分,其中路由處理板根據(jù)路由協(xié)議收集路由信息,并生成路由項(前綴)。路由處理板收集到的路由項下載到轉(zhuǎn)發(fā)接口板上,最終形成路由查找結(jié)構(gòu)。轉(zhuǎn)發(fā)接口板則接收數(shù)據(jù)報文,根據(jù)IP查找方法以及路由查找結(jié)構(gòu),查找出需要的路由,并發(fā)送出去。
      下面詳細描述圖5。根據(jù)圖5的實施例,本發(fā)明的路由器由兩部分組成,路由處理板和接口板,路由處理板對整個系統(tǒng)進行監(jiān)控,并對路由協(xié)商控制報文、VPN報文、MP報文等全局信息進行管理。接口板提供快速報文轉(zhuǎn)發(fā)的功能,路由信息發(fā)生變化,路由處理板把協(xié)商好的路由項,也就是前綴,傳遞到接口板上進行處理。各個I/O板的結(jié)構(gòu)是一樣的。
      針對以上的路由器的體系結(jié)構(gòu),這里采用4級數(shù)據(jù)結(jié)構(gòu)的方式。
      由處理板上保存1-比特樹結(jié)構(gòu),以及數(shù)據(jù)結(jié)構(gòu)的全局信息,接口板上則保存查找結(jié)構(gòu),如果要插入或刪除一條路由,可以分為以下四個步驟1、插入或刪除該前綴f到1-比特樹中;2、根據(jù)數(shù)據(jù)結(jié)構(gòu)的分段信息對前綴進行分解,分解為最多8*(8+1)/2=36個前綴的原子前綴組f[];3、將原子前綴組f[]傳遞到各接口板上,原子前綴組中的原子前綴可以分次傳遞給各接口板;4、插入或刪除原子前綴到接口板上的數(shù)據(jù)結(jié)構(gòu)中。
      原子前綴組分別傳遞到各接口板上,對于每一個分解后的前綴,都不存在覆蓋原有前綴的問題,所以插入和刪除操作可以簡單地包括下列步驟查找出需要修改前綴的起始地址;修改一個或多個連續(xù)的內(nèi)存單元。關(guān)于修改的具體過程將在下圖參照圖8描述。
      由于把內(nèi)存分為兩部分保存,1-比特樹保存在路由處理板,對于MaeEast數(shù)據(jù)庫,采用2字節(jié)作為指針,1-比特樹占用內(nèi)存只有700K,tries樹保存在接口板,對于MaeEast數(shù)據(jù)庫,采用2字節(jié)作為指針,tries樹占用內(nèi)存只有600K。內(nèi)存的消耗在路由處理板和接口板上都很小,完全可以放在cache中。達到更快的處理速度。
      圖6示出了圖5中的接口板的硬件實現(xiàn)方案。如圖6所示,接口板包括一個主CPU和一個IP處理引擎以及保存Tries樹結(jié)構(gòu)的SRAM。在本發(fā)明中,除了完成常規(guī)功能外,CPU完成的功能是IP處理引擎的初始化和配置功能,初始化功能可以初始化內(nèi)存的使用,配置功能可以配置IP處理引擎中內(nèi)存大小,查找樹的級別,以及每個級別中步長的大?。缓吞峤辉忧熬Y的修改功能,就是把路由處理板提交的原子前綴,通過命令發(fā)送到IP處理引擎中,IP處理引擎進行原子前綴的路由修改操作。雖然在本說明中將CPU和IP處理引擎分開表示,本領(lǐng)域的技術(shù)人員將能夠理解,它們兩個可以是同一個處理器。
      IP處理引擎上要進行的操作包括IP查找邏輯和修改邏輯。例如,將IP包輸入通過查找邏輯從路由地址輸出引發(fā)中斷。IP查找邏輯可以是常規(guī)的,也可以是本說明書中下面將要描述的硬件實現(xiàn)的查找邏輯。
      圖6的工作過程是路由處理板提交的需要修改的原子前綴,通過通訊模塊提交給主CPU,再通過主CPU提供給IP處理引擎。
      圖7示出了工作數(shù)據(jù)結(jié)構(gòu)下的IP查找邏輯的硬件設(shè)計示意圖。首先要說明的是,本例中的IP查找邏輯結(jié)構(gòu)與本發(fā)明的原子前綴分解是兩個可以獨立使用的發(fā)明。從圖7可看出,IP查找邏輯所需要實現(xiàn)的元操作有字的位與操作,根據(jù)兩個字進行按位與操作,如方框701;字的右移位操作,可以根據(jù)一個字的長度對字進行右移位操作,如方框702;存儲器尋址操作,根據(jù)基址和偏移量進行存儲器尋址,如方框703;字的比較操作,比較兩個字是否相等,如方框704;內(nèi)存讀寫操作,可以進行連續(xù)的內(nèi)存寫操作,和普通的內(nèi)存讀操作。簡單的內(nèi)存管理操作,可以分配和釋放內(nèi)存,當然也可以在主CPU上進行內(nèi)存管理。
      從圖7中可以看出,硬件設(shè)計邏輯比較簡單,可以很容易的實現(xiàn)。其中mask1、mask2、shift1、shift2可以是常量,可以是存儲在SRAM中的變量,也可以是主CPU輸入的變量。如果是常量,則意味數(shù)據(jù)結(jié)構(gòu)和步長是固定的,減少了數(shù)據(jù)結(jié)構(gòu)的靈活性,但對路由的查找和修改等操作沒有影響。
      圖7的處理從輸入IP包開始,接著到達方框701和701’,通過與相應級別的MASK值相與取出IP包的前綴在相應級別中的值,在本實施例中是取出在第一級別中的值和在第二級別中的值。
      mask的產(chǎn)生是通過級別來定義的,mask1表示第一級別的mask,mask2表示第二級別的mask,以此類推。通過mask可以把相應級別的IP地址的值取出來,例如,對于級別分別為2、5、7的前綴分解樹來說,mask1=1100000,mask2=0011100,mask3=0000011。由此可見對于固定步長的前綴樹來說,各個級別的mask是固定的。這一步的操作是為了取出相應級別的前綴值,因此,在可變級別的情況下,相應級別的MASK值也相應變化。
      方框701和701’的輸出結(jié)果送入框702和702’進行移位。shift主要用來把IP地址相應級別的值移位到最低位,便于形成查找的數(shù)組指針。shift1表示第一級別的shift,shift2表示第二級別的shift,以此類推。每一級別的shift等于上一級別的步長值。對于級別分別為2、5、7的前綴樹來說。shift1=0,shift2=2,shift3=3。
      方框702和702’的結(jié)果分別送到方框703和703’,與存儲器尋址進行相加。在方框703,因為是在第一級,所以存儲器的尋址基址也就是當前節(jié)點的首地址。對于方框703’,因為這是第二級,所以要通過上級基址+輸入來獲得輸出。輸入就是通過mask和shift操作得到的該節(jié)點數(shù)組的下標指針,這樣通過存儲器的尋址基址加上輸入的下標指針,就可以查出需要的路由ID或者下一級別的指針。在方框704和704’分別對方框703和703’的結(jié)果進行判斷,看其最高位是否為1。通過最高位是否為1來表示區(qū)分該值究竟是路由ID還是下一個級別的指針。如果是路由ID,則輸出。如果是下一個級別的指針,則輸入到下一個級別。如果是最后一個級別,但在方框704的判斷還得出最高位不為1,則表示出錯。
      在本實施例中考慮的是已經(jīng)采用了LeafPush的情況,如果不采用LeafPush的方法,在數(shù)組的一個表項中可以同時存儲路由ID和指針,這種情況下,在方框704需要判斷的是指針是否為空,如果為空,則表示查到需要的路由ID,否則,獲得下一個級別的指針,繼續(xù)查找。
      在圖7中雖然與操作和移位操作是串行表示的,但實際上它們可以并行處理,這樣可以提高查找的性能,使得多級的數(shù)據(jù)結(jié)構(gòu)下也具有較好的查找性能。數(shù)據(jù)結(jié)構(gòu)分級較多,可以顯著的減少內(nèi)存的占用,可以在查找性能和內(nèi)存占用下取得平衡。
      圖7中只示出了兩級結(jié)構(gòu),如果級數(shù)更多,則只要增加相應的模塊即可。圖7的這種查找邏輯顯然特別適合用硬件來實現(xiàn)。
      圖8示出了路由修改邏輯示意圖。
      路由修改邏輯包含兩個步驟,第一步是對輸入的原子前綴進行同樣的查找操作,第二步是從查找到的基址開始進行連續(xù)的內(nèi)存寫操作。對原子前綴的查找可以用本說明書中公開的方法,也可以用常規(guī)的任何方法。下面主要介紹內(nèi)存的寫操作。
      這里連續(xù)的內(nèi)存寫操作,需要判斷內(nèi)存寫的長度,長度的判斷是根據(jù)原子前綴的長度與原子前綴所在級別的長度決定的,假設(shè)原子前綴的長度為p,原子前綴所在級的長度為q,則需要連續(xù)修改的內(nèi)存長度為2的(q-p)次冪。例如,對于圖2中的前綴4,其分解出來的原子前綴為P1=101、P2=1101和P3=11001。當修改P1時,因為P1的長度是3,P1在第二級,而第二級的長度是5,所以要修改的內(nèi)存?zhèn)€數(shù)為25 -3=22=4。如果原子前綴與當前級別長度相同,則只需要修改1個表項。這里的連續(xù)內(nèi)存寫操作寫的所有表項的路由ID是相同的,可以借用內(nèi)存的Burst模式來完成。另外,這里的修改包括插入和刪除及覆蓋。本領(lǐng)域的技術(shù)人員將能理解需要修改的內(nèi)存長度也能以其它方式獲得。
      以上對本發(fā)明的實施方式進行了詳細說明。下面比較一下本發(fā)明相對CPE方法在大容量路由器情況下相對內(nèi)存占用而言所取的結(jié)果。
      對于大容量的路由器,CPE方法沒有進行分析,CPE方法局限性也體現(xiàn)在內(nèi)存占用上,從對CPE方法的分析中可以看出,當前綴數(shù)目增大時,內(nèi)存占用越來越大,內(nèi)存占用的極限為4G個比特,即4096M內(nèi)存。所以在遠小于4096M內(nèi)存的占用上,內(nèi)存的消耗與前綴個數(shù)之間是非收斂的關(guān)系,按正比例增長。
      由于實際數(shù)據(jù)庫在一些IP基址上是聚合的,所以實際數(shù)據(jù)庫占用的內(nèi)存遠遠小于隨機數(shù)據(jù)庫占用的內(nèi)存,這主要是因為實際的前綴往往是針對一些子網(wǎng)設(shè)置的,許多前綴都集中在一定的區(qū)間中,而隨機前綴則是分散的。實際數(shù)據(jù)庫中前綴的聚合特性使得實際數(shù)據(jù)庫生成的數(shù)據(jù)結(jié)構(gòu)占用內(nèi)存大打減少,為了得到實際數(shù)據(jù)庫中內(nèi)存于隨機數(shù)據(jù)庫內(nèi)存占用之間的關(guān)系,這里采用實際數(shù)據(jù)庫MaeEast與隨機數(shù)據(jù)庫之間比較的辦法得到實際數(shù)據(jù)庫于隨機數(shù)據(jù)庫之間內(nèi)存占用的經(jīng)驗公式。通過經(jīng)驗公式對極限數(shù)據(jù)庫進行分析,以便得到可信的結(jié)論。
      通過分析可以得到的經(jīng)驗公式表明,實際數(shù)據(jù)庫占用的內(nèi)存是隨機數(shù)據(jù)庫占用內(nèi)存的10%到30%之間。由于不可能得到大的實際數(shù)據(jù)庫,這里采用隨機數(shù)據(jù)庫進行測試,并采用經(jīng)驗公式進行處理,得到一百萬路由項占用內(nèi)存在10M~40M之間。
      采用本發(fā)明的結(jié)構(gòu),可以完美的解決擴充前綴方法中的占用內(nèi)存較大,插入刪除時間太長的問題,在實際高速路由器中完全可以進行應用。而且該方案完全可以采用硬件進行實現(xiàn),原子前綴發(fā)送到接口板后,完全可以交給IP查找邏輯FPGA或者ASIC,由硬件進行查找和路由修改操作,這樣可以達到極高速的查找和路由修改性能。具體的硬件實現(xiàn)方案在上面有詳細的描述。
      雖然參照具體實施方式
      詳細描述了本發(fā)明,但顯然在不脫離本發(fā)明實質(zhì)的范圍內(nèi),可對以上實施方式作很多修改,變化或等同替換。
      權(quán)利要求
      1.一種對路由項進行修改的方法,其特征在于包括步驟對要修改的IP地址前綴進行分解,將其分解為多個原子前綴;及對多個原子前綴進行修改。
      2.如權(quán)利要求1所述的方法,其特征在于所述的修改包括插入、刪除及覆蓋。
      3.如權(quán)利要求1或2所述的方法,當IP地址的長度是32位時,其特征在于對IP地址進行前綴擴充及分級的步驟包括把前綴分為4級,各級位置分別為16,21,26和32的步驟。
      4.如權(quán)利要求1所述的方法,其特征在于分解原子前綴的步驟包括將要修改的IP地址插入輔助1-比特樹的步驟。
      5.如權(quán)利要求4所述的方法,其特征在于還包括對輔助1-比特樹進行LeafPush處理的步驟。
      6.如權(quán)利要求1,4或5所述的方法,其特征在于分解原子前綴的步驟包括下列步驟從需要分解的前綴開始遍歷節(jié)點的所有子樹;如果節(jié)點上有前綴,則停止該節(jié)點所有子樹的遍歷;如果節(jié)點上沒有前綴,并且節(jié)點有一個子樹為空,則對該節(jié)點分解。
      7.如權(quán)利要求6所述的方法,其特征在于分解原子前綴的步驟包括用遞歸方法進行分解的步驟。
      8.如權(quán)利要求6所述的方法,其特征在于分解原子前綴的步驟包括用非遞歸方法進行分解的步驟。
      9.一種對路由項進行修改的裝置,其特征在于包括對要修改的IP地址前綴進行分解,將其分解為多個原子前綴的子裝置;及對多個原子前綴進行修改的子裝置。
      10.如權(quán)利要求9所述的修改裝置,其特征在于用于進行原子前綴分解的子裝置位于路由處理板中。
      11.一種IP查找裝置,其特征在于包括一個相與子裝置,用于從IP中找出相應級別中的值;一個移位子裝置,用于將相與裝置的結(jié)果移到最低位;以及一個判斷子裝置,用于判斷是將移位子裝置的結(jié)果輸出還是輸入到下一級。
      全文摘要
      一種對路由項進行修改的方法,包括步驟對要修改的IP地址前綴進行分解,將其分解為多個原子前綴;及對多個原子前綴進行修改。這種方法修改速度快,便于硬件實現(xiàn)。一種對路由項進行修改的裝置,包括對要修改的IP地址前綴進行分解,將其分解為多個原子前綴的子裝置;及對多個原子前綴進行修改的子裝置。還公開了一種IP查找裝置,結(jié)構(gòu)簡單,很容易用電路實現(xiàn)。
      文檔編號H04L29/06GK1315797SQ0010630
      公開日2001年10月3日 申請日期2000年3月29日 優(yōu)先權(quán)日2000年3月29日
      發(fā)明者黃韜 申請人:華為技術(shù)有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1