專利名稱:一種路由存儲方法及裝置的制作方法
技術領域:
本發明涉及網絡通信領域,特別涉及一種路由存儲方法及裝置。
背景技術:
數據通信設備轉發IP報文是數據通信設備的一個基本功能。對于分布式體系結構的路由器,一般由硬件轉發引擎完成IP報文的轉發。根據IP報文的目的IP地址查找路由表的方法很多,可以用TCAM(Ternary Content Addressable Memory,三態內容可尋址存儲器)的硬件查找,也可以用軟件算法查找。TCAM查找的一個最大的好處是不管表項的多少,查找時間基本固定,可以保證查找性能。但是TCAM器件價格比較昂貴,功耗非常大。軟件算法查找,僅使用DRAM(Dynamic Random Access Memory,動態隨機存取存儲器)內存或者一般的SRAM(Static Random Access Memory,靜態隨機存取存儲器)完成查找,價格非常低,具有成本優勢。Trie表是一種利用DRAM內存或者一般的SRAM樹表查找算法,并且采用最長前綴匹配的方法。
比較常見的路由器的應用是三層VPN(Virtual Private Network,虛擬專網)。路由器在實現三層VPN的功能時,一般在邊緣路由器給不同的私網創建不同的VPN路由表,路由查找的索引是目的IP地址加上VRF(VPN Routing Forwarding,VPN路由轉發)索引。一個VRF索引對應一個VPN,VPN內部可以分配私網的IP地址。不同的VPN內部分配的私網IP地址可以相同,但是在同一個邊緣路由器上,不同的VPN會對應不同的VRF索引。由于路由查找的索引是目的IP地址加上VRF索引,這樣就可以保證各個VPN內的報文查找VPN的私網路由時,不會出現查找錯誤路由表的情況。
對于不支持VPN特性的路由器,利用Trie表的方式進行IPV4的LPM(Longest Prefix Match,最長前綴匹配)查找。其方案如下IP地址的長度是32bit,把IP地址的32bit拆分為16-4-4-4-4的部分,把IP地址的高16bit拆分為8-4-4的部分。對于前綴長度大于或者等于16的路由,填入到16-4-4-4-4的路由查找表;對于前綴長度小于16的路由,填入到8-4-4的路由查找表。路由查找表的基本單元是Trie表,Trie表的結構如表1。
表1對于16-4-4-4-4的路由查找表,16對應IP地址的最高16bit,16bit對應于64K個第一級Trie表,稱為hi64k表,hi64k表是必須固定分配的。
對于8-4-4的路由查找表,8對應IP地址的最高8bit,8bit對應于256個第一級Trie表,稱為hi256表,hi256表是必須固定分配的。
對于16-4-4-4-4和8-4-4路由查找表中的4bit,對應一個Trie,每個Trie里面有16個Trie表,通過4bit索引。
Trie表在內存的分布如圖1所示,內存可以是DRAM,也可以是SRAM。
參見表2,以目的IP地址是0x59900000(十六進制的59對應十進制的89),前綴的掩碼是0xfff00000的路由為例,通過前綴的掩碼得到前綴長度是12,所以填入8-4-4的路由查找表。
表2對應于上表,對于目的IP地址是89.144.5.5的報文,先用目的IP地址的高8位89為索引查hi256的路由查找表,發現指向下一跳表的索引為0,說明沒有前綴89對應的路由,同時發現指向下一個Trie的索引有效,于是根據此索引得到對應Trie的地址,在Trie內根據IP地址的[23:20]位進行索引(對應89.144.5.5的[23:20]位是9),發現指向下一跳表的索引為一個有效的值,同時指向下一個Trie的索引無效,說明IP地址89.144.5.5在路由查找表可以查找得到的最長前綴的長度就是12,再根據從Trie表得到的指向下一跳表的索引去查和路由相關的下一跳表,最終得到報文的出接口信息。
現有技術的缺點是利用Trie表的方式進行IPV4的LPM查找的索引沒有VRF索引,沒有為VPN分配的路由表,不能支持VPN。
而現有技術中的VPN是應用TCAM表進行路由存儲與查找的,TCAM器件價格比較昂貴,功耗非常大。
發明內容
本發明為了解決現有技術中使用TCAM表進行私網路由查找費用高的問題,提供了一種路由存儲方法及裝置。所述技術方案如下本發明提供了一種路由存儲方法,所述方法包括以下步驟步驟A收到協議報文后,解析所述報文獲取路由信息,所述路由信息包括IP地址和前綴長度;步驟B將獲取的路由信息添加到Trie表中。
所述步驟B具體包括根據所述路由信息判斷所述IP地址是否為公網路由,如果是,將所述路由信息添加到公網對應的Trie表中;否則,將所述路由信息添加到私網對應的Trie表中。
所述IP地址是公網路由時,讀取IP地址的前綴長度,如果所述IP地址的前綴長度大于或等于16,將所述路由信息添加到公網路由的hi64k表中;如果所述IP地址的前綴長度小于16,將所述路由信息添加到hi256表中;或者所述IP地址是私網路由時,通過協議報文獲取私網路由的索引,根據所述路由信息判斷是否需要申請新的Trie表,如果需要,則申請Trie表,將所述路由信息添加到新申請的Trie表;否則直接添加到對應的Trie表中。
所述的將所述路由信息添加到私網對應的Trie表中按8-4-4-4-4-4-4或者4-4-4-4-4-4-4-4格式添加。
所述方法還包括步驟C需要刪除路由時,判斷是否是公網路由,如果是,在公網對應的Trie表中刪除該路由表項;否則,在私網對應的Trie表中刪除該路由表項;步驟D判斷刪除所述路由后的Trie表是否可以釋放,如果是,將所述Trie表進行回收。
本發明還提供了一種路由存儲裝置,所述裝置包括以下模塊路由管理模塊,用于收到協議報文后,解析報文獲取路由信息,所述路由信息包括IP地址和前綴長度;Trie表維護管理模塊,用于將獲取的路由信息添加到Trie表中。
所述路由管理模塊具體包括判斷單元,用于判斷IP地址是公網路由還是私網路由;申請Trie單元,用于向Trie表維護管理模塊申請一個新的Trie表,添加單元,用于把申請Trie表地址添加到路由查找表中;刪除單元,用于釋放Trie表并交給Trie表維護管理模塊。
所述Trie表維護管理模塊具體包括維護單元,用于維護和管理空閑的Trie表;分配單元,用于當需要增加新的路由項時,分配Trie表;回收單元,用于當刪除路由項時,對釋放的Trie表進行回收。
應用本發明提供的技術方案帶來的有益效果是通過所提供的路由存儲方法及裝置,可以不用TCAM表進行私網路由的存儲與查找,并且公網路由查找表和私網路由查找表共用動態存儲的Trie表,減少了對內存需求,節省了成本。
圖1是現有技術中Trie表在內存中的分布示意圖;圖2是本發明實施例1中提供的路由存儲方法流程圖;圖3是本發明實施例1中路由查找表添加路由后的示意圖;圖4是本發明實施例2中提供的路由查找流程圖;圖5是本發明實施例3中提供的路由存儲裝置示意圖。
具體實施例方式
下面結合附圖和具體實施例對本發明作進一步說明,但不作為對本發明的限定。
本發明的實施例通過在路由器上建立一個動態的Trie表,實現公網路由與VPN路由的查找。
對于分布式結構的路由器,每個接口板支持的VPN的個數是一定的,同時支持的VPN的路由數目也是有一定限制的,比如支持4K個VPN,所有的VPN一共支持100萬個路由。
公網路由器可以采用16-4-4-4-4和8-4-4的Trie表結構,其中16bit對應IP地址的最高16bit,先讀取IP地址的前綴長度,如果大于或等于16,則添加到公網路由的hi64k表中。如果小于16,則添加到公網路由的hi256表中。
VPN私網路由器可以采用8-4-4-4-4-4-4(不包括VPN Index)的Trie表結構,其中8bit對應IP地址的最高8bit,和公網的路由查找表一樣,8bit對應的第一級Trie表也稱為hi256表。給每個VPN分配一個獨立的hi256表,如果單板支持4K個VPN,則需要給VPN路由分配4K個hi256表。
實施例1參見圖2,一種路由存儲方法,該方法具體包括以下步驟步驟101當路由器收到協議報文后,解析協議報文中的內容獲取路由信息,該路由信息包括IP地址、前綴長度和路由類別。
步驟102根據所述路由信息中的路由類別(是公網路由還是私網路由)判斷獲取的路由是公網路由還是私網路由,如果是公網路由,執行步驟103;否則執行步驟104。
步驟103查找公網路由查找表,判斷是否需要申請新的Trie表,如果路由查找表里面沒有與IP地址相匹配的表項,則需要申請,執行步驟105;否則不需要申請,執行步驟106。
步驟104查找私網路由查找表,判斷是否需要申請新的Trie表,如果路由查找表里面沒有與IP地址相匹配的表項,則需要申請,執行步驟105;否則不需要申請,執行步驟106。
步驟105申請一個新的Trie表,將獲取的路由信息添加到Trie表中。
步驟106否則將路由信息直接添加到相應的Trie表中。
例如支持VPN的Trie表內存圖如表3所示。
固定分配的空間 動態分配的trie 表3固定分配的空間可以包括公網路由的hi64k表和hi256表,4k個私網路由的hi256表。
Trie是動態分配的,上表中VPN2因為沒有路由就沒有分配Trie。Trie的總個數是一定的,這個總數和路由器支持的最大路由規格相關。因為VPN的個數是一定的,同時hi256表只有256個Trie表,所以4k個私網路由的hi256表占用固定分配的空間比較小,對內存的消耗不大。
表4是VPN 1內部有IP地址是0x59900000,前綴的掩碼是0xfff00000的路由的一個例子。
表4在表4的基礎上,在VPN 1再增加三條路由,這三條路由分別是IP地址是0x59980000,前綴的掩碼是0xffff0000;IP地址是0x60600000,前綴的掩碼是0xfff0000;IP地址是0x60670000,前綴的掩碼是0xffff0000。為了增加這三條路由,需要再分配三個trie。具體添加過程如下因為在表4中已經有IP地址0x59900000的表項,當添加IP地址0x59980000,前綴的掩碼是0xffff0000時,申請一個Trie表(b),將當前Trie表(a)中偏移地址9對應的Next trie(下一個Trie表的地址)內添加新申請的Trie表的地址。在新申請的Trie表中偏移地址8對應的路由表項內添加該路由的Next hop information(下一跳信息,指路由對應的接口號)。
當添加IP地址0x60600000,前綴的掩碼是0xfff0000時,因為十六進制的60對應十進制的值是96,而VPN 1的hi256表的偏移地址96對應的Next trie表項是0,這時申請一個Trie表(即圖2中的(c)),并把該表地址填到VPN 1的hi256表的偏移地址96對應的Next trie表項中,同時在Trie表(c)的偏移地址6對應的Route(路由)項內填入Next hop information(下一跳信息);當添加IP地址0x60670000,前綴的掩碼是0xffff0000時,同添加IP地址0x59980000,前綴的掩碼是0xffff0000一樣,申請的Trie表為圖2中的(d),這里不再詳述。
8-4-4-4-4-4-4路由查找表索引中的4bit對應的Trie和公網路由查找表索引中的4bit對應的Trie共用動態分配的Trie,這些Trie表由Trie表維護管理模塊進行維護,即如果公網路由刪除(釋放)一個Trie表,當私網申請Trie表時,用公網路由刪除的那個Trie表進行添加,同理,當私網釋放一個Trie表時,公網添加時也可以用這個釋放的Trie表。具體維護過程如下路由管理模塊發現一條路由需要刪除時,先判斷是公網路由還是私網路由,根據判斷的結果在相應的路由查找表中進行查找刪除,刪除完畢后,判斷刪除這條路由后是否會釋放一個Trie表。如果會釋放一個Trie表就把這個Trie表交給Trie表維護管理模塊,由Trie表維護管理模塊完成Trie的回收。
以上描述的VPN私網路由,采用的是8-4-4-4-4-4-4的路由查找表格式,其中第一級索引是8bit,主要是在性能和占用內存之間權衡的。也可以采用其他路由查找表格式,例如4-4-4-4-4-4-4-4的路由查找表格式。
參見圖3,是路由查找表增加完上述三條路由后的結構示意圖。
實施例2參見圖4,是應用上述路由查找表進行路由查找的方法,該方法包括以下步驟步驟201收到報文后,讀取路由信息和路由表的控制信息。
步驟202判斷是否需要查私網路由,如果不需要,執行步驟203,否則執行步驟204。
步驟203查公網的路由查找表進行地址查找。
步驟204取VPN路由表的索引。
步驟205根據獲取的VPN路由表的索引查對應的Trie表。
實施例3參見圖5,一種路由存儲裝置,該裝置包括以下模塊路由管理模塊,用于收到協議報文后,解析報文獲取路由信息,該路由信息包括IP地址和前綴長度;Trie表維護管理模塊,用于將獲取的路由信息添加到Trie表中。
其中,路由管理模塊具體包括判斷單元,用于判斷IP地址是公網路由還是私網路由;申請Trie單元,用于向Trie表維護管理模塊申請一個新的Trie表,添加單元,用于把申請Trie表地址添加到路由查找表中;刪除單元,用于釋放Trie表并交給Trie表維護管理模塊。
Trie表維護管理模塊具體包括維護單元,用于維護和管理空閑的Trie表;分配單元,用于當需要增加新的路由項時,分配Trie表;回收單元,用于當刪除路由項時,對釋放的Trie表進行回收。
以上所述的實施例,只是本發明較優選的一種具體實施方式
,本領域的技術人員在本發明技術方案范圍內進行的通常變化和替換都應包含在本發明的保護范圍內。
權利要求
1.一種路由存儲方法,其特征在于,所述方法包括以下步驟步驟A收到協議報文后,解析所述報文獲取路由信息,所述路由信息包括IP地址和前綴長度;步驟B將獲取的路由信息添加到Trie表中。
2.如權利要求1所述的路由存儲方法,其特征在于,所述步驟B具體包括根據所述路由信息判斷所述IP地址是否為公網路由,如果是,將所述路由信息添加到公網對應的Trie表中;否則,將所述路由信息添加到私網對應的Trie表中。
3.如權利要求2所述的路由存儲方法,其特征在于,所述IP地址是公網路由時,讀取IP地址的前綴長度,如果所述IP地址的前綴長度大于或等于16,將所述路由信息添加到公網路由的hi64k表中;如果所述IP地址的前綴長度小于16,將所述路由信息添加到hi256表中;或者所述IP地址是私網路由時,通過協議報文獲取私網路由的索引,根據所述路由信息判斷是否需要申請新的Trie表,如果需要,則申請Trie表,將所述路由信息添加到新申請的Trie表;否則直接添加到對應的Trie表中。
4.如權利要求2所述的路由存儲方法,其特征在于,所述的將所述路由信息添加到私網對應的Trie表中按8-4-4-4-4-4-4或4-4-4-4-4-4-4-4格式添加。
5.如權利要求1所述的路由存儲方法,其特征在于,所述方法還包括步驟C需要刪除路由時,判斷是否是公網路由,如果是,在公網對應的Trie表中刪除該路由表項;否則,在私網對應的Trie表中刪除該路由表項;步驟D判斷刪除所述路由后的Trie表是否可以釋放,如果是,將所述Trie表進行回收。
6.一種路由存儲裝置,其特征在于,所述裝置包括以下模塊路由管理模塊,用于收到協議報文后,解析報文獲取路由信息,所述路由信息包括IP地址和前綴長度;Trie表維護管理模塊,用于將獲取的路由信息添加到Trie表中。
7.如權利要求6所述的路由存儲裝置,其特征在于,所述路由管理模塊具體包括判斷單元,用于判斷IP地址是公網路由還是私網路由;申請Trie單元,用于向Trie表維護管理模塊申請一個新的Trie表,添加單元,用于把申請Trie表地址添加到路由查找表中;刪除單元,用于釋放Trie表并交給Trie表維護管理模塊。
8.如權利要求6所述的路由存儲裝置,其特征在于,所述Trie表維護管理模塊具體包括維護單元,用于維護和管理空閑的Trie表;分配單元,用于當需要增加新的路由項時,分配Trie表;回收單元,用于當刪除路由項時,對釋放的Trie表進行回收。
全文摘要
本發明提供了一種路由存儲方法及裝置,屬于網絡通信領域。為了解決現有技術中私網路由使用TCAM表進行路由存儲與查找費用較高的問題,本發明提供了一種路由存儲方法,所述方法包括解析協議報文獲取路由信息,將所述路由信息添加到Trie表中的步驟。本發明還提供了一種路由存儲裝置,所述裝置包括路由管理模塊和Trie表維護管理模塊。采用本發明提供的技術方案可以不用TCAM表進行私網路由的存儲與查找,并且公網路由查找表和私網路由查找表共用動態存儲的Trie表,減少了對內存需求,節省了成本。
文檔編號G06F17/30GK1949749SQ20061014056
公開日2007年4月18日 申請日期2006年10月17日 優先權日2006年10月17日
發明者佟興, 龔鈞 申請人:華為數字技術有限公司