專利名稱:一種采用哈希鏈表查找路由表項的方法
技術(shù)領域:
本發(fā)明涉及一種在交換機中查找路由表項的方法,確切地說,涉及一種采用哈希(Hash)鏈表查找路由表項的方法,屬于數(shù)據(jù)交換網(wǎng)絡技術(shù)領域。
背景技術(shù):
在二層交換機中,在實現(xiàn)二層路由的學習、轉(zhuǎn)發(fā)、以及相應的組播轉(zhuǎn)發(fā)功能時,為了提高路由轉(zhuǎn)發(fā)的效率,對大容量路由表項的查找大多采用Hash存儲查找方法;也就是建立一個一級和二級Hash查找表作為路由索引,實現(xiàn)48位介質(zhì)訪問控制層(MAC,Medium Access Control Layer)地址和二層路由表項的一一對應,根據(jù)這個索引可以查找到介質(zhì)訪問控制層的二層路由轉(zhuǎn)發(fā)表以及相應的組播轉(zhuǎn)發(fā)過濾表。Hash查找的時間和空間的復雜度是影響二層路由轉(zhuǎn)發(fā)效率的關鍵因素之一。目前采用的Hash查找方法使用的是逐級查找方法,當介質(zhì)訪問控制層的地址分布不均勻時,會耗費大量的內(nèi)存。
圖1展示了目前采用的HASH表進行逐級查找的示意圖。圖1中的Hash逐級查找方法只示意了通過一級索引表和二級索引表的二級逐層查找來完成表項查找的過程。其中所謂的一級索引表是以Mac地址的低16位組成的,共64K(216)個表項,而每層的二級索引表則是由Mac地址中的低16位之前的高4位(即第17-20位)組成的一個16(24)個表項的較小的表。查找的時候,首先根據(jù)Mac地址的低16位查找一級Hash索引表,如果沒有發(fā)生沖突,即其低16位地址不同,則根據(jù)該一級表項存儲的相應地址端口路由表的地址進行后續(xù)處理,通常是直接轉(zhuǎn)入對應的二級表項的地址端口表。如果該低16位相同(通常稱之為“沖突”),那么就繼續(xù)查找和比較高4位(即第17-20位)的二級表項來匹配,如果找到匹配的表項,則根據(jù)二級表項存儲的相應二層端口路由表的地址進行后續(xù)處理。如果還找不到匹配的表項,則需要再上溯更高4位(即第21-24位)組成的、大小也是16(24)個表項的二級索引表(或稱之為三級索引表)繼續(xù)進行匹配,直到找到一個匹配的表項為止。也就是說,每個一級索引表項在沖突的時候會擴展為高4位的16個地址的二級索引表,該二級索引表項的結(jié)構(gòu)和一級索引表是完全相同的,每層二級索引查找表能夠匹配4位的查找;如果又出現(xiàn)該4位的沖突,那么再進行下一層三級索引表的匹配,如此循環(huán)進行查找,直到找到為止。這樣,在最壞的情況下,如果兩個Mac地址中只有其最高的4位(即第45-48位)不同,就需要順序進行了二級、三級、...九級索引表項的查找,也就是一共需要建立(48-16)/4+1=9級索引表項進行匹配比較,這樣就會存在大量的空間浪費。
下面所示的表1就是一級HASH索引表項的查找表。
現(xiàn)在使用的Hash逐級查找方法所需要的資源計算如下一級索引表使用16位查找,需要的資源為(64K×8)個字節(jié);二級索引表每次使用4位查找,每個表需要的資源為(16×8)個字節(jié)。假設在系統(tǒng)中最多能夠支持N個二層路由表項的學習和轉(zhuǎn)發(fā)。在最好情況下,網(wǎng)絡中的Mac地址均勻分布,一級索引表中所有的表項被全部利用,而每次沖突時擴展的二級索引表中的表項也全部利用,即沒有一個表項是空閑的(當然,在現(xiàn)實生活中這種理想情況幾乎是不可能出現(xiàn)的)。這樣,Hash表需要的內(nèi)存資源為一級Hash索引表所需的資源64K×8=512K(字節(jié))二級Hash索引表所需的資源N×8=8N(字節(jié))總計(512K+8N)字節(jié)。
而在最壞情況下,網(wǎng)絡中的Mac地址分布極不均勻,所有Mac地址的低16位都相同,導致一級索引表中的表項利用率極低,即只使用了一項。為了能找到一個匹配的Mac地址,不得不多次地進行高4位上溯匹配查找。在第一次擴展到二級索引表項時,其二級索引表項的數(shù)量級為16。之后,每上溯一次,其數(shù)量級都要乘以16,且最多可以上溯8次,因此其數(shù)量級最多可達到168=232。如果每次擴展的二級索引表項中大多數(shù)又是無用的,就會浪費大量的空間;而且,越到最后(即Mac地址的高比特),浪費的空間越大。通常,當Mac地址分布非常集中,即低比特大量重復時,就會出現(xiàn)這種情況。這樣,Hash表需要的內(nèi)存資源為一級Hash表所需資源64K×8=512K(字節(jié)),二級Hash表所需資源N×8(字節(jié))+大量浪費的空間(數(shù)量級231×8字節(jié))。
從上述分析可以看出,Hash逐級查找方法的最大缺點是空間的浪費相當嚴重,尤其是在Mac地址分布不均勻的時候。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種采用Hash鏈表查找路由表項的方法,用于替代原有的逐級查找方法,以便能夠顯著地節(jié)省內(nèi)存空間,同時不降低查找效率。
本發(fā)明的目的是這樣實現(xiàn)的一種采用Hash鏈表查找路由表項的方法,其特征在于該方法是將48位的介質(zhì)訪問控制層(Mac)地址分段后分別進行邏輯運算后得到的結(jié)果作為索引,組成Hash表的一級表項;再將一級表項內(nèi)容相同的所有Mac地址,即采用地址分段分別進行邏輯運算后結(jié)果相同的所有地址,采用鏈表形式掛接在一級表項之后,作為二級表項的路由表;然后,根據(jù)該一二級索引表查找介質(zhì)訪問控制層的二層路由轉(zhuǎn)發(fā)表。
所述的將48位的Mac地址分段是將該48位Mac地址均分為三個各16位地址。
所述的邏輯運算是異或運算。
所述的鏈表形式是指把所有的Mac地址利用地址分段分別進行邏輯運算后,其結(jié)果相同的所有路由表項通過標志位和指針順序連接起來,形成一個鏈狀的表。
所述的路由表項中的所述標志位是尾標記,用于標識當前的路由表項是否為鏈表尾,即在當前的路由表項的后面是否還有其它的有效表項;所述指針是后向指針,用于在鏈表搜索過程中指向下一個有效的二級表項。
所述的路由表項中的所述標志位還包括頭標記,用于標識當前的路由表項是否為鏈表頭,即在當前的路由表項的前面是否還有其它的有效表項;所述指針包括前向指針,用于在鏈表搜索過程中指向前一個有效的二級表項。
所述的Hash表的一級表項的個數(shù)最多有64K個,基于組網(wǎng)的實際需要和系統(tǒng)性價比的考慮,可以只使用16K個。
該方法的具體操作步驟是A、建立一級表項的索引,其方法是取Mac地址的高、中、低各16位分別進行異或,以最終結(jié)果的16位作為查找二級表項的索引;B、建立二級表項-路由表,其方法是將每個一級表項中所有內(nèi)容相同的各個Mac地址,采用鏈表形式順序連接作為與該一級表項相對應的二級表項;C、將需要尋找路由表項的某個Mac地址的高、中、低各16位分別進行異或,以其最終結(jié)果的16位作為索引,在一級表項進行查找;D、如果查找到的相應的一級表項內(nèi)容是一個非法值,則本次查找失敗;E、如果查找到的相應的一級表項內(nèi)容是一個合法值,則以該值為索引,查找二級表項;F、讀取步驟E中找到的某個二級表項的內(nèi)容,比較其中的Mac地址是否與給定的Mac地址相同,如果兩者相同,則查找成功;否則,以步驟E中找到的某個二級表項中的后向指針作為索引,查找該鏈表中的下一個二級表項;G、多次執(zhí)行步驟F,以查找與給定的Mac地址相同的二級表項;如果直到該鏈表的鏈表尾,也沒有找到一個二級表項中的Mac地址與給定的Mac地址相同,則本次查找失敗。
所述的步驟D中一級表項內(nèi)容是一個非法值,表示該一級表項內(nèi)容沒有對應的二級表項,無法繼續(xù)查找;該非法值的數(shù)值特征應事先設置或規(guī)定。
本發(fā)明是一種采用新的Hash存儲內(nèi)容和以鏈表方式查找路由表項的方法,該方法總體和傳統(tǒng)的逐級查找方法是一樣的,也是使用一二級查找的模式,其主要區(qū)別在于二級查找的時候,二級表項不是采用逐級查找,而是采用鏈表形式查找。另外,對一級表項和二級表項的定義也有所不同一級表項的定義是先對Mac地址采用地址分段方法分別進行邏輯運算,例如將Mac地址的高、中、低各16位比特進行異或,然后用得到的最終結(jié)果16位作為索引,構(gòu)建大小為64K(可簡化為16K)的一級Hash存儲查找表。二級表項的組成是將一級表項內(nèi)容相同的所有Mac地址(例如將Mac地址的高、中、低各16位地址異或后結(jié)果相同的所有Mac地址),采用鏈表的形式掛接在一級表項后面,同時提供相關的查找指針。其結(jié)果是為了最大限度地減少沖突的可能,提高查找的效率。
本發(fā)明的Hash鏈表查找方法的最大優(yōu)點是大大節(jié)省了內(nèi)存資源的占用。簡單計算如下如果一級表項使用16位查找,需要資源為(64K×8)個字節(jié),二級表項并不使用單獨的索引,只是在二層交換路由表中增加8個字節(jié),用于存儲兩個標志位和兩個指針,以便建立二層交換路由表中的各個表項之間的雙向查找鏈表。其中前向指針和后向指針分別占用兩個字節(jié),每個標志位各占用一個比特,剩余的30比特則作為今后功能擴展時備用。同樣,假設在系統(tǒng)中最多支持N個二層路由表項的學習和轉(zhuǎn)發(fā)。則建立Hash表所需內(nèi)存資源為一級Hash表所需資源64K×8=512K(字節(jié))二級Hash表所需資源N×8=8N(字節(jié))總計(512K+8N)字節(jié)。
對比前面的分析可知,本發(fā)明Hash鏈表的查找方法所需的內(nèi)存資源等于逐級查找方法的理想情況,比后者的平均情況(即進行4位匹配上溯查找4次,平均浪費的空間的數(shù)量級為215×8字節(jié),因此,總的空間資源耗費為512K+8N+215×8字節(jié))節(jié)省的內(nèi)存空間的數(shù)量級為215×8字節(jié)。假設N=64K,則節(jié)省的空間比例大約是25%。
從查找效率上來看,本發(fā)明鏈表查找方法使用了地址分段進行邏輯運算的方法,均勻分散了Mac地址的分布,最大限度地降低了沖突的可能性,使得每個一級表項后面所掛的二級表項的個數(shù)比較少。假設N=64K,則大多數(shù)二層轉(zhuǎn)發(fā)路由表可以在1到2次內(nèi)查找到。這樣,鏈表查找算法和逐級查找算法的查找效率在數(shù)量級上是相同的。
因此,本發(fā)明方法的優(yōu)點是其實現(xiàn)方法簡單,大大降低了內(nèi)存資源的占用。同時,查找效率和逐級查找算法的效率是同一數(shù)量級的。
圖1是現(xiàn)在使用的HASH表的逐級查找方法示意圖。
圖2是本發(fā)明HASH表的鏈表查找方法的一實施例示意圖。
圖3是本發(fā)明采用Hash鏈表查找路由表項的一實施例操作步驟流程圖。
具體實施例方式
參見圖2,本發(fā)明是一種采用Hash鏈表查找路由表項的方法,該方法是將48位的介質(zhì)訪問控制層(Mac)地址分段后分別進行邏輯運算后得到的結(jié)果作為索引,組成Hash表的一級表項;再將一級表項內(nèi)容相同的所有Mac地址,即采用地址分段后分別進行邏輯運算后結(jié)果相同的所有地址,采用鏈表形式(也就是把所有的采用Mac地址分段后分別進行邏輯運算后,其結(jié)果相同的所有路由表項通過標志位和指針順序連接起來,形成一個鏈狀的表。)掛接在一級表項之后,作為二級表項的路由表;然后,根據(jù)該一二級索引表查找介質(zhì)訪問控制層的二層路由轉(zhuǎn)發(fā)表。
其中將48位的Mac地址采用地址分段方法是將該48位Mac地址均分為三個各16位地址。而邏輯運算是異或運算。
圖2中表示了路由表項中的兩個標志位-頭標記和尾標記-分別占用1個比特,它們用于標識當前的該路由表項是否為鏈表頭h(即head的縮寫)和鏈表尾t(即tail的縮寫),即在當前的該路由表項的前面和后面是否還有其它的有效表項。當路由表項中的頭標記h=1,表示該路由表項是鏈表頭,在它前面沒有其它的有效表項;而路由表項中的頭標記h=0,表示該路由表項不是鏈表頭,在它前面還有其它的有效表項。當路由表項中的尾標記t=1,表示該路由表項是鏈表尾,在它后面沒有其它的有效表項;而路由表項中的尾標記t=0,表示該路由表項不是鏈表尾,在其后面還有其它的有效表項。圖2中利用h和t的不同數(shù)值表示了一級表項Index0、Index1和Index2分別有一個二級路由表項、若干個二級路由表項和兩個二級路由表項。
圖2還展示了本發(fā)明的路由表項中的后向指針(圖示為next_pointer),該指針用于在鏈表搜索過程中指向下一個有效的二級表項,其所指向的路由表項的Mac地址的16位地址異或后的結(jié)果與當前表項的Mac地址的16位地址異或后的結(jié)果相同。前向指針的功能與后向指針相同,圖2中省略而沒有展示之。
本發(fā)明的Hash表的一級表項的個數(shù)最多可以有64K,基于組網(wǎng)的實際需要和系統(tǒng)性價比的考慮,可以只使用16K個,以簡化存儲和查找操作。
參見圖3,本發(fā)明方法的一實施例具體操作步驟的流程圖說明如下A、建立一級表項的索引,其方法是取Mac地址的高、中、低各16位分別進行異或,以最終結(jié)果(16位)作為查找二級表項的索引;B、建立二級表項-路由表,其方法是將每個一級表項中所有內(nèi)容相同的各個Mac地址,采用鏈表形式順序連接作為與該一級表項相對應的二級表項;C、將需要尋找路由表項的某個Mac地址的高、中、低各16位分別進行異或,以其最終結(jié)果(16位)作為索引,在一級表項進行查找;D、如果查找到的相應的一級表項內(nèi)容是一個非法值,即該一級表項內(nèi)容沒有對應的二級表項,無法繼續(xù)查找,則本次查找失敗;該非法值的數(shù)值特征應事先設置或規(guī)定,例如以最高位比特數(shù)值、某個或某些特定數(shù)值進行判斷;E、如果查找到的相應的一級表項內(nèi)容是一個合法值,則以該值為索引,查找二級表項;F、讀取步驟E中找到的某個二級表項的內(nèi)容,比較其中的Mac地址是否與給定的Mac地址相同,如果兩者相同,則查找成功;否則,以步驟E中找到的某個二級表項中的后向指針(Next Pointer)作為索引,查找該鏈表中的下一個二級表項;G、多次執(zhí)行步驟F,以查找與給定的Mac地址相同的二級表項;如果直到該鏈表的鏈表尾,也沒有找到一個二級表項中的Mac地址與給定的Mac地址相同,則本次查找失敗。
權(quán)利要求
1.一種采用Hash鏈表查找路由表項的方法,其特征在于該方法是將48位的介質(zhì)訪問控制層(Mac)地址分段后分別進行邏輯運算后得到的結(jié)果作為索引,組成Hash表的一級表項;再將一級表項內(nèi)容相同的所有Mac地址,即采用地址分段分別進行邏輯運算后結(jié)果相同的所有地址,采用鏈表形式掛接在一級表項之后,作為二級表項的路由表;然后,根據(jù)該一二級索引表查找介質(zhì)訪問控制層的二層路由轉(zhuǎn)發(fā)表。
2.根據(jù)權(quán)利要求1所述的采用Hash鏈表查找路由表項的方法,其特征在于所述的將48位的Mac地址分段是將該48位Mac地址均分為三個各16位地址。
3.根據(jù)權(quán)利要求1所述的采用Hash鏈表查找路由表項的方法,其特征在于所述的邏輯運算是異或運算。
4.根據(jù)權(quán)利要求1所述的采用Hash鏈表查找路由表項的方法,其特征在于所述的鏈表形式是指把所有的Mac地址利用地址分段分別進行邏輯運算后,其結(jié)果相同的所有路由表項通過標志位和指針順序連接起來,形成一個鏈狀的表。
5.根據(jù)權(quán)利要求4所述的采用Hash鏈表查找路由表項的方法,其特征在于所述的路由表項中的所述標志位是尾標記,用于標識當前的路由表項是否為鏈表尾,即在當前的路由表項的后面是否還有其它的有效表項;所述指針是后向指針,用于在鏈表搜索過程中指向下一個有效的二級表項。
6.根據(jù)權(quán)利要求4或5所述的采用Hash鏈表查找路由表項的方法,其特征在于所述的路由表項中的所述標志位還包括頭標記,用于標識當前的路由表項是否為鏈表頭,即在當前的路由表項的前面是否還有其它的有效表項;所述指針包括前向指針,用于在鏈表搜索過程中指向前一個有效的二級表項。
7.根據(jù)權(quán)利要求1所述的采用Hash鏈表查找路由表項的方法,其特征在于所述的Hash表的一級表項的個數(shù)最多有64K個,基于組網(wǎng)的實際需要和系統(tǒng)性價比的考慮,可以只使用16K個。
8.根據(jù)權(quán)利要求1或2或3所述的采用Hash鏈表查找路由表項的方法,其特征在于該方法的具體操作步驟是A、建立一級表項的索引,其方法是取Mac地址的高、中、低各16位分別進行異或,以最終結(jié)果的16位作為查找二級表項的索引;B、建立二級表項-路由表,其方法是將每個一級表項中所有內(nèi)容相同的各個Mac地址,采用鏈表形式順序連接作為與該一級表項相對應的二級表項;C、將需要尋找路由表項的某個Mac地址的高、中、低各16位分別進行異或,以其最終結(jié)果的16位作為索引,在一級表項進行查找;D、如果查找到的相應的一級表項內(nèi)容是一個非法值,則本次查找失??;.E、如果查找到的相應的一級表項內(nèi)容是一個合法值,則以該值為索引,查找二級表項;F、讀取步驟E中找到的某個二級表項的內(nèi)容,比較其中的Mac地址是否與給定的Mac地址相同,如果兩者相同,則查找成功;否則,以步驟E中找到的某個二級表項中的后向指針作為索引,查找該鏈表中的下一個二級表項;G、多次執(zhí)行步驟F,以查找與給定的Mac地址相同的二級表項;如果直到該鏈表的鏈表尾,也沒有找到一個二級表項中的Mac地址與給定的Mac地址相同,則本次查找失敗。
9.根據(jù)權(quán)利要求8所述的采用Hash鏈表查找路由表項的方法,其特征在于所述的步驟D中一級表項內(nèi)容是一個非法值,表示該一級表項內(nèi)容沒有對應的二級表項,無法繼續(xù)查找;該非法值的數(shù)值特征應事先設置或規(guī)定。
全文摘要
一種采用哈希(Hash)鏈表查找路由表項的方法,是將48位的介質(zhì)訪問控制層(Mac)地址分段后分別進行邏輯運算后得到的結(jié)果作為索引,組成Hash表的一級表項;再將一級表項內(nèi)容相同的所有Mac地址,即采用地址分段分別進行邏輯運算后結(jié)果相同的所有地址,采用鏈表形式掛接在一級表項之后,作為二級表項的路由表;然后,根據(jù)該一二級索引表查找介質(zhì)訪問控制層的二層路由轉(zhuǎn)發(fā)表。其中將48位的Mac地址分段是將該48位Mac地址均分為三個各16位地址,而邏輯運算是異或運算。本發(fā)明方法的優(yōu)點是實現(xiàn)方法簡單,大大降低了內(nèi)存空間,同時,不降低查找效率;其查找效率和傳統(tǒng)的逐級查找算法屬于同一數(shù)量級。
文檔編號H04L12/24GK1538663SQ03109878
公開日2004年10月20日 申請日期2003年4月16日 優(yōu)先權(quán)日2003年4月16日
發(fā)明者趙寧, 趙 寧 申請人:華為技術(shù)有限公司