專利名稱:路由表項的存儲方法、查找方法、裝置及系統的制作方法
技術領域:
本發明涉及計算機領域,特別涉及一種路由表項的存儲方法、查找方法、裝置及系統。
背景技術:
在網絡數據傳輸過程中,路由器根據路由表項的查找結果進行數據的轉發。為了減少網絡設備的存儲,通常路由表項的直接查找結果不是轉發動作,而是查找結果的索引,根據索引進行線性表查找最終獲取轉發動作。隨著網絡的迅猛發展,路由表項的數量越來越大,位寬越來越長,種類也越來越多,對路由表項的存儲空間和查找速率提出了更高的要求。 現有技術中,通常使用基于二叉樹的路由表項的存儲、查找方法。將每個已知路由地址分解成一個下界(low point)地址和一個上界(high point)地址,按照“左大右小”的原則存入二叉樹,每個節點都存儲一個邊界地址。在查找的時候,將查詢地址(search key)從二叉樹的根節點開始比較,遍歷二叉樹,記錄最后一次向左走的節點的位置,獲得查找結果的索引,使用該索引可以得到相應的轉發動作。同時,當需要存儲和查找的路由表項的位寬大于存儲空間的位寬時,只能做硬件的改變,例如換一個更大位寬的存儲介質等。在實現本發明的過程中,發明人發現現有技術至少存在以下問題現有技術中路由地址需要分解為上界和下界兩個地址存儲,占用存儲空間大,查找速率不高。當需要對位寬大于當前存儲空間位寬的路由地址做路由表項存儲和查找時,存儲空間要做硬件改變以適應該網絡地址的位寬需要。
發明內容
為了解決現有技術的問題,本發明實施例提供了一種路由表項的存儲方法、查找方法、裝置及系統。所述技術方案如下一方面,提供了一種路由表項的存儲方法,所述方法包括將路由表項的每個路由地址按照預設長度劃分成至少兩個地址段;為每個路由地址的首地址段分配對應的地址后綴,并將所述每個路由地址的首地址段的地址后綴作為下一地址段的地址前綴;將所述每個路由地址的首地址段存儲至第一二叉樹的節點中,并存儲所述每個路由地址的首地址段對應的地址后綴;如果所述下一地址段為尾地址段,則將所述每個路由地址的尾地址段對應的地址前綴及尾地址段一并存儲至第二二叉樹的節點中,并存儲所述每個路由地址對應的查找結果的索引,所述每個路由地址對應的查找結果的索引與所述每個路由地址的尾地址段的地址前綴及尾地址段相對應,且每個查找結果的索引對應一個查找結果。可選地,所述將路由表項的每個路由地址按照預設長度劃分成至少兩個地址段之后,還包括
為路由表項的每個路由地址中的每個類型的地址段分配對應的類型標識,以根據路由表項的每個路由地址的每個地址段所對應的類型標識確定每個地址段的類型;其中,所述路由表項的每個路由地址的地址段的類型至少包括首地址段及尾地址段。可選地,所述將所述每個路由地址的首地址段存儲至第一二叉樹的節點中,具體包括將所述每個路由地址的首地址段按照由大到小的順序依次存儲至所述第一二叉樹的節點中。可選地,所述將所述每個路由地址的尾地址段對應的地址前綴及尾地址段一并存儲至第二二叉樹的節點中,具體包括將所述每個路由地址的尾地址段對應的地址前綴及尾地址段按照由大到小的順·序依次存儲至所述第二二叉樹的節點中。可選地,所述路由表項的每個路由地址的地址段的類型還包括中間地址段,所述將所述每個路由地址的首地址段的地址后綴作為下一地址段的地址前綴之后,還包括如果所述下一地址段為中間地址段,則為所述每個路由地址的中間地址段分配對應的地址后綴,并將所述地址后綴作為所述中間地址段的下一地址段的地址前綴;將所述每個路由地址的中間地址段對應的地址前綴及中間地址段一并存儲至第三二叉樹的節點中,并存儲所述每個路由地址的中間地址段對應的地址后綴。可選地,所述將所述每個路由地址的中間地址段對應的地址前綴及中間地址段一并存儲至第三二叉樹的節點中,具體包括將所述每個路由地址的中間地址段對應的地址前綴及中間地址段按照由大到小的順序依次存儲至所述第三二叉樹的節點中。可選地,如果所述每個路由地址有多個中間地址段,則將所述每個路由地址的每個中間地址段對應的地址前綴及中間地址段分別存儲至不同的第三二叉樹的節點中,所述第三二叉樹的個數與所述每個路由地址的中間地址段的個數相同。可選地,所述為每個路由地址的首地址段分配對應的地址后綴,具體包括如果至少兩個路由地址的首地址段相同,則為所述至少兩個路由地址的首地址段分配相同的地址后綴。可選地,所述為所述每個路由地址的中間地址段分配對應的地址后綴,具體包括如果至少兩個路由地址的首地址段與中間地址段均相同,則為所述至少兩個路由地址的中間地址段分配相同的地址后綴。可選地,刪除所述路由表項中的至少一個路由地址時,所述方法還包括從第二二叉樹中刪除被刪除的路由地址的尾地址段的地址前綴及尾地址段;如果被刪除的路由地址的首地址段與所述路由表項中的其他路由地址的首地址段相同,則在所述第一二叉樹中保留所述被刪除的路由地址的首地址段及其地址后綴;且如果所述被刪除的路由地址具有中間地址段,所述被刪除的路由地址的中間地址段與所述路由表項中的其他路由地址的中間地址段相同,則在所述第三二叉樹中保留所述被刪除的路由地址的中間地址段的地址前綴及中間地址段和地址后綴,如果所述被刪除的路由地址的中間地址段與所述路由表項中的其他路由地址的中間地址段不相同,從所述第三二叉樹中刪除所述被刪除的路由地址的中間地址段的地址前綴及中間地址段和地址后綴;如果被刪除的路由地址的首地址段與所述路由表項中的其他路由地址的首地址段不同,從所述第一二叉樹中刪除所述被刪除的路由地址的首地址段及其地址后綴,且如果所述被刪除的路由地址具有中間地址段,從所述第三二叉樹中刪除所述被刪除的路由地址的中間地址段的地址前綴及中間地址段和地址后綴。另一方面,還提供了一種路由表項的查找方法,所述方法包括將查詢地址按照預設長度劃分成至少兩個地址段;根據所述查詢地址的首地址段在第一二叉樹中查找與其相匹配的首地址段,所述第一二叉樹的節點中存儲了路由表項的每個路由地址的首地址段;如果在所述第一二叉樹中查找到與所述查詢地址的首地址段相匹配的首地址段, 且所述查詢地址的首地址段的下一地址段為所述查詢地址的尾地址段,則獲取查找到的首地址段對應的地址后綴,并將獲取到的地址后綴作為所述查詢地址的尾地址段的地址前
三雙;根據所述查詢地址的尾地址段的地址前綴及尾地址段在第二二叉樹中查找與其相匹配的尾地址段的地址前綴及尾地址段,所述第二二叉樹的節點中存儲了路由表項的每個路由地址的尾地址段的地址前綴及尾地址段;如果在所述第二二叉樹中查找到與所述查詢地址的尾地址段的地址前綴及尾地址段相匹配的尾地址段的地址前綴及尾地址段,則獲取查找到的尾地址段的地址前綴及尾地址段對應的查找結果的索引,并根據所述查找結果的索引得到查找結果。可選地,所述將查詢地址按照預設長度劃分成至少兩個地址段之后,還包括為查詢地址中的每個類型的地址段分配對應的類型標識,以根據查詢地址的每個地址段所對應的類型標識確定所述查詢地址的每個地址段的類型;其中,所述查詢地址的地址段的類型至少包括首地址段及尾地址段。可選地,所述根據所述查詢地址的首地址段在第一二叉樹中查找與其相匹配的首地址段,具體包括從所述第一二叉樹的根節點開始,將所述查詢地址的首地址段與所述第一二叉樹中存儲的路由表項的每個路由地址的首地址段進行逐層比較;如果所述查詢地址的首地址段大于等于當前比較的路由地址的首地址段,則將所述查詢地址的首地址段與當前比較的路由地址的首地址段左側的路由地址的首地址段進行比較;如果所述查詢地址的首地址段小于當前比較的路由地址的首地址段,則將所述查詢地址的首地址段與當前比較的路由地址的首地址段右側的路由地址的首地址段進行比較;依此類推,直至得出與所述查詢地址的首地址段相匹配的路由地址的首地址段;如果參與比較的路由地址的首地址段中不存在與所述查詢地址的首地址段相匹配的首地址段,則查找結束。可選地,所述根據所述查詢地址的尾地址段的地址前綴及尾地址段在第二二叉樹中查找與其相匹配的尾地址段的地址前綴及尾地址段,具體包括
從所述第二二叉樹的根節點開始,將所述查詢地址的尾地址段的地址前綴及尾地址段與所述第二二叉樹中存儲的路由表項的每個路由地址的尾地址段的地址前綴及尾地址段進行逐層比較;如果所述查詢地址的尾地址段的地址前綴及尾地址段大于等于當前比較的路由地址的尾地址段的地址前綴及尾地址段,則將所述查詢地址的尾地址段的地址前綴及尾地址段與當前比較的路由地址的尾地址段的地址前綴及尾地址段左側的路由地址的尾地址段的地址前綴及尾地址段進行比較;如果所述查詢地址的尾地址段的地址前綴及尾地址段小于當前比較的路由地址的尾地址段的地址前綴及尾地址段,則將所述查詢地址的尾地址段的地址前綴及尾地址段與當前比較的路由地址的尾地址段的地址前綴及尾地址段右側的路由地址的尾地址段的地址前綴及尾地址段進行比較;依此類推,直至得出與所述查詢地址的尾地址段的地址前綴及尾地址段相匹配的 路由地址的尾地址段的地址前綴及尾地址段;如果參與比較的路由地址的尾地址段的地址前綴及尾地址段中不存在與所述查詢地址的尾地址段的地址前綴及尾地址段相匹配的尾地址段的地址前綴及尾地址段,則查找結束。可選地,所述查詢地址的地址段的類型還包括中間地址段,所述根據所述查詢地址的首地址段在第一二叉樹中查找與其相匹配的首地址段之后,還包括如果在所述第一二叉樹中查找到與所述查詢地址的首地址段相匹配的首地址段,且所述查詢地址的首地址段的下一地址段為所述查詢地址的中間地址段,則獲取查找到的首地址段對應的地址后綴,并將獲取到的地址后綴作為所述查詢地址的中間地址段的地址iu綴;根據所述查詢地址的中間地址段的地址前綴及中間地址段在第三二叉樹中查找與其相匹配的中間地址段的地址前綴及中間地址段,所述第三二叉樹的節點中存儲了路由表項的每個路由地址的中間地址段的地址前綴及中間地址段;如果在所述第三二叉樹中查找到與所述查詢地址的中間地址段的地址前綴及中間地址段相匹配的中間地址段的地址前綴及中間地址段,則獲取查找到的中間地址段對應的地址后綴,將獲取到的地址后綴作為所述查詢地址的尾地址段的地址前綴,并繼續執行根據所述查詢地址的尾地址段的地址前綴及尾地址段在第二二叉樹中查找與其相匹配的尾地址段的地址前綴及尾地址段。可選地,所述根據所述查詢地址的中間地址段的地址前綴及中間地址段在第三二叉樹中查找與其相匹配的中間地址段的地址前綴及中間地址段,具體包括從所述第三二叉樹的根節點開始,將所述查詢地址的中間地址段的地址前綴及中間地址段與所述第三二叉樹中存儲的路由表項的每個路由地址的中間地址段的地址前綴及中間地址段進行逐層比較;如果所述查詢地址的中間地址段的地址前綴及中間地址段大于等于當前比較的路由地址的中間地址段的地址前綴及中間地址段,則將所述查詢地址的中間地址段的地址前綴及中間地址段與當前比較的路由地址的中間地址段的地址前綴及中間地址段左側的路由地址的中間地址段的地址前綴及中間地址段進行比較;
如果所述查詢地址的中間地址段的地址前綴及中間地址段小于當前比較的路由地址的中間地址段的地址前綴及中間地址段,則將所述查詢地址的中間地址段的地址前綴及中間地址段與當前比較的路由地址的中間地址段的地址前綴及中間地址段右側的路由地址的中間地址段的地址前綴及中間地址段進行比較;依此類推,直至得出與所述查詢地址的中間地址段的地址前綴及中間地址段相匹配的路由地址的中間地址段的地址前綴及中間地址段;如果參與比較的路由地址的中間地址段的地址前綴及中間地址段中不存在與所述查詢地址的中間地址段的地址前綴及中間地址段相匹配的中間地址段的地址前綴及中間地址段,則查找結束。可選地,如果所述查詢地址有多個中間地址段,則根據所述查詢地址的每個中間地址段的地址前綴及中間地址段在對應的第三二叉樹中查找與其相匹配的中間地址段的地址前綴及中間地址段。
另一方面,還提供了一種路由表項的存儲裝置,所述裝置包括劃分模塊,用于將路由表項的每個路由地址按照預設長度劃分成至少兩個地址段;分配模塊,用于為所述劃分模塊劃分得到的每個路由地址的首地址段分配對應的地址后綴,并將所述每個路由地址的首地址段的地址后綴作為下一地址段的地址前綴;第一存儲模塊,用于將所述劃分模塊劃分得到的每個路由地址的首地址段存儲至第一二叉樹的節點中,并存儲所述分配模塊分配的每個路由地址的首地址段對應的地址后
三雙;第二存儲模塊,用于如果所述每個路由地址的首地址段的下一地址段為尾地址段,則將所述每個路由地址的尾地址段對應的地址前綴及尾地址段一并存儲至第二二叉樹的節點中,并存儲所述每個路由地址對應的查找結果的索引,所述每個路由地址對應的查找結果的索引與所述每個路由地址的尾地址段的地址前綴及尾地址段相對應,且每個查找結果的索引對應一個查找結果。可選地,所述分配模塊,還用于為路由表項的每個路由地址中的每個類型的地址段分配對應的類型標識,以根據路由表項的每個路由地址的每個地址段所對應的類型標識確定每個地址段的類型;其中,所述路由表項的每個路由地址的地址段的類型至少包括首地址段及尾地址段。可選地,所述第一存儲模塊,具體用于將所述每個路由地址的首地址段按照由大到小的順序依次存儲至所述第一二叉樹的節點中。可選地,所述第二存儲模塊,具體用于將所述每個路由地址的尾地址段對應的地址前綴及尾地址段按照由大到小的順序依次存儲至所述第二二叉樹的節點中。可選地,所述劃分模塊劃分的路由表項的每個路由地址的地址段的類型還包括中間地址段;所述分配模塊,還用于如果所述下一地址段為中間地址段,則為所述每個路由地址的中間地址段分配對應的地址后綴,并將所述地址后綴作為所述中間地址段的下一地址段的地址前綴;
所述裝置還包括第三存儲模塊,用于將所述每個路由地址的中間地址段對應的地址前綴及中間地址段一并存儲至第三二叉樹的節點中,并存儲所述每個路由地址的中間地址段對應的地址后綴。可選地,所述第三存儲模塊,具體用于將所述每個路由地址的中間地址段對應的地址前綴及中間地址段按照由大到小的順序依次存儲至所述第三二叉樹的節點中。可選地,所述第三存儲模塊,用于如果所述每個路由地址有多個中間地址段,則將所述每個路由地址的每個中間地址段對應的地址前綴及中間地址段分別存儲至不同的第三二叉樹的節點中,所述中間段地址段存儲子單元的個數與所述每個路由地址的中間地址段的個數相同。可選地,所述分配模塊,用于如果至少兩個路由地址的首地址段相同,則為所述至·少兩個路由地址的首地址段分配相同的地址后綴。可選地,所述分配模塊,用于如果至少兩個路由地址的首地址段與中間地址段均相同,則為所述至少兩個路由地址的中間地址段分配相同的地址后綴。可選地,所述裝置還包括刪除模塊,用于從所述第二二叉樹中刪除被刪除的路由地址的尾地址段的地址前綴及尾地址段;如果被刪除的路由地址的首地址段與所述路由表項中的其他路由地址的首地址段相同,則在所述第一二叉樹中保留所述被刪除的路由地址的首地址段及其地址后綴;且如果所述被刪除的路由地址具有中間地址段,所述被刪除的路由地址的中間地址段與所述路由表項中的其他路由地址的中間地址段相同,則在所述第三二叉樹中保留所述被刪除的路由地址的中間地址段的地址前綴及中間地址段和地址后綴,如果所述被刪除的路由地址的中間地址段與所述路由表項中的其他路由地址的中間地址段不相同,從所述第三二叉樹中刪除所述被刪除的路由地址的中間地址段的地址前綴及中間地址段和地址后綴;如果被刪除的路由地址的首地址段與所述路由表項中的其他路由地址的首地址段不同,從所述第一二叉樹中刪除所述被刪除的路由地址的首地址段及其地址后綴,且如果所述被刪除的路由地址具有中間地址段,從所述第三二叉樹中刪除所述被刪除的路由地址的中間地址段的地址前綴及中間地址段和地址后綴。另一方面,還提供了一種路由表項的查找裝置,所述裝置包括劃分模塊,用于將查詢地址按照預設長度劃分成至少兩個地址段;第一查找模塊,用于根據所述劃分模塊劃分得到的查詢地址的首地址段在第一二叉樹中查找與其相匹配的首地址段,所述第一二叉樹的節點中存儲了路由表項的每個路由地址的首地址段;第一獲取模塊,用于如果所述第一查找模塊在所述第一二叉樹中查找到與所述查詢地址的首地址段相匹配的首地址段,則獲取查找到的首地址段對應的地址后綴,并將獲取到的地址后綴作為所述查詢地址的下一地址段的地址前綴;第二查找模塊,用于如果所述查詢地址的首地址段的下一地址段為尾地址段,則根據所述查詢地址的尾地址段的地址前綴及尾地址段在第二二叉樹中查找與其相匹配的尾地址段的地址前綴及尾地址段,所述第二二叉樹的節點中存儲了路由表項的每個路由地址的尾地址段的地址前綴及尾地址段;第二獲取模塊,用于如果所述第二查找模塊在所述第二二叉樹中查找到與所述查詢地址的尾地址段的地址前綴及尾地址段相匹配的尾地址段的地址前綴及尾地址段,則獲取查找到的尾地址段的地址前綴及尾地址段對應的查找結果的索引,并根據所述查找結果的索引得到查找結果。可選地,所述裝置還包括分配模塊,用于為所述劃分模塊劃分得到的查詢地址中的每個類型的地址段分配對應的類型標識,以根據查詢地址的每個地址段所對應的類型標識確定所述查詢地址的每個地址段的類型;其中,所述查詢地址的地址段的類型至少包括首地址段及尾地址段。 可選地,所述第一查找模塊,具體用于從所述第一二叉樹的根節點開始,將所述查詢地址的首地址段與所述第一二叉樹中存儲的路由表項的每個路由地址的首地址段進行逐層比較;如果所述查詢地址的首地址段大于等于當前比較的路由地址的首地址段,則將所述查詢地址的首地址段與當前比較的路由地址的首地址段左側的路由地址的首地址段進行比較;如果所述查詢地址的首地址段小于當前比較的路由地址的首地址段,則將所述查詢地址的首地址段與當前比較的路由地址的首地址段右側的路由地址的首地址段進行比較;依此類推,直至得出與所述查詢地址的首地址段相匹配的路由地址的首地址段;如果參與比較的路由地址的首地址段中不存在與所述查詢地址的首地址段相匹配的首地址段,則查找結束。可選地,所述第二查找模塊,具體用于從所述第二二叉樹的根節點開始,將所述查詢地址的尾地址段的地址前綴及尾地址段與所述第二二叉樹中存儲的路由表項的每個路由地址的尾地址段的地址前綴及尾地址段進行逐層比較;如果所述查詢地址的尾地址段的地址前綴及尾地址段大于等于當前比較的路由地址的尾地址段的地址前綴及尾地址段,則將所述查詢地址的尾地址段的地址前綴及尾地址段與當前比較的路由地址的尾地址段的地址前綴及尾地址段左側的路由地址的尾地址段的地址前綴及尾地址段進行比較;如果所述查詢地址的尾地址段的地址前綴及尾地址段小于當前比較的路由地址的尾地址段的地址前綴及尾地址段,則將所述查詢地址的尾地址段的地址前綴及尾地址段與當前比較的路由地址的尾地址段的地址前綴及尾地址段右側的路由地址的尾地址段的地址前綴及尾地址段進行比較;依此類推,直至得出與所述查詢地址的尾地址段的地址前綴及尾地址段相匹配的路由地址的尾地址段的地址前綴及尾地址段;如果參與比較的路由地址的尾地址段的地址前綴及尾地址段中不存在與所述查詢地址的尾地址段的地址前綴及尾地址段相匹配的尾地址段的地址前綴及尾地址段,則查找結束。可選地,所述劃分模塊劃分得到的查詢地址的地址段的類型還包括中間地址段;
所述裝置還包括第三獲取模塊,用于如果在所述第一二叉樹中查找到與所述查詢地址的首地址段相匹配的首地址段,且所述查詢地址的首地址段的下一地址段為所述查詢地址的中間地址段,則獲取查找到的首地址段對應的地址后綴,并將獲取到的地址后綴作為所述查詢地址的中間地址段的地址前綴;第三查找模塊,用于根據所述查詢地址的中間地址段的地址前綴及中間地址段在第三二叉樹中查找與其相匹配的中間地址段的地址前綴及中間地址段,所述第三二叉樹的節點中存儲了路由表項的每個路由地址的中間地址段的地址前綴及中間地址段;第四獲取模塊,用于如果在所述第三二叉樹中查找到與所述查詢地址的中間地址段的地址前綴及中間地址段相匹配的中間地址段的地址前綴及中間地址段,則獲取查找到的中間地址段對應的地址后綴,將獲取到的地址后綴作為所述查詢地址的尾地址段的地址前綴,并繼續執行根據所述查詢地址的尾地址段的地址前綴及尾地址段在第二二叉樹中查找與其相匹配的尾地址段的地址前綴及尾地址段。 可選地,所述第三查找模塊,具體用于從所述第三二叉樹的根節點開始,將所述查詢地址的中間地址段的地址前綴及中間地址段與所述第三二叉樹中存儲的路由表項的每個路由地址的中間地址段的地址前綴及中間地址段進行逐層比較;如果所述查詢地址的中間地址段的地址前綴及中間地址段大于等于當前比較的路由地址的中間地址段的地址前綴及中間地址段,則將所述查詢地址的中間地址段的地址前綴及中間地址段與當前比較的路由地址的中間地址段的地址前綴及中間地址段左側的路由地址的中間地址段的地址前綴及中間地址段進行比較;如果所述查詢地址的中間地址段的地址前綴及中間地址段小于當前比較的路由地址的中間地址段的地址前綴及中間地址段,則將所述查詢地址的中間地址段的地址前綴及中間地址段與當前比較的路由地址的中間地址段的地址前綴及中間地址段右側的路由地址的中間地址段的地址前綴及中間地址段進行比較;依此類推,直至得出與所述查詢地址的中間地址段的地址前綴及中間地址段相匹配的路由地址的中間地址段的地址前綴及中間地址段;如果參與比較的路由地址的中間地址段的地址前綴及中間地址段中不存在與所述查詢地址的中間地址段的地址前綴及中間地址段相匹配的中間地址段的地址前綴及中間地址段,則查找結束。可選地,所述第三查找模塊,用于如果所述查詢地址有多個中間地址段,則根據所述查詢地址的每個中間地址段的地址前綴及中間地址段在對應的第三二叉樹中查找與其相匹配的中間地址段的地址前綴及中間地址段。另一方面,還提供了一種路由表項的查找系統,所述系統包括路由表項的存儲裝置和路由表項的查找裝置;其中,所述路由表項的存儲裝置如上所述的路由表項的存儲裝置;所述路由表項的查找裝置如上所述的路由表項的查找裝置。另一方面,還提供了一種路由表項的存儲方法,所述方法包括將待存儲的路由地址按照預設長度劃分成首地址段和尾地址段;為所述首地址段分配地址后綴,為所述尾地址段分配地址前綴,所述地址前綴和地址后綴間符合預設的對應關系;將所述首地址段存儲至第一二叉樹的節點中,并記錄所述首地址段在所述第一二叉樹中的存儲地址與所述地址前綴的對應關系;將所述地址前綴和所述尾地址段存儲至第二二叉樹中,并記錄與所述地址前綴和所述尾地址段對應的索引結果。所述的路由表項的存儲方法,還包括所述地址前綴和所述地址后綴相同。所述的路由表項的存儲方法,所述將所述地址前綴和所述尾地址段存儲至第二二叉樹中包括將所述地址前綴和所述尾地址段存儲至所述第二二叉樹的同一個節點中。另一方面,還提供了一種路由地址的查找方法,所述方法包括·獲得待查找的路由地址,并將所述路由地址按照預設長度劃分成首地址段和尾地址段;在第一二叉樹中查找所述首地址段,并獲得與所述首地址段對應的地址后綴;根據預設的對應關系,根據所述地址后綴獲得地址前綴;根據所述地址前綴和所述尾地址段查找第二二叉樹,并根據查找結果獲得路由信
肩、O本發明實施例提供的技術方案帶來的有益效果是通過將路由地址劃分為至少兩個地址段,并將每個地址段存儲至對應的二叉樹中,相比現有技術用兩個二叉樹節點存儲一個路由地址的兩個邊界值的方式而言,其占用的存儲空間更少;且當存儲的路由地址的位寬大于存儲空間的位寬時,可將路由地址劃分為至少兩段進行存儲,相比現有技術需改變硬件存儲空間的方式而言,能夠更靈活地適用于多種位寬的路由地址的存儲;另外,通過分段查找的方式獲得查找結果,可提高查找速率。
為了更清楚地說明本發明實施例中的技術方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。圖I為本發明實施例一提供的一種路由表項的存儲方法流程圖;圖2為本發明實施例一提供的一種路由表項的查找方法流程圖;圖3為本發明實施例二提供的一種路由表項的存儲方法流程圖;圖4為本發明實施例二提供的一種路由表項的存儲二叉樹結構圖;圖5為本發明實施例二提供的另一種路由表項的存儲二叉樹結構圖;圖6為本發明實施例三提供的一種路由表項的查找方法流程圖;圖7為本發明實施例二提供的一種存儲和查找路由表項的硬件不意圖;圖8為本發明實施例四提供的一種路由表項的存儲裝置的結構示意圖;圖9為本發明實施例四提供的另一種路由表項的存儲裝置的結構示意圖;圖10為本發明實施例四提供的另一種路由表項的存儲裝置的結構示意圖11為本發明實施例五提供的一種路由表項的查找裝置的結構示意圖;圖12為本發明實施例五提供的另一種路由表項的查找裝置的結構示意圖;圖13為本發明實施例五提供的另一種路由表項的查找裝置的結構示意圖;圖14為本發明實施例六提供的一種路由表項的查找系統的結構示意圖。
具體實施例方式為使本發明的目的、技術方案和優點更加清楚,下面將結合附圖對本發明實施方式作進一步地詳細描述。實施例一本實施例提供了一種路由表項的存儲方法,該方法通過分段存儲的方式,節省存·儲路由地址的二叉樹的存儲空間,并實現路由表項的靈活存儲。參見圖1,本實施例提供的路由表項的存儲方法流程具體如下101 :將路由表項的每個路由地址按照預設長度劃分成至少兩個地址段;102 :為每個路由地址的首地址段分配對應的地址后綴,并將每個路由地址的首地址段的地址后綴作為下一地址段的地址前綴;103:將每個路由地址的首地址段存儲至第一二叉樹的節點中,并存儲每個路由地址的首地址段對應的地址后綴;104 :如果下一地址段為尾地址段,則將每個路由地址的尾地址段對應的地址前綴及尾地址段一并存儲至第二二叉樹的節點中,并存儲每個路由地址對應的查找結果的索弓丨,每個路由地址對應的查找結果的索引與每個路由地址的尾地址段的地址前綴及尾地址段相對應,且每個查找結果的索引對應一個查找結果。本實施例還提供了一種路由表項的查找方法,針對上述分段存儲路由表項的方式,本實施例采取了分段查找的方法,從而提高路由表項的查找速率。參見圖2,本實施例提供的路由表項的查找方法流程具體如下201 :將查詢地址按照預設長度劃分成至少兩個地址段;202 :根據查詢地址的首地址段在第一二叉樹中查找與其相匹配的首地址段,第一二叉樹的節點中存儲了路由表項的每個路由地址的首地址段;203 :如果在第一二叉樹中查找到與查詢地址的首地址段相匹配的首地址段,且查詢地址的首地址段的下一地址段為查詢地址的尾地址段,則獲取查找到的首地址段對應的地址后綴,并將獲取到的地址后綴作為查詢地址的尾地址段的地址前綴;204:根據查詢地址的尾地址段的地址前綴及尾地址段在第二二叉樹中查找與其相匹配的尾地址段的地址前綴及尾地址段,第二二叉樹的節點中存儲了路由表項的每個路由地址的尾地址段的地址前綴及尾地址段;205 :如果在第二二叉樹中查找到與查詢地址的尾地址段的地址前綴及尾地址段相匹配的尾地址段的地址前綴及尾地址段,則獲取查找到的尾地址段的地址前綴及尾地址段對應的查找結果的索引,并根據查找結果的索引得到查找結果。本實施例提供的方法,通過將路由地址劃分為至少兩個地址段,并將每個地址段存儲至對應的二叉樹中,相比現有技術用兩個二叉樹節點存儲一個路由地址的兩個邊界值的方式而言,其占用的存儲空間更少;且當存儲的路由地址的位寬大于存儲空間的位寬時,可將路由地址劃分為至少兩段進行存儲,相比現有技術需改變硬件存儲空間的方式而言,能夠更靈活地適用于多種位寬的路由地址的存儲;另外,通過分段查找的方式獲得查找結果,可提高查找速率。實施例二本實施例提供了一種路由表項的存儲方法,結合上述實施例一提供的路由表項的存儲內容,為了便于說明,本實施例以存儲路由表項中16比特的路由地址A至I為例,對本實施例提供的路由表項的存儲方法進行舉例說明。其中,路由地址A至I具體如下路由地址A :1001001001000011路由地址B :1001001010010111路由地址C :1001001110001010 路由地址D :1001001111011101路由地址E :1011011010101100路由地址F :1011011010101111路由地址G :1101011110001100路由地址H :1101101110011010路由地址I :1110010110111101參見圖3,本實施例提供的路由表項的存儲方法在存儲上述路由地址A至I時,其方法流程具體如下301 :將路由表項的每個路由地址按照預設長度劃分成至少兩個地址段。針對該步驟,既可以將預設長度設置為路由地址的一半長度,即將每個路由地址劃分成長度相等的地址段,也可以不同的地址段分別設置不同的預設長度,即將每個路由地址劃分成長度不等的地址段,本實施例不對預設長度的具體大小進行限定。在將路由表項的每個路由地址按照預設長度劃分成至少兩個地址段時,本實施例不對劃分的地址段的個數進行限定。為了便于說明,如果僅劃分成兩個地址段,本實施例將劃分的地址段依次命名為首地址段和尾地址段,如果劃分兩個以上的地址段,則除了首地址段和尾地址段外,本實施例將首地址段與尾地址段之間的地址段均命名為中間地址段,其中,中間地址段的個數為一至多個。302 :為路由表項的每個路由地址中的每個類型的地址段分配對應的類型標識,以根據路由表項的每個路由地址中的每個地址段所對應的類型標識確定每個地址段的類型。其中,如果上述步驟301將每個路由地址劃分成兩個地址段,則路由表項的每個路由地址的地址段的類型包括首地址段及尾地址段,為每個類型的地址段分配對應的類型標識時,例如,可以為首地址段分配類型標識00,為尾地址段分配類型標識11,除此之外,還可以分配其他標識,本實施例不對具體的類型標識進行限定,通過該類型標識能夠清楚每個地址段的類型即可。如果上述步驟301將每個路由地址劃分成兩個以上的地址段,則路由表項的每個路由地址的地址段的類型除了包括首地址段及尾地址段外,地址段的類型還包括中間地址段。本實施例同樣不對為中間地址段分配的類型標識進行限定,保證根據該地址段的類型標識能夠確定該地址段的類型即可。303 :為每個路由地址的首地址段分配對應的地址后綴,并將每個路由地址的首地址段的地址后綴作為下一地址段的地址前綴。針對該步驟,之所以為每個路由地址的首地址段分配對應的地址后綴,并將每個路由地址的首地址段的地址后綴作為下一地址段的地址前綴,是為了在后續查找路由表項的過程中,能夠根據前一地址段的地址后綴查找到具有與該地址后綴相同的地址前綴的下一地址段,因而此處首地址段的地址后綴與下一地址段的地址前綴間符合預設的對應關系。對于分配的具體地址后綴,本實施例不作具體限定。為了節省存儲空間,在為每個路由地址的首地址段分配對應的地址后綴時,如果至少兩個路由地址的首地址段相同,則為至少兩個路由地址的首地址段分配相同的地址后綴。如果上述步驟301將路由表項的每個路由地址劃分成兩個地址段,即首地址段和尾地址段,則該步驟303為每個路由地址的首地址段分配對應的地址后綴后,每個路由地址的首地址段的地址后綴即作為其尾地址段的地址前綴,以將上述16比特的路由地址A至I分別劃分成10比特的首地址段high_A至high_I和6比特的尾地址段low_A至low_I,并為首地址段high_A至high_I分配4比特的地址后綴next_A至next_I為例,則每個路 由地址對應的信息具體如下所示high_A :1001001001 next_A :0010 Iow_A :000011high_B :1001001010 next_B :0100 low_B :010111high_C :1001001110 next_C :0110 low_C :001010high_D :1001001111 next_D :1000 low_D :011101high_E :1011011010 next_E :1010 low_E :101100high_F :1011011010 next_F :1010 low_F :101111high_G :1101011110 next_G :1100 low_G :001100high_H :1101101110 next_H :1101 low_H :011010high_I :1110010110 next_I :1110 low_I :111101具體存儲結構如圖4所示,基于上述信息可以看出,路由地址E和F的首地址段相同,因而為其分配了相同的地址后綴1010。在存儲路由表項的各個路由地址時,上述next_A至next_I可作為路由地址A至I的尾地址段low_A至low_I對應的地址前綴,由于前一地址段的地址后綴與后一地址段的地址前綴相同,因此,地址前綴和地址后綴可看作是兩個地址段之間的關聯標識,使后續實施例能夠以此查找到一個完整的路由地址。如果上述步驟301將路由表項的每個路由地址劃分成兩個以上的地址段,即包括首地址段和尾地址段外,還包括中間地址段,則該步驟303為每個路由地址的首地址段分配對應的地址后綴后,每個路由地址的首地址段的地址后綴即作為下一個中間地址段的地址前綴,且該步驟303還需為每個路由地址的中間地址段分配對應的地址后綴,并將其地址后綴作為該中間地址段的下一地址段的地址前綴。具體地,如果每個路由地址僅包括一個中間地址段,則該中間地址段的下一地址段即為尾地址段;如果每個路由地址包括兩個及以上的中間地址段,則該中間地址段的下一地址段仍為中間地址段,最后一個中間地址段的下一地址段為尾地址段。且為了節省存儲空間,在為每個路由地址的首地址段及中間地址段分配對應的地址后綴時,如果至少兩個路由地址的首地址段相同,則為至少兩個路由地址的首地址段分配相同的地址后綴;如果至少兩個路由地址的首地址段與中間地址段均相同,則為至少兩個路由地址的中間地址段分配相同的地址后綴。
以將上述16比特的路由地址A至I分別劃分成8比特的首地址段
IA比特的中間地址段mid_A至mid_I和4比特的尾地址段Low_A至Low_I,并為首地址段High_A至High_I分配4比特的地址后綴Nextl_A至Nextl_I,為中間地址段mid_A至mid_I分配4比特的地址后綴Next2_A至Next2_I為例,則每個路由地址的信息具體如下High_A:10010010 Next1_A:0100 mid_A:0100 Next2_A:0010 Low_A:0011High_B:10010010 Nextl_B:0100 mid_B:1001 Next2_B:0100 Low_B:0111High_C:10010011 Nextl_C:1000 mid_C:1000 Next2_C:0110 Low_C:1010High_D:10010011 Next1_D:1000 mid_D:1101 Next2_D:1000 Low_D:1101High_E:10110110 Nextl_E:1010 mid_E:1010 Next2_E:1010 Low_E:1100 High_F:10110110 Nextl_F:1010 mid_F:1010 Next2_F:1010 Low_F:llllHigh_G:11010111 Next1_G:1100 mid_G:1000 Next2_G:1100 Low_G:1100High_H:11011011 Next1_H:1101 mid_H:1001 Next2_H:1101 Low_H:1010High_I:11100101 Nextl_I:1110 mid_I:1011 Next2_I:1110 Low_I:1101具體存儲結構如圖5所示,基于上述信息可以看出,路由地址A和B的首地址段相同,因而為其分配了相同的地址后綴0100 ;路由地址C和D的首地址段相同,因而為其分配了相同的地址后綴1000 ;路由地址E和F的首地址段相同,因而為其分配了相同的地址后綴1010。由于路由地址E和F的首地址段相同且中間地址段也相同,因而為路由地址E和F的中間地址段分配了相同的地址后綴1010。在存儲路由表項的各個路由地址時,上述Nextl_A至Nextl_I可作為路由地址A至I的中間地址段mid_A至mid_I對應的地址前綴,中間地址段mid_A至mid_I對應的地址后綴可作為路由地址A至I的尾地址段Low_A至Low_I對應的地址前綴,由于前一地址段的地址后綴與后一地址段的地址前綴相同,因此,地址前綴和地址后綴同樣可看作是兩個地址段之間的關聯標識,以此查找到一個完整的路由地址。304:將每個路由地址的首地址段存儲至第一二叉樹的節點中,并存儲每個路由地址的首地址段對應的地址后綴。針對該步驟,存儲每個路由地址的首地址段時,具體存儲方式包括但不限于將所有路由地址的首地址段按照由大到小的順序從左往右依次存儲到第一二叉樹的節點中。以存儲每個路由地址的首地址段的第一二叉樹的結構如圖4所示為例,首地址段high_H比首地址段high_I小,在第一二叉樹的節點中,位于high_I的節點的右邊節點上;首地址段high_G比首地址段high_H小,在第一二叉樹的節點中,位于high_H的節點的右邊節點上;首地址段high_F比首地址段high_G*,在第一二叉樹的節點中,位于high_G的節點的右邊節點上;首地址段high_E與首地址段high_F相同,因此這兩個首地址段位于相同的第一二叉樹節點中;以此類推,直到把所有的路由地址都存儲到第一二叉樹節點中。存儲每個路由地址的首地址段對應的地址后綴時,本實施例不對具體存儲方式進行限定,具體實施時,可在第一二叉樹的最后一層存儲所有首地址段對應的地址后綴,其中首地址段high_E和首地址段high_F相同,存儲在相同的第一二叉樹節點中,對應相同的地址后綴。按照上述過程將路由地址的首地址段及其地址后綴進行存儲之后,如果下一地址段為中間地址段,則執行步驟305,如果下一地址段為尾地址段,則直接執行步驟306。
305 :將每個路由地址的中間地址段對應的地址前綴及中間地址段一并存儲至第三二叉樹的節點中,并存儲每個路由地址的中間地址段對應的地址后綴。針對該步驟,將每個路由地址的中間地址段的地址前綴及中間地址段一并存儲至第三二叉樹的節點中時,具體存儲方式包括但不限于將每個路由地址的中間地址段對應的地址前綴及中間地址段按照由大到小的順序從左往右依次存儲至第三二叉樹的節點中。以上述步驟303中每個路由地址被劃分成兩個以上的地址段后,為路由地址A至I的首地址段及中間地址段分配地址后綴,并將其作為下一地址段的地址前綴為例,將中間地址段的地址前綴及中間地址段存入第三二叉樹的節點中的存儲方法與存儲首地址段到第一二叉樹中的方法相同,此處不再一一舉例。對于中間地址段對應的地址后綴的存儲方式,本實施例同樣不作具體限定,具體實施時,可將每個路由地址的中間地址段的地址前綴及中間地址段按照從大到小的順序從左到右地存儲入第三二叉樹中之后,在第三二叉樹的最后一層存儲每個路由地址的中間地址段對應的地址后綴。 需要說明的是,如果每個路由地址有多個中間地址段,則將每個路由地址的每個中間地址段對應的地址前綴及中間地址段分別存儲至不同的第三二叉樹的節點中,也就是說,第三二叉樹的個數與每個路由地址的中間地址段的個數相同。通過上述過程將每個路由地址的中間地址段的地址前綴及中間地址段及地址后綴存儲至第三二叉樹后,通過執行步驟306,實現每個路由地址的尾地址段的存儲。306 :將每個路由地址的尾地址段對應的地址前綴及尾地址段一并存儲至第二二叉樹的節點中,并存儲每個路由地址對應的查找結果的索引,每個路由地址對應的查找結果的索引與每個路由地址的尾地址段的地址前綴及尾地址段相對應,且每個查找結果的索引對應一個查找結果。針對該步驟,將每個路由地址的尾地址段對應的地址前綴及尾地址段一并存儲至第二二叉樹的節點中時,具體存儲方式包括但不限于將所有路由地址的尾地址段對應的地址前綴及尾地址段按照由大到小的順序從左往右依次存儲到第二二叉樹的節點中。以上述步驟303中每個路由地址被劃分成兩個地址段后,為路由地址A至I的首地址段分配地址后綴,并將其作為尾地址段的地址前綴為例,路由地址A的尾地址段low_A對應的地址前綴為首地址段high_A的地址后綴,即next_A,因此需要將[next_A, low_A]存儲入第二二叉樹的節點中,以此類推。將尾地址段的地址前綴及尾地址段一并存儲至第二二叉樹的存儲方法與存儲首地址段到第一二叉樹中的方法相同,此處不再一一舉例。關于尾地址段的地址后綴的存儲方式,本實施例不作具體限定,具體實施時,可將每個路由地址的尾地址段的地址前綴及尾地址段按照從大到小的順序從左到右地存儲入第二二叉樹中之后,在第二二叉樹的最后一層存儲每個路由地址對應的查找結果的索引,如圖4所示,本實施例以查找結果的索引用編號I至15來代替為例,根據查找結果的索引即可獲得路由地址對應的查找結果。無論路由表項的每個路由地址被劃分成多少個地址段,均可按照上述方式將其進行存儲。進一步地,本實施例提供的方法在按照上述方式存儲路由表項的每個路由地址后,針對刪除路由表項中的至少一個路由地址的情況,本實施例提供的方法還包括
從第二二叉樹中刪除被刪除的路由地址的尾地址段的地址前綴及尾地址段;如果被刪除的路由地址的首地址段與路由表項中的其他路由地址的首地址段相同,則在第一二叉樹中保留被刪除的路由地址的首地址段及其地址后綴;且如果被刪除的路由地址的中間地址段與路由表項中的其他路由地址的中間地址段相同,則在第三二叉樹中保留被刪除的路由地址的中間地址段的地址前綴及中間地址段和地址后綴,如果被刪除的路由地址的中間地址段與路由表項中的其他路由地址的中間地址段不相同,從第三二叉樹中刪除被刪除的路由地址的中間地址段的地址前綴及中間地址段和地址后綴;如果被刪除的路由地址的首地址段與路由表項中的其他路由地址的首地址段不同,從第一二叉樹中刪除被刪除的路由地址的首地址段及其地址后綴,且如果被刪除的路由地址具有中間地址段,且從第三二叉樹中刪除被刪除的路由地址的中間地址段的地址前綴及中間地址段和地址后綴。為了便于理解,以路由表項的每個路由地址被劃分為兩個地址段,按照上述方式刪除已存儲的路由表項中的路由地址A為例,則具體刪除步驟包括在第二二叉樹中刪除 路由地址A的尾地址段low_A ;路由地址的首地址段high_A與路由表項中其他的路由地址B至I的首地址段都不相同,則在第一二叉樹中刪除路由地址A的首地址段high_A及其地址后綴next_A。以路由表項的每個路由地址被劃分為三個地址段,按照上述方式刪除已存儲的路由表項中的路由地址A為例,則具體刪除步驟包括在第二二叉樹中刪除路由地址A的尾地址段Low_A ;路由地址的首地址段High_A與路由表中的路由地址B的首地址段High_B相同,則在第一二叉樹中保留路由地址A的首地址段High_A及其地址后綴Nextl_A ;路由地址的中間地址段mid_A與路由表項中其他的路由地址B至I的中間地址段mid_B至mid_I都不相同,則在第三二叉樹中刪除路由地址A的中間地址段mid_A及其地址后綴Next2_A。以路由表項的每個路由地址被劃分為三個地址段,按照上述方式刪除已存儲的路由表項中的路由地址G為例,則具體刪除步驟包括在第二二叉樹中刪除路由地址G的尾地址段Low_G ;路由地址的首地址段High_G與路由表中的其他路由地址的首地址段都不相同,則在第一二叉樹中刪除路由地址G的首地址段High_G及其地址后綴Nextl_G ;在第三二叉樹中刪除路由地址G的中間地址段mid_G及其地址后綴Next2_G。本實施例提供的方法,通過將路由地址劃分為至少兩個地址段,并將每個地址段存儲至對應的二叉樹中,相比現有技術用兩個二叉樹節點存儲一個路由地址的兩個邊界值的方式而言,其占用的存儲空間更少;且當存儲的路由地址的位寬大于存儲空間的位寬時,可將路由地址劃分為至少兩段進行存儲,相比現有技術需改變硬件存儲空間的方式而言,能夠更靈活地適用于多種位寬的路由地址的存儲。實施例三本實施例提供了一種路由表項的查找方法,結合上述實施例一提供的路由表項的查找方法,以在上述實施例二中存儲的16比特的路由地址的路由表項中查找查詢地址a,b,c,d對應的查找結果為例,對本實施例提供的路由表項的查找方法進行舉例說明。其中,查詢地址a, b, c, d具體如下查詢地址a :1001001110001011查詢地址b :1011011010101100
查詢地址c :1011011010111100查詢地址d :1100101110011010參見圖6,本實施例提供的路由表項的查找方法在查找上述查詢地址a至d對應的查找結果時,其方法流程具體如下601 :將查詢地址按照預設長度劃分成至少兩個地址段。其中,為了使查詢地址劃分的地址段與存儲的路由地址的地址段之間具有可比性,查詢地址的長度應與上述實施例二中存儲的路由地址的長度一致,該步驟在將查詢地址劃分成地址段時,其選取的預設長度的大小可依據上述實施例二中劃分路由地址的地址段時選取的預設長度而定。針對上述實施例二中將路由地址劃分成10比特的首地址段及6比特的尾地址段的情況,該步驟可將查詢地址同樣劃分為10比特的首地址段high_a至high_d和6比特的·尾地址段10 _3至low_b,則該步驟劃分后的查詢地址的信息具體如下high_a :1001001110 low_a :001010high_b :1011011010 low_b :101100high_c :1011011010 low_c :111100high_d :1100101110 low_d :011010針對上述實施例二中將上述16比特的路由地址分別劃分成8比特的首地址段,4比特的中間地址段和4比特的尾地址段的情況,則該步驟劃分后的查詢地址的信息具體如下High_a :10010011 mid_a :1000 Low_a :1010High_b :10110110 mid_b :1010 Low_b :1100High_c :10110110 mid_c :1011 Low_c :1100High_d :11001011 mid_d :1001 Low_d :1010無論將查詢地址劃分成兩個地址段,還是兩個以上的地址段,為了區分查詢地址的不同地址段,本實施例提供的方法在將查詢地址按照預設長度劃分成至少兩個地址段之后,還包括為查詢地址中的每個類型的地址段分配對應的類型標識,以根據查詢地址的每個地址段所對應的類型標識確定查詢地址的每個地址段的類型;其中,如果上述過程將每個查詢地址劃分成兩個地址段,則每個查詢地址的地址段的類型包括首地址段及尾地址段;如果上述過程將每個查詢地址劃分成兩個以上的地址段,則每個查詢地址的地址段的類型除了包括首地址段及尾地址段外,地址段的類型還包括中間地址段。本實施例不對為每種類型的地址段分配的類型標識進行限定,保證根據該地址段的類型標識能夠確定該查詢地址的地址段的類型即可。602 :根據查詢地址的首地址段在第一二叉樹中查找與其相匹配的首地址段,第一二叉樹的節點中存儲了路由表項的每個路由地址的首地址段,如果查找到匹配的首地址段,且查詢地址的首地址段的下一地址段為查詢地址的中間地址段,則執行步驟603,如果查找到匹配的首地址段,且查詢地址的首地址段的下一地址段為查詢地址的尾地址段,則執行步驟606,如果未查找到匹配的首地址段,則流程結束。針對該步驟,根據查詢地址的首地址段在第一二叉樹中查找與其相匹配的首地址段時,具體查找方式包括但不限于從第一二叉樹的根節點開始,將查詢地址的首地址段與二叉樹中存儲的路由表項的每個路由地址的首地址段進行逐層比較;如果查詢地址的首地址段大于等于當前比較的路由地址的首地址段,則將查詢地址的首地址段與當前比較的路由地址的首地址段左側的路由地址的首地址段進行比較;如果查詢地址的首地址段小于當前比較的路由地址的首地址段,則將查詢地址的首地址段與當前比較的路由地址的首地址段右側的路由地址的首地址段進行比較;依此類推,直至得出與查詢地址的首地址段相匹配的路由地址的首地址段;如果參與比較的路由地址的首地址段中不存在與查詢地址的首地址段相匹配的首地址段,則查找流程結束。 以將上述查詢地址a的首地址段high_a在圖4所示的第一二叉樹中查找匹配的首地址段為例,從根節點開始,將查詢地址a的首地址段high_a與路由地址D的首地址段high_D比較,比較結果為high_a小于high_D,則將high_a與high_D右側的路由地址B的首地址段high_B比較,比較結果為high_a大于high_B,則將1^811_&與111811_13左側的路由地址C的首地址段high_C比較,比較結果為匹配,則將路由地址C的首地址段high_C作為與查詢地址a的首地址段high_a相匹配的首地址段。以將上述查詢地址b的首地址段high_b在圖4所示的第一二叉樹中查找匹配的首地址段為例,從根節點開始,將查詢地址b的首地址段high_b與路由地址D的首地址段high_D比較,比較結果為high_b大于high_D,則將high_b與high_D左側的路由地址G的首地址段high_G比較,比較結果為high_b小于high_G,則將high_b與high_G右側的路由地址E的首地址段high_E比較,比較結果為匹配,則將路由地址E的首地址段high_E作為與查詢地址b的首地址段high_b相匹配的首地址段。查詢地址c的首地址段high_c與查詢地址b的首地址段high_b相同,則查詢結果也相同。由于上述查詢地址a, b, c的首地址段high_a, high_b, high_c在圖4所示的第一二叉樹中查找到匹配的首地址段,而查詢地址a,b,c的首地址段的下一地址段為查詢地址a,b, c的尾地址段,因此,直接執行步驟606。以將上述查詢地址d的首地址段high_d在圖4所示的第一二叉樹中查找匹配的首地址段為例,從根節點開始,將查詢地址d的首地址段high_d與路由地址D的首地址段high_D比較,比較結果為high_d大于high_D,則將high_d與high_D左側的路由地址G的首地址段high_G比較,比較結果為high_d小于high_G,則將1^811_(1與111811_6右側的路由地址E的首地址段high_E比較,比較結果為high_d大于high_E,因此查找結果為不匹配,也就是說,查詢地址d的首地址段high_d與圖4所示的第一二叉樹中參與比較的路由地址的首地址段都不匹配,因此說明在圖4所示的二叉樹存儲的路由表項中不存在查詢地址d對應的查找結果,因此,結束查找流程,輸出結果為未命中。如果查詢地址被劃分為三個或三個以上的地址段時,以將上述查詢地址a的首地址段High_a在圖5所示的第一二叉樹中查找匹配的首地址段為例,具體查找方式與上述相同,查找結果為與路由地址C的首地址段High_C匹配。由于上述查詢地址a的首地址段High_a在圖5所示的第一二叉樹中查找到匹配的首地址段,而查詢地址a的首地址段的下一地址段為查詢地址a的中間地址段,因此,直接執行步驟603。
查詢地址b至d的首地址段把811_13至把811_(1的查找方式也與上述查找方式相同,在此不再一一論述,查找結果分別為,查詢地址b和查詢地址c具有相同的首地址段High_b和High_c,與之相匹配的是路由地址E的首地址段High_E。由于上述查詢地址b和查詢地址c的首地址段High_b和High_c在圖5所示的第一二叉樹中查找到匹配的首地址段,而查詢地址b和查詢地址c的首地址段的下一地址段為查詢地址b和查詢地址c的中間地址段,因此,直接執行步驟603。查詢地址d的首地址段High_d在圖5所示的第一二叉樹中沒有與之相匹配的首地址段,因此說明在圖5所示的二叉樹存儲的路由表項中不存在查詢地址d對應的查找結果,因此,結束查找流程,輸出結果為未命中。603 :獲取查找到的首地址段對應的地址后綴,并將獲取到的地址后綴作為查詢地址的中間地址段的地址前綴。針對該步驟,由于上述實施例二在存儲路由地址的首地址段對應的地址后綴時,將其存儲在了第一二叉樹的最后一層,因此,上述步驟602在第一二叉樹中查找到與查詢地址的首地址段相匹配的首地址段后,通過該查找到的首地址段與其地址后綴的對應關系,即可從第一二叉樹最后一層的對應位置獲取到該查找到的首地址段對應的地址后綴,·并將獲取到的地址后綴作為查詢地址的中間地址段的地址前綴。也就是說,由于查找到的首地址段對應的地址后綴與中間地址段的地址前綴間符合預設的對應關系,因而在獲取到首地址段對應的地址后綴后,基于預設的對應關系,可根據查找到的首地址段對應的地址后綴獲取查詢地址的中間地址段的地址前綴。以在圖5所示的第一二叉樹中獲取查找到的與查詢地址a的首地址段High_a相匹配的首地址段High_C的地址后綴為例,High_C對應的地址后綴為Nextl_C,因此Nextl_C可作為查詢地址a的中間地址段mid_a的地址前綴.查詢地址b的首地址段High_b和查詢地址c的首地址段High_c匹配的首地址段是High_E,High_E對應的地址后綴為Nextl_E,因此Next 1_E可作為查詢地址b的中間地址段mid_b的地址前綴以及查詢地址c的中間地址段mid_c的地址前綴。604:根據查詢地址的中間地址段的地址前綴及中間地址段在第三二叉樹中查找與其相匹配的中間地址段的地址前綴及中間地址段,第三二叉樹的節點中存儲了路由表項的每個路由地址的中間地址段的地址前綴及中間地址段。根據查詢地址的中間地址段的地址前綴及中間地址段在第三二叉樹中查找與其相匹配的中間地址段的地址前綴及中間地址段,具體包括從第三二叉樹的根節點開始,將查詢地址的中間地址段的地址前綴及中間地址段與第三二叉樹中存儲的路由表項的每個路由地址的中間地址段的地址前綴及中間地址段進行逐層比較;如果查詢地址的中間地址段的地址前綴及中間地址段大于等于當前比較的路由地址的中間地址段的地址前綴及中間地址段,則將查詢地址的中間地址段的地址前綴及中間地址段與當前比較的路由地址的中間地址段的地址前綴及中間地址段左側的路由地址的中間地址段的地址前綴及中間地址段進行比較; 如果查詢地址的中間地址段的地址前綴及中間地址段小于當前比較的路由地址的中間地址段的地址前綴及中間地址段,則將查詢地址的中間地址段的地址前綴及中間地址段與當前比較的路由地址的中間地址段的地址前綴及中間地址段右側的路由地址的中間地址段的地址前綴及中間地址段進行比較;依此類推,直至得出與查詢地址的中間地址段的地址前綴及中間地址段相匹配的路由地址的中間地址段的地址前綴及中間地址段;如果參與比較的路由地址的中間地址段的地址前綴及中間地址段中不存在與查詢地址的中間地址段的地址前綴及中間地址段相匹配的中間地址段的地址前綴及中間地址段,則查找結束。以在圖5所示的第三二叉樹中查找與查詢地址a的中間地址段的地址前綴Next 1_C及中間地址段mid_a相匹配的中間地址段的地址前綴及中間地址段為例,從根節點開始,將查詢地址a的中間地址段的地址前綴Nextl_C及中間地址段mid_a,[Nextl_C, mid_a],與路由地址D的[Nextl_D, mid_D]比較,比較結果為[Nextl_C, mid_a]小于[Nextl_D, mid_D];則將[Nextl_C, mid_a]與右側節點[Nextl_B, mid_B]比較,比較結果為[Nextl_C, mid_a]大于[Nextl_B, mid_B];則將[Nextl_B, mid_B]與左側節點[Nextl_C, mid_C]比較,比較結果為[Nextl_C, mid_a]與[Nextl_C, mid_C]匹配。 以在圖5所示的第三二叉樹中查找與查詢地址b的中間地址段的地址前綴Nextl_E及中間地址段mid_b相匹配的中間地址段的地址前綴及中間地址段為例,具體查找方法與上述相同,不再贅述,查找結果為查詢地址b的中間地址段的地址前綴Next 1_E及中間地址段mid_b與第三二叉樹中的[Nextl_E, mid_E]相匹配。以在圖5所示的第三二叉樹中查找與查詢地址c的中間地址段的地址前綴Next 1_E及中間地址段mid_c相匹配的中間地址段的地址前綴及中間地址段為例,具體查找方法與上述相同,不再贅述,查找結果為查詢地址c的中間地址段的地址前綴Next 1_E及中間地址段mid_c在第三二叉樹中沒有與之相匹配的中間地址段的地址前綴及中間地址段,因此說明在圖5所示的二叉樹存儲的路由表項中不存在查詢地址c對應的查找結果,因此,結束查找流程,輸出結果為未命中。需要說明的是,如果查詢地址有多個中間地址段,則根據查詢地址的每個中間地址段的地址前綴及中間地址段在每個第三二叉樹中查找與其相匹配的中間地址段的地址前綴及中間地址段。605 :獲取查找到的中間地址段對應的地址后綴,并將獲取到的地址后綴作為查詢地址的尾地址段的地址前綴。針對該步驟,由于上述實施例二在存儲路由地址的中間地址段對應的地址后綴時,將其存儲在了第三二叉樹的最后一層,因此,上述步驟604在第三二叉樹中查找到與查詢地址的中間地址段的地址前綴及中間地址段相匹配的中間地址段的地址前綴及中間地址段后,通過該查找到的中間地址段與其地址后綴的對應關系,即可從第三二叉樹最后一層的對應位置獲取到該查找到的中間地址段對應的地址后綴,并將獲取到的地址后綴作為查詢地址的尾地址段的地址前綴。也就是說,由于查找到的首地址段對應的地址后綴與尾地址段的地址前綴間符合預設的對應關系,因而在獲取到首地址段對應的地址后綴后,基于預設的對應關系,可根據查找到的首地址段對應的地址后綴獲取查詢地址的尾地址段的地址前綴。特別的,如果查詢地址具有多個中間地址段,當中間地址段的下一地址段為中間地址段時,繼續執行步驟603和步驟604,其中步驟603中需要獲取查找到的前一個中間地址段對應的地址后綴,并將獲取到的地址后綴作為查詢地址的后一個中間地址段的地址前三雙。以在圖5所示的第三二叉樹中查找到的與查詢地址a的中間地址段的地址前綴Nextl_C及中間地址段mid_C匹配的中間地址段對應的地址前綴及中間地址段為例,與查詢地址a的[Nextl_C,mid_a]匹配的是中間地址段[Nextl_C,mid_C],對應的地址后綴為Next2_C,因此Next2_C可作為查詢地址a的尾地址段Low_a的地址前綴。以在圖5所示的第三二叉樹中查找到的與查詢地址b的中間地址段的地址前綴Nextl_E及中間地址段mid_E匹配的中間地址段對應的地址前綴及中間地址段為例,與查詢地址b的[Nextl_E,mid_b]匹配的是中間地址段,[Nextl_E,mid_E],對應的地址后綴為Next2_E,因此Next2_E可作為查詢地址b的尾地址段Low_b的地址前綴。606:根據查詢地址的尾地址段的地址前綴及尾地址段在第二二叉樹中查找與其相匹配的尾地址段的地址前綴及尾地址段,第二二叉樹的節點中存儲了路由表項的每個路 由地址的尾地址段的地址前綴及尾地址段,如果查找到匹配的尾地址段的地址前綴及尾地址段,則執行步驟607,否則流程結束。針對該步驟,根據查詢地址的尾地址段的地址前綴及尾地址段在第二二叉樹中查找與其相匹配的尾地址段的地址前綴及尾地址段時,具體查找方式包括但不限于從第二二叉樹的根節點開始,將查詢地址的尾地址段的地址前綴及尾地址段與第二二叉樹中存儲的路由表項的每個路由地址的尾地址段的地址前綴及尾地址段進行逐層比較;如果查詢地址的尾地址段的地址前綴及尾地址段大于等于當前比較的路由地址的尾地址段的地址前綴及尾地址段,則將查詢地址的尾地址段的地址前綴及尾地址段與當前比較的路由地址的尾地址段的地址前綴及尾地址段左側的路由地址的尾地址段的地址前綴及尾地址段進行比較;如果查詢地址的尾地址段的地址前綴及尾地址段小于當前比較的路由地址的尾地址段的地址前綴及尾地址段,則將查詢地址的尾地址段的地址前綴及尾地址段與當前比較的路由地址的尾地址段的地址前綴及尾地址段右側的路由地址的尾地址段的地址前綴及尾地址段進行比較;依此類推,直至得出與查詢地址的尾地址段的地址前綴及尾地址段相匹配的路由地址的尾地址段的地址前綴及尾地址段;如果參與比較的路由地址的尾地址段的地址前綴及尾地址段中不存在與查詢地址的尾地址段的地址前綴及尾地址段相匹配的尾地址段的地址前綴及尾地址段,則查找流程結束。為了便于理解,以查詢地址被分為兩個地址段,根據查詢地址a的尾地址段的地址前綴next_C及尾地址段low_a在圖4所示的第二二叉樹中查找與其匹配的尾地址段的地址前綴及尾地址段為例,從根節點開始,將查詢地址a的[next_C, low_a]與路由地址E的[next_E, low_E],比較結果為[next_C, low_a]小于[next_E, low_E],則將[next_C, low_a]與右側節點[next_C,low_C]比較,比較結果為匹配,則執行步驟607。將查詢地址c的尾地址段的地址前綴next_E及尾地址段low_c在圖4的第二二叉樹中進行查找與其匹配的尾地址段的地址前綴及尾地址段為例,從根節點開始,將查詢地址c的[next_E, low_c]與路由地址E [next_E, low_E]比較,比較結果為[next_E, low_c]大于[next_E, low_E],則將[next_E, low_c]與左側節點[next_G, low_G]比較,比較結果為[next_E, low_c]小于[next_G, low_G],則將[next_E, low_c]與右側節點[next_F, low_F]比較,比較結果為[next_E, low_c]大于[next_F, low_F],因此查找結果為不匹配,說明在存儲的路由表項中不存在查詢地址c,查找流程結束。如果查詢地址被分為三個地址段,以根據查詢地址a的尾地址段的地址前綴Next2_C及尾地址段Low_a在圖5所示的第二二叉樹中查找與其匹配的尾地址段的地址前綴及尾地址段為例,從根節點開始,將查詢地址a的[Next2_C,Low_a]與路由地址E的[Next2_E, Low_E]比較,比較結果為[Next2_C, Low_a]C 小于[Next2_E, Low_E];則將[Next2_C, Low_a]與右側節點[Next2_C,Low_C]比較,比較結果為匹配,則執行步驟607。607 :獲取查找到的尾地址段的地址前綴及尾地址段對應的查找結果的索引,并根據查找結果的索引得到查找結果,流程結束。具體地,由于上述實施例二在存儲路由地址的尾地址段時,除了將路由地址的尾 地址段的地址前綴及尾地址段一并存儲在第二二叉樹的節點中之外,還在第二二叉樹的最后一層存儲了該路由地址對應的查找結果的索引,因此,上述步驟606在第二二叉樹中查找到與查詢地址的尾地址段的地址前綴及尾地址段相匹配的尾地址段的地址前綴及尾地址段后,通過該查找到的尾地址段的地址前綴及尾地址段與查找結果的索引之間的對應關系,即可從第二二叉樹最后一層的對應位置獲取到該查找到的尾地址段所在的路由地址對應的查找結果的索引,并以此獲取到查找結果。以獲取查詢地址a的尾地址段的地址前綴next_C及尾地址段low_a對應的查找結果為例,與尾地址段的地址前綴next_C及尾地址段low_a匹配的是路由地址C的尾地址段地址前綴next_C及尾地址段Low_C,其對應的查找結果索引是索引編號4,根據查找結果的索引編號4即可得到查詢地址a對應的查找結果。在如圖7所示的硬件系統中,控制界面701,用于實現路由表項的存儲和刪除的界面操作,控制界面701通過CPU (Central Processing Unit,中央處理單元)接口 705與存儲查找引擎704連接,所述存儲查找引擎可以是FPGA (Field-Programmable Gate Array,現場可編程門陣列),還可以是ASIC(Application_Specific Integrated Circuit,專用集成電路),存儲查找引擎704具體的存儲操作方法和本發明實施例二的存儲方法原理相同;外接存儲器702,用于存儲控制界面701輸入的路由地址,通過CPU接口與存儲查找引擎連接;查詢界面703,用于查詢地址的輸入和返回結果的界面操作,查詢界面703也通過CPU接口 705與存儲查找引擎連接;二叉樹運算模塊706,在路由表項存儲時用于將每個路由地址分別存入相應的二叉樹中,在路由表項查找時用于查詢地址和存儲的路由地址的匹配,獲取匹配結果,將結果返回到查詢界面703。本實施例提供的方法,通過按路由表項的路由地址的地址段劃分方式將查詢地址劃分成地址段,并根據查詢地址的地址段在存儲了各種類型的地址段的二叉樹中分別查找匹配的地址段,進而根據匹配的地址段獲得查找結果,與現有技術相比,可提高查找速率。實施例四本實施例提供了一種路由表項的存儲裝置,該裝置用于執行上述實施例一或實施例二提供的路由表項的存儲方法。參見圖8,該裝置包括
劃分模塊801,用于將路由表項的每個路由地址按照預設長度劃分成至少兩個地址段。分配模塊802,用于為劃分模塊801劃分得到的每個路由地址的首地址段分配對應的地址后綴,并將每個路由地址的首地址段的地址后綴作為下一地址段的地址前綴。第一存儲模塊803,用于將劃分模塊801劃分得到的每個路由地址的首地址段存儲至第一二叉樹的節點中,并存儲分配模塊802分配的每個路由地址的首地址段對應的地
址后綴。第二存儲模塊804,用于如果每個路由地址的首地址段的下一地址段為尾地址段,則將每個路由地址的尾地址段對應的地址前綴及尾地址段一并存儲至第二二叉樹的節點中,并存儲每個路由地址對應的查找結果的索引,每個路由地址對應的查找結果的索引與每個路由地址的尾地址段的地址前綴及尾地址段相對應,且每個查找結果的索引對應一個
查找結果。·進一步地,分配模塊802,還用于為路由表項的每個路由地址中的每個類型的地址段分配對應的類型標識,以根據路由表項的每個路由地址的每個地址段所對應的類型標識確定每個地址段的類型;其中,路由表項的每個路由地址的地址段的類型至少包括首地址段及尾地址段。其中,第一存儲模塊803,具體用于將每個路由地址的首地址段按照由大到小的順序依次存儲至第一二叉樹的節點中。第二存儲模塊804,具體用于將每個路由地址的尾地址段對應的地址前綴及尾地址段按照由大到小的順序依次存儲至第二二叉樹的節點中。進一步地,劃分模塊801劃分的路由表項的每個路由地址的地址段的類型還包括中間地址段;分配模塊802,還用于如果下一地址段為中間地址段,則為每個路由地址的中間地址段分配對應的地址后綴,并將地址后綴作為中間地址段的下一地址段的地址前綴。參見圖9,該裝置還包括第三存儲模塊805,用于將每個路由地址的中間地址段對應的地址前綴及中間地址段一并存儲至第三二叉樹的節點中,并存儲每個路由地址的中間地址段對應的地址后具體地,第三存儲模塊805,具體用于將每個路由地址的中間地址段對應的地址前綴及中間地址段按照由大到小的順序依次存儲至第三二叉樹的節點中。進一步地,第三存儲模塊805,用于如果每個路由地址有多個中間地址段,則將每個路由地址的每個中間地址段對應的地址前綴及中間地址段分別存儲至不同的第三二叉樹的節點中,中間段地址段存儲子單元的個數與每個路由地址的中間地址段的個數相同。進一步地,分配模塊802,用于如果至少兩個路由地址的首地址段相同,則為至少兩個路由地址的首地址段分配相同的地址后綴。進一步地,分配模塊802,用于如果至少兩個路由地址的首地址段與中間地址段均相同,則為至少兩個路由地址的中間地址段分配相同的地址后綴。參見圖10,裝置還包括刪除模塊806,用于從第二二叉樹中刪除被刪除的路由地址的尾地址段的地址前綴及尾地址段;如果被刪除的路由地址的首地址段與路由表項中的其他路由地址的首地址段相同,則在第一二叉樹中保留被刪除的路由地址的首地址段及其地址后綴;且如果被刪除的路由地址的中間地址段與路由表項中的其他路由地址的中間地址段相同,則在第三二叉樹中保留被刪除的路由地址的中間地址段的地址前綴及中間地址段和地址后綴,如果被刪除的路由地址的中間地址段與路由表項中的其他路由地址的中間地址段不相同,從第三二叉樹中刪除被刪除的路由地址的中間地址段的地址前綴及中間地址段和地址后綴;如果被刪除的路由地址的首地址段與路由表項中的其他路由地址的首地址段不同,從第一二叉樹中刪除被刪除的路由地址的首地址段及其地址后綴,且如果被刪除的路由地址具有中間地址段,從第三二叉樹中刪除被刪除的路由地址的中間地址段的地址前綴及中間地址段和地址后綴。本實施例提供的存儲裝置,通過將路由地址劃分為至少兩個地址段,并將每個地址段存儲至對應的二叉樹中,相比現有技術用兩個二叉樹節點存儲一個路由地址的兩個邊 界值的方式而言,其占用的存儲空間更少;且當存儲的路由地址的位寬大于存儲空間的位寬時,可將路由地址劃分為至少兩段進行存儲,相比現有技術需改變硬件存儲空間的方式而言,能夠更靈活地適用于多種位寬的路由地址的存儲。實施例五本實施例提供了一種路由表項的查找裝置,該裝置用于執行上述實施例一或實施例三提供的路由表項的查找方法。參見圖11,該裝置包括劃分模塊1101,用于將查詢地址按照預設長度劃分成至少兩個地址段。第一查找模塊1102,用于根據劃分模塊1101劃分得到的查詢地址的首地址段在第一二叉樹中查找與其相匹配的首地址段,第一二叉樹的節點中存儲了路由表項的每個路由地址的首地址段。第一獲取模塊1103,用于如果第一查找模塊1102在第一二叉樹中查找到與查詢地址的首地址段相匹配的首地址段,則獲取查找到的首地址段對應的地址后綴,并將獲取到的地址后綴作為查詢地址的下一地址段的地址前綴。第二查找模塊1104,用于如果查詢地址的首地址段的下一地址段為尾地址段,則根據查詢地址的尾地址段的地址前綴及尾地址段在第二二叉樹中查找與其相匹配的尾地址段的地址前綴及尾地址段,第二二叉樹的節點中存儲了路由表項的每個路由地址的尾地址段的地址前綴及尾地址段。第二獲取模塊1105,用于如果第二查找模塊1104在第二二叉樹中查找到與查詢地址的尾地址段的地址前綴及尾地址段相匹配的尾地址段的地址前綴及尾地址段,則獲取查找到的尾地址段的地址前綴及尾地址段對應的查找結果的索引,并根據查找結果的索引得到查找結果。參見圖12,該裝置還包括分配模塊1106,用于為劃分模塊1101劃分得到的查詢地址中的每個類型的地址段分配對應的類型標識,以根據查詢地址的每個地址段所對應的類型標識確定查詢地址的每個地址段的類型;其中,查詢地址的地址段的類型至少包括首地址段及尾地址段。進一步地,第一查找模塊1102,具體用于從第一二叉樹的根節點開始,將查詢地址的首地址段與第一二叉樹中存儲的路由表項的每個路由地址的首地址段進行逐層比較;如果查詢地址的首地址段大于等于當前比較的路由地址的首地址段,則將查詢地址的首地址段與當前比較的路由地址的首地址段左側的路由地址的首地址段進行比較;如果查詢地址的首地址段小于當前比較的路由地址的首地址段,則將查詢地址的首地址段與當前比較的路由地址的首地址段右側的路由地址的首地址段進行比較;依此類推,直至得出與查詢地址的首地址段相匹配的路由地址的首地址段;如果參與比較的路由地址的首地址段中不存在與查詢地址的首地址段相匹配的首地址段,則查找結束。進一步地,第二查找模塊1104,具體用于從第二二叉樹的根節點開始,將查詢地址的尾地址段的地址前綴及尾地址段與第二二叉樹中存儲的路由表項的每個路由地址的尾 地址段的地址前綴及尾地址段進行逐層比較;如果查詢地址的尾地址段的地址前綴及尾地址段大于等于當前比較的路由地址的尾地址段的地址前綴及尾地址段,則將查詢地址的尾地址段的地址前綴及尾地址段與當前比較的路由地址的尾地址段的地址前綴及尾地址段左側的路由地址的尾地址段的地址前綴及尾地址段進行比較;如果查詢地址的尾地址段的地址前綴及尾地址段小于當前比較的路由地址的尾地址段的地址前綴及尾地址段,則將查詢地址的尾地址段的地址前綴及尾地址段與當前比較的路由地址的尾地址段的地址前綴及尾地址段右側的路由地址的尾地址段的地址前綴及尾地址段進行比較;依此類推,直至得出與查詢地址的尾地址段的地址前綴及尾地址段相匹配的路由地址的尾地址段的地址前綴及尾地址段;如果參與比較的路由地址的尾地址段的地址前綴及尾地址段中不存在與查詢地址的尾地址段的地址前綴及尾地址段相匹配的尾地址段的地址前綴及尾地址段,則查找結束。進一步地,劃分模塊1101劃分得到的查詢地址的地址段的類型還包括中間地址段。參見圖13,裝置還包括第三獲取模塊1107,用于如果在第一二叉樹中查找到與查詢地址的首地址段相匹配的首地址段,且查詢地址的首地址段的下一地址段為查詢地址的中間地址段,則獲取查找到的首地址段對應的地址后綴,并將獲取到的地址后綴作為查詢地址的中間地址段的地址前綴。第三查找模塊1108,用于根據查詢地址的中間地址段的地址前綴及中間地址段在第三二叉樹中查找與其相匹配的中間地址段的地址前綴及中間地址段,第三二叉樹的節點中存儲了路由表項的每個路由地址的中間地址段的地址前綴及中間地址段。第四獲取模塊1109,用于如果在第三二叉樹中查找到與查詢地址的中間地址段的地址前綴及中間地址段相匹配的中間地址段的地址前綴及中間地址段,則獲取查找到的中間地址段對應的地址后綴,將獲取到的地址后綴作為查詢地址的尾地址段的地址前綴,并繼續執行根據查詢地址的尾地址段的地址前綴及尾地址段在第二二叉樹中查找與其相匹配的尾地址段的地址前綴及尾地址段。
進一步地,第三查找模塊1107,具體用于從第三二叉樹的根節點開始,將查詢地址的中間地址段的地址前綴及中間地址段與第三二叉樹中存儲的路由表項的每個路由地址的中間地址段的地址前綴及中間地址段進行逐層比較;如果查詢地址的中間地址段的地址前綴及中間地址段大于等于當前比較的路由地址的中間地址段的地址前綴及中間地址段,則將查詢地址的中間地址段的地址前綴及中間地址段與當前比較的路由地址的中間地址段的地址前綴及中間地址段左側的路由地址的中間地址段的地址前綴及中間地址段進行比較;如果查詢地址的中間地址段的地址前綴及中間地址段小于當前比較的路由地址的中間地址段的地址前綴及中間地址段,則將查詢地址的中間地址段的地址前綴及中間地址段與當前比較的路由地址的中間地址段的地址前綴及中間地址段右側的路由地址的中間地址段的地址前綴及中間地址段進行比較;依此類推,直至得出與查詢地址的中間地址段的地址前綴及中間地址段相匹配的路由地址的中間地址段的地址前綴及中間地址段; 如果參與比較的路由地址的中間地址段的地址前綴及中間地址段中不存在與查詢地址的中間地址段的地址前綴及中間地址段相匹配的中間地址段的地址前綴及中間地址段,則查找結束。進一步地,第三查找模塊1108,用于如果查詢地址有多個中間地址段,則根據查詢地址的每個中間地址段的地址前綴及中間地址段在對應的第三二叉樹中查找與其相匹配的中間地址段的地址前綴及中間地址段。本實施例提供的查找裝置,通過按路由表項的路由地址的地址段劃分方式將查詢地址劃分成地址段,并根據查詢地址的地址段在存儲了各種類型的地址段的二叉樹中分別查找匹配的地址段,進而根據匹配的地址段獲得查找結果,與現有技術相比,可提高查找速率。實施例六本實施例提供了一種路由表項的查找系統,該系統用于執行上述實施例一或實施例二提供的路由表項的存儲方法,以及實施例一或實施例三提供的路由表項的查找方法。參見圖14,該系統包括路由表項的存儲裝置1401和路由表項的查找裝置1402 ;其中,路由表項的存儲裝置1401如上述實施例四提供的路由表項的存儲裝置;路由表項的查找裝置1402如上述實施例五提供的路由表項的查找裝置。本實施例提供的查找系統,通過路由表項的存儲裝置將路由地址劃分為至少兩個地址段,并將每個地址段存儲至對應的二叉樹中,相比現有技術用兩個二叉樹節點存儲一個路由地址的兩個邊界值的方式而言,其占用的存儲空間更少;且當存儲的路由地址的位寬大于存儲空間的位寬時,可將路由地址劃分為至少兩段進行存儲,相比現有技術需改變硬件存儲空間的方式而言,能夠更靈活地適用于多種位寬的路由地址的存儲;另外,通過路由表項的查找裝置以分段查找的方式獲得查找結果,可提高查找速率。實施例七本實施例提供了一種路由表項的存儲設備,用于執行上述實施例一或實施例二所提供的路由表項的存儲方法。該路由表項的存儲設備包括處理器;
其中,處理器,用于將路由表項的每個路由地址按照預設長度劃分成至少兩個地址段;為每個路由地址的首地址段分配對應的地址后綴,并將每個路由地址的首地址段的地址后綴作為下一地址段的地址前綴;將每個路由地址的首地址段存儲至第一二叉樹的節點中,并存儲每個路由地址的首地址段對應的地址后綴;如果下一地址段為尾地址段,則將每個路由地址的尾地址段對應的地址前綴及尾地址段一并存儲至第二二叉樹的節點中,并存儲每個路由地址對應的查找結果的索引,每個路由地址對應的查找結果的索引與每個路由地址的尾地址段的地址前綴及尾地址段相對應,且每個查找結果的索引對應一個查找結果O進一步地,該處理器,還用于在將路由表項的每個路由地址按照預設長度劃分成至少兩個地址段之后,為路由表項的每個路由地址中的每個類型的地址段分配對應的類型標識,以根據路由表項的每個路由地址的每個地址段所對應的類型標識確定每個地址段的類型;其中,路由表項的每個路由地址的地址段的類型至少包括首地址段及尾地址段。進一步地,該處理器,具體用于將每個路由地址的首地址段按照由大到小的順序依次存儲至第一二叉樹的節點中。
進一步地,該處理器,具體用于將每個路由地址的尾地址段對應的地址前綴及尾地址段按照由大到小的順序依次存儲至第二二叉樹的節點中。進一步地,路由表項的每個路由地址的地址段的類型還包括中間地址段,該處理,還用于在將每個路由地址的首地址段的地址后綴作為下一地址段的地址前綴之后,如果下一地址段為中間地址段,則為每個路由地址的中間地址段分配對應的地址后綴,并將地址后綴作為中間地址段的下一地址段的地址前綴;將每個路由地址的中間地址段對應的地址前綴及中間地址段一并存儲至第三二叉樹的節點中,并存儲每個路由地址的中間地址段對應的地址后綴。進一步地,該處理器,具體用于將每個路由地址的中間地址段對應的地址前綴及中間地址段按照由大到小的順序依次存儲至第三二叉樹的節點中。進一步地,如果每個路由地址有多個中間地址段,則該處理器,還用于將每個路由地址的每個中間地址段對應的地址前綴及中間地址段分別存儲至不同的第三二叉樹的節點中,第三二叉樹的個數與每個路由地址的中間地址段的個數相同。進一步地,該處理器,具體用于如果至少兩個路由地址的首地址段相同,則為至少兩個路由地址的首地址段分配相同的地址后綴。進一步地,該處理器,具體用于如果至少兩個路由地址的首地址段與中間地址段均相同,則為至少兩個路由地址的中間地址段分配相同的地址后綴。進一步地,該處理器,還用于刪除路由表項中的至少一個路由地址時,從第二二叉樹中刪除被刪除的路由地址的尾地址段的地址前綴及尾地址段;如果被刪除的路由地址的首地址段與路由表項中的其他路由地址的首地址段相同,則在第一二叉樹中保留被刪除的路由地址的首地址段及其地址后綴;且如果被刪除的路由地址具有中間地址段,被刪除的路由地址的中間地址段與路由表項中的其他路由地址的中間地址段相同,則在第三二叉樹中保留被刪除的路由地址的中間地址段的地址前綴及中間地址段和地址后綴,如果被刪除的路由地址的中間地址段與路由表項中的其他路由地址的中間地址段不相同,從第三二叉樹中刪除被刪除的路由地址的中間地址段的地址前綴及中間地址段和地址后綴;如果被刪除的路由地址的首地址段與路由表項中的其他路由地址的首地址段不同,從第一二叉樹中刪除被刪除的路由地址的首地址段及其地址后綴,且如果被刪除的路由地址具有中間地址段,從第三二叉樹中刪除被刪除的路由地址的中間地址段的地址前綴及中間地址段和地址后綴。本實施例提供的路由表項的存儲設備,通過將路由地址劃分為至少兩個地址段,并將每個地址段存儲至對應的二叉樹中,相比現有技術用兩個二叉樹節點存儲一個路由地址的兩個邊界值的方式而言,其占用的存儲空間更少;且當存儲的路由地址的位寬大于存儲空間的位寬時,可將路由地址劃分為至少兩段進行存儲,相比現有技術需改變硬件存儲空間的方式而言,能夠更靈活地適用于多種位寬的路由地址的存儲。實施例八本實施例提供了一種路由表項的查找設備,用于執行上述實施例一或實施例三提·供的路由表項的查找方法。該設備包括處理器;該處理器,用于將查詢地址按照預設長度劃分成至少兩個地址段;根據查詢地址的首地址段在第一二叉樹中查找與其相匹配的首地址段,第一二叉樹的節點中存儲了路由表項的每個路由地址的首地址段;如果在第一二叉樹中查找到與查詢地址的首地址段相匹配的首地址段,且查詢地址的首地址段的下一地址段為查詢地址的尾地址段,則獲取查找到的首地址段對應的地址后綴,并將獲取到的地址后綴作為查詢地址的尾地址段的地址前綴;根據查詢地址的尾地址段的地址前綴及尾地址段在第二二叉樹中查找與其相匹配的尾地址段的地址前綴及尾地址段,第二二叉樹的節點中存儲了路由表項的每個路由地址的尾地址段的地址前綴及尾地址段;如果在第二二叉樹中查找到與查詢地址的尾地址段的地址前綴及尾地址段相匹配的尾地址段的地址前綴及尾地址段,則獲取查找到的尾地址段的地址前綴及尾地址段對應的查找結果的索引,并根據查找結果的索引得到查找結果。進一步地,該處理器,還用于將查詢地址按照預設長度劃分成至少兩個地址段之后,為查詢地址中的每個類型的地址段分配對應的類型標識,以根據查詢地址的每個地址段所對應的類型標識確定查詢地址的每個地址段的類型;其中,查詢地址的地址段的類型至少包括首地址段及尾地址段。進一步地,該處理器,具體用于從第一二叉樹的根節點開始,將查詢地址的首地址段與第一二叉樹中存儲的路由表項的每個路由地址的首地址段進行逐層比較;如果查詢地址的首地址段大于等于當前比較的路由地址的首地址段,則將查詢地址的首地址段與當前比較的路由地址的首地址段左側的路由地址的首地址段進行比較;如果查詢地址的首地址段小于當前比較的路由地址的首地址段,則將查詢地址的首地址段與當前比較的路由地址的首地址段右側的路由地址的首地址段進行比較;依此類推,直至得出與查詢地址的首地址段相匹配的路由地址的首地址段; 如果參與比較的路由地址的首地址段中不存在與查詢地址的首地址段相匹配的首地址段,則查找結束。進一步地,該處理器,具體用于從第二二叉樹的根節點開始,將查詢地址的尾地址段的地址前綴及尾地址段與第二二叉樹中存儲的路由表項的每個路由地址的尾地址段的地址前綴及尾地址段進行逐層比較;如果查詢地址的尾地址段的地址前綴及尾地址段大于等于當前比較的路由地址的尾地址段的地址前綴及尾地址段,則將查詢地址的尾地址段的地址前綴及尾地址段與當前比較的路由地址的尾地址段的地址前綴及尾地址段左側的路由地址的尾地址段的地址前綴及尾地址段進行比較;如果查詢地址的尾地址段的地址前綴及尾地址段小于當前比較的路由地址的尾地址段的地址前綴及尾地址段,則將查詢地址的尾地址段的地址前綴及尾地址段與當前比較的路由地址的尾地址段的地址前綴及尾地址段右側的路由地址的尾地址段的地址前綴及尾地址段進行比較;依此類推,直至得出與查詢地址的尾地址段的地址前綴及尾地址段相匹配的路由地址的尾地址段的地址前綴及尾地址段;如果參與比較的路由地址的尾地址段的地址前綴及尾地址段中不存在與查詢地址的尾地址段的地址前綴及尾地址段相匹配的尾地址段的地址前綴及尾地址段,則查找結束。進一步地,該處理器,還用于在查詢地址的地址段的類型還包括中間地址段,根據查詢地址的首地址段在第一二叉樹中查找與其相匹配的首地址段之后,如果在第一二叉樹中查找到與查詢地址的首地址段相匹配的首地址段,且查詢地址的首地址段的下一地址段為查詢地址的中間地址段,則獲取查找到的首地址段對應的地址后綴,并將獲取到的地址后綴作為查詢地址的中間地址段的地址前綴;根據查詢地址的中間地址段的地址前綴及中·間地址段在第三二叉樹中查找與其相匹配的中間地址段的地址前綴及中間地址段,第三二叉樹的節點中存儲了路由表項的每個路由地址的中間地址段的地址前綴及中間地址段;如果在第三二叉樹中查找到與查詢地址的中間地址段的地址前綴及中間地址段相匹配的中間地址段的地址前綴及中間地址段,則獲取查找到的中間地址段對應的地址后綴,將獲取到的地址后綴作為查詢地址的尾地址段的地址前綴,并繼續執行根據查詢地址的尾地址段的地址前綴及尾地址段在第二二叉樹中查找與其相匹配的尾地址段的地址前綴及尾地址段。進一步地,該處理器,具體用于從第三二叉樹的根節點開始,將查詢地址的中間地址段的地址前綴及中間地址段與第三二叉樹中存儲的路由表項的每個路由地址的中間地址段的地址前綴及中間地址段進行逐層比較;如果查詢地址的中間地址段的地址前綴及中間地址段大于等于當前比較的路由地址的中間地址段的地址前綴及中間地址段,則將查詢地址的中間地址段的地址前綴及中間地址段與當前比較的路由地址的中間地址段的地址前綴及中間地址段左側的路由地址的中間地址段的地址前綴及中間地址段進行比較;如果查詢地址的中間地址段的地址前綴及中間地址段小于當前比較的路由地址的中間地址段的地址前綴及中間地址段,則將查詢地址的中間地址段的地址前綴及中間地址段與當前比較的路由地址的中間地址段的地址前綴及中間地址段右側的路由地址的中間地址段的地址前綴及中間地址段進行比較;依此類推,直至得出與查詢地址的中間地址段的地址前綴及中間地址段相匹配的路由地址的中間地址段的地址前綴及中間地址段;如果參與比較的路由地址的中間地址段的地址前綴及中間地址段中不存在與查詢地址的中間地址段的地址前綴及中間地址段相匹配的中間地址段的地址前綴及中間地址段,則查找結束。
進一步地,如果查詢地址有多個中間地址段,則該處理器,還用于根據查詢地址的每個中間地址段的地址前綴及中間地址段在對應的第三二叉樹中查找與其相匹配的中間地址段的地址前綴及中間地址段。本實施例提供的設備,通過按路由表項的路由地址的地址段劃分方式將查詢地址劃分成地址段,并根據查詢地址的地址段在存儲了各種類型的地址段的二叉樹中分別查找匹配的地址段,進而根據匹配的地址段獲得查找結果,與現有技術相比,可提高查找速率。需要說明的是上述實施例提供的路由表項的存儲裝置在進行路由表項的存儲時,以及路由表項的查找裝置在進行路由表項的查找時,僅以上述各功能模塊的劃分進行舉例說明,實際應用中,可以根據需要而將上述功能分配由不同的功能模塊完成,即將裝置的內部結構劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。另外,上述實施例提供的路由表項的存儲裝置與路由表項的存儲方法實施例屬于同一構思,路由表項的查找裝置與路由表項的查找方法實施例屬于同一構思,其具體實現過程詳見方法實施例,這里不再贅述。上述本發明實施例序號僅僅為了描述,不代表實施例的優劣。 本領域普通技術人員可以理解實現上述實施例的全部或部分步驟可以通過硬件來完成,也可以通過程序來指令相關的硬件完成,所述的程序可以存儲于一種計算機可讀存儲介質中,上述提到的存儲介質可以是只讀存儲器,磁盤或光盤等。以上所述僅為本發明的較佳實施例,并不用以限制本發明,凡在本發明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發明的保護范圍之內。
權利要求
1.一種路由表項的存儲方法,其特征在于,所述方法包括 將路由表項的每個路由地址按照預設長度劃分成至少兩個地址段; 為每個路由地址的首地址段分配對應的地址后綴,并將所述每個路由地址的首地址段的地址后綴作為下一地址段的地址前綴; 將所述每個路由地址的首地址段存儲至第一二叉樹的節點中,并存儲所述每個路由地址的首地址段對應的地址后綴; 如果所述下一地址段為尾地址段,則將所述每個路由地址的尾地址段對應的地址前綴及尾地址段一并存儲至第二二叉樹的節點中,并存儲所述每個路由地址對應的查找結果的索引,所述每個路由地址對應的查找結果的索引與所述每個路由地址的尾地址段的地址前綴及尾地址段相對應,且每個查找結果的索引對應一個查找結果。
2.根據權利要求I所述的方法,其特征在于,所述將路由表項的每個路由地址按照預設長度劃分成至少兩個地址段之后,還包括 為路由表項的每個路由地址中的每個類型的地址段分配對應的類型標識,以根據路由表項的每個路由地址的每個地址段所對應的類型標識確定每個地址段的類型; 其中,所述路由表項的每個路由地址的地址段的類型至少包括首地址段及尾地址段。
3.根據權利要求I所述的方法,其特征在于,所述將所述每個路由地址的首地址段存儲至第一二叉樹的節點中,具體包括 將所述每個路由地址的首地址段按照由大到小的順序依次存儲至所述第一二叉樹的節點中。
4.根據權利要求I所述的方法,其特征在于,所述將所述每個路由地址的尾地址段對應的地址前綴及尾地址段一并存儲至第二二叉樹的節點中,具體包括 將所述每個路由地址的尾地址段對應的地址前綴及尾地址段按照由大到小的順序依次存儲至所述第二二叉樹的節點中。
5.根據權利要求I所述的方法,其特征在于,所述路由表項的每個路由地址的地址段的類型還包括中間地址段,所述將所述每個路由地址的首地址段的地址后綴作為下一地址段的地址前綴之后,還包括 如果所述下一地址段為中間地址段,則為所述每個路由地址的中間地址段分配對應的地址后綴,并將所述地址后綴作為所述中間地址段的下一地址段的地址前綴; 將所述每個路由地址的中間地址段對應的地址前綴及中間地址段一并存儲至第三二叉樹的節點中,并存儲所述每個路由地址的中間地址段對應的地址后綴。
6.根據權利要求5所述的方法,其特征在于,所述將所述每個路由地址的中間地址段對應的地址前綴及中間地址段一并存儲至第三二叉樹的節點中,具體包括 將所述每個路由地址的中間地址段對應的地址前綴及中間地址段按照由大到小的順序依次存儲至所述第三二叉樹的節點中。
7.根據權利要求5所述的方法,其特征在于,如果所述每個路由地址有多個中間地址段,則將所述每個路由地址的每個中間地址段對應的地址前綴及中間地址段分別存儲至不同的第三二叉樹的節點中,所述第三二叉樹的個數與所述每個路由地址的中間地址段的個數相同。
8.根據權利要求I所述的方法,其特征在于,所述為每個路由地址的首地址段分配對應的地址后綴,具體包括 如果至少兩個路由地址的首地址段相同,則為所述至少兩個路由地址的首地址段分配相同的地址后綴。
9.根據權利要求5所述的方法,其特征在于,所述為所述每個路由地址的中間地址段分配對應的地址后綴,具體包括 如果至少兩個路由地址的首地址段與中間地址段均相同,則為所述至少兩個路由地址的中間地址段分配相同的地址后綴。
10.根據權利要求I至9中任一權利要求所述的方法,其特征在于,刪除所述路由表項中的至少一個路由地址時,所述方法還包括 從第二二叉樹中刪除被刪除的路由地址的尾地址段的地址前綴及尾地址段; 如果被刪除的路由地址的首地址段與所述路由表項中的其他路由地址的首地址段相同,則在所述第一二叉樹中保留所述被刪除的路由地址的首地址段及其地址后綴;且如果所述被刪除的路由地址具有中間地址段,所述被刪除的路由地址的中間地址段與所述路由表項中的其他路由地址的中間地址段相同,則在所述第三二叉樹中保留所述被刪除的路由地址的中間地址段的地址前綴及中間地址段和地址后綴,如果所述被刪除的路由地址的中間地址段與所述路由表項中的其他路由地址的中間地址段不相同,從所述第三二叉樹中刪除所述被刪除的路由地址的中間地址段的地址前綴及中間地址段和地址后綴; 如果被刪除的路由地址的首地址段與所述路由表項中的其他路由地址的首地址段不同,從所述第一二叉樹中刪除所述被刪除的路由地址的首地址段及其地址后綴,且如果所述被刪除的路由地址具有中間地址段,從所述第三二叉樹中刪除所述被刪除的路由地址的中間地址段的地址前綴及中間地址段和地址后綴。
11.一種路由表項的查找方法,其特征在于,所述方法包括 將查詢地址按照預設長度劃分成至少兩個地址段; 根據所述查詢地址的首地址段在第一二叉樹中查找與其相匹配的首地址段,所述第一二叉樹的節點中存儲了路由表項的每個路由地址的首地址段; 如果在所述第一二叉樹中查找到與所述查詢地址的首地址段相匹配的首地址段,且所述查詢地址的首地址段的下一地址段為所述查詢地址的尾地址段,則獲取查找到的首地址段對應的地址后綴,并將獲取到的地址后綴作為所述查詢地址的尾地址段的地址前綴;根據所述查詢地址的尾地址段的地址前綴及尾地址段在第二二叉樹中查找與其相匹配的尾地址段的地址前綴及尾地址段,所述第二二叉樹的節點中存儲了路由表項的每個路由地址的尾地址段的地址前綴及尾地址段; 如果在所述第二二叉樹中查找到與所述查詢地址的尾地址段的地址前綴及尾地址段相匹配的尾地址段的地址前綴及尾地址段,則獲取查找到的尾地址段的地址前綴及尾地址段對應的查找結果的索引,并根據所述查找結果的索引得到查找結果。
12.根據權利要求11所述的方法,其特征在于,所述將查詢地址按照預設長度劃分成至少兩個地址段之后,還包括 為查詢地址中的每個類型的地址段分配對應的類型標識,以根據查詢地址的每個地址段所對應的類型標識確定所述查詢地址的每個地址段的類型; 其中,所述查詢地址的地址段的類型至少包括首地址段及尾地址段。
13.根據權利要求11所述的方法,其特征在于,所述根據所述查詢地址的首地址段在第一二叉樹中查找與其相匹配的首地址段,具體包括 從所述第一二叉樹的根節點開始,將所述查詢地址的首地址段與所述第一二叉樹中存儲的路由表項的每個路由地址的首地址段進行逐層比較; 如果所述查詢地址的首地址段大于等于當前比較的路由地址的首地址段,則將所述查詢地址的首地址段與當前比較的路由地址的首地址段左側的路由地址的首地址段進行比較; 如果所述查詢地址的首地址段小于當前比較的路由地址的首地址段,則將所述查詢地址的首地址段與當前比較的路由地址的首地址段右側的路由地址的首地址段進行比較; 依此類推,直至得出與所述查詢地址的首地址段相匹配的路由地址的首地址段; 如果參與比較的路由地址的首地址段中不存在與所述查詢地址的首地址段相匹配的首地址段,則查找結束。
14.根據權利要求11所述的方法,其特征在于,所述根據所述查詢地址的尾地址段的地址前綴及尾地址段在第二二叉樹中查找與其相匹配的尾地址段的地址前綴及尾地址段,具體包括 從所述第二二叉樹的根節點開始,將所述查詢地址的尾地址段的地址前綴及尾地址段與所述第二二叉樹中存儲的路由表項的每個路由地址的尾地址段的地址前綴及尾地址段進行逐層比較; 如果所述查詢地址的尾地址段的地址前綴及尾地址段大于等于當前比較的路由地址的尾地址段的地址前綴及尾地址段,則將所述查詢地址的尾地址段的地址前綴及尾地址段與當前比較的路由地址的尾地址段的地址前綴及尾地址段左側的路由地址的尾地址段的地址前綴及尾地址段進行比較; 如果所述查詢地址的尾地址段的地址前綴及尾地址段小于當前比較的路由地址的尾地址段的地址前綴及尾地址段,則將所述查詢地址的尾地址段的地址前綴及尾地址段與當前比較的路由地址的尾地址段的地址前綴及尾地址段右側的路由地址的尾地址段的地址前綴及尾地址段進行比較; 依此類推,直至得出與所述查詢地址的尾地址段的地址前綴及尾地址段相匹配的路由地址的尾地址段的地址前綴及尾地址段; 如果參與比較的路由地址的尾地址段的地址前綴及尾地址段中不存在與所述查詢地址的尾地址段的地址前綴及尾地址段相匹配的尾地址段的地址前綴及尾地址段,則查找結束。
15.根據權利要求11所述的方法,其特征在于,所述查詢地址的地址段的類型還包括中間地址段,所述根據所述查詢地址的首地址段在第一二叉樹中查找與其相匹配的首地址段之后,還包括 如果在所述第一二叉樹中查找到與所述查詢地址的首地址段相匹配的首地址段,且所述查詢地址的首地址段的下一地址段為所述查詢地址的中間地址段,則獲取查找到的首地址段對應的地址后綴,并將獲取到的地址后綴作為所述查詢地址的中間地址段的地址前三雙; 根據所述查詢地址的中間地址段的地址前綴及中間地址段在第三二叉樹中查找與其相匹配的中間地址段的地址前綴及中間地址段,所述第三二叉樹的節點中存儲了路由表項的每個路由地址的中間地址段的地址前綴及中間地址段; 如果在所述第三二叉樹中查找到與所述查詢地址的中間地址段的地址前綴及中間地址段相匹配的中間地址段的地址前綴及中間地址段,則獲取查找到的中間地址段對應的地址后綴,將獲取到的地址后綴作為所述查詢地址的尾地址段的地址前綴,并繼續執行根據所述查詢地址的尾地址段的地址前綴及尾地址段在第二二叉樹中查找與其相匹配的尾地址段的地址前綴及尾地址段。
16.根據權利要求15所述的方法,其特征在于,所述根據所述查詢地址的中間地址段的地址前綴及中間地址段在第三二叉樹中查找與其相匹配的中間地址段的地址前綴及中間地址段,具體包括 從所述第三二叉樹的根節點開始,將所述查詢地址的中間地址段的地址前綴及中間地址段與所述第三二叉樹中存儲的路由表項的每個路由地址的中間地址段的地址前綴及中間地址段進行逐層比較; 如果所述查詢地址的中間地址段的地址前綴及中間地址段大于等于當前比較的路由地址的中間地址段的地址前綴及中間地址段,則將所述查詢地址的中間地址段的地址前綴及中間地址段與當前比較的路由地址的中間地址段的地址前綴及中間地址段左側的路由地址的中間地址段的地址前綴及中間地址段進行比較; 如果所述查詢地址的中間地址段的地址前綴及中間地址段小于當前比較的路由地址的中間地址段的地址前綴及中間地址段,則將所述查詢地址的中間地址段的地址前綴及中間地址段與當前比較的路由地址的中間地址段的地址前綴及中間地址段右側的路由地址的中間地址段的地址前綴及中間地址段進行比較; 依此類推,直至得出與所述查詢地址的中間地址段的地址前綴及中間地址段相匹配的路由地址的中間地址段的地址前綴及中間地址段; 如果參與比較的路由地址的中間地址段的地址前綴及中間地址段中不存在與所述查詢地址的中間地址段的地址前綴及中間地址段相匹配的中間地址段的地址前綴及中間地址段,則查找結束。
17.根據權利要求16所述的方法,其特征在于,如果所述查詢地址有多個中間地址段,則根據所述查詢地址的每個中間地址段的地址前綴及中間地址段在對應的第三二叉樹中查找與其相匹配的中間地址段的地址前綴及中間地址段。
18.—種路由表項的存儲裝置,其特征在在于,所述裝置包括 劃分模塊,用于將路由表項的每個路由地址按照預設長度劃分成至少兩個地址段; 分配模塊,用于為所述劃分模塊劃分得到的每個路由地址的首地址段分配對應的地址后綴,并將所述每個路由地址的首地址段的地址后綴作為下一地址段的地址前綴; 第一存儲模塊,用于將所述劃分模塊劃分得到的每個路由地址的首地址段存儲至第一二叉樹的節點中,并存儲所述分配模塊分配的每個路由地址的首地址段對應的地址后三雙; 第二存儲模塊,用于如果所述每個路由地址的首地址段的下一地址段為尾地址段,則將所述每個路由地址的尾地址段對應的地址前綴及尾地址段一并存儲至第二二叉樹的節點中,并存儲所述每個路由地址對應的查找結果的索引,所述每個路由地址對應的查找結果的索引與所述每個路由地址的尾地址段的地址前綴及尾地址段相對應,且每個查找結果的索引對應一個查找結果。
19.根據權利要求18所述的裝置,其特征在于,所述分配模塊,還用于為路由表項的每個路由地址中的每個類型的地址段分配對應的類型標識,以根據路由表項的每個路由地址的每個地址段所對應的類型標識確定每個地址段的類型; 其中,所述路由表項的每個路由地址的地址段的類型至少包括首地址段及尾地址段。
20.根據權利要求18所述的裝置,其特征在于,所述第一存儲模塊,具體用于將所述每個路由地址的首地址段按照由大到小的順序依次存儲至所述第一二叉樹的節點中。
21.根據權利要求18所述的裝置,其特征在于,所述第二存儲模塊,具體用于將所述每個路由地址的尾地址段對應的地址前綴及尾地址段按照由大到小的順序依次存儲至所述第二二叉樹的節點中。
22.根據權利要求18所述的裝置,其特征在于,所述劃分模塊劃分的路由表項的每個路由地址的地址段的類型還包括中間地址段; 所述分配模塊,還用于如果所述下一地址段為中間地址段,則為所述每個路由地址的中間地址段分配對應的地址后綴,并將所述地址后綴作為所述中間地址段的下一地址段的地址前綴; 所述裝置還包括 第三存儲模塊,用于將所述每個路由地址的中間地址段對應的地址前綴及中間地址段一并存儲至第三二叉樹的節點中,并存儲所述每個路由地址的中間地址段對應的地址后
23.根據權利要求22所述的裝置,其特征在于,所述第三存儲模塊,具體用于將所述每個路由地址的中間地址段對應的地址前綴及中間地址段按照由大到小的順序依次存儲至所述第三二叉樹的節點中。
24.根據權利要求22所述的裝置,其特征在于,所述第三存儲模塊,用于如果所述每個路由地址有多個中間地址段,則將所述每個路由地址的每個中間地址段對應的地址前綴及中間地址段分別存儲至不同的第三二叉樹的節點中,所述中間段地址段存儲子單元的個數與所述每個路由地址的中間地址段的個數相同。
25.根據權利要求18所述的裝置,其特征在于,所述分配模塊,用于如果至少兩個路由地址的首地址段相同,則為所述至少兩個路由地址的首地址段分配相同的地址后綴。
26.根據權利要求22所述的裝置,其特征在于,所述分配模塊,用于如果至少兩個路由地址的首地址段與中間地址段均相同,則為所述至少兩個路由地址的中間地址段分配相同的地址后綴。
27.根據權利要求19至22中任一權利要求所述的裝置,其特征在于,所述裝置還包括 刪除模塊,用于從所述第二二叉樹中刪除被刪除的路由地址的尾地址段的地址前綴及尾地址段; 如果被刪除的路由地址的首地址段與所述路由表項中的其他路由地址的首地址段相同,則在所述第一二叉樹中保留所述被刪除的路由地址的首地址段及其地址后綴;且如果所述被刪除的路由地址具有中間地址段,所述被刪除的路由地址的中間地址段與所述路由表項中的其他路由地址的中間地址段相同,則在所述第三二叉樹中保留所述被刪除的路由地址的中間地址段的地址前綴及中間地址段和地址后綴,如果所述被刪除的路由地址的中間地址段與所述路由表項中的其他路由地址的中間地址段不相同,從所述第三二叉樹中刪除所述被刪除的路由地址的中間地址段的地址前綴及中間地址段和地址后綴; 如果被刪除的路由地址的首地址段與所述路由表項中的其他路由地址的首地址段不同,從所述第一二叉樹中刪除所述被刪除的路由地址的首地址段及其地址后綴,且如果所述被刪除的路由地址具有中間地址段,從所述第三二叉樹中刪除所述被刪除的路由地址的中間地址段的地址前綴及中間地址段和地址后綴。
28.—種路由表項的查找裝置,其特征在于,所述裝置包括 劃分模塊,用于將查詢地址按照預設長度劃分成至少兩個地址段; 第一查找模塊,用于根據所述劃分模塊劃分得到的查詢地址的首地址段在第一二叉樹中查找與其相匹配的首地址段,所述第一二叉樹的節點中存儲了路由表項的每個路由地址的首地址段; 第一獲取模塊,用于如果所述第一查找模塊在所述第一二叉樹中查找到與所述查詢地址的首地址段相匹配的首地址段,則獲取查找到的首地址段對應的地址后綴,并將獲取到的地址后綴作為所述查詢地址的下一地址段的地址前綴; 第二查找模塊,用于如果所述查詢地址的首地址段的下一地址段為尾地址段,則根據所述查詢地址的尾地址段的地址前綴及尾地址段在第二二叉樹中查找與其相匹配的尾地址段的地址前綴及尾地址段,所述第二二叉樹的節點中存儲了路由表項的每個路由地址的尾地址段的地址前綴及尾地址段; 第二獲取模塊,用于如果所述第二查找模塊在所述第二二叉樹中查找到與所述查詢地址的尾地址段的地址前綴及尾地址段相匹配的尾地址段的地址前綴及尾地址段,則獲取查找到的尾地址段的地址前綴及尾地址段對應的查找結果的索引,并根據所述查找結果的索引得到查找結果。
29.根據權利要求28所述的裝置,其特征在于,所述裝置還包括 分配模塊,用于為所述劃分模塊劃分得到的查詢地址中的每個類型的地址段分配對應的類型標識,以根據查詢地址的每個地址段所對應的類型標識確定所述查詢地址的每個地址段的類型; 其中,所述查詢地址的地址段的類型至少包括首地址段及尾地址段。
30.根據權利要求28所述的裝置,其特征在于,所述第一查找模塊,具體用于從所述第一二叉樹的根節點開始,將所述查詢地址的首地址段與所述第一二叉樹中存儲的路由表項的每個路由地址的首地址段進行逐層比較; 如果所述查詢地址的首地址段大于等于當前比較的路由地址的首地址段,則將所述查詢地址的首地址段與當前比較的路由地址的首地址段左側的路由地址的首地址段進行比較; 如果所述查詢地址的首地址段小于當前比較的路由地址的首地址段,則將所述查詢地址的首地址段與當前比較的路由地址的首地址段右側的路由地址的首地址段進行比較; 依此類推,直至得出與所述查詢地址的首地址段相匹配的路由地址的首地址段; 如果參與比較的路由地址的首地址段中不存在與所述查詢地址的首地址段相匹配的首地址段,則查找結束。
31.根據權利要求28所述的裝置,其特征在于,所述第二查找模塊,具體用于從所述第二二叉樹的根節點開始,將所述查詢地址的尾地址段的地址前綴及尾地址段與所述第二二叉樹中存儲的路由表項的每個路由地址的尾地址段的地址前綴及尾地址段進行逐層比較; 如果所述查詢地址的尾地址段的地址前綴及尾地址段大于等于當前比較的路由地址的尾地址段的地址前綴及尾地址段,則將所述查詢地址的尾地址段的地址前綴及尾地址段與當前比較的路由地址的尾地址段的地址前綴及尾地址段左側的路由地址的尾地址段的地址前綴及尾地址段進行比較; 如果所述查詢地址的尾地址段的地址前綴及尾地址段小于當前比較的路由地址的尾地址段的地址前綴及尾地址段,則將所述查詢地址的尾地址段的地址前綴及尾地址段與當前比較的路由地址的尾地址段的地址前綴及尾地址段右側的路由地址的尾地址段的地址前綴及尾地址段進行比較; 依此類推,直至得出與所述查詢地址的尾地址段的地址前綴及尾地址段相匹配的路由地址的尾地址段的地址前綴及尾地址段; 如果參與比較的路由地址的尾地址段的地址前綴及尾地址段中不存在與所述查詢地址的尾地址段的地址前綴及尾地址段相匹配的尾地址段的地址前綴及尾地址段,則查找結束。
32.根據權利要求28所述的裝置,其特征在于,所述劃分模塊劃分得到的查詢地址的地址段的類型還包括中間地址段; 所述裝置還包括 第三獲取模塊,用于如果在所述第一二叉樹中查找到與所述查詢地址的首地址段相匹配的首地址段,且所述查詢地址的首地址段的下一地址段為所述查詢地址的中間地址段,則獲取查找到的首地址段對應的地址后綴,并將獲取到的地址后綴作為所述查詢地址的中間地址段的地址前綴; 第三查找模塊,用于根據所述查詢地址的中間地址段的地址前綴及中間地址段在第三二叉樹中查找與其相匹配的中間地址段的地址前綴及中間地址段,所述第三二叉樹的節點中存儲了路由表項的每個路由地址的中間地址段的地址前綴及中間地址段; 第四獲取模塊,用于如果在所述第三二叉樹中查找到與所述查詢地址的中間地址段的地址前綴及中間地址段相匹配的中間地址段的地址前綴及中間地址段,則獲取查找到的中間地址段對應的地址后綴,將獲取到的地址后綴作為所述查詢地址的尾地址段的地址前綴,并繼續執行根據所述查詢地址的尾地址段的地址前綴及尾地址段在第二二叉樹中查找與其相匹配的尾地址段的地址前綴及尾地址段。
33.根據權利要求32所述的裝置,其特征在于,所述第三查找模塊,具體用于從所述第三二叉樹的根節點開始,將所述查詢地址的中間地址段的地址前綴及中間地址段與所述第三二叉樹中存儲的路由表項的每個路由地址的中間地址段的地址前綴及中間地址段進行逐層比較; 如果所述查詢地址的中間地址段的地址前綴及中間地址段大于等于當前比較的路由地址的中間地址段的地址前綴及中間地址段,則將所述查詢地址的中間地址段的地址前綴及中間地址段與當前比較的路由地址的中間地址段的地址前綴及中間地址段左側的路由地址的中間地址段的地址前綴及中間地址段進行比較; 如果所述查詢地址的中間地址段的地址前綴及中間地址段小于當前比較的路由地址的中間地址段的地址前綴及中間地址段,則將所述查詢地址的中間地址段的地址前綴及中間地址段與當前比較的路由地址的中間地址段的地址前綴及中間地址段右側的路由地址的中間地址段的地址前綴及中間地址段進行比較; 依此類推,直至得出與所述查詢地址的中間地址段的地址前綴及中間地址段相匹配的路由地址的中間地址段的地址前綴及中間地址段; 如果參與比較的路由地址的中間地址段的地址前綴及中間地址段中不存在與所述查詢地址的中間地址段的地址前綴及中間地址段相匹配的中間地址段的地址前綴及中間地址段,則查找結束。
34.根據權利要求33所述的裝置,其特征在于,所述第三查找模塊,用于如果所述查詢地址有多個中間地址段,則根據所述查詢地址的每個中間地址段的地址前綴及中間地址段在對應的第三二叉樹中查找與其相匹配的中間地址段的地址前綴及中間地址段。
35.一種路由表項的查找系統,其特征在于,所述系統包括路由表項的存儲裝置和路由表項的查找裝置; 其中,所述路由表項的存儲裝置如所述權利要求18至27中任一權利要求所述的路由表項的存儲裝置; 所述路由表項的查找裝置如所述權利要求28至34中任一權利要求所述的路由表項的查找裝置。
36.一種路由表項的存儲方法,其特征在于,所述方法包括 將待存儲的路由地址按照預設長度劃分成首地址段和尾地址段; 為所述首地址段分配地址后綴,為所述尾地址段分配地址前綴,所述地址前綴和地址后綴間符合預設的對應關系; 將所述首地址段存儲至第一二叉樹的節點中,并記錄所述首地址段在所述第一二叉樹中的存儲地址與所述地址前綴的對應關系; 將所述地址前綴和所述尾地址段存儲至第二二叉樹中,并記錄與所述地址前綴和所述尾地址段對應的索引結果。
37.如權利要求36所述的路由表項的存儲方法,其特征在于,還包括所述地址前綴和所述地址后綴相同。
38.如權利要求36所述的路由表項的存儲方法,其特征在于,所述將所述地址前綴和所述尾地址段存儲至第二二叉樹中包括 將所述地址前綴和所述尾地址段存儲至所述第二二叉樹的同一個節點中。
39.一種路由地址的查找方法,其特征在于,所述方法包括 獲得待查找的路由地址,并將所述路由地址按照預設長度劃分成首地址段和尾地址段; 在第一二叉樹中查找所述首地址段,并獲得與所述首地址段對應的地址后綴; 根據預設的對應關系,根據所述地址后綴獲得地址前綴; 根據所述地址前綴和所述尾地址段查找第二二叉樹,并根據查找結果獲得路由信息。
全文摘要
本發明公開了一種路由表項的存儲方法、查找方法、裝置及系統,屬于計算機領域。所述查找方法包括將查詢地址劃分成至少兩個地址段;根據查詢地址的首地址段在第一二叉樹中查找與其相匹配的首地址段;將查找到的首地址段的地址后綴作為查詢地址的尾地址段的地址前綴;根據查詢地址的尾地址段的地址前綴及尾地址段在第二二叉樹中查找與其相匹配的尾地址段的地址前綴及尾地址段;根據查找到的尾地址段的地址前綴及尾地址段得到查找結果。本發明通過將路由地址分段存儲和查找,相對于現有技術來說,節約了存儲空間,可以更靈活地適用于多種位寬的路由地址的存儲和查找,且提高了查找速率。
文檔編號H04L12/741GK102904812SQ20121037164
公開日2013年1月30日 申請日期2012年9月29日 優先權日2012年9月29日
發明者洪榮峰, 易毅, 郭玲波 申請人:華為技術有限公司