專利名稱:有界索引可擴(kuò)展的基于散列的IPv6地址查找方法
技術(shù)領(lǐng)域:
本發(fā)明一般而言涉及網(wǎng)絡(luò)通信,更具體而言涉及在諸如路由器之類的中間網(wǎng)絡(luò)節(jié)點中執(zhí)行轉(zhuǎn)發(fā)判決。
背景技術(shù):
計算機(jī)網(wǎng)絡(luò)是用于在諸如計算機(jī)這樣的節(jié)點之間傳輸數(shù)據(jù)的互連子網(wǎng)在地理上的分布式匯集。局域網(wǎng)(LAN)是這種子網(wǎng)的一個示例;多個LAN可由諸如路由器或交換機(jī)這樣的中間網(wǎng)絡(luò)節(jié)點進(jìn)一步互連,以擴(kuò)展計算機(jī)網(wǎng)絡(luò)的有效“尺寸”并增大通信節(jié)點的數(shù)目。節(jié)點通常通過根據(jù)預(yù)定協(xié)議交換離散的數(shù)據(jù)分組來通信。在節(jié)點間傳送的數(shù)據(jù)分組可包括固定尺寸的數(shù)據(jù)單元和/或可變尺寸的數(shù)據(jù)幀。分組通常包括被至少一個網(wǎng)絡(luò)頭部前插(“封裝”)的“有效載荷”數(shù)據(jù),所述至少一個網(wǎng)絡(luò)頭部是根據(jù)諸如傳輸控制協(xié)議/因特網(wǎng)協(xié)議(TCP/IP)這樣的通信協(xié)議來編排格式的。在此上下文中,協(xié)議包括定義節(jié)點如何彼此交互的一組規(guī)則。
一般而言,中間網(wǎng)絡(luò)節(jié)點被配置為在連接到多種數(shù)據(jù)鏈路和子網(wǎng)的節(jié)點之間交換數(shù)據(jù)分組。為此,中間節(jié)點實現(xiàn)用于通信節(jié)點的一組網(wǎng)絡(luò)服務(wù)。這組服務(wù)可包括路由處理、路徑確定和路徑交換功能。路由處理功能確定接收到的分組所需的路由類型,而路徑交換功能允許中間節(jié)點在第一接口上接受分組而在第二接口上轉(zhuǎn)發(fā)該分組。路徑確定或轉(zhuǎn)發(fā)判決功能選擇最適當(dāng)?shù)挠糜谵D(zhuǎn)發(fā)分組的接口。
中間網(wǎng)絡(luò)節(jié)點中的轉(zhuǎn)發(fā)判決通常是由節(jié)點中的轉(zhuǎn)發(fā)引擎所執(zhí)行。該引擎可在軟件、硬件或其任何組合中實現(xiàn)。例如,該引擎可實現(xiàn)為可由專用集成電路(ASIC)、現(xiàn)場可編程門陣列(FPGA)、通用處理器、專用處理器等執(zhí)行的軟件或固件。數(shù)據(jù)分組在節(jié)點的網(wǎng)絡(luò)接口之一處被接收,該接口例如被耦合到點到點鏈路、以太網(wǎng)鏈路、無線鏈路、光鏈路等。節(jié)點的網(wǎng)絡(luò)接口從分組中解析出網(wǎng)絡(luò)頭部,并且將其傳送到轉(zhuǎn)發(fā)引擎以便處理。值得注意的是,可根據(jù)網(wǎng)絡(luò)協(xié)議棧的不同層來處理頭部,例如開放式系統(tǒng)互連(OSI)參考模型中所描述的那樣。例如,引擎可被配置為工作于傳統(tǒng)OSI模型的數(shù)據(jù)鏈路層(第2層)或網(wǎng)絡(luò)協(xié)議層(第3層)。
轉(zhuǎn)發(fā)引擎通過檢測頭部中包含的目的地地址而對接收到的分組頭部執(zhí)行轉(zhuǎn)發(fā)判決。頭部除了其他以外通常還包括分別指定分組的發(fā)送和接收節(jié)點的源和目的地地址。從而,分組可沿著最佳網(wǎng)絡(luò)路徑從一個節(jié)點“跳”到另一個節(jié)點,直到其到達(dá)其最終目的地。因此,轉(zhuǎn)發(fā)引擎可將分組路由到其下一跳,并且在必要時替換分組的媒體訪問控制(MAC)第2層頭部。
分組的下一跳是通過路由存儲在中間網(wǎng)絡(luò)節(jié)點中的信息來確定的。路由信息被廣義理解為包括用于實現(xiàn)節(jié)點的網(wǎng)絡(luò)服務(wù)的任何信息,例如鄰接信息、橋式轉(zhuǎn)發(fā)信息等等。中間網(wǎng)絡(luò)節(jié)點通常在可由轉(zhuǎn)發(fā)引擎訪問的數(shù)據(jù)結(jié)構(gòu)中存儲其路由信息。路由信息使得引擎能夠確定下一跳,并且在某些情況下能夠提供其他服務(wù)(服務(wù)質(zhì)量、計費(fèi)等等)。在操作中,轉(zhuǎn)發(fā)引擎從接收到的分組的頭部解析出目的地地址,并且執(zhí)行“地址查找”操作,以確定是否有節(jié)點的任何數(shù)據(jù)結(jié)構(gòu)包含對應(yīng)于解析出的地址的路由信息。如果有的話,則下一跳被選擇,并且分組被交換到相應(yīng)的出口接口,并且其第2層(MAC)信息被適當(dāng)?shù)匦薷摹?br>
通常,中間網(wǎng)絡(luò)節(jié)點中執(zhí)行的第3層轉(zhuǎn)發(fā)判決是基于因特網(wǎng)協(xié)議第4版(IPv4)網(wǎng)絡(luò)地址的。根據(jù)IPv4地址格式,網(wǎng)絡(luò)地址被表示為32比特(四字節(jié))值,通常由四個0到255之間的數(shù)字來表示。從而,每個互連的子網(wǎng)可被分配一個唯一的IPv4地址范圍。例如,典型子網(wǎng)可被分配地址空間212.47.101.*,其中星號是通配符,其最多能區(qū)分子網(wǎng)中的256個個體節(jié)點。例如,子網(wǎng)中的第一節(jié)點可被分配地址212.47.101.1,而第二節(jié)點可被分配地址212.47.101.2。
子網(wǎng)通常被與子網(wǎng)掩碼相關(guān)聯(lián),子網(wǎng)掩碼可用于從子網(wǎng)的地址空間內(nèi)的網(wǎng)絡(luò)地址中選出一組相鄰的前綴比特。選中的前綴比特例如被中間網(wǎng)絡(luò)節(jié)點用于定位到子網(wǎng)的路由。這里所使用的子網(wǎng)掩碼長度是指子網(wǎng)掩碼所選的前綴比特的數(shù)目,以下將N比特的子網(wǎng)掩碼長度表示為/N。例如,假設(shè)一個典型子網(wǎng)與/25個網(wǎng)絡(luò)地址相關(guān)聯(lián)。因此,該典型子網(wǎng)可以與一個子網(wǎng)掩碼(例如0xFFFFFF80)相關(guān)聯(lián),其指示需要網(wǎng)絡(luò)地址中的前25個最高有效位的前綴來定位到該子網(wǎng)的路由。子網(wǎng)掩碼及其使用在1999年9月出版的由Radia Perlman所著的題為“Interconnections Second Edition”的參考書的第9章中有更概括的描述,這里通過引用將該書結(jié)合進(jìn)來,就如同在這里完整闡述了一樣。
雖然其性能表現(xiàn)良好,但是IPv4協(xié)議已被確定具有若干缺點。主要缺點之一是其有限的地址數(shù)目。具體而言,預(yù)期IPv4的32比特地址將在幾年之內(nèi)被用盡。因此,已經(jīng)開始進(jìn)行開發(fā)IPv4的替代者亦即因特網(wǎng)協(xié)議第6版(IPv6)的工作。IPv6地址是128比特的—比當(dāng)前的IPv4地址長四倍—因此在可用IP地址的數(shù)目上提供了相當(dāng)大的增長。IPv6協(xié)議及其尋址體系結(jié)構(gòu)在分別題為“Internet Protocol,Version 6(IPv6)Specification”和“IP Version 6 Addressing Architecture”的請求注解(RFC)2460和2373中概括描述,這里通過引用將這兩個RFC結(jié)合進(jìn)來,就如同在這里完整闡述了一樣。
雖然IPv6大大增大了可用IP地址空間,但是與基于32比特IPv4地址的轉(zhuǎn)發(fā)判決相比,基于125比特的IPv6地址的轉(zhuǎn)發(fā)判決也消耗了更多資源,例如存儲器、功率或處理帶寬。通常由中間節(jié)點中的轉(zhuǎn)發(fā)引擎所采用的傳統(tǒng)IPv4地址查找技術(shù)常無法高效定位(即“查找”)IPv6地址的路由信息。通常可用根trie(RTRIE)、多路trie(MTRIE)、散列表或內(nèi)容可尋址存儲器(CAM)來實現(xiàn)的這些現(xiàn)有的IPv4地址查找技術(shù),在被用來執(zhí)行IPv6地址查找時,通常消耗過量的存儲器、功率或處理資源。
例如,轉(zhuǎn)發(fā)引擎可通過搜索RTRIE來執(zhí)行IPv6地址查找。RTRIE是一類二進(jìn)制trie,其“葉”節(jié)點包含指向存儲路由信息的其他數(shù)據(jù)結(jié)構(gòu)的指針?!癟rie”型數(shù)據(jù)結(jié)構(gòu)在Radia Perlman所著的題為“InterconnectionsSecond Edition”的參考書的第13章中概括描述,這里通過引用將該書結(jié)合進(jìn)來,就如同在這里完整闡述了一樣。IPv6地址的路由信息可通過在逐位基礎(chǔ)上搜索RTRIE直到地址的對應(yīng)葉節(jié)點被找到為止來定位。搜索RTRIE所需的從屬查找的數(shù)目通常取決于區(qū)分路由表中的不同地址所需的地址比特的數(shù)目。這里所使用的從屬查找被廣義理解為在諸如在先存儲器訪問這樣的在先操作完成之前無法被執(zhí)行的存儲器訪問操作。因此,從屬查找序列必須被順序執(zhí)行。
又例如,假設(shè)RTRIE只包含兩個對應(yīng)于IPv6地址FFFF::和FFFE::的葉節(jié)點,因此要區(qū)分這些地址只需要一比特(即第16個最高有效位,即地址比特113)。這里(以及以下),采用RFC 2373中描述的標(biāo)準(zhǔn)十六進(jìn)制IPv6地址表示法,其中雙冒號表示連續(xù)的零串。在此示例中,用于任一地址的葉節(jié)點都可通過例如基于比特113的值在RTRIE中執(zhí)行僅一次查找來定位。如果將地址FFFD::添加到RTRIE,則必須執(zhí)行兩次從屬查找(例如基于比特114和113)。隨著附加的IPv6地址被添加到RTRIE中,定位地址的路由信息所需的從屬查找的數(shù)目增大。
當(dāng)RTRIE存儲比上述示例中多得多的IPv6地址時,RTRIE中執(zhí)行的從屬查找的數(shù)目可能變得過分地大。在最壞情況下,在RTRIE中定位到IPv6地址之前,必須執(zhí)行128次從屬查找。用于每個前綴的大量從屬讀取是路由算法的不良品質(zhì)。另外,一個查找可通過RTRIE中的單個比特來區(qū)別,而相同RTRIE中的另一個查找可能要求許多從屬讀取。查找時間的這種可變性是路由算法的另一個不良品質(zhì)。
轉(zhuǎn)發(fā)引擎還可通過搜索MTRIE來執(zhí)行IPv6地址查找。MTRIE包括根節(jié)點,該根節(jié)點包括由IPv6地址的第一部分來索引的陣列。根節(jié)點中的每個陣列元素可存儲一個指針,該指針涉及相應(yīng)的“第一級”節(jié)點。從而包含2N條目的根節(jié)點陣列可最多涉及達(dá)2N個不同的第一級節(jié)點。每個第一級節(jié)點是由IPv6地址的第二部分來索引的陣列。每個第一級節(jié)點中的陣列元素可包含涉及相關(guān)的“第二級”節(jié)點的指針。通過這種分級方式,MTRIE中的連續(xù)級包含指數(shù)數(shù)目的節(jié)點(陣列),其中每個節(jié)點由IPv6地址的不同部分來索引。因此,IPv6地址查找涉及穿越MTRIE,直到定位出包含指向地址的路由信息的指針的陣列元素。“未使用”的陣列元素可存儲涉及默認(rèn)路由信息的指針,或者也可存儲退化值,例如NULL值。
從而可構(gòu)造MTRIE以使得所需的從屬讀取的數(shù)目被限制在合理的數(shù)字內(nèi)。但是,由于在每一級必須定位的陣列的尺寸,所消耗的存儲器的量急劇增大。可“調(diào)節(jié)”MTRIE的“步幅”(每一級所檢查的比特數(shù))以降低存儲器開銷。調(diào)節(jié)從本質(zhì)上來說犧牲了期望在特定級別處分配的節(jié)點的數(shù)目,以換取該級別處的陣列的尺寸。因此,對于小陣列尺寸和較少M(fèi)TRIE級別(例如就像IPV4傳統(tǒng)查找通常所需的那樣),MTRIE可在合理的存儲器量中被實現(xiàn)。但是,對于128比特IPv6地址,MTRIE級別的數(shù)目和維護(hù)這些級別所需的存儲器量就是不切實際的了。由于IPv6還處于其采納周期的早期,因此路由分配無法被可靠地預(yù)測。因此,在MTRIE中實現(xiàn)IPv6查找可能需要可變步幅調(diào)節(jié)技術(shù),而這種技術(shù)一般是不合需要的。此外,就處理資源來說,定位用于IPv6地址的路由信息所需的從屬M(fèi)TRIE查找的數(shù)目也可能是另人望而卻步的。
某些轉(zhuǎn)發(fā)引擎通過搜索散列表來執(zhí)行IPv6地址查找。散列表是這樣一種陣列,該陣列的條目可通過將傳統(tǒng)散列函數(shù)應(yīng)用到IPv6地址或其一部分來索引。在實踐中,散列化不同地址的過程可能在表中生成相同的索引,從而導(dǎo)致“沖突”。在理想情況下,散列表大到足以容納存儲在中間節(jié)點中的每個IPv6地址,并且發(fā)生的沖突會很少。對于小地址空間,這是可以實現(xiàn)的。
但是,實際上,散列表的尺寸例如受限于節(jié)點的存儲器可用性,并且當(dāng)表存儲大量IPv6地址時,常發(fā)生沖突。因此,每個散列表條目可以與相應(yīng)的沖突地址列表相關(guān)聯(lián)。不幸的是,每當(dāng)散列表條目被索引時,這種列表通常被線性地搜索,這常導(dǎo)致過多的從屬查找。此外,如果條目的列表被配置為存儲最大數(shù)目的沖突地址,則某些地址可能無法適合于列表。在此情況下,轉(zhuǎn)發(fā)引擎無法通過散列表定位這些地址的路由信息,從而引擎必須將查找推遲到后備機(jī)制中。
轉(zhuǎn)發(fā)引擎可采用內(nèi)容可尋址存儲器而不是散列表或基于trie的數(shù)據(jù)結(jié)構(gòu)來執(zhí)行IPv6地址查找。CAM是一種存儲設(shè)備,其包括用于在由數(shù)據(jù)值所定義的存儲器位置處存儲數(shù)據(jù)的邏輯和電路。因此,CAM可被配置為在由IPv6地址的值所定義的存儲器位置處存儲IPv6地址的路由信息。
雖然CAM可相對迅速地執(zhí)行地址查找,但是它卻有許多重大缺點。例如,CAM密度是有限的,并且可存儲的路由的數(shù)目具有硬性極限(例如18兆比特CAM可存儲125,000個IPv6地址,并且沒有可用于擴(kuò)展的空間)。因此,要執(zhí)行對于較大路由表的IPv6地址查找可能需要多個CAM設(shè)備。此外,與諸如動態(tài)隨機(jī)訪問存儲器(DRAM)這樣的其他形式的存儲設(shè)備相比,CAM消耗相對較大量的電功率。此外,目前CAM比其他傳統(tǒng)存儲設(shè)備更昂貴??偠灾?,對于某些應(yīng)用,在轉(zhuǎn)發(fā)引擎中實現(xiàn)CAM的缺點強(qiáng)過了其執(zhí)行快速IPv6地址查找的能力。
因此,需要提供一種IPv6地址查找技術(shù),這種技術(shù)是確定性的,并且與散列表或基于trie的實現(xiàn)方式相比,這種技術(shù)采用較少的從屬查找和較小的存儲量。此外,該技術(shù)應(yīng)該能夠執(zhí)行對于大路由密度(例如1,000,000路由)的地址查找,而不會消耗過量功率。該技術(shù)還不應(yīng)把其操作踢給其他的可能較慢的地址查找算法。
發(fā)明內(nèi)容
本發(fā)明提供了一種用于在諸如路由器這樣的中間網(wǎng)絡(luò)節(jié)點中高效查找地址路由信息的技術(shù)。為此,節(jié)點利用可用小的有界數(shù)目的從屬查找來搜索的一個或多個“查找”表(LUT)來定位存儲在其存儲器中的路由信息,從而減小了傳統(tǒng)執(zhí)行的從屬查找的數(shù)目。LUT被安排為使得每個表為子網(wǎng)掩碼長度在不同的掩碼長度范圍(“步幅”)內(nèi)的網(wǎng)絡(luò)地址提供路由信息。根據(jù)該技術(shù),節(jié)點通過按前綴長度減小的順序搜索LUT,直到找到路由信息,來定位網(wǎng)絡(luò)地址的路由信息。優(yōu)選地,幾個表被并行搜索。LUT中的匹配還可指向小的MTRIE,該MTRIE使得前綴中的最終比特能夠被匹配。該最終MTRIE被用相對較小的有界數(shù)目的從屬查找來搜索。
在示例性實施例中,每個LUT優(yōu)選地被組織為具有多個條目的散列表,其中每個條目可存儲涉及相應(yīng)的“第二級”表的位置的指針。每個第二級表優(yōu)選地被組織成一個散列表,該表包含多“頁”,例如2m頁(m=0,1,2,...),這些頁被配置為存儲與預(yù)定數(shù)目的(例如2個)網(wǎng)絡(luò)地址相關(guān)聯(lián)的路由信息的存儲器位置。因此,中間網(wǎng)絡(luò)節(jié)點可通過如下方式來定位與諸如IPv6地址這樣的網(wǎng)絡(luò)地址相關(guān)聯(lián)的路由信息查找LUT中的適當(dāng)?shù)臈l目,從而定位該條目的相應(yīng)第二級表,然后查找該第二級表中的適當(dāng)?shù)捻?,并且搜索頁的?nèi)容以查找節(jié)點中路由信息的存儲器位置。
在操作中,網(wǎng)絡(luò)地址的路由信息的存儲器位置可按如下方式從LUT中取回首先,通過利用諸如循環(huán)冗余校驗(CRC)函數(shù)這樣的第一散列函數(shù)散列化第一組地址比特,來生成對LUT的索引。例如,第一組地址比特是通過LUT的相關(guān)步幅來確定的。第二,生成的索引被用于查找相應(yīng)的LUT條目,該LUT條目如果被填充,則涉及第二級表。第三,通過利用第二散列函數(shù)散列化第二組地址比特,來生成對第二級表中的頁的索引。值得注意的是,第一和第二散列函數(shù)可以是相同的函數(shù),并且第一和第二組地址比特也可以是相同的。然后被索引到的頁的內(nèi)容被按前綴長度減小的順序搜索,以定位地址的路由信息的存儲器位置。
對于發(fā)明的技術(shù),另外,每個第二級表可“在工作中”被重新配置。具體而言,當(dāng)新的網(wǎng)絡(luò)地址被插入到“已滿”的頁中時,新添加的地址仍可以通過執(zhí)行以下操作中的至少一種而被插入到第二級表中(a)使第二級表中的頁數(shù)加倍,(b)在第二級表中重新分布網(wǎng)絡(luò)地址或(c)如果新地址與已在第二級表中的地址類似,則將新地址存儲在可通過第二級表訪問的MTRIE中。這里,可從頁訪問的MTRIE被組織為存儲對應(yīng)于頁的具有最小(即“最不精確”)子網(wǎng)掩碼長度的網(wǎng)絡(luò)地址的路由信息的存儲器位置。即,所有后續(xù)的“不那么精確”的前綴都被添加到MTRIE中,用于第二級匹配。
有利的是,發(fā)明的技術(shù)使得中間節(jié)點能夠利用比傳統(tǒng)所需的更少的從屬查找來定位網(wǎng)絡(luò)地址的路由信息,而不會大大增大其存儲器或功率消耗,或者降低其路由密度。此外,該技術(shù)使得節(jié)點能夠在不默認(rèn)(即“踢”)給其他的可能較慢的地址查找算法的情況下定位路由信息。此外,可通過在CAM中和/或在多處理器環(huán)境中實現(xiàn)LUT,而使該技術(shù)更高效。
通過聯(lián)系附圖參考以下描述,可以更好地理解本發(fā)明的以上和其他優(yōu)點,附圖中類似的標(biāo)號表示相同或功能類似的元件,附圖中圖1是包含互連的子網(wǎng)和節(jié)點的匯集的計算機(jī)網(wǎng)絡(luò)的示意性框圖,這些節(jié)點中包括中間網(wǎng)絡(luò)節(jié)點;圖2是例示性中間網(wǎng)絡(luò)節(jié)點的示意性框圖;圖3是可有利地在本發(fā)明的中間網(wǎng)絡(luò)節(jié)點中實現(xiàn)的轉(zhuǎn)發(fā)引擎的示意性框圖;圖4是LUT布局,其描述根據(jù)本發(fā)明可用于存儲路由信息的位置的根據(jù)16比特子網(wǎng)掩碼長度“步幅”而安排的典型散列表集合;圖5是典型散列表及其相關(guān)聯(lián)的第二級表的示意性框圖;圖6是典型第二級表的示意性框圖,其中MTRIE被創(chuàng)建來容納添加的網(wǎng)絡(luò)地址,例如IPv6地址;圖7A-B是示出根據(jù)本發(fā)明用于在第二級表中插入地址的步驟序列的流程圖;圖8是示出根據(jù)本發(fā)明用于從一組第一級散列表或MTRIE中查找地址的路由信息的位置的步驟序列的流程圖;以及圖9是示出根據(jù)本發(fā)明用于利用單獨的第一級散列表來查找地址的路由信息的位置的步驟序列的流程圖。
具體實施例方式
A.中間網(wǎng)絡(luò)節(jié)點圖1是計算機(jī)網(wǎng)絡(luò)100的框圖,該網(wǎng)絡(luò)包括互連的子網(wǎng)和節(jié)點的匯集。這些節(jié)點可包括計算機(jī),其中包括末端節(jié)點130和140,例如發(fā)送末端節(jié)點120和接收末端節(jié)點150;以及中間網(wǎng)絡(luò)節(jié)點200,其中后者可以是交換機(jī)或路由器。網(wǎng)絡(luò)100內(nèi)所包括的子網(wǎng)105、110優(yōu)選地是由中間節(jié)點200互連的局域網(wǎng)(LAN),但是網(wǎng)絡(luò)也可包含其他通信鏈路,例如廣域網(wǎng)。耦合到LAN的節(jié)點間的通信通常是通過在節(jié)點間交換離散分組160來實現(xiàn)的。
例如,當(dāng)數(shù)據(jù)穿過協(xié)議棧的不同層時,發(fā)送節(jié)點120通過在諸如傳統(tǒng)數(shù)據(jù)鏈路和網(wǎng)絡(luò)層頭部這樣的頭部內(nèi)封裝“有效載荷”數(shù)據(jù),來生成數(shù)據(jù)分組160。然后分組通過網(wǎng)絡(luò)被傳輸?shù)街虚g節(jié)點200,該中間節(jié)點通過將數(shù)據(jù)分組路由到適當(dāng)?shù)慕邮展?jié)點150,來促進(jìn)數(shù)據(jù)分組流經(jīng)網(wǎng)絡(luò)。具體而言,節(jié)點200接收來自輸入端口的分組,解析數(shù)據(jù)鏈路和網(wǎng)絡(luò)層頭部,為分組做出轉(zhuǎn)發(fā)判決,將新的數(shù)據(jù)鏈路頭部附加到分組上,然后將分組發(fā)送到輸出端口。
圖2是可有利地用于本發(fā)明的中間節(jié)點200的示意性框圖。該節(jié)點包括多個線路卡210、轉(zhuǎn)發(fā)處理器(FP)模塊230和路由處理器(RP)模塊260。數(shù)據(jù)被線路卡接收,每個線路卡被耦合到至少一個網(wǎng)絡(luò),例如LAN105和110。更具體而言,線路卡可被配置為向/自多于一種類型的網(wǎng)絡(luò)傳送數(shù)據(jù),這些網(wǎng)絡(luò)除了其他以外還包括異步傳送模式(ATM)、同步光網(wǎng)絡(luò)(SONET)、幀中繼、以太網(wǎng)、光纖分布式數(shù)據(jù)接口(FDDI)等。
線路卡210被多個高速單向(即點到點)鏈路212耦合到底板邏輯電路220。優(yōu)選地,底板邏輯電路被實現(xiàn)為包括耦合到單向鏈路的接口電路215b的高性能專用集成電路(ASIC)。優(yōu)選地,包含在位于每個線路卡上的高性能ASIC內(nèi)的相應(yīng)的接口電路215a將線路卡耦合到單向鏈路。接口電路一般將在線路卡處接收到的數(shù)據(jù)的傳統(tǒng)格式轉(zhuǎn)換成協(xié)議格式,用于在單向鏈路上傳輸,反之亦然。
一般而言,中間節(jié)點的功能性基礎(chǔ)設(shè)施被劃分成數(shù)據(jù)平面和控制平面。數(shù)據(jù)平面包括用于接收來自網(wǎng)絡(luò)的數(shù)據(jù)分組以及在必要時為這些分組提供轉(zhuǎn)發(fā)判決的組件。為此,數(shù)據(jù)平面從線路卡210延伸到單向鏈路212,通過這些鏈路到達(dá)底板邏輯電路220,并且通過底板到達(dá)FP模塊230中的轉(zhuǎn)發(fā)引擎300(例如處理器陣列)。轉(zhuǎn)發(fā)引擎從本質(zhì)上來說包括中間節(jié)點的轉(zhuǎn)發(fā)路徑功能,并且可實現(xiàn)為數(shù)據(jù)平面中的微代碼硬件。在轉(zhuǎn)發(fā)引擎在確定應(yīng)在何時將分組轉(zhuǎn)發(fā)到何處時處理數(shù)據(jù)分組的相關(guān)聯(lián)的頭部的同時,分組緩沖器240可存儲數(shù)據(jù)分組160。經(jīng)處理的頭部被與其各自的數(shù)據(jù)分組合并,并且產(chǎn)生的分組被從底板傳送到適當(dāng)?shù)木€路卡和網(wǎng)絡(luò)。
另一方面,控制平面包括用于管理/控制中間節(jié)點的操作的那些實體,因此控制平面從底板邏輯電路220延伸到RP模塊260上的路由處理器270(例如通用MIPS處理器)。雖然未示出,但是諸如外圍組件互連(PCI)總線這樣的總線將FP模塊上的底板邏輯與RP模塊上的系統(tǒng)控制器280耦合。路由處理器被配置成執(zhí)行用于中間節(jié)點的配置管理功能,例如構(gòu)造和加載由FP模塊230所使用的路由表。
路由處理器270被耦合到系統(tǒng)控制器280和存儲器290。存儲器可包括用于存儲軟件程序、緩沖器池、數(shù)據(jù)結(jié)構(gòu)等的可由路由處理器和系統(tǒng)控制器尋址的同步動態(tài)隨機(jī)訪問存儲器(SDRAM)的存儲位置。例如,存儲器290可存儲一個或多個數(shù)據(jù)結(jié)構(gòu),這些數(shù)據(jù)結(jié)構(gòu)包含節(jié)點的路由信息294,例如其鄰接信息、橋式轉(zhuǎn)發(fā)信息等。其部分通常位于存儲器290中的網(wǎng)絡(luò)路由操作系統(tǒng)292被路由處理器所執(zhí)行,以執(zhí)行控制/管理操作??捎欣赜糜诒景l(fā)明的網(wǎng)絡(luò)路由操作系統(tǒng)的一個示例是Cisco Systems的互連網(wǎng)操作系統(tǒng)(IOS)。本領(lǐng)域的技術(shù)人員易于看出,其他存儲器裝置(包括各種計算機(jī)可讀介質(zhì))也可用于存儲和執(zhí)行與中間節(jié)點200的操作有關(guān)的程序指令。
圖3是轉(zhuǎn)發(fā)引擎300的示意性框圖,該轉(zhuǎn)發(fā)引擎包括處理元件(TMC)陣列330,這些處理元件嵌入在輸入和輸出頭部緩沖器之間,并且耦合到被分區(qū)成多個外部存儲器(EXT MEM)資源340的存儲器。EXT MEM資源340包括用于存儲例如元件330所訪問的數(shù)據(jù)結(jié)構(gòu)且可由處理元件330所尋址的隨機(jī)訪問存儲器(RAM)存儲位置。每個處理元件330例如包括流水線式處理器,該處理器除了其他以外還包括多個算術(shù)邏輯單元(ALU),以及寄存器文件,該寄存器文件具有存儲由ALU所處理的中間結(jié)果信息的多個通用寄存器。處理元件330可被排列成多行和多列,并且還被配置為多維脈動陣列。在圖示實施例中,處理元件330以4×8陣列配置被排列成四(4)行和八(8)列,該配置被嵌入在輸入緩沖器310和輸出緩沖器320之間。但是,應(yīng)該注意,其他配置方式(例如8×8陣列配置)也可有利地用于本發(fā)明。
每行的處理元件330被配置為“流水線”的級,這些級順序地對由輸入緩沖器310加載的諸如分組頭部這樣的暫態(tài)數(shù)據(jù)執(zhí)行操作。相反,每列的處理元件330并行操作,以便幾乎同時地對暫態(tài)數(shù)據(jù)執(zhí)行相同操作,但卻是按錯開的階段執(zhí)行的。每個階段包括預(yù)定數(shù)目的時鐘周期,例如192個周期。每個EXT MEM 340專用于各自的一列處理元件330,并且還被用非暫態(tài)表數(shù)據(jù)進(jìn)行配置,這些非暫態(tài)表數(shù)據(jù)是支持成列的處理元件所執(zhí)行的類似功能所需的。由于同一列中的處理元件共享對公共存儲器資源340的訪問權(quán)限,因此一個階段中的時鐘周期可被劃分成更小的“小階段”,例如24個周期,這些小階段被分配給該列的處理元件,以防止存儲器訪問沖突。輸入緩沖器310的排序電路通過確保每個元件330在新階段中將新的暫態(tài)數(shù)據(jù)加載到流水線中之前完成當(dāng)前暫態(tài)數(shù)據(jù)的處理,來控制每個流水線的處理元件330。一般而言,當(dāng)所有元件330都完成對其當(dāng)前的暫態(tài)數(shù)據(jù)(當(dāng)前上下文)的處理并且新的輸入暫態(tài)數(shù)據(jù)(新的上下文)被輸入緩沖器完整接收到時,開始新階段的處理,即執(zhí)行上下文切換。已被轉(zhuǎn)發(fā)引擎充分處理的暫態(tài)數(shù)據(jù)退出輸出緩沖器320。但是,要求附加處理的暫態(tài)數(shù)據(jù)可經(jīng)反饋路徑350被路由回輸入緩沖器310,以便再一次“經(jīng)過”引擎的多處理器陣列。
轉(zhuǎn)發(fā)引擎300可被配置為執(zhí)行中間節(jié)點200所提供網(wǎng)絡(luò)服務(wù)中的一個或多個。例如,當(dāng)轉(zhuǎn)發(fā)引擎被配置為執(zhí)行節(jié)點的轉(zhuǎn)發(fā)判決時,輸入緩沖器310可在單個階段中例如從分組緩沖器240加載多個分組頭部。所加載的頭部隨后被轉(zhuǎn)發(fā)引擎中的不同行并行處理。為此,每列中的處理元件330可被配置為對行的分組頭部同時執(zhí)行相同的轉(zhuǎn)發(fā)判決操作。例如,一列或多列中的處理元件可被配置為查找頭部中指定的諸如IPv6地址這樣的網(wǎng)絡(luò)地址的路由信息294。例如,路由信息被從存儲器290復(fù)制到可為處理元件所用的一個或多個EXT MEM資源340。通過這種方式,處理元件330可直接從轉(zhuǎn)發(fā)引擎300的EXE MEM資源340查找路由信息294。
B.查找表的邏輯組織根據(jù)圖示實施例,轉(zhuǎn)發(fā)引擎300的一列或多列中的處理元件330可被配置成通過搜索存儲在一個或多個外部存儲器資源340中一組“查找”表(LUT),來定位地址的路由信息294。有利地,每個LUT可用小的有界數(shù)目的(例如3-5個)從屬查找來搜索,而不必默認(rèn)(即踢)給其他的效率可能較低的地址查找算法。每個LUT(在外部存儲器中)存儲與子網(wǎng)掩碼長度在掩碼長度的預(yù)定范圍(“步幅”)內(nèi)的網(wǎng)絡(luò)地址相關(guān)聯(lián)的路由信息的存儲器位置。此外,每個LUT優(yōu)選地被組織成散列表,該散列表具有多個條目,這些條目可基于將散列函數(shù)應(yīng)用到諸如IPv6地址這樣的網(wǎng)絡(luò)地址或其一部分的結(jié)果而被索引。
圖4示出散列表布局400,其描述了可由轉(zhuǎn)發(fā)引擎300搜索的一組典型散列表410的內(nèi)容。例如,散列表被存儲在外部存儲器340中的一個或多個中,并且可由處理元件330訪問。例如,假設(shè)對應(yīng)于128比特IPv6地址的路由信息可通過散列表訪問。另外,假設(shè)這些表是根據(jù)恒定的16比特步幅來組織的,以使得每個表與16個子網(wǎng)掩碼長度的不同的不交迭范圍相關(guān)聯(lián)。當(dāng)然,本領(lǐng)域的技術(shù)人員將會意識到散列表不必與如16比特步幅這樣的恒定步幅相關(guān)聯(lián),并且這些表可存儲可變比特長度的網(wǎng)絡(luò)地址,而不僅是128比特地址。
根據(jù)圖示的散列表布局400,每個散列表410存儲子網(wǎng)掩碼長度在最小掩碼長度420和最大掩碼長度430之間也包括最小掩碼長度420和最大掩碼長度430在內(nèi)的網(wǎng)絡(luò)地址的路由信息的位置。從而,掩碼長度420和430定義表的相關(guān)步幅。例如,子網(wǎng)掩碼長度等于/45的地址的路由信息的位置被存儲在散列表6中,其相關(guān)步幅包括子網(wǎng)掩碼長度/33-/48的范圍。由于將在以下說明的原因,子網(wǎng)掩碼長度在“最不精確”步幅(即/1至/16)內(nèi)的地址的路由信息的位置被存儲在MTRIE而不是散列表中。
每個散列表410中的條目或“散列線”是通過將諸如32比特CRC(CRC32)函數(shù)這樣的散列函數(shù)應(yīng)用到“前綴”地址比特440的預(yù)定范圍來訪問的。在圖示實施例中,前綴比特440的范圍是由以地址的最高有效位開始的連續(xù)的地址比特序列來定義的。該序列中的比特數(shù)目比表的最小掩碼長度420小1。例如,最小子網(wǎng)掩碼長度等于/113的散列表1是通過散列化112個前綴地址比特(即比特0-111)來索引的。類似地,對最小子網(wǎng)掩碼長度等于/97的散列表2的索引是通過散列化96個前綴比特(即比特0-95)來生成的。更一般而言,N-1個前綴比特被散列化,以生成最小子網(wǎng)掩碼長度為/N的散列表的索引。因為當(dāng)最小子網(wǎng)掩碼長度為/1時沒有前綴比特要散列化,因此子網(wǎng)掩碼長度在步幅/1到/16內(nèi)的地址的路由信息可例如通過傳統(tǒng)的4:4:4:4MTRIE來訪問。
根據(jù)圖示實施例,每個散列表410具有多個條目(例如29個條目),其中每個條目可存儲涉及相應(yīng)的“第二級”表的位置的指針。每個第二級表優(yōu)選地被組織成一個散列表,該散列表包含多“頁”,例如2n頁(n=0,1,2,...),這些頁被配置為存儲與預(yù)定數(shù)目的(例如2個)網(wǎng)絡(luò)地址相關(guān)聯(lián)的路由信息的存儲器位置。因此,散列表410可被視為“第一級”表,通過該“第一級”表可定位存儲地址的路由信息的適當(dāng)?shù)牡诙壉怼?br>
圖5是典型第一級散列表500以及它的兩個相關(guān)聯(lián)的第二級散列表550和560的示意性框圖。表500包含多個被索引到的散列線,例如2m個散列線。例如,散列線502、504、506和508分別對應(yīng)于索引等于0、1、2和2m-1的散列表條目。從操作上來說,散列表500中的散列線是通過將第一散列函數(shù)(Ho)應(yīng)用到諸如IPv6地址這樣的網(wǎng)絡(luò)地址中的一組前綴比特而被索引的。正如先前參考圖4所描述的那樣,散列化的該組前綴比特可能與和表500相關(guān)聯(lián)的預(yù)定范圍的前綴比特440一致。例如,如果散列表存儲/113-/128個地址,則112個前綴比特(即比特0-111)可被散列化,以生成到散列表的索引。如果必要的話,散列化前綴比特的結(jié)果可被截短或者掩蔽,以確保生成的散列線索引等于0到2m-1之間的值。例如,如果由散列函數(shù)Ho生成的索引是32比特值,但散列表500僅包含29個散列線,則所生成的散列值中的23個比特可被截短或掩蔽。
每個被索引到的散列線存儲有效比特510、散列函數(shù)標(biāo)識符520、指示散列線的相應(yīng)的第二級表中的頁數(shù)的值n 530,以及指向散列線的相應(yīng)的第二級表的指針540。散列線的有效比特510的值指示至少一個網(wǎng)絡(luò)地址的路由信息的位置是否被存儲在散列線的第二級表中。例如,在散列表500中,等于“0”的有效比特510指示網(wǎng)絡(luò)地址路由信息無法經(jīng)由散列表條目502和508訪問。相反,散列線504和506中等于“1”的有效比特510指示至少一個網(wǎng)絡(luò)地址的路由信息的位置被存儲在第二級表550和560中的每一個中。
散列函數(shù)標(biāo)識符520標(biāo)識第二散列函數(shù)(Hx,x=0,1,2,...),該第二散列函數(shù)可被應(yīng)用到第二組地址比特,以索引第二級表中的頁。第二散列函數(shù)Hx可以是與第一散列函數(shù)Ho相同的函數(shù)。優(yōu)選地,第二組地址比特具有與第一級表相關(guān)聯(lián)的前綴比特440相同的范圍。例如,如果第一級表500存儲/113-/128個地址,則112個前綴地址比特(即比特0-111)可用第二散列函數(shù)而被散列化,以生成對第二級表的索引。第二散列函數(shù)Hx被用于在第二級表的頁內(nèi)隨機(jī)分布網(wǎng)絡(luò)地址。
第一級散列表500中的每個散列線可以與不同的散列函數(shù)Hx相關(guān)聯(lián)。例如,散列線502、504和506依靠不同的第二散列函數(shù)H1、H2和H3來生成對其各自的第二級表的索引?;蛘撸瑑蓚€或多個散列線可使用相同的散列函數(shù)Hx,例如散列線504和508。雖然散列函數(shù)Hx可實現(xiàn)不同的散列算法(例如消息摘要5(MD5)算法、CRC32算法或選擇性異或(XOR)操作),但是也明確預(yù)期它們可采用使用不同“種子”值的公共散列算法。例如,散列函數(shù)H1、H2和H3可各自對應(yīng)于使用不同初始值(或種子值)的相同CRC32散列函數(shù)。在此情況下,散列函數(shù)標(biāo)識符520可標(biāo)識用于初始化散列函數(shù)Hx的適當(dāng)?shù)姆N子值。
因此注意,值n530指示散列線的相應(yīng)的第二級表中的頁數(shù)。由于每個第二級表例如包含2n頁,因此值n等于散列線的第二級表中的頁數(shù)的以2為底的對數(shù)。因此,值n指示用于索引第二級表中的一頁所需的比特數(shù)目。例如,假設(shè)CRC32散列函數(shù)Hx被用于生成對具有四頁(即n=2)的第二級表的索引。在此情況下,要定位第二級表的四頁之一只需要由CRC32函數(shù)生成的32比特索引中的兩個比特。從而,生成的32比特索引中的30比特可被掩蔽或截短,以生成對第二級表的有效索引。
每個有效的散列線包含指針540,該指針涉及散列線的相應(yīng)的第二級表的存儲器位置。例如,有效散列線504和506包含指針540,該指針存儲其相應(yīng)的第二級表550和560的位置?;蛘?,取代指針540,散列線504可包含指示其相應(yīng)的第二級表的地址的索引。每個第二級表包含2n個被索引到的頁570。如圖所示,每頁包含兩個“桶(bucket)”580(即條目),但是本領(lǐng)域的技術(shù)人員將會意識到每頁中可包含任意數(shù)目的桶。
每個桶580被配置為存儲網(wǎng)絡(luò)地址582,包括地址的相關(guān)聯(lián)的子網(wǎng)掩碼長度,以及“葉”標(biāo)識符584。這里所使用的“葉”是位于外部存儲器340中的數(shù)據(jù)結(jié)構(gòu),其存儲路由信息294,例如鄰接信息、橋式轉(zhuǎn)發(fā)信息等。因此葉標(biāo)識符584可以是涉及外部存儲器資源340中葉的存儲器位置的指針。因此,葉標(biāo)識符584可用于定位其相關(guān)網(wǎng)絡(luò)地址582的路由信息。值得注意的是,不同網(wǎng)絡(luò)地址可依賴于相同的路由信息,因此可能被與相同的葉標(biāo)識符配對。例如,在圖5中,IPv6地址A::B:5000/127和A::C:8006/115的路由信息被存儲在相同的葉中,例如葉3中。這里,A、B和C是任意值,A::B和A::C表示任意的112比特前綴。
優(yōu)選地,存儲在頁的桶中的網(wǎng)絡(luò)地址是按照前綴長度減小的順序而列出的。即,頁中的第一(“最頂部”)桶存儲頁的最精確的網(wǎng)絡(luò)地址。例如,存儲在第二級表560的頁1中的兩個IPv6地址B::D:8008/127和A::C:8006/115是按前綴長度減小的順序來列出的。當(dāng)頁只包含一個網(wǎng)絡(luò)地址時(例如表550中的頁),頁中的最頂部桶存儲網(wǎng)絡(luò)地址582及其相關(guān)聯(lián)的葉標(biāo)識符584。注意到,雖然為了示例目的,圖5的第二級散列表550和560存儲/113-/128個IPv6地址,但是典型的第二級表也可被配置成按其他步幅存儲網(wǎng)絡(luò)地址,而不會喪失一般性。
有利地,由散列表500所例示的散列表410的新穎組織使得中間網(wǎng)絡(luò)節(jié)點能夠利用與傳統(tǒng)技術(shù)相比相對較少的從屬查找來定位網(wǎng)絡(luò)地址的路由信息。即,節(jié)點可通過利用第一散列函數(shù)Ho查找散列表410中的適當(dāng)?shù)纳⒘芯€,利用第二散列函數(shù)Hx查找第二級表中的適當(dāng)?shù)捻?,然后搜索頁的桶以查找地址的路由信息的存儲器位置,來定位與諸如IPv6地址這樣的網(wǎng)絡(luò)地址相關(guān)聯(lián)的路由信息。總而言之,本發(fā)明的地址查找過程僅對應(yīng)于少量(例如3個)從屬查找。此外,由于第一和第二級表的可擴(kuò)展的有界組織,本發(fā)明還使得中間網(wǎng)絡(luò)節(jié)點200能夠在無需默認(rèn)(即“踢”)給其他可能較慢的地址查找算法的情況下定位路由信息。
C.將地址插入查找表中根據(jù)圖示實施例,每個第二級表可“在工作中”被重新配置。具體而言,當(dāng)新的網(wǎng)絡(luò)地址被插入到“已滿”的頁中時,新添加的地址仍可以通過執(zhí)行以下操作中的至少一種來被插入到第二級表中(a)使第二級表中的頁數(shù)加倍,(b)在第二級表中重新分布網(wǎng)絡(luò)地址或(c)將附加地址存儲在可通過第二級表訪問的MTRIE中。有利地,上述三種技術(shù)可被單獨使用或按各種組合使用,以將新地址插入到第二級表中。
通過使第二級表中的頁數(shù)加倍,將有兩倍那么多的桶可用于存儲網(wǎng)絡(luò)地址以及與其相關(guān)聯(lián)的路由信息的位置。因此,由于頁“已滿”而無法“裝”進(jìn)第二級表的網(wǎng)絡(luò)地址,可以被添加到第二級數(shù)據(jù)結(jié)構(gòu)的“擴(kuò)大”(例如加倍)版本中。為此,可分配附加的存儲器來擴(kuò)大第二級表,并且可利用表的相關(guān)聯(lián)的散列函數(shù)Hx來在擴(kuò)大后的表中重新分布網(wǎng)絡(luò)地址。此外,與表相關(guān)的值n 530增大1,以指示在擴(kuò)大后的第二級表中索引一頁需要額外的一個比特。雖然在圖示實施例中第二級表的尺寸加倍,但是本領(lǐng)域的技術(shù)人員將會理解在這里的教導(dǎo)的范圍之內(nèi),這種表可被擴(kuò)大其他倍數(shù)。
假設(shè)新的IPv6地址將要被加到典型第二級表560的頁1中。由于頁1已滿(即它的桶包含地址A::C:8008/127和A::C:8006/115),因此表560中的頁的數(shù)目可被加倍,以容納新添加的地址。因此,表560中的頁的數(shù)目從四(22)增大到八(23),并且表中的地址(包括新添加的地址),被用散列線506中指示的表的相關(guān)散列函數(shù)H3來重新分布。此外,由于表中的頁的數(shù)目被加倍,因此散列線506中的值n530從2增大到3,從而指示要在新的擴(kuò)大后的表560中索引一頁需要3個比特。
不是增大第二級表的尺寸以插入新的網(wǎng)絡(luò)地址,而是也可用不同的散列函數(shù)Hx來重新分布表中的地址。于是可以在第二級表中重新分布先前存儲的地址之后,插入新地址。例如,再次假設(shè)新的IPv6地址將被添加到第二級表560中的頁1。在表560中的地址先前被用散列線506中指示的散列函數(shù)H3分布在表的頁間的情況下,它們可以用不同的散列函數(shù)(例如H4)來重新分布。在此情況下,散列線506中的散列函數(shù)標(biāo)識符520被改變,以反映新的散列函數(shù)H4與第二級表560相關(guān)聯(lián)。正如先前所注意到的,新的散列函數(shù)可采用不同的散列算法,或者可以是使用不同種子值的相同算法。在第二級表中的地址已被用新散列函數(shù)H4重新分布以后,新的IPv6地址可被添加到適當(dāng)?shù)耐?80??芍貜?fù)選擇新散列函數(shù)H4的過程,直到找到提供容納新添加的IPv6地址的合適分布的散列函數(shù)。
雖然上述用于重新分布第二級表中的地址的技術(shù)對于從屬網(wǎng)絡(luò)地址工作良好,但是它們對于非獨立網(wǎng)絡(luò)地址卻不起作用。這里所使用的非獨立地址被定義為具有生成相同散列表索引的相同前綴比特的網(wǎng)絡(luò)地址。相反,獨立地址包含不同前綴比特,并且因此與非獨立地址不同,可能生成不同的散列表索引。例如,假設(shè)非獨立IPv6地址A::B:0001/122和A::B:0002/128的路由信息的位置可通過/113-/128散列表來訪問。因為地址具有相同的112比特前綴A::B,所以其散列化的前綴比特將會始終生成相同的到第二級表的頁索引,而不論選擇了哪個散列函數(shù)Hx。另一方面,如果地址是獨立的,例如A::B:0001/122和A::C:0002/128,則其前綴是不同的,并且因此可以不必生成相同的頁索引。
圖6示出使第二級表中的頁能夠存儲比其所擁有的桶數(shù)更多的網(wǎng)絡(luò)地址的技術(shù)。這樣,第二級表中的頁可存儲多個非獨立或獨立地址,這些地址在被函數(shù)Hx散列化時,生成相同的頁索引。當(dāng)新地址被添加到已滿的頁中時,頁的“最頂部”的桶存儲頁的最精確的網(wǎng)絡(luò)地址,剩余的不那么精確的地址被存儲在可通過頁的“最底部”的桶訪問的MTRIE中。因為區(qū)別MTRIE存儲的地址所需的比特數(shù)目限于地址子網(wǎng)掩碼長度及其前綴長度的差異,因此在MTRIE中實現(xiàn)的級數(shù)可相對較小。這樣,可在小的有界數(shù)目的從屬查找中搜索MTRIE。
例如,如圖6所示,假設(shè)IPv6地址A::D:8007/128和其路由信息(例如葉2)的位置被添加到第二級表560的頁3中。因為添加的IPv6地址是頁中最精確的(即,它具有最長的子網(wǎng)掩碼長度(/128)),所以地址被存儲在頁的最頂部的桶580中。剩余的不那么精確的地址A::D:8009/125和A::D:8000/114被存儲在MTRIE 600中。因為112個前綴比特被散列化以生成到典型第二級表560的頁索引,并且該表存儲子網(wǎng)掩碼長度在步幅/113至/128中的IPv6地址,所以為了區(qū)別(即唯一定位)存儲在MTRIE中的地址,最多需要16比特(128減112)。即,存儲在MTRIE中的地址可基于其16個最低有效地址位的值(例如比特113-128的值)來定位。類似地,即使第二級表560按不同的16比特步幅存儲地址,要區(qū)別存儲在MTRIE 600中的地址也只需要跟在散列化的前綴地址比特后的16比特。從而可用相對較少的級別(例如4級)來實現(xiàn)MTRIE。
除了存儲網(wǎng)絡(luò)地址的路由信息的位置外,MTRIE 600還可包括“默認(rèn)”路由。MTRIE 600中不存儲特定網(wǎng)絡(luò)地址的路由信息的位置的陣列元素可存儲對包含默認(rèn)路由信息的葉的涉及?;蛘?,陣列元素可存儲默認(rèn)值,例如NULL值。一般而言,默認(rèn)路由信息可對應(yīng)于任何預(yù)定的路由信息294。例如,在圖示實施例中,MTRIE的默認(rèn)路由信息可以與中間網(wǎng)絡(luò)節(jié)點200的路由表中最不精確的與存儲在MTRIE中的網(wǎng)絡(luò)地址具有相同的前綴比特的網(wǎng)絡(luò)地址相關(guān)聯(lián)。例如,因為MTRIE 600存儲非獨立地址A::D:8009/125和A::D:8000/114,所以默認(rèn)路由信息可對應(yīng)于存儲在中間網(wǎng)絡(luò)節(jié)點的路由表中的具有112比特前綴A::D的最不精確的IPv6地址。
圖7A-B示出用于將地址插入到第二級表中的步驟序列。序列開始于步驟700處,并且前進(jìn)到步驟705,在這里地址k(例如IPv6地址)以及它的相關(guān)子網(wǎng)掩碼長度在中間節(jié)點200處被接收到。地址k可在網(wǎng)絡(luò)“控制”分組的中下文中被接收到,該分組根據(jù)傳統(tǒng)路由協(xié)議來編排格式,所述傳統(tǒng)路由協(xié)議例如是開放式最短路徑優(yōu)先(OSPF)協(xié)議、內(nèi)部網(wǎng)關(guān)路由協(xié)議(IGRP)、邊界網(wǎng)關(guān)協(xié)議(BGP)等。接收到的控制分組還可包括指示網(wǎng)絡(luò)地址k應(yīng)該被添加以節(jié)點的路由表中的信息。
從操作上來說,控制分組在線路卡210處被接收到,并且通過接口電路215和底板邏輯電路220被轉(zhuǎn)發(fā)到RP模塊260。然后,分組根據(jù)路由器系統(tǒng)292被存儲在存儲器290中,并且被處理器270所處理?;诳刂品纸M的內(nèi)容,操作系統(tǒng)可確定地址k的路由信息的位置,并且如果必要的話,生成新葉來存儲地址的路由信息。否則地址k被與已經(jīng)存儲在存儲器290中的路由信息294相關(guān)聯(lián)。
在步驟710處,路由器操作系統(tǒng)292確定地址k的子網(wǎng)掩碼長度是否在存儲在中間網(wǎng)絡(luò)節(jié)點中的最小(即最不精確)掩碼長度的步幅內(nèi)。例如,假設(shè)操作系統(tǒng)在根據(jù)恒定的16比特步幅安排的一組散列表410中組織128比特IPv6地址,并且/1-/16步幅對應(yīng)于節(jié)點的最小步幅。如果步驟710處的確定是肯定的,則序列前進(jìn)到步驟715,在這里地址k及其相關(guān)聯(lián)的路由信息例如被存儲在傳統(tǒng)4:4:4:4MTRIE中。然后操作系統(tǒng)在步驟770處更新可能由于添加地址k而受影響的任何默認(rèn)路由信息,例如其他MTRIE結(jié)構(gòu)中的默認(rèn)路由信息。序列在步驟775處結(jié)束。
另一方面,如果地址k的相關(guān)聯(lián)的子網(wǎng)掩碼長度不在最小步幅內(nèi),則在步驟720處,操作系統(tǒng)292定位其步幅包含地址k的子網(wǎng)掩碼長度的散列表410。接下來,在步驟725處,與散列表相關(guān)聯(lián)的前綴比特440的范圍被在地址k中定位,并且被諸如CRC32函數(shù)這樣的散列函數(shù)Ho所散列。這里,Ho(k)表示應(yīng)用到地址k中的前綴比特的函數(shù)Ho。然后所生成的散列值被用于索引所定位的散列表中的散列線。值得注意的是,所生成的散列值Ho(k)可被適當(dāng)?shù)匮诒位蚪囟蹋源_保它對應(yīng)于有效的散列線索引。
在步驟730處,估計被索引到的散列線中的有效比特510的值,以確定散列線是否已在使用中。如果有效比特的值指示被索引到的散列線未在使用中,則在步驟735處,該值被更改,以指示散列線目前在使用中。此外,在尚未為被索引到的散列線分配第二級表的情況下,路由器操作系統(tǒng)292可被配置為分配新的第二級表。在這種情況下,被索引到的散列線中的指針540的值被修改,以涉及新分配的第二級表的位置。
接下來,在步驟740處,基于被索引到的散列線中的散列函數(shù)標(biāo)識符520的值,標(biāo)識諸如CRC32函數(shù)這樣的第二散列函數(shù)Hx。例如,散列函數(shù)Hx可以是CRC32函數(shù),它是由標(biāo)識符520所指定的種子值初始化的。與散列表相關(guān)聯(lián)的前綴比特440的范圍再次被在地址k中定位,并且前綴比特被函數(shù)Hx散列化。被索引到的散列線中的值n530指示定位散列線的相應(yīng)第二級表(該表是由散列線的指針540定位到的)中的頁所需的所生成的散列值Hx(k)中的比特數(shù)目。例如,Hx(k)中的n個最低有效位可用于索引第二級表中的頁。
在步驟745處,操作系統(tǒng)確定被索引到的頁是否已滿,即它的桶是否已包含地址582和葉指針584(或MTRIE指針)對。如果被索引到的頁中的至少一個桶是空的,則在步驟750處,地址k、其子網(wǎng)掩碼長度和其路由信息的位置被存儲在被索引到的頁中。優(yōu)選地,以確保按前綴長度減小的順序(即“最長前綴匹配”順序)將地址存儲在頁的桶中的方式來插入地址k。在770處,默認(rèn)路由信息(例如可通過其他散列表410訪問的MTRIE結(jié)構(gòu)中的路由信息)如果受到了地址k的添加的影響則被更新。然后序列在步驟775處結(jié)束。
如果,在步驟745處,被索引到的頁被確定為已滿,則序列可沿步驟755、760和765處指定的路徑之一前進(jìn)。沿第一路徑,在步驟755處,可通過選擇在第二級表的頁之間隨機(jī)分布地址的新的散列函數(shù)Hx來重新分布第二級表中的地址。例如,新的散列函數(shù)可以是CRC32函數(shù),它是由與由散列函數(shù)標(biāo)識符520所指定的原始Hx函數(shù)不同的種子值所初始化的。因此,散列函數(shù)標(biāo)識符520被更改,以標(biāo)識新選中的種子值。在重新分布第二級表中的地址后,在步驟755處,序列使用新的Hx函數(shù)返回步驟740。
或者,當(dāng)在步驟745處被索引到的頁被確定為已滿時,序列可前進(jìn)到步驟760,在這里第二級表中的頁的數(shù)目被加倍。為此,操作系統(tǒng)可能必須分配附加的存儲器,來存儲第二級表。然后利用散列函數(shù)標(biāo)識符520所指示的散列函數(shù)Hx,在整個擴(kuò)大后的表中重新分布存儲在第二級表中的網(wǎng)絡(luò)地址。此外,值n 530被加1,以指示要索引擴(kuò)大后的第二級表中的頁則需要附加的比特。在重新分布第二級表中的地址后,在步驟760處,序列返回步驟740。
當(dāng)在步驟745處確定被索引到的頁已滿時,序列還可沿步驟765處開始的路徑前進(jìn)。這里,地址k及其相關(guān)聯(lián)的路由信息的位置被插入到可通過被索引到的頁訪問的MTRIE中。具體而言,如果還未創(chuàng)建MTRIE,則安排MTRIE以存儲被索引到的頁的最不精確的地址,即具有最小子網(wǎng)掩碼值的地址。從而,如果地址k具有被索引到的頁中的最大的子網(wǎng)掩碼長度,則它被存儲在頁的最頂部的桶中,并且MTRIE是通過頁的最底部的桶來訪問的。相反,如果地址k是頁的最不精確的地址之一,則它被存儲在MTRIE的適當(dāng)?shù)臈l目中。接下來,在步驟770處,默認(rèn)路由信息(例如其他MTRIE結(jié)構(gòu)中的路由信息)如果受到了地址k的添加的影響則被更新。序列在步驟775處結(jié)束。
D.查找地址的路由信息根據(jù)示例性實施例,轉(zhuǎn)發(fā)引擎300通過按前綴長度減小的順序搜索一組查找表(諸如散列表410),直到找到路由信息,來定位網(wǎng)絡(luò)地址的路由信息。為此,轉(zhuǎn)發(fā)引擎300的不同列中的處理元件330可被配置為在位于外部存儲資源340中的不同散列表410中執(zhí)行表查找。此外,轉(zhuǎn)發(fā)引擎的多列(例如4列)中的處理元件可同時搜索多個散列表。對于示例性的實施例,另外,無法在散列表410中的任何一個中定位的網(wǎng)絡(luò)地址的相關(guān)路由信息被存儲在MTRIE中,該MTRIE與表類似,也可用相對較小的有界數(shù)目的從屬查找來搜索。因此,轉(zhuǎn)發(fā)引擎300中的一列處理元件330可被配置為在先前列中的處理元件無法在散列表410集合中定位到地址的路由信息的情況下搜索MTRIE。
圖8是示出用于在中間網(wǎng)絡(luò)節(jié)點200中查找地址的路由信息的位置的步驟序列的流程圖。序列在步驟800處開始,并前進(jìn)到步驟810處,在這里諸如IPv6地址這樣的網(wǎng)絡(luò)地址被從接收到的數(shù)據(jù)分組中解析出來。更具體而言,數(shù)據(jù)分組在線路卡210處被接收,并且通過接口電路215和底板接口邏輯220被轉(zhuǎn)發(fā)到FP模塊230。然后分組被存儲在分組緩沖器240中,并且其頭部被傳送到轉(zhuǎn)發(fā)引擎300,以便處理。引擎從頭部中解析出目的地地址k,以便對接收到的分組執(zhí)行轉(zhuǎn)發(fā)判決。這里,假設(shè)地址k的相關(guān)子網(wǎng)掩碼長度無法從分組頭部中獲得。然后轉(zhuǎn)發(fā)引擎部分基于地址的相關(guān)聯(lián)的路由信息來執(zhí)行其轉(zhuǎn)發(fā)判決,該路由信息是根據(jù)圖8的剩余步驟來定位的。
在步驟820處,轉(zhuǎn)發(fā)引擎例如在適當(dāng)?shù)拇鎯ζ?40中定位尚未為找到地址k的路由信息而被搜索的最精確的散列表410。例如,假設(shè)地址k是128比特IPv6地址,并且散列表410是根據(jù)恒定的16比特步幅來安排的,則最精確的、未被搜索的散列表最初對應(yīng)于/113-/128散列表。接下來,在步驟900處,正如將參考圖9更詳細(xì)描述的那樣,散列表被搜索。
如果在步驟830處,地址k的路由信息在散列表中被定位到,則序列在步驟860處結(jié)束。否則,在步驟840處,轉(zhuǎn)發(fā)引擎確定是否還有另一散列表410要搜索。如果是的話,則序列返回步驟820。注意,當(dāng)散列表被轉(zhuǎn)發(fā)引擎并行搜索時,步驟820-840可被引擎300中的不同處理元件330同時執(zhí)行。
如果所有散列表410都已被搜索,并且地址k的路由信息的存儲器位置尚未被標(biāo)識,則在步驟850處,轉(zhuǎn)發(fā)引擎搜索對應(yīng)于節(jié)點200的路由表中的最不精確的地址的MTRIE。例如,MTRIE可存儲子網(wǎng)掩碼長度在最不精確的步幅/1至/16內(nèi)的IPv6地址的路由信息的位置。序列在步驟860處結(jié)束。因為圖8中的步驟序列可在散列表410或MTRIE中定位具有任意子網(wǎng)掩碼長度的網(wǎng)絡(luò)地址的路由信息,因此該技術(shù)不需要將其執(zhí)行踢給其他的可能較慢的地址查找算法。
圖9是示出轉(zhuǎn)發(fā)引擎300可執(zhí)行的用于從散列表410中查找地址k的路由信息的存儲器位置的步驟序列的流程圖。序列在步驟900處開始,并且前進(jìn)到步驟905,在這里與散列表相關(guān)聯(lián)的前綴比特440的范圍被在地址k中定位,并且被諸如CRC32函數(shù)這樣的散列函數(shù)Ho所散列化。這里Ho(k)表示應(yīng)用到地址k中的前綴比特的函數(shù)Ho。然后所生成的散列值被用于索引定位到的散列表中的散列線。值得注意的是,所生成的散列值Ho(k)可被適當(dāng)掩蔽或截短,以確保它對應(yīng)于有效的散列線索引。
接下來,在步驟910處,轉(zhuǎn)發(fā)引擎基于散列線中的有效比特510的值,來確定被索引到的散列線是否有效。如果引擎確定該散列線無效,則在步驟950處,“不匹配”指示被例如返回給被配置為搜索地址k的路由信息的下一個處理元件330。序列在步驟960處結(jié)束。
但是,如果在步驟910處,散列線的有效比特510的值指示散列線有效,則在步驟920處,第二散列函數(shù)Hx基于被索引到的散列線中的散列函數(shù)標(biāo)識符520的值而被標(biāo)識。例如,散列函數(shù)Hx可以是CRC32函數(shù),它是由標(biāo)識符520指定的種子值來初始化的。與散列表相關(guān)聯(lián)的前綴比特440的范圍再次被在地址k中被定位,并且前綴比特被函數(shù)Hx所散列化。被索引到的散列線中的值n 530的值指示定位散列線的相應(yīng)第二級表中的頁所需的所生成的散列值Hx(k)中的比特數(shù)目,該第二級表是由散列線的指針540所定位的。例如,Hx(k)中的n個最低有效位可用于索引第二級表中的頁。
然后,在步驟925處,優(yōu)選地按照前綴長度減小的順序搜索被索引到的頁中的桶,并且轉(zhuǎn)發(fā)引擎對存儲在桶中的每個地址執(zhí)行“精確匹配比較”測試。在步驟930處,如果存儲在桶中的網(wǎng)絡(luò)地址等于地址k,則滿足精確匹配比較測試,并且確定在散列表410中找到地址k。在此情況下,在步驟935處,存儲在桶中的葉標(biāo)識符被返回,并且序列在步驟960處結(jié)束。
如果在被索引到的頁的桶中未定位到地址k,則在步驟940處,轉(zhuǎn)發(fā)引擎確定最底部的桶是否存儲了對MTRIE的涉及。如果否的話,則在步驟945處,“不匹配”指示被返回,并且序列在步驟960處結(jié)束。否則,序列前進(jìn)到步驟950,在這里基于位于地址k中的散列化前綴比特440之后的下一16個最高有效位來搜索MTRIE。如果轉(zhuǎn)發(fā)引擎在MTRIE中定位出地址k,則在步驟955處,其相應(yīng)的葉標(biāo)識符被返回。另一方面,如果未在MTRIE中找到該地址,則“不匹配”指示可被返回,除非MTRIE中的默認(rèn)路由被定位。在該情況下,在步驟955處,默認(rèn)路由的葉位置被返回。序列在步驟960處結(jié)束。
E.結(jié)論以上是對本發(fā)明的示例性實施例的詳細(xì)描述。在不脫離本發(fā)明的精神和范圍的情況下,可進(jìn)行各種修改和添加。例如,雖然典型的散列表410的集合是根據(jù)恒定的16比特步幅來安排的,但是本領(lǐng)域的技術(shù)人員將會理解這些表可以與可變長度的步幅相關(guān)聯(lián),例如對于不同表具有不同步幅。此外,雖然示例性實施例中的路由信息294是存儲在外部存儲器資源340中的“葉”數(shù)據(jù)結(jié)構(gòu)中的,但是還設(shè)想路由信息可被直接存儲在適當(dāng)?shù)牡诙壉淼耐爸?。即,?80不是存儲地址582和葉標(biāo)識符584,而是可被配置為存儲地址及其相關(guān)聯(lián)的地址信息。此外,示例性實施例中采用的MTRIE數(shù)據(jù)結(jié)構(gòu)也可利用其他數(shù)據(jù)結(jié)構(gòu)來實現(xiàn),例如基于trie的數(shù)據(jù)結(jié)構(gòu)。
通過在CAM中實現(xiàn)第一級散列表410,可使得發(fā)明的技術(shù)更高效。由于第一級散列表的數(shù)目相對較小,因此可采用少量的CAM條目來例如基于網(wǎng)絡(luò)地址的值而快速執(zhí)行地址查找。因此,然后這些查找的結(jié)果可用于定位適當(dāng)?shù)牡诙壉聿⑸蓪Φ诙壉淼捻撍饕V档米⒁獾氖?,CAM可用于實現(xiàn)第二級表中的某些或全部。
明確地設(shè)想本發(fā)明的教導(dǎo)可實現(xiàn)為軟件,包括具有在計算機(jī)、硬件、固件或其組合上執(zhí)行的程序指令的計算機(jī)可讀介質(zhì)。因此,此描述希望僅被以示例方式來理解,而不是限制本發(fā)明的范圍。
權(quán)利要求
1.一種用于使中間網(wǎng)絡(luò)節(jié)點高效查找與網(wǎng)絡(luò)地址相關(guān)聯(lián)的路由信息的方法,該方法包括(a)從所述中間網(wǎng)絡(luò)節(jié)點中的一個或多個查找表的集合中選擇一個查找表,每個查找表與不同的子網(wǎng)掩碼長度范圍相關(guān)聯(lián),其中被選中的查找表與尚未被搜索的最大子網(wǎng)掩碼長度相關(guān)聯(lián);(b)基于所述網(wǎng)絡(luò)地址的值搜索所述被選中的查找表,以定位所述網(wǎng)絡(luò)地址的路由信息的存儲器位置;(c)如果在所述被選中的查找表中未找到所述網(wǎng)絡(luò)地址,則重復(fù)步驟(a)和(b),直到找到所述網(wǎng)絡(luò)地址的路由信息的存儲器位置或者已搜索了所有查找表;并且(d)如果在所述查找表中的任何一個中都未找到所述網(wǎng)絡(luò)地址,則搜索MTRIE,以查找所述網(wǎng)絡(luò)地址的路由信息的存儲器位置。
2.如權(quán)利要求1所述的方法,還包括在所述中間網(wǎng)絡(luò)節(jié)點處接收包含所述網(wǎng)絡(luò)地址的數(shù)據(jù)分組;并且從接收到的數(shù)據(jù)分組中抽取所述網(wǎng)絡(luò)地址。
3.如權(quán)利要求1所述的方法,其中所述搜索被選中的查找表的步驟(b)包括利用有界數(shù)目的從屬查找來搜索所述被選中的查找表。
4.如權(quán)利要求1所述的方法,其中所述搜索被選中的查找表的步驟(b)包括按前綴長度減小的順序搜索被選中的查找表。
5.如權(quán)利要求1所述的方法,還包括將所述一個或多個查找表的集合中的每個查找表組織為具有多個被索引的散列線的第一級散列表,每個被索引的散列線與相應(yīng)的第二級表相關(guān)聯(lián),所述第二級表被配置為存儲至少一個網(wǎng)絡(luò)地址的路由信息的存儲器位置。
6.如權(quán)利要求5所述的方法,還包括按照前綴長度減小的順序在所述第二級表中存儲網(wǎng)絡(luò)地址的路由信息的位置。
7.如權(quán)利要求5所述的方法,其中在第一級散列表中的每個散列線包括有效比特、散列函數(shù)標(biāo)識符、指向所述散列線的相應(yīng)第二級表的指針以及指示可在所述散列線的相應(yīng)第二級表中被索引的頁的數(shù)目的值。
8.如權(quán)利要求5所述的方法,還包括基于將第一散列函數(shù)應(yīng)用到所述網(wǎng)絡(luò)地址中的第一組前綴比特的結(jié)果,來索引第一級散列表中的散列線。
9.如權(quán)利要求8所述的方法,還包括基于將第二散列函數(shù)應(yīng)用到所述網(wǎng)絡(luò)地址中的第二組前綴比特的結(jié)果,來索引第二級表中的頁。
10.如權(quán)利要求9所述的方法,其中所述第一和第二散列函數(shù)是CRC32散列函數(shù)。
11.如權(quán)利要求9所述的方法,其中所述網(wǎng)絡(luò)地址中的第一組和第二組前綴比特是相同的前綴比特。
12.如權(quán)利要求1所述的方法,其中所述網(wǎng)絡(luò)地址是IPv6地址。
13.一種適合于利用有界數(shù)目的從屬查找來查找與網(wǎng)絡(luò)地址相關(guān)聯(lián)的路由信息的中間網(wǎng)絡(luò)節(jié)點,該節(jié)點包括網(wǎng)絡(luò)接口,用于接收包含所述網(wǎng)絡(luò)地址的分組;存儲器,其被配置為存儲(a)至少一個具有多個被索引的散列線的第一級散列表,每個被索引的散列線與相應(yīng)的第二級表相關(guān)聯(lián),所述第二級表被配置為存儲至少一個網(wǎng)絡(luò)地址的路由信息的存儲器位置,以及(b)至少一個MTRIE,其被配置為存儲至少一個網(wǎng)絡(luò)地址的路由信息的存儲器位置;以及轉(zhuǎn)發(fā)引擎,其包括一個或多個處理元件,這些處理元件被配置為在所述至少一個第一級散列表中或在所述至少一個MTRIE中查找所述網(wǎng)絡(luò)地址的相關(guān)路由信息的位置。
14.如權(quán)利要求13所述的中間節(jié)點,其中所述第二級表按前綴長度減小的順序存儲網(wǎng)絡(luò)地址的路由信息的位置。
15.如權(quán)利要求13所述的中間節(jié)點,其中第一級散列表中的每個散列線包括有效比特、散列函數(shù)標(biāo)識符、指向所述散列線的相應(yīng)第二級表的指針以及指示可在所述散列線的相應(yīng)第二級表中被索引的頁的數(shù)目的值。
16.如權(quán)利要求13所述的中間節(jié)點,其中第一級散列表中的散列線是基于將第一散列函數(shù)應(yīng)用到所述網(wǎng)絡(luò)地址中的第一組前綴比特的結(jié)果而被索引的。
17.如權(quán)利要求16所述的中間節(jié)點,其中第二級表中的頁是基于將第二散列函數(shù)應(yīng)用到所述網(wǎng)絡(luò)地址中的第二組前綴比特的結(jié)果而被索引的。
18.如權(quán)利要求17所述的方法,其中所述網(wǎng)絡(luò)地址中的第一組和第二組前綴比特是相同的前綴比特。
19.如權(quán)利要求13所述的中間節(jié)點,其中所述網(wǎng)絡(luò)地址是IPv6地址。
20.一種適合于利用有界數(shù)目的從屬查找來查找與網(wǎng)絡(luò)地址相關(guān)聯(lián)的路由信息的裝置,所述裝置包括用于從中間網(wǎng)絡(luò)節(jié)點中的一個或多個查找表的集合中選擇一個查找表的裝置,每個查找表與不同的子網(wǎng)掩碼長度范圍相關(guān)聯(lián),其中所述被選中的查找表與尚未被搜索的最大子網(wǎng)掩碼長度相關(guān)聯(lián);用于基于所述網(wǎng)絡(luò)地址的值搜索所述被選中的查找表以定位所述網(wǎng)絡(luò)地址的路由信息的存儲器位置的裝置;以及用于如果在所述查找表中的任何一個中都未找到所述網(wǎng)絡(luò)地址,則搜索MTRIE以查找所述網(wǎng)絡(luò)地址的路由信息的存儲器位置的裝置。
21.如權(quán)利要求20所述的裝置,還包括用于在所述中間網(wǎng)絡(luò)節(jié)點處接收包含所述網(wǎng)絡(luò)地址的數(shù)據(jù)分組的裝置;以及用于從接收到的數(shù)據(jù)分組中抽取所述網(wǎng)絡(luò)地址的裝置。
22.如權(quán)利要求20所述的裝置,其中所述用于搜索被選中的查找表的裝置還包括用于按前綴長度減小的順序來搜索所述被選中的查找表的裝置。
23.一種包括由處理器執(zhí)行的指令的計算機(jī)可讀介質(zhì),所述指令是用于高效查找與網(wǎng)絡(luò)地址相關(guān)聯(lián)的路由信息的方法的,該方法包括以下步驟(a)從中間網(wǎng)絡(luò)節(jié)點中的一個或多個查找表的集合中選擇一個查找表,每個查找表與不同的子網(wǎng)掩碼長度范圍相關(guān)聯(lián),其中被選中的查找表與尚未被搜索的最大子網(wǎng)掩碼長度相關(guān)聯(lián);(b)基于所述網(wǎng)絡(luò)地址的值搜索所述被選中的查找表,以定位所述網(wǎng)絡(luò)地址的路由信息的存儲器位置;(c)如果在所述被選中的查找表中未找到所述網(wǎng)絡(luò)地址,則重復(fù)步驟(a)和(b),直到找到所述網(wǎng)絡(luò)地址的路由信息的存儲器位置或者已搜索了所有查找表;并且(d)如果在所述查找表中的任何一個中都未找到所述網(wǎng)絡(luò)地址,則搜索MTRIE,以查找所述網(wǎng)絡(luò)地址的路由信息的存儲器位置。
全文摘要
本發(fā)明提供了一種用于在諸如路由器這樣的中間網(wǎng)絡(luò)節(jié)點中高效查找地址路由信息的技術(shù)。為此,節(jié)點利用可用小的有界數(shù)目的從屬查找來搜索的一個或多個“查找”表(LUT)來定位存儲在其存儲器中的路由信息,從而減小了傳統(tǒng)執(zhí)行的從屬查找的數(shù)目。LUT被安排為使得每個表為子網(wǎng)掩碼長度在不同的掩碼長度范圍(“步幅”)內(nèi)的網(wǎng)絡(luò)地址提供路由信息。根據(jù)該技術(shù),節(jié)點通過按前綴長度減小的順序搜索LUT,直到找到路由信息,來定位網(wǎng)絡(luò)地址的路由信息。優(yōu)選地,幾個表被并行搜索。LUT中的匹配還可指向小的MTRIE,該MTRIE使得前綴中的最終比特能夠被匹配。該最終MTRIE被用相對較小的有界數(shù)目的從屬查找來搜索。
文檔編號H04L29/06GK1774900SQ200480009799
公開日2006年5月17日 申請日期2004年5月13日 優(yōu)先權(quán)日2003年5月15日
發(fā)明者戴維·R·巴里弛, 伯比·巴塔卡里亞 申請人:思科技術(shù)公司