Internet的迅速發(fā)展給我們的生活帶來了巨大的變化。隨之而來的是網(wǎng)絡流量的迅速增長。網(wǎng)絡流量的增長對于Internet上的路由器來說是一個很大的挑戰(zhàn),特別是核心路由器。它需要高速有效的包調(diào)度.轉發(fā)和路由策略。本文針對路由器的路由查找,提出了一種高效的.便于用硬件實現(xiàn)的技術。
1. 路由器的體系結構
圖1給出了一般路由器的邏輯體系結構。它主要由下面幾部分組成 :路由引擎、轉發(fā)引擎、 路由表、網(wǎng)絡適配器和相關的邏輯電路等。轉發(fā)引擎負責把從一個網(wǎng)絡適配器來的數(shù)據(jù)包轉發(fā)到另一個網(wǎng)絡適配器出去。IP協(xié)議,包括對路由表的查找,構成了轉發(fā)引擎中最主要的部分。由于每個通過路由器并需要其轉發(fā)的數(shù)據(jù)包都要對路由表進行查找,所以路由表的查找效率如何往往決定了整個路由器的性能。路由引擎則包括了高層協(xié)議,特別是路由協(xié)議,它負責對路由表的更新。由于路由引擎不涉及通過路由器的數(shù)據(jù)通路,故它可用通用的CPU代替。
2.硬件路由表的數(shù)據(jù)結構設計
一般路由器中路由表的每一項至少有這樣的信息:目標地址、網(wǎng)絡隱碼、下一跳地址。如果對每一個IP地址都要一個表項,那么需要占用很大的2323*4字節(jié)的存儲器,而且其中必定有很多的表項沒有被使用,這就會造成極大的資源浪費。
為了用硬件實現(xiàn)路由表的查找,查找算法需要滿足如下的條件:
1) 實時的實現(xiàn)路由表的查找;
2) 有效的實現(xiàn)路由表的插入和刪除;
3) 提供有效的最長前綴匹配;
4) 具有良好的可擴展性;
5) 支持廣播和組播;
6) 有效的對Memory進行利用;
7) 硬件上容易實現(xiàn),并具有良好的性能 。
我們考慮,如果在對路由表的查找中,把子網(wǎng)隱碼和IP地址結合起來,對IP地址進行相應的分段,并把它們相連。這樣在路由表的表項中,只有IP地址的一部分及其相應的隱碼部分,可以實現(xiàn)良好的可擴展性,只要對Memory進行有效的管理,可以靈活的動態(tài)的實現(xiàn)對路由的插入和刪除。鑒于此,我們設計該表的結構(如下面的表一所示 ):
它的思想是:把32位IPv4地址主要分成4部分,每部分8位。在該結構中,Address-part[0-4]是IP地址中的一部分,Mask-part[0-4]是相應的掩碼部分。Hit-next[0-4]是需要查找的目標IP地址與掩碼部分相與后,與Address-part一致時所要查找的下一路由項所在地址的指針。,Miss-hit[0-4]則是相互不一致時,下一路由項所在地址的指針。Shift位則用于判斷是否需要對IP地址中的下8位進行查找和判斷。它只有在當前的8位IP地址與目標地址中相應的8位一致時,才會被置位。Stop位用于判斷是否還需進行查找。它在IP地址查找結束時被置位,或沒有比當前項所對應的IP地址更長的路由表項時被置位。
圖2就是一個表1的例子 :
在該例子中,每一方框中上面一行表示相應的IP地址部分和隱碼部分。下面一行表示相關的隱碼部分的二進制表示。 相應的查找算法如下:
/* 查找算法開始 */
search = TRUE ;
WHILE ( search ) {
masked_key = key & ( entry ->mask_part ) ;
result = ( entry ->address_part ) = = masked_key
IF ( result = = TRUE ) {
best_match = entry ;
entry = entry ->hit_next;
}ELSE{
entry = entry ->miss_next;
IF ( entry ->stop = = TRUE ) search = FALSE;
}
}
RETURN best_match ;
/* 查找算法結束 */