專利名稱:路由維護(hù)方法和裝置以及路由查詢方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及報(bào)文轉(zhuǎn)發(fā)技術(shù),特別涉及
路由查詢方法、以及一種路由查詢裝置。
種路由維護(hù)方法、 一種路由維護(hù)裝置、 一種
背景技術(shù):
各類交換機(jī)、路由器等交換設(shè)備中通常都存有路由表,路由表中存放有若干條路 由表項(xiàng),每條路由表項(xiàng)都能夠表明從交換設(shè)備的哪個(gè)端口轉(zhuǎn)發(fā)對(duì)應(yīng)報(bào)文即可將該報(bào)文轉(zhuǎn)發(fā) 至下一跳。具體說,每條路由表項(xiàng)中通常都包括目的地址、IP掩碼、出端口、下一跳IP地
址等信息。 交換設(shè)備在學(xué)習(xí)到某路由表項(xiàng)后,會(huì)先存放至供CPU進(jìn)行軟轉(zhuǎn)發(fā)的軟件層路由表 中、然后再下發(fā)至轉(zhuǎn)發(fā)芯片中用于實(shí)現(xiàn)硬件層轉(zhuǎn)發(fā)的硬件層路由表。當(dāng)需要更新或刪除某 條路由表項(xiàng)時(shí),需要CPU先從軟件層路由表中查詢到該路由表項(xiàng)、然后再予以更新或刪除, 最后才會(huì)更新或刪除轉(zhuǎn)發(fā)芯片中的硬件層路由表。 因此,軟件層路由表項(xiàng)的查詢效率將直接影響到路由表項(xiàng)下發(fā)至硬件層的進(jìn)度、 從而影響報(bào)文硬件層轉(zhuǎn)發(fā)的進(jìn)度。而軟件層路由表項(xiàng)的查詢效率通常取決于路由表項(xiàng)的存 儲(chǔ)方式。 現(xiàn)有IP路由存儲(chǔ)方式大多基于樹形,公網(wǎng)和每個(gè)虛擬個(gè)人網(wǎng)絡(luò)(VirtualPrivate Network, VPN)分別占用一顆樹,并利用IP地址前綴(Prefix)作為樹節(jié)點(diǎn)。對(duì)于最大長度 為32位的IP地址前綴來說,樹的深度即為32層,那么利用IP地址從樹的根節(jié)點(diǎn)依次遍歷 每一層來查找路由表項(xiàng)時(shí),最多需要32次查找才能夠找到待查找路由表項(xiàng)所對(duì)應(yīng)的目標(biāo) 節(jié)點(diǎn),因而查詢效率較低。 為了提高查詢效率,現(xiàn)有技術(shù)基于多級(jí)哈希(Hash)表來實(shí)現(xiàn)對(duì)公網(wǎng)路由表項(xiàng)的 查詢,然而,現(xiàn)有基于多級(jí)哈希表的維護(hù)和查詢方式中,當(dāng)同一哈希元素索引由于存在多個(gè) 匹配的公網(wǎng)路由表項(xiàng)而發(fā)生哈希沖突時(shí),需要進(jìn)行多級(jí)哈希表的鏈表遍歷,因而仍然存在 查詢效率不高的問題。而且,現(xiàn)有技術(shù)多級(jí)哈希表的查詢方式,第一級(jí)哈希表對(duì)應(yīng)IP地址 前綴中的高20比特,而最高8比特所構(gòu)成的最高字節(jié)不可能為O,從而浪費(fèi)了 212、即4096 比特所占用的計(jì)算資源,還占用內(nèi)存中的較大存儲(chǔ)資源。 此外,由于組播路由既包括組播地址又包括源地址,因而現(xiàn)有多級(jí)哈希表的查詢 方式也不支持組播路由。 可見,現(xiàn)有基于多級(jí)哈希表的路由查詢方式效率不高、且通用性也不高。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明提供了一種路由維護(hù)方法、一種路由維護(hù)裝置、一種路由查詢方 法、以及一種路由查詢裝置,能夠提高路由查詢效率。 本發(fā)明提供的一種路由維護(hù)方法,分別為公網(wǎng)和每個(gè)VPN設(shè)置對(duì)應(yīng)的虛擬路由VR 表,每張VR表中包含有2M個(gè)用于與IP地址前綴最高字節(jié)匹配的M比特?cái)?shù)組元素、每個(gè)數(shù)組
10元素下可衍生出第1級(jí)哈希表和/或第1級(jí)路由集合、第i級(jí)哈希表中每個(gè)哈希元素下可 衍生出第i + l級(jí)哈希表和/或第i + l級(jí)路由集合、i大于等于1且小于等于哈希表的預(yù)設(shè) 最大級(jí)數(shù)P、P為大于等于1且小于等于32-M的正整數(shù),且對(duì)于需要存儲(chǔ)的公網(wǎng)或任意VPN 的路由表項(xiàng),該路由維護(hù)方法包括 利用該路由表項(xiàng)的IP地址前綴的最高字節(jié)在對(duì)應(yīng)VR表中查找匹配的數(shù)組元素;
當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度小于等于M時(shí),將該路由表項(xiàng)存放至匹配的 數(shù)組元素下的第1級(jí)路由集合中; 當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度大于M時(shí),從匹配的數(shù)組元素下的第1級(jí)哈 希表開始,依次查找第i級(jí)哈希表中與IP地址前綴第M+l + I^Nx M+liNx比特匹配的
0 0
Ni比特哈希元素、并針對(duì)第i級(jí)哈希表判斷該路由表項(xiàng)IP地址前綴第M+l+I^Nx 32比
特的掩碼長度是否小于等于Ni,如果是,將該路由表項(xiàng)存放至第i級(jí)哈希表中匹配的Ni比 特哈希元素下的第i+l級(jí)路由集合中,否則,繼續(xù)針對(duì)第i級(jí)哈希表中匹配的Ni比特哈希 元素下的第i+l級(jí)哈希表進(jìn)行判斷; 其中,N0取0,且Ni為滿足N1 NP之和等于32-M這一條件下任意設(shè)定的正整 數(shù)。 當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度小于等于M時(shí),以匹配的數(shù)組元素內(nèi)容為索 引在內(nèi)存中查找到第1級(jí)路由集合; 當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度大于M時(shí),以匹配的數(shù)組元素內(nèi)容為索引在 內(nèi)存中查找到第1級(jí)哈希表,然后針對(duì)第i級(jí)哈希表如果路由表項(xiàng)lP地址前綴lP地址前綴第M+l + xfiNx 32比特的掩碼長度小于
0
等于Ni,則以匹配的Ni比特哈希元素內(nèi)容為索引查找匹配的Ni比特哈希元素下的第i+l 級(jí)路由集合;如果路由表項(xiàng)IP地址前綴第M+l + liNx 32比特的掩碼長度大于Ni,則以匹
0
配的Ni比特哈希元素內(nèi)容為索引查找匹配的Ni比特哈希元素下的第i+l級(jí)哈希表。
當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度小于等于M時(shí),如果匹配的數(shù)組元素內(nèi)容為 空,則進(jìn)一步創(chuàng)建該數(shù)據(jù)元素下的第1級(jí)路由集合、并將該數(shù)組元素內(nèi)容設(shè)置為創(chuàng)建的第1 級(jí)路由集合在內(nèi)存中的地址; 當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度大于M時(shí),如果匹配的數(shù)組元素內(nèi)容為空, 則進(jìn)一步創(chuàng)建該數(shù)據(jù)元素下的第1級(jí)哈希表、并將該數(shù)組元素內(nèi)容設(shè)置為創(chuàng)建的第1級(jí)哈 希表在內(nèi)存中的地址,然后針對(duì)第i級(jí)哈希表如果路由表項(xiàng)iP地址前綴第M+l + fiNx 32比特的掩碼長度小于等于Ni,則
0
進(jìn)一步創(chuàng)建匹配的Ni比特哈希元素下的第i+l級(jí)路由集合、并將該Ni比特哈希元素內(nèi)容 設(shè)置為創(chuàng)建的第i+l級(jí)路由集合在內(nèi)存中的地址;
11
如果路由表項(xiàng)IP地址前綴第M+l + 2'Nx 32比特的掩碼長度大于Ni、且匹配
0
的Ni比特哈希元素內(nèi)容為空,則進(jìn)一步創(chuàng)建匹配的Ni比特哈希元素下的第i+l級(jí)哈希表、
并將該Ni比特哈希元素內(nèi)容設(shè)置為創(chuàng)建的第i+l級(jí)哈希表在內(nèi)存中的地址。 當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度小于等于M時(shí),如果匹配的數(shù)組元素內(nèi)容已
記錄有該數(shù)據(jù)元素下的第1級(jí)哈希表在內(nèi)存中的地址,則進(jìn)一步創(chuàng)建該數(shù)據(jù)元素下的第1
級(jí)路由集合、并設(shè)置該數(shù)組元素下的第1級(jí)哈希表內(nèi)的同級(jí)路由集合指針指向該數(shù)據(jù)元素
下的第l級(jí)路由集合; 當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度大于M時(shí),如果匹配的數(shù)組元素內(nèi)容已記錄 有該數(shù)據(jù)元素下的第1級(jí)路由集合在內(nèi)存中的地址,則進(jìn)一步創(chuàng)建該數(shù)據(jù)元素下的第1級(jí) 哈希表、并設(shè)置該數(shù)組元素下的第1級(jí)哈希表內(nèi)的同級(jí)路由集合指針指向該數(shù)據(jù)元素下的 第1級(jí)路由集合,然后針對(duì)第i級(jí)哈希表 如果路由表項(xiàng)IP地址前綴第M+l + liNx 32比特的掩碼長度小于等于Ni、且
0
匹配的Ni比特哈希元素內(nèi)容為該Ni比特哈希元素下的第i+l級(jí)哈希表在內(nèi)存中的地址, 則進(jìn)一步創(chuàng)建匹配的Ni比特哈希元素下的第i+l級(jí)路由集合、并設(shè)置該Ni比特哈希元素 下的第i+l級(jí)哈希表內(nèi)的同級(jí)路由集合指針指向該Ni比特哈希元素下的第i+l級(jí)路由集合. 如果路由表項(xiàng)IP地址前綴第M+l + li'Nx 32比特的掩碼長度大于Ni、且匹配
o
的Ni比特哈希元素內(nèi)容為該Ni比特哈希元素下的第i+l級(jí)路由集合在內(nèi)存中的地址,則
進(jìn)一步創(chuàng)建匹配的Ni比特哈希元素下的第i+l級(jí)哈希表、將該Ni比特哈希元素內(nèi)容設(shè)置
為創(chuàng)建的第i+l級(jí)哈希表在內(nèi)存中的地址、并設(shè)置該Ni比特哈希元素下的第i+l級(jí)哈希表
內(nèi)的同級(jí)路由集合指針指向該Ni比特哈希元素下的第i+l級(jí)路由集合。 每級(jí)中的每個(gè)哈希表內(nèi)的同級(jí)路由集合指針設(shè)置在該哈希表的第1字段。 每級(jí)中的每個(gè)路由集合內(nèi)進(jìn)一步設(shè)置有表示該路由集合中存放的所有路由表項(xiàng)
IP地址前綴對(duì)應(yīng)比特的最大掩碼長度和最小掩碼長度。 公網(wǎng)和每個(gè)VPN設(shè)置兩張對(duì)應(yīng)的VR表,第一 VR表用于存放組播路由表項(xiàng)、第二 VR 表用于存放單播路由表項(xiàng); 且,第一VR表的路由集合中進(jìn)一步具有路由指針,所述路由指針指向匹配其所屬 路由集合上一級(jí)數(shù)組元素或哈希元素的組播路由表項(xiàng)所對(duì)應(yīng)的第二VR表中,與對(duì)應(yīng)單播 路由表項(xiàng)IP地址前綴首字節(jié)匹配的數(shù)組元素。 利用VR-ID來區(qū)分公網(wǎng)和不同VPN所分別對(duì)應(yīng)的VR表,且連續(xù)的VPN順序?qū)?yīng)取
值連續(xù)的VR-ID。 較佳地,所述M取8。 本發(fā)明提供的一種路由維護(hù)裝置,該裝置包括CPU和內(nèi)存, 所述內(nèi)存中存儲(chǔ)有分別為公網(wǎng)和每個(gè)VPN設(shè)置的對(duì)應(yīng)虛擬路由VR表,每張VR表 中包含有2M個(gè)用于與IP地址前綴最高字節(jié)匹配的M比特?cái)?shù)組元素、每個(gè)數(shù)組元素下可衍 生出第1級(jí)哈希表和/或第1級(jí)路由集合、第i級(jí)哈希表中每個(gè)哈希元素下可衍生出第i+l級(jí)哈希表和/或第i + 1級(jí)路由集合、i大于等于1且小于等于哈希表的預(yù)設(shè)最大級(jí)數(shù)P、 P 為大于等于1且小于等于32-M的正整數(shù); 對(duì)于需要存儲(chǔ)的公網(wǎng)或任意VPN的路由表項(xiàng),所述CPU利用該路由表項(xiàng)的IP地址 前綴的最高字節(jié)在對(duì)應(yīng)VR表中查找匹配的數(shù)組元素; 當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度小于等于M時(shí),所述CPU將該路由表項(xiàng)存放 至匹配的數(shù)組元素在所述內(nèi)存中的第1級(jí)路由集合中; 當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度大于M時(shí),所述CPU從匹配的數(shù)組元 素在所述內(nèi)存中的第1級(jí)哈希表開始,依次查找第i級(jí)哈希表中與IP地址前綴第
M+l + li'Nx M+f;Nx比特匹配的Ni比特哈希元素、并針對(duì)第i級(jí)哈希表判斷該路由表
0 0
項(xiàng)IP地址前綴第M+l+^'Nx 32比特的掩碼長度是否小于等于Ni,如果是,將該路由表
0
項(xiàng)存放至第i級(jí)哈希表中匹配的Ni比特哈希元素下的第i+1級(jí)路由集合中,否則,繼續(xù)針
對(duì)第i級(jí)哈希表中匹配的Ni比特哈希元素下的第i+1級(jí)哈希表進(jìn)行判斷; 其中,N0取0,且Ni為滿足N1 NP之和等于32-M這一條件下任意設(shè)定的正整數(shù)。 當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度小于等于M時(shí),所述CPU進(jìn)一步以匹配的數(shù) 組元素內(nèi)容為索引在內(nèi)存中查找到第1級(jí)路由集合; 當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度大于M時(shí),以匹配的數(shù)組元素內(nèi)容為索引在 內(nèi)存中查找到第1級(jí)哈希表,然后依次針對(duì)第i級(jí)哈希表執(zhí)行所述判斷,且針對(duì)第i級(jí)哈希 表如果路由表項(xiàng)lP地址前綴lP地址前綴第M+l + liNx 32比特的掩碼長度小于
0
等于Ni,則所述CPU進(jìn)一步以匹配的Ni比特哈希元素內(nèi)容為索引查找匹配的Ni比特哈希 元素下的第i+1級(jí)路由集合; 如果路由表項(xiàng)IP地址前綴第M+l + liNx 32比特的掩碼長度大于Ni,則所述
0
CPU進(jìn)一步以匹配的Ni比特哈希元素內(nèi)容為索引查找匹配的Ni比特哈希元素下的第i+1 級(jí)哈希表。 當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度小于等于M時(shí),如果匹配的數(shù)組元素內(nèi)容為 空,則所述CPU進(jìn)一步在所述內(nèi)存中創(chuàng)建該數(shù)據(jù)元素下的第1級(jí)路由集合、并將該數(shù)組元素 內(nèi)容設(shè)置為創(chuàng)建的第1級(jí)路由集合在內(nèi)存中的地址; 當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度大于M時(shí),如果匹配的數(shù)組元素內(nèi)容為空, 則進(jìn)一步創(chuàng)建該數(shù)據(jù)元素下的第1級(jí)哈希表、并將該數(shù)組元素內(nèi)容設(shè)置為創(chuàng)建的第1級(jí)哈 希表在內(nèi)存中的地址,然后針對(duì)第i級(jí)哈希表 如果路由表項(xiàng)IP地址前綴第M+l + 'gNx 32比特的掩碼長度小于等于Ni、且
0
匹配的Ni比特哈希元素內(nèi)容為空,則所述CPU進(jìn)一步在所述內(nèi)存中創(chuàng)建匹配的Ni比特哈 希元素下的第i+1級(jí)路由集合、并將該Ni比特哈希元素內(nèi)容設(shè)置為創(chuàng)建的第i+1級(jí)路由集合在內(nèi)存中的地址; 如果路由表項(xiàng)IP地址前綴第M+l + xfiNx 32比特的掩碼長度大于Ni、且匹配
0
的Ni比特哈希元素內(nèi)容為空,則所述CPU進(jìn)一步在所述內(nèi)存中創(chuàng)建匹配的Ni比特哈希元 素下的第i+l級(jí)哈希表、并將該Ni比特哈希元素內(nèi)容設(shè)置為創(chuàng)建的第i+l級(jí)哈希表在內(nèi)存 中的地址。 當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度小于等于M時(shí),如果匹配的數(shù)組元素內(nèi)容已 記錄有該數(shù)據(jù)元素下的第1級(jí)哈希表在內(nèi)存中的地址,則所述CPU進(jìn)一步在所述內(nèi)存中創(chuàng) 建該數(shù)據(jù)元素下的第1級(jí)路由集合、并設(shè)置該數(shù)組元素下的第1級(jí)哈希表內(nèi)的同級(jí)路由集 合指針指向該數(shù)據(jù)元素下的第1級(jí)路由集合; 當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度大于M時(shí),如果匹配的數(shù)組元素內(nèi)容已記錄 有該數(shù)據(jù)元素下的第1級(jí)路由集合在內(nèi)存中的地址,則進(jìn)一步創(chuàng)建該數(shù)據(jù)元素下的第1級(jí) 哈希表、并設(shè)置該數(shù)組元素下的第1級(jí)哈希表內(nèi)的同級(jí)路由集合指針指向該數(shù)據(jù)元素下的 第1級(jí)路由集合,然后針對(duì)第i級(jí)哈希表 如果路由表項(xiàng)IP地址前綴第M+l + liNx 32比特的掩碼長度小于等于Ni、且
0
匹配的Ni比特哈希元素內(nèi)容為該Ni比特哈希元素下的第i+l級(jí)哈希表在內(nèi)存中的地址, 則所述CPU進(jìn)一步在所述內(nèi)存中創(chuàng)建匹配的Ni比特哈希元素下的第i+l級(jí)路由集合、并設(shè) 置該Ni比特哈希元素下的第i+l級(jí)哈希表內(nèi)的同級(jí)路由集合指針指向該Ni比特哈希元素 下的第i+l級(jí)路由集合;如果路由表項(xiàng)iP地址前綴第M+l + liNx 32比特的掩碼長度大于Ni、且匹配
0
的Ni比特哈希元素內(nèi)容為該Ni比特哈希元素下的第i+l級(jí)路由集合在內(nèi)存中的地址,則 所述CPU進(jìn)一步在所述內(nèi)存中創(chuàng)建匹配的Ni比特哈希元素下的第i+l級(jí)哈希表、將該Ni 比特哈希元素內(nèi)容設(shè)置為創(chuàng)建的第i+l級(jí)哈希表在內(nèi)存中的地址、并設(shè)置該Ni比特哈希元 素下的第i+l級(jí)哈希表內(nèi)的同級(jí)路由集合指針指向該Ni比特哈希元素下的第i+l級(jí)路由
隹A 朱n o 公網(wǎng)和每個(gè)VPN設(shè)置兩張對(duì)應(yīng)的VR表,第一 VR表用于存放組播路由表項(xiàng)、第二 VR 表用于存放單播路由表項(xiàng); 且,第一VR表的路由集合中進(jìn)一步具有路由指針,所述路由指針指向匹配其所屬 路由集合上一級(jí)數(shù)組元素或哈希元素的組播路由表項(xiàng)所對(duì)應(yīng)的第二 VR表中,與對(duì)應(yīng)單播 路由表項(xiàng)IP地址前綴首字節(jié)匹配的數(shù)組元素。 公網(wǎng)和不同VPN所分別對(duì)應(yīng)的VR表以VR-ID區(qū)分,且連續(xù)的VPN順序?qū)?yīng)取值連 續(xù)的VR-ID。 較佳地,所述M取8。 本發(fā)明提供的一種路由查詢方法,分別為公網(wǎng)和每個(gè)VPN設(shè)置對(duì)應(yīng)的虛擬路由VR 表,每張VR表中包含有2M個(gè)用于與IP地址前綴最高字節(jié)匹配的M比特?cái)?shù)組元素、每個(gè)數(shù)組 元素下可衍生出第1級(jí)哈希表和/或第1級(jí)路由集合、第i級(jí)哈希表中每個(gè)哈希元素下可 衍生出第i+l級(jí)哈希表和/或第i+l級(jí)路由集合、i大于等于1且小于等于哈希表的預(yù)設(shè)
14最大級(jí)數(shù)P、P為大于等于1且小于等于32-M的正整數(shù),且對(duì)于需要查詢的公網(wǎng)或任意VPN 的路由表項(xiàng),該路由查詢方法包括 利用該路由表項(xiàng)的IP地址前綴的最高字節(jié)在對(duì)應(yīng)VR表中查找匹配的數(shù)組元素;
當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度小于等于M時(shí),在匹配的數(shù)組元素下的第1 級(jí)路由集合中查找該路由表項(xiàng); 當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度大于M時(shí),從匹配的數(shù)組元素下的第1級(jí)哈 希表開始,依次查找第i級(jí)哈希表中與IP地址前綴第<formula>formula see original document page 15</formula>比特匹配的
Ni比特哈希元素、并針對(duì)第i級(jí)哈希表判斷該路由表項(xiàng)iP地址前綴第<formula>formula see original document page 15</formula>比
特的掩碼長度是否小于等于Ni,如果是,在第i級(jí)哈希表中匹配的Ni比特哈希元素下的第 i+l級(jí)路由集合中查找該路由表項(xiàng),否則,繼續(xù)針對(duì)第i級(jí)哈希表中匹配的Ni比特哈希元素 下的第i+1級(jí)哈希表進(jìn)行判斷; 其中,N0取0,且Ni為滿足N1 NP之和等于32-M這一條件下任意設(shè)定的正整 數(shù)。 當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度小于等于M時(shí),以匹配的數(shù)組元素內(nèi)容為索 引在內(nèi)存中查找到第1級(jí)路由集合; 當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度大于M時(shí),以匹配的數(shù)組元素內(nèi)容為索引在 內(nèi)存中查找到第1級(jí)哈希表,然后針對(duì)第i級(jí)哈希表如果路由表項(xiàng)IP地址前綴IP地址前綴第<formula>formula see original document page 15</formula>比特的掩碼長度小于
等于Ni,則以匹配的Ni比特哈希元素內(nèi)容為索引查找匹配的Ni比特哈希元素下的第i+1 級(jí)路由集合; 如果路由表項(xiàng)IP地址前綴第<formula>formula see original document page 15</formula>比特的掩碼長度大于Ni,則以匹
配的Ni比特哈希元素內(nèi)容為索引查找匹配的Ni比特哈希元素下的第i+1級(jí)哈希表。
當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度小于等于M時(shí),如果匹配的數(shù)組元素內(nèi)容為 空,則結(jié)束當(dāng)前查詢; 當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度大于M時(shí),如果匹配的數(shù)組元素內(nèi)容為空, 則結(jié)束當(dāng)前查詢。 當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度小于等于M時(shí),如果匹配的數(shù)組元素內(nèi)容已 記錄有該數(shù)據(jù)元素下的第1級(jí)哈希表在內(nèi)存中的地址,則進(jìn)一步查詢該數(shù)組元素下的第1 級(jí)哈希表內(nèi)的同級(jí)路由集合指針,如果該同級(jí)路由集合指針指向該數(shù)據(jù)元素下的第1級(jí)路 由集合,則在該第1級(jí)路由集合中查詢路由表項(xiàng),否則結(jié)束當(dāng)前查詢; 當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度大于M時(shí),如果匹配的數(shù)組元素內(nèi)容已記錄
有該數(shù)據(jù)元素下的第1級(jí)路由集合在內(nèi)存中的地址,則進(jìn)一步結(jié)束當(dāng)前查詢; 當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度大于M時(shí),且匹配的數(shù)組元素內(nèi)容為第1級(jí)
哈希表,則針對(duì)第i級(jí)哈希表
如果路由表項(xiàng)IP地址前綴第M+l + 5;'Nx 32比特的掩碼長度小于等于Ni、且
0
匹配的Ni比特哈希元素內(nèi)容為該Ni比特哈希元素下的第i+1級(jí)哈希表在內(nèi)存中的地址, 則進(jìn)一步在該Ni比特哈希元素下的第i+l級(jí)哈希表內(nèi)的同級(jí)路由集合指針,如果該同級(jí)路 由集合指針指向該Ni比特哈希元素下的第i+1級(jí)路由集合,則在該第i+1級(jí)路由集合中查 詢路由表項(xiàng),否則結(jié)束當(dāng)前查詢;如果路由表項(xiàng)IP地址前綴第M+l + liNx 32比特的掩碼長度大于Ni、且匹配
0
的Ni比特哈希元素內(nèi)容為該Ni比特哈希元素下的第i+1級(jí)路由集合在內(nèi)存中的地址,則 結(jié)束當(dāng)前查詢。 通過直接讀取哈希表的第1字段來查詢同級(jí)路由集合指針。 每級(jí)中的每個(gè)路由集合內(nèi)進(jìn)一步設(shè)置有表示該路由集合中存放的所有路由表項(xiàng) IP地址前綴對(duì)應(yīng)比特的最大掩碼長度和最小掩碼長度; 如果待查詢路由表項(xiàng)IP地址前綴對(duì)應(yīng)比特的掩碼長度大于查找到的路由集合所 記錄的最大掩碼長度、或小于查找到的路由集合所記錄的最小掩碼長度,則直接結(jié)束當(dāng)前 查詢。 公網(wǎng)和每個(gè)VPN設(shè)置兩張對(duì)應(yīng)的VR表,第一 VR表用于存放組播路由表項(xiàng)、第二 VR 表用于存放單播路由表項(xiàng); 在第一 VR表中以待查找組播路由表項(xiàng)的IP地址前綴的各比特為索引,查找到對(duì) 應(yīng)級(jí)別的路由集合、并在該路由集合中查找到待查找組播路由表項(xiàng),然后依據(jù)該路由集合 中的路由集合指針查找到對(duì)應(yīng)第二VR表中,與待查找單播表項(xiàng)的IP地址前綴的首字節(jié)匹 配的數(shù)組元素,并在該第二 VR表中以待查找單播路由表項(xiàng)的IP地址前綴的后續(xù)各比特為 索引,逐級(jí)查找到對(duì)應(yīng)級(jí)別的路由集合、并在該路由集合中查找到待查找單播路由表項(xiàng)。
利用VR-ID來區(qū)分公網(wǎng)和不同VPN所分別對(duì)應(yīng)的VR表,且連續(xù)的VPN順序?qū)?yīng)取 值連續(xù)的VR-ID。
較佳地,所述M取8。 本發(fā)明提供的一種路由查詢裝置,該裝置包括CPU和內(nèi)存, 所述內(nèi)存中存儲(chǔ)有分別為公網(wǎng)和每個(gè)VPN設(shè)置的對(duì)應(yīng)虛擬路由VR表,每張VR表 中包含有2M個(gè)用于與IP地址前綴最高字節(jié)匹配的M比特?cái)?shù)組元素、以及任意數(shù)組元素下 衍生出的第1級(jí)哈希表和/或第1級(jí)路由集合、第i級(jí)哈希表中任意個(gè)哈希元素下衍生出 的第i+1級(jí)哈希表和/或第i+1級(jí)路由集合、i大于等于1且小于等于哈希表的預(yù)設(shè)最大 級(jí)數(shù)P、 P為大于等于1且小于等于32-M的正整數(shù); 對(duì)于需要查詢的公網(wǎng)或任意VPN的路由表項(xiàng),所述CPU利用該路由表項(xiàng)的IP地址 前綴的最高字節(jié)在對(duì)應(yīng)VR表中查找匹配的數(shù)組元素; 當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度小于等于M時(shí),所述CPU在匹配的數(shù)組元素 的第1級(jí)路由集合中查找該路由表項(xiàng); 當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度大于M時(shí),所述CPU從匹配的數(shù)組元素下的 第1級(jí)哈希表開始,依次查找第i級(jí)哈希表中與IP地址前綴第M+l+^'Nx M+gNx比特匹配的Ni比特哈希元素、并針對(duì)第i級(jí)哈希表判斷該路由表項(xiàng)IP地址前綴第 M+l + f^Nx 32比特的掩碼長度是否小于等于Ni,如果是,所述CPU在第i級(jí)哈希表中匹
0
配的Ni比特哈希元素下的第i+l級(jí)路由集合中查找該路由表項(xiàng),否則,所述CPU繼續(xù)針對(duì)
第i級(jí)哈希表中匹配的Ni比特哈希元素下的第i+l級(jí)哈希表進(jìn)行判斷; 其中,N0取0、且Ni為滿足N1 NP之和等于32-M這一條件下任意設(shè)定的正整數(shù)。 當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度小于等于M時(shí),所述CPU以匹配的數(shù)組元素 內(nèi)容為索引在內(nèi)存中查找到第1級(jí)路由集合; 當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度大于M時(shí),所述CPU以匹配的數(shù)組元素內(nèi)容 為索引在內(nèi)存中查找到第1級(jí)哈希表,然后針對(duì)第i級(jí)哈希表如果路由表項(xiàng)IP地址前綴IP地址前綴第M+l + xfiNx 32比特的掩碼長度小于
0
等于Ni,則所述CPU在所述內(nèi)存中以匹配的Ni比特哈希元素內(nèi)容為索引查找匹配的Ni比 特哈希元素下的第i+l級(jí)路由集合; 如果路由表項(xiàng)IP地址前綴第M+l + liNx 32比特的掩碼長度大于Ni,則所述
0
CPU在所述內(nèi)存中以匹配的Ni比特哈希元素內(nèi)容為索引查找匹配的Ni比特哈希元素下的 第i+l級(jí)哈希表。 當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度小于等于M時(shí),如果匹配的數(shù)組元素內(nèi)容為 空,則所述CPU結(jié)束當(dāng)前查詢; 當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度大于M時(shí),如果匹配的數(shù)組元素內(nèi)容為空, 則所述CPU結(jié)束當(dāng)前查詢。 當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度小于等于M時(shí),如果匹配的數(shù)組元素內(nèi)容已 記錄有該數(shù)據(jù)元素下的第1級(jí)哈希表在內(nèi)存中的地址,則所述CPU進(jìn)一步查詢該數(shù)組元素 下的第1級(jí)哈希表內(nèi)的同級(jí)路由集合指針,如果該同級(jí)路由集合指針指向該數(shù)據(jù)元素下的 第1級(jí)路由集合,則所述CPU在該第1級(jí)路由集合中查詢路由表項(xiàng),否則結(jié)束當(dāng)前查詢;
當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度大于M時(shí),如果匹配的數(shù)組元素內(nèi)容已記錄 有該數(shù)據(jù)元素下的第1級(jí)路由集合在內(nèi)存中的地址,則所述CPU進(jìn)一步結(jié)束當(dāng)前查詢;
當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度大于M時(shí),且匹配的數(shù)組元素內(nèi)容為第1級(jí) 哈希表,則針對(duì)第i級(jí)哈希表 如果路由表項(xiàng)IP地址前綴第M+l + xf;Nx 32比特的掩碼長度小于等于Ni、且
0
匹配的Ni比特哈希元素內(nèi)容為該Ni比特哈希元素下的第i+l級(jí)哈希表在內(nèi)存中的地址, 則所述CPU進(jìn)一步在該Ni比特哈希元素下的第i+l級(jí)哈希表內(nèi)的同級(jí)路由集合指針,如果 該同級(jí)路由集合指針指向該Ni比特哈希元素下的第i+l級(jí)路由集合,則所述CPU在該第 i+l級(jí)路由集合中查詢路由表項(xiàng),否則結(jié)束當(dāng)前查詢; 如果路由表項(xiàng)IP地址前綴第M+l + liNx 32比特的掩碼長度大于Ni、且匹配
0的Ni比特哈希元素內(nèi)容為該Ni比特哈希元素下的第i+1級(jí)路由集合在內(nèi)存中的地址,則 所述CPU結(jié)束當(dāng)前查詢。 公網(wǎng)和每個(gè)VPN設(shè)置兩張對(duì)應(yīng)的VR表,第一 VR表用于存放組播路由表項(xiàng)、第二 VR 表用于存放單播路由表項(xiàng); 所述CPU在第一 VR表中以待查找組播路由表項(xiàng)的IP地址前綴的各比特為索引, 查找到對(duì)應(yīng)級(jí)別的路由集合、并在該路由集合中查找到待查找組播路由表項(xiàng),然后依據(jù)該 路由集合中的路由集合指針查找到對(duì)應(yīng)第二VR表中,與待查找單播表項(xiàng)的IP地址前綴的 首字節(jié)匹配的數(shù)組元素,并在該第二 VR表中以待查找單播路由表項(xiàng)的IP地址前綴的后續(xù) 各比特為索引,逐級(jí)查找到對(duì)應(yīng)級(jí)別的路由集合、并在該路由集合中查找到待查找單播路 由表項(xiàng)。 所述CPU利用VR-ID來區(qū)分公網(wǎng)和不同VPN所分別對(duì)應(yīng)的VR表,且連續(xù)的VPN順
序?qū)?yīng)取值連續(xù)的VR-ID。 較佳地,所述M取8。 由上述技術(shù)方案可見,本發(fā)明分別為公網(wǎng)和每個(gè)VPN設(shè)置對(duì)應(yīng)的虛擬路由VR表, 每張VR表中包含有2M個(gè)用于與IP地址前綴最高字節(jié)匹配的M比特?cái)?shù)組元素,如果路由表 項(xiàng)IP地址前綴的掩碼長度小于等于M,則以該IP地址前綴的最高字節(jié)即可區(qū)分出該路由表 項(xiàng),從而可直接在與IP地址前綴最高字節(jié)匹配的M比特?cái)?shù)組元素下衍生出路由集合來存放 該路由表項(xiàng)、并可直接在該路由集合中查找到該路由表項(xiàng);如果路由表項(xiàng)IP地址前綴的掩 碼長度大于M,則以該IP地址前綴的最高字節(jié)不足以區(qū)分出該路由表項(xiàng),從而需要衍生出 對(duì)應(yīng)IP地址前綴后續(xù)相應(yīng)比特的若干級(jí)哈希表,直至該IP地址前綴的掩碼長度小于等于 數(shù)組元素對(duì)應(yīng)的最高M(jìn)比特與后續(xù)若干級(jí)哈希表所對(duì)應(yīng)的相應(yīng)比特之和,然后在衍生出的 最后一級(jí)哈希表中與IP地址前綴對(duì)應(yīng)該級(jí)哈希表的相應(yīng)比特所匹配的哈希元素下,衍生 出路由集合來存放該路由表項(xiàng),并可按照相同方式查找到該路由集合、在該路由集合中查 找到該路由表項(xiàng)。這樣,本發(fā)明中的最多查詢次數(shù)明顯少于現(xiàn)有技術(shù)中樹形結(jié)構(gòu)的最多32 次查詢,因此,本發(fā)明能夠提高路由查詢效率。 進(jìn)一步地,針對(duì)IP地址前綴取值相同、但掩碼長度不同的路由沖突,本發(fā)明可在
匹配的同一個(gè)元素下針對(duì)短掩碼路由表項(xiàng)建立路由集合、針對(duì)長掩碼路由表項(xiàng)建立同級(jí)的
哈希表,再利用同級(jí)哈希表級(jí)聯(lián)同級(jí)的路由集合,從而解決了哈希沖突的問題。 再進(jìn)一步地,本發(fā)明可記錄每個(gè)路由集合中存放的路由表項(xiàng)的最大掩碼長度和最
小掩碼長度,從而在待查詢的路由表項(xiàng)大于記錄的最大掩碼長度、或小于記錄的最小掩碼
長度時(shí),無需在路由集合中查詢即可獲知不存在匹配的路由表項(xiàng),從而進(jìn)一步提高路由查
詢效率。 此外,本發(fā)明可以為公網(wǎng)和每個(gè)VPN分別設(shè)置兩張對(duì)應(yīng)的VR表,一張用于存放表 示組播組地址的路由表項(xiàng)、另一張用于存放表示組播源地址的路由表項(xiàng),從而也能夠適用 于組播路由,進(jìn)一步提高路由查詢的通用性。
圖1為本發(fā)明實(shí)施例中虛擬路由表的結(jié)構(gòu)示意圖;
圖2為本發(fā)明實(shí)施例中哈希表的結(jié)構(gòu)示意18
圖3為本發(fā)明實(shí)施例中路由集合的結(jié)構(gòu)示意圖; 圖4為本發(fā)明實(shí)施例中針對(duì)組播路由的一種虛擬路由表的結(jié)構(gòu)示意圖; 圖5a 圖5e為本發(fā)明實(shí)施例中實(shí)例一的路由表項(xiàng)存儲(chǔ)過程示意圖; 圖6為本發(fā)明實(shí)施例中實(shí)例二的路由表項(xiàng)存儲(chǔ)過程示意圖; 圖7a 圖7b為本發(fā)明實(shí)施例中實(shí)例三的路由表項(xiàng)刪除過程示意圖。
具體實(shí)施例方式
為使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下參照附圖并舉實(shí)施例,對(duì)
本發(fā)明進(jìn)一步詳細(xì)說明。 本發(fā)明實(shí)施例采用一級(jí)虛擬路由(Virtual Rout, VR)表、以及若干級(jí)哈希表來實(shí) 現(xiàn)路由表項(xiàng)的維護(hù)和查詢,具體參見圖1 : 分別為公網(wǎng)和每個(gè)VPN設(shè)置一對(duì)應(yīng)的VR表,每張VR表中包含有2M個(gè)用于與IP地 址前綴最高字節(jié)匹配的M比特?cái)?shù)組元素,M為大于等于1小于32的正整數(shù);其中,公網(wǎng)和不 同VPN所分別對(duì)應(yīng)的VR表可利用VR-ID來予以區(qū)分;較佳地,令連續(xù)的VPN順序?qū)?yīng)取值 連續(xù)的VR-ID,這樣,當(dāng)進(jìn)行任意VPN的私網(wǎng)路由時(shí),可按照VPN排列順序?qū)R-ID的取值作 偏移,即可直接得到對(duì)應(yīng)VR-ID、并一次查找到對(duì)應(yīng)的VR表; 每張VR表中的每個(gè)數(shù)組元素下,可衍生出第l級(jí)哈希表、和/或衍生出第l級(jí)最 多可存放M個(gè)路由表項(xiàng)的路由集合(RoutSet),那么該數(shù)組元素的內(nèi)容就為衍生出的第1級(jí) 哈希表或第1級(jí)RoutSet在內(nèi)存中的地址,以使該數(shù)組元素能夠作為衍生出的第1級(jí)哈希 表或第1級(jí)RoutSet的索引;需要說明的是,每張VR表中取值為0x00的M比特?cái)?shù)組元素, 如果沒有特殊設(shè)置,其通常只能夠匹配IP地址前綴0. 0. 0. 0,因而該數(shù)組元素下通常只會(huì) 衍生出第1級(jí)RoutSet ; 第i級(jí)的每張哈希表中,包含有2Ni個(gè)用于與IP地址前綴第 M+l + li'Nx M+f;Nx比特匹配的Ni比特哈希元素、i大于等于1且小于等于哈希表的
0 0
預(yù)設(shè)最大級(jí)數(shù)P、P為大于等于1且小于等于32-M的正整數(shù)、N0取0,且Ni為滿足Nl NP 之和等于32-M這一條件下任意設(shè)定的正整數(shù);且,在i取1 P-l時(shí),第i級(jí)哈希表中的 每個(gè)哈希元素下可衍生出第i+l級(jí)哈希表、和/或衍生出第i+l級(jí)最多存放Ni個(gè)路由表項(xiàng) 的RoutSet,而當(dāng)i取P時(shí),第i級(jí)、即第P級(jí)哈希表中的每個(gè)哈希元素下只可衍生出第i+l 級(jí)、也即第P+l級(jí)可存放1個(gè)路由表項(xiàng)的RoutSet。 這樣,在存儲(chǔ)路由表項(xiàng)時(shí),如果路由表項(xiàng)IP地址前綴的掩碼長度小于等于M,則以 該IP地址前綴的最高字節(jié)即可區(qū)分出該路由表項(xiàng),從而可直接在與IP地址前綴最高字節(jié) 匹配的M比特?cái)?shù)組元素下衍生出RoutSet來存放該路由表項(xiàng);如果路由表項(xiàng)IP地址前綴的 掩碼長度大于M,則以該IP地址前綴的最高字節(jié)不足以區(qū)分出該路由表項(xiàng),從而需要衍生 出對(duì)應(yīng)IP地址前綴后續(xù)相應(yīng)比特的若干級(jí)哈希表,直至該IP地址前綴的掩碼長度小于等 于數(shù)組元素對(duì)應(yīng)的最高M(jìn)比特與后續(xù)若干級(jí)哈希表所對(duì)應(yīng)的相應(yīng)比特之和、即以該IP地址 前綴的最高字節(jié)與后續(xù)若干哈希表所對(duì)應(yīng)的字節(jié)之和足以區(qū)分出該路由表項(xiàng),然后在衍生 出的最后一級(jí)哈希表中與IP地址前綴對(duì)應(yīng)該級(jí)哈希表的相應(yīng)比特所匹配的哈希元素下, 衍生出RoutSet來存放該路由表項(xiàng)。
19
也就是說,對(duì)于每張V R表來說,即便其中未存有路由表項(xiàng),該V R表中仍然包含 固定的2M個(gè)M比特?cái)?shù)組元素;而隨著不同路由表項(xiàng)的存入,匹配數(shù)組元素下會(huì)相應(yīng)衍生出 RoutSet、或哈希表和RoutSet。 同理,在查找路由表項(xiàng)時(shí),如果路由表項(xiàng)IP地址前綴的掩碼長度小于等于M,則以 該IP地址前綴的最高字節(jié)即可區(qū)分出該路由表項(xiàng),從而可直接在與IP地址前綴最高字節(jié) 匹配的M比特?cái)?shù)組元素下衍生出的RoutSet中查找到該路由表項(xiàng);如果路由表項(xiàng)IP地址前 綴的掩碼長度大于M,則以該IP地址前綴的最高字節(jié)不足以區(qū)分出該路由表項(xiàng),從而需要 逐級(jí)查找衍生出的對(duì)應(yīng)IP地址前綴后續(xù)相應(yīng)比特的若干級(jí)哈希表,直至該IP地址前綴的 掩碼長度小于等于數(shù)組元素對(duì)應(yīng)的最高M(jìn)比特與后續(xù)若干級(jí)哈希表所對(duì)應(yīng)的相應(yīng)比特之 和、即以該IP地址前綴的最高字節(jié)與后續(xù)若干哈希表所對(duì)應(yīng)的字節(jié)之和足以區(qū)分出該路 由表項(xiàng),然后在最后一級(jí)哈希表中與IP地址前綴對(duì)應(yīng)該級(jí)哈希表的相應(yīng)比特所匹配的哈 希元素下的RoutSet中,即可查找到該路由表項(xiàng)。 下面,結(jié)合存儲(chǔ)、查找、刪除的三種處理過程,對(duì)本發(fā)明實(shí)施例中的路由維護(hù)和查 找方法進(jìn)行詳細(xì)說明。 1)、有公網(wǎng)或任意VPN的路由表項(xiàng)需要存儲(chǔ) 1. 1)首先利用該路由表項(xiàng)的IP地址前綴的最高字節(jié)在對(duì)應(yīng)VR表中查找匹配的數(shù) 組元素,即以該路由表項(xiàng)的IP地址前綴的最高字節(jié)為索引在對(duì)應(yīng)VR表中查找匹配的數(shù)組 元素。 此后,存在兩種情況,一種是路由表項(xiàng)IP地址前綴的掩碼長度小于等于M、另一種 則是路由表項(xiàng)IP地址前綴的掩碼長度大于M。 1. 2a)、當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度小于等于M時(shí),可直接將該路由表項(xiàng) 存放至匹配的數(shù)組元素下的第1級(jí)RoutSet中。具體說,匹配的數(shù)組元素內(nèi)容已記錄有該 數(shù)據(jù)元素的第1級(jí)RoutSet在內(nèi)存中的地址,即已有匹配該數(shù)組元素、且IP地址前綴總掩 碼長度小于等于M的其它路由表項(xiàng)存儲(chǔ),則以匹配的數(shù)組元素內(nèi)容為索引在內(nèi)存中查找到 第1級(jí)RoutSet 。 此外,實(shí)際應(yīng)用中,還可能存在如下兩種特殊情況 al、匹配的數(shù)組元素內(nèi)容為空(NULL),即還未有匹配該數(shù)組元素的路由表項(xiàng)存儲(chǔ), 則在內(nèi)存中創(chuàng)建該數(shù)據(jù)元素下的第1級(jí)RoutSet、并將該數(shù)組元素內(nèi)容設(shè)置為創(chuàng)建的第1級(jí) RoutSet在內(nèi)存中的地址; a2、一種涉及沖突的特殊情況,由于之前已有IP地址前綴取值與當(dāng)前待存儲(chǔ)的路 由表項(xiàng)相同、但掩碼長度大于M的其它路由表項(xiàng)存儲(chǔ),匹配的數(shù)組元素下已建立有第1級(jí)哈 希表,從而產(chǎn)生了哈希沖突,那么此時(shí),匹配的數(shù)組元素內(nèi)容已記錄有該數(shù)據(jù)元素下的第1 級(jí)哈希表在內(nèi)存中的地址,即理應(yīng)為當(dāng)前待存儲(chǔ)路由表項(xiàng)建立第1級(jí)RoutSet的數(shù)組元素 下已建立有第1級(jí)哈希表,則仍在內(nèi)存中創(chuàng)建該數(shù)據(jù)元素下的第1級(jí)RoutSet但保留內(nèi)存 中已有的第1級(jí)哈希表、并設(shè)置該數(shù)組元素下的第1級(jí)哈希表內(nèi)預(yù)設(shè)的同級(jí)RoutSet指針 指向該數(shù)據(jù)元素下的第1級(jí)RoutSet,即通過第1級(jí)哈希表內(nèi)的同級(jí)RoutSet指針將第1級(jí) RoutSet與VR表中匹配的數(shù)組元素級(jí)聯(lián),從而對(duì)于同一個(gè)M比特?cái)?shù)組元素來說,其下級(jí)可同 時(shí)包含針對(duì)長掩碼的第1級(jí)哈希表、以及針對(duì)短掩碼的第1級(jí)RoutSet,參見圖1中VR-ID Q中的第1級(jí)哈希表及第1級(jí)RoutSet ;CN 101695054 A 然后,對(duì)于al、 a2中的任意一種,在建立第1級(jí)RoutSet之后,再將該路由表項(xiàng)存 放至匹配的數(shù)組元素下的第1級(jí)RoutSet中。 1.2b)當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度大于M時(shí),由于IP地址前綴的掩 碼長度最大會(huì)達(dá)到32,因而匹配數(shù)組元素下衍生出的哈希表級(jí)數(shù)最大可達(dá)到P級(jí),但無 論IP地址前綴的掩碼長度取值如何,均可從匹配的數(shù)組元素下的第1級(jí)哈希表開始,依
次查找第i級(jí)哈希表中與IP地址前綴第M+l + liNx M+liNx比特匹配的Ni比特哈
0 0
希元素、并針對(duì)第i級(jí)哈希表判斷該路由表項(xiàng)IP地址前綴第M+l + 2'Nx 32比特的掩
0
碼長度是否小于等于Ni ;如果是,將該路由表項(xiàng)存放至第i級(jí)哈希表中與IP地址前綴第
M+l + I^Nx M+f;Nx比特匹配的Ni比特哈希元素下的第i+1級(jí)RoutSet中,否則,繼
0 0
續(xù)針對(duì)第i級(jí)哈希表中與IP地址前綴第M+l + 2'Nx M+f;Nx比特匹配的Ni比特哈希
0 0
元素下的第i+1級(jí)哈希表進(jìn)行判斷,直至該路由表項(xiàng)IP地址前綴第M+l+I^N(x+l) 32
0
比特的掩碼長度小于等于N(i+l)為止。 具體說,在以匹配的數(shù)組元素內(nèi)容為索引在內(nèi)存中查找到第1級(jí)哈希表之后, 如果路由表項(xiàng)IP地址前綴第M+l + 2Nx 32比特的掩碼長度小于等于Ni、且匹配
0
的Ni比特哈希元素內(nèi)容已記錄有第i+l級(jí)RoutSet在內(nèi)存中的地址,即已有IP地址 前綴第M+l + li'Nx M+f;Nx比特匹配該哈希元素、且IP地址前綴總掩碼長度位于
0 0
M+l + li'Nx M+f;Nx之間的其它路由表項(xiàng)存儲(chǔ),則以匹配的Ni比特哈希元素內(nèi)容為
0 0
索引查找匹配的Ni比特哈希元素下的第i+l級(jí)RoutSet ; 如果路由表項(xiàng)IP地址前綴第M+l +》Nx 32比特的掩碼長度大于第i級(jí)哈希
0
表所對(duì)應(yīng)的Ni、且匹配的Ni比特哈希元素內(nèi)容已記錄有第i+l級(jí)哈希表在內(nèi)存中的地址, 即已有IP地址前綴第M+l + x2'Nx M+I^Nx比特匹配該哈希元素、且IP地址前綴總掩
0 o
碼長度大于M+ljNx的路由表項(xiàng)存儲(chǔ),則以匹配的Ni比特哈希元素內(nèi)容為索引查找匹配
的Ni比特哈希元素下的第i + l級(jí)哈希表; 此外,實(shí)際應(yīng)用中,針對(duì)數(shù)組元素還具體存在如下幾種特殊情況
bl、匹配的數(shù)組元素內(nèi)容為空,則進(jìn)一步創(chuàng)建該數(shù)據(jù)元素下的第1級(jí)哈希表、并將 該數(shù)組元素內(nèi)容設(shè)置為創(chuàng)建的第1級(jí)哈希表在內(nèi)存中的地址,然后針對(duì)第i級(jí)哈希表進(jìn)行 相應(yīng)處理; b2、對(duì)于一種存在哈希沖突的特殊情況,由于之前已有IP地址前綴取值與當(dāng)前待 存儲(chǔ)的路由表項(xiàng)相同、且總掩碼長度小于等于M的其它路由表項(xiàng)存儲(chǔ),因而匹配的哈希元素下已建立有第1級(jí)RoutSet,從而產(chǎn)生了哈希沖突,那么此時(shí),匹配的數(shù)組元素內(nèi)容已記錄有該數(shù)據(jù)元素下的第1級(jí)RoutSet在內(nèi)存中的地址,則進(jìn)一步在內(nèi)存中創(chuàng)建該數(shù)據(jù)元素下的第1級(jí)哈希表、并設(shè)置該數(shù)組元素下的第1級(jí)哈希表內(nèi)的同級(jí)RoutSet指針指向該數(shù)據(jù)元素下的第1級(jí)RoutSet,然后再從創(chuàng)建的第1級(jí)哈希表開始,針對(duì)第i級(jí)哈希表進(jìn)行相應(yīng)處理。 相應(yīng)地,針對(duì)第i級(jí)哈希表也存在相關(guān)的幾種特殊情況 cl、路由表項(xiàng)IP地址前綴第M+l + liNx 32比特的掩碼長度小于等于Ni、且匹
0
配的Ni比特哈希元素內(nèi)容為空,即還未有IP地址前綴第M+l + ^Nx M+f]Nx比特匹
0 o
配該哈希元素、且IP地址前綴總掩碼長度大于M+l + li'Nx的其它路由表項(xiàng)存儲(chǔ),則在內(nèi)
0
存中創(chuàng)建匹配的Ni比特哈希元素下的第i+l級(jí)RoutSet、并將該Ni比特哈希元素內(nèi)容設(shè)置為創(chuàng)建的第i+l級(jí)RoutSet在內(nèi)存中的地址; c2、對(duì)于類似于a2的一種存在哈希沖突的特殊情況,由于之前已有IP地址前綴取值與當(dāng)前待存儲(chǔ)的路由表項(xiàng)相同、且總掩碼長度大于M+f;Nx的其它路由表項(xiàng)存儲(chǔ),因而
0
匹配的哈希元素下已建立有第i+l級(jí)哈希表,從而產(chǎn)生了哈希沖突,那么此時(shí),路由表項(xiàng)IP
地址前綴第M+l + ^Nx 32比特的掩碼長度小于等于Ni、且匹配的Ni比特哈希元素內(nèi)
0
容為該Ni比特哈希元素下的第i+l級(jí)哈希表在內(nèi)存中的地址,即理應(yīng)為當(dāng)前待存儲(chǔ)路由表項(xiàng)建立第i+l級(jí)RoutSet的哈希元素下已建立有第i+l級(jí)哈希表,則在內(nèi)存中創(chuàng)建匹配的Ni比特哈希元素下的第i+l級(jí)RoutSet但保留第i+l級(jí)哈希表、并設(shè)置該Ni比特哈希元素下的第i+l級(jí)哈希表內(nèi)預(yù)設(shè)的同級(jí)RoutSet指針指向該Ni比特哈希元素下的第i+l級(jí)RoutSet,即通過第i+l級(jí)哈希表內(nèi)的同級(jí)RoutSet指針將第i+l級(jí)RoutSet與第i級(jí)哈希表中匹配的哈希元素級(jí)聯(lián),從而對(duì)于同一個(gè)Ni比特哈希元素來說,其下級(jí)可同時(shí)包含針對(duì)長掩碼的第i+l級(jí)哈希表、以及針對(duì)短掩碼的第i+l級(jí)RoutSet,參見圖1中VR-ID 1中的第i級(jí)哈希表及第i級(jí)RoutSet、 VR-ID Q中的第i級(jí)哈希表及第i級(jí)RoutSet ;
對(duì)于cl、c2這兩種情況中的任意一種,在建立第i+l級(jí)RoutSet之后,即可將該路
由表項(xiàng)存放至第i級(jí)哈希表中與IP地址前綴第M+l + I^Nx M+f;Nx比特匹配的Ni比
0 0
特哈希元素下的第i+l級(jí)RoutSet中。 c3、路由表項(xiàng)IP地址前綴第M+l + li'Nx 32比特的掩碼長度大于第i級(jí)
0
哈希表所對(duì)應(yīng)的Ni、且匹配的Ni比特哈希元素內(nèi)容為空,即還未有IP地址前綴第M+l + 5iNx M+f;Nx比特匹配該哈希元素、且IP地址前綴總掩碼長度大于
0 0
M+l + li'Nx的路由表項(xiàng)存儲(chǔ),則在內(nèi)存中創(chuàng)建匹配的Ni比特哈希元素下的第i+l級(jí)哈希
0
表、并將該Ni比特哈希元素內(nèi)容設(shè)置為創(chuàng)建的第i + l級(jí)哈希表在內(nèi)存中的地址;
c4、對(duì)于類似于b2的另一種存在哈希沖突的特殊情況,由于之前已有IP地址前綴取值與當(dāng)前待存儲(chǔ)的路由表項(xiàng)相同、且IP地址前綴總掩碼長度位于
M+l + li'Nx M+f;Nx之間的其它路由表項(xiàng)存儲(chǔ),因而匹配的哈希元素下已建
0 0
立有第i+l級(jí)RoutSet,從而產(chǎn)生了哈希沖突,那么此時(shí),路由表項(xiàng)IP地址前綴第M+i + I]Nx 32比特的掩碼長度大于第i級(jí)哈希表所對(duì)應(yīng)的Ni、且匹配的Ni比特哈希元
0
素內(nèi)容為該Ni比特哈希元素下的第i+l級(jí)RoutSet在內(nèi)存中的地址,則在內(nèi)存中創(chuàng)建匹配的Ni比特哈希元素下的第i+l級(jí)哈希表并保留第i+l級(jí)RoutSet、再將該Ni比特哈希元素內(nèi)容更改設(shè)置為創(chuàng)建的第i+l級(jí)哈希表在內(nèi)存中的地址、并設(shè)置該Ni比特哈希元素下的第i+l級(jí)哈希表內(nèi)的預(yù)設(shè)同級(jí)RoutSet指針指向該Ni比特哈希元素下的第i+l級(jí)RoutSet,即通過第i+l級(jí)哈希表內(nèi)的同級(jí)RoutSet指針將第i+l級(jí)RoutSet與第i級(jí)哈希表中匹配的哈希元素級(jí)聯(lián),從而對(duì)于同一個(gè)Ni比特哈希元素來說,其下級(jí)可同時(shí)包含針對(duì)長掩碼的第i+l級(jí)哈希表、以及針對(duì)短掩碼的第i+l級(jí)RoutSet,參見圖1中VR-ID 1中的第i級(jí)哈希表及第i級(jí)RoutSet、VR-ID Q中的第i級(jí)哈希表及第i級(jí)RoutSet ;
對(duì)于c3、c4這兩種情況中的任意一種,在建立第i+l級(jí)哈希表之后,繼續(xù)針對(duì)第i
級(jí)哈希表中與IP地址前綴第M+l + ^Nx M+f;Nx比特匹配的Ni比特哈希元素下的第
0 0
i+l級(jí)哈希表進(jìn)行判斷,直至該IP地址前綴的掩碼長度小于等于數(shù)組元素對(duì)應(yīng)的最高M(jìn)比
特與后續(xù)若干級(jí)哈希表所對(duì)應(yīng)的相應(yīng)比特之和、即以該IP地址前綴的最高字節(jié)與后續(xù)若干哈希表所對(duì)應(yīng)的字節(jié)之和足以區(qū)分出該路由表項(xiàng)。 2)、有公網(wǎng)或任意VPN的路由表項(xiàng)需要查詢 2. 1)首先利用待查詢路由表項(xiàng)的IP地址前綴的最高字節(jié)在對(duì)應(yīng)VR表中查找匹配的數(shù)組元素,即以待查詢路由表項(xiàng)的IP地址前綴的最高字節(jié)為索引在對(duì)應(yīng)VR表中查找匹配的數(shù)組元素。 此后,存在兩種情況,一種是待查詢路由表項(xiàng)IP地址前綴的掩碼長度小于等于M、另一種則是待查詢路由表項(xiàng)IP地址前綴的掩碼長度大于M。 2. 2a)、當(dāng)待查詢路由表項(xiàng)IP地址前綴的掩碼長度小于等于M時(shí),可直接在匹配的數(shù)組元素下的第1級(jí)RoutSet中進(jìn)行最長前綴匹配(LongestPrefix Match, LPM),即可查找到待查詢路由表項(xiàng)。具體說,匹配的數(shù)組元素內(nèi)容已記錄有該數(shù)據(jù)元素的第1級(jí)RoutSet在內(nèi)存中的地址,即已有匹配該數(shù)組元素、且IP地址前綴總掩碼長度小于等于M的其它路
由表項(xiàng)存儲(chǔ),則以匹配的數(shù)組元素內(nèi)容為索引在內(nèi)存中查找到第1級(jí)RoutSet。
此外,實(shí)際應(yīng)用中,還可能存在如下兩種特殊情況 dl、匹配的數(shù)組元素內(nèi)容為空,即還未有匹配該數(shù)組元素的路由表項(xiàng)存儲(chǔ),則直接確定不存在待查詢路由表項(xiàng),并結(jié)束當(dāng)前查詢流程; d2、一種涉及沖突的特殊情況,S卩,以匹配的數(shù)組元素內(nèi)容為索引在內(nèi)存中查找到第1級(jí)哈希表、而不是第1級(jí)RoutSet,此情況有可能是由于匹配的該數(shù)組元素下級(jí)同時(shí)包含針對(duì)長掩碼的第1級(jí)哈希表、以及針對(duì)短掩碼的第1級(jí)RoutSet,參見圖1中VR-ID Q中的第1級(jí)哈希表及第1級(jí)RoutSet,且第1級(jí)哈希表內(nèi)具有預(yù)設(shè)同級(jí)RoutSet指針將第1級(jí)
23RoutSet與VR表中匹配的數(shù)組元素級(jí)聯(lián),那么針對(duì)這種情況,在以匹配的數(shù)組元素內(nèi)容為索引在內(nèi)存中查找到第1級(jí)哈希表之后,讀取第1級(jí)哈希表內(nèi)的同級(jí)RoutSet指針,如果讀取的同級(jí)RoutSet指針指向第1級(jí)RoutSet、則依據(jù)讀取的同級(jí)RoutSet指針即可查找到第1級(jí)RoutSet,如果讀取的同級(jí)RoutSet指針為空,則表示不存在該數(shù)組元素下的第1級(jí)RoutSet,因而直接確定不存在待查詢路由表項(xiàng),并結(jié)束當(dāng)前查詢流程。
2. 2b)當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度大于M時(shí),由于IP地址前綴的掩碼長度最大會(huì)達(dá)到32,因而匹配數(shù)組元素下衍生出的哈希表級(jí)數(shù)最大可達(dá)到P級(jí),但無論IP地址前綴的掩碼長度取值如何,均可從匹配的數(shù)組元素下的第1級(jí)哈希表開始,依次查找第i
級(jí)哈希表中與IP地址前綴第M+l + liNx M+f;Nx比特匹配的Ni比特哈希元素、并針
0 0
對(duì)第i級(jí)哈希表判斷該路由表項(xiàng)IP地址前綴第M+l + I^Nx 32比特的掩碼長度是否小
0
于等于Ni ;如果是,則在第i級(jí)哈希表中與IP地址前綴第M+l + liNx M+f;Nx比特匹
0 0
配的Ni比特哈希元素下的第i+1級(jí)RoutSet中進(jìn)行LPM,否則,繼續(xù)針對(duì)第i級(jí)哈希表中與IP地址前綴第M+l + fiNx M+f;Nx比特匹配的Ni比特哈希元素下的第i+1級(jí)哈希表
0 0
進(jìn)行判斷,直至該路由表項(xiàng)IP地址前綴第M+l + l^'N(x+l) 32比特的掩碼長度小于等于
0
N(i+1)為止。 具體說,在以匹配的數(shù)組元素內(nèi)容為索引在內(nèi)存中查找到第1級(jí)哈希表之后,
如果路由表項(xiàng)IP地址前綴第M+l+xf;Nx 32比特的掩碼長度小于等于Ni、且匹配
0
的Ni比特哈希元素內(nèi)容已記錄有第i+1級(jí)RoutSet在內(nèi)存中的地址,即已有IP地址
前綴第M+l + I^Nx M+f;Nx比特匹配該哈希元素、且IP地址前綴總掩碼長度位于o o
M+l + I^Nx M+f;Nx之間的其它路由表項(xiàng)存儲(chǔ),則以匹配的Ni比特哈希元素內(nèi)容為
0 0
索引查找匹配的Ni比特哈希元素下的第i+1級(jí)RoutSet ;如果路由表項(xiàng)IP地址前綴第M+l + liNx 32比特的掩碼長度大于第i級(jí)哈希
0
表所對(duì)應(yīng)的Ni、且匹配的Ni比特哈希元素內(nèi)容已記錄有第i+1級(jí)哈希表在內(nèi)存中的地址,即已有IP地址前綴第M+l + li'Nx M+f;Nx比特匹配該哈希元素、且IP地址前綴總掩
0 0
碼長度大于M+f]Nx的路由表項(xiàng)存儲(chǔ),則以匹配的Ni比特哈希元素內(nèi)容為索引查找匹配
0
的Ni比特哈希元素下的第i + 1級(jí)哈希表; 此外,實(shí)際應(yīng)用中,針對(duì)數(shù)組元素還具體存在如下幾種特殊情況 el、匹配的數(shù)組元素內(nèi)容為空,則直接確定不存在待查詢路由表項(xiàng),并結(jié)束當(dāng)前查
詢流程;
e2、以匹配的數(shù)組元素內(nèi)容為索引在內(nèi)存中查找到第1級(jí)RoutSet、而不是第1級(jí)哈希表,即未存有與該數(shù)組元素匹配且IP地址前綴總掩碼長度大于M的路由表項(xiàng),則直接確定不存在待查詢路由表項(xiàng),并結(jié)束當(dāng)前查詢流程。
相應(yīng)地,針對(duì)第i級(jí)哈希表也存在相關(guān)的幾種特殊情況 fl、路由表項(xiàng)IP地址前綴第M+l + liNx 32比特的掩碼長度小于等于Ni、且匹
0
配的Ni比特哈希元素內(nèi)容為空,即還未有IP地址前綴第M+l + I^Nx M+f;Nx比特匹
0 0
配該哈希元素、且IP地址前綴總掩碼長度大于M+l + li'Nx的其它路由表項(xiàng)存儲(chǔ),則直接
0
結(jié)束當(dāng)前查詢流程; f2、對(duì)于一種存在哈希沖突的特殊情況,S卩,以匹配的哈希元素內(nèi)容為索引在內(nèi)存中查找到第i+l級(jí)哈希表、而不是第i+l級(jí)RoutSet,此情況有可能是由于匹配的該數(shù)組元素下級(jí)同時(shí)包含針對(duì)長掩碼的第i+l級(jí)哈希表、以及針對(duì)短掩碼的第i+l級(jí)RoutSet,參見圖1中VR-ID 1中的第i級(jí)哈希表及第i級(jí)RoutSet、 VR-ID Q中的第i級(jí)哈希表及第i級(jí)RoutSet,且第i+l級(jí)哈希表內(nèi)具有預(yù)設(shè)同級(jí)RoutSet指針將第i+l級(jí)RoutSet與VR表中匹配的數(shù)組元素級(jí)聯(lián),那么針對(duì)這種情況,在以匹配的哈希元素內(nèi)容為索引在內(nèi)存中查找到第i+l級(jí)哈希表之后,讀取第i+l級(jí)哈希表內(nèi)的同級(jí)RoutSet指針,如果讀取的同級(jí)RoutSet指針指向第i+l級(jí)RoutSet、則依據(jù)讀取的同級(jí)RoutSet指針即可查找到第i+l級(jí)RoutSet,并在查找到的第i+l級(jí)RoutSet中進(jìn)行LPM ;如果讀取的同級(jí)RoutSet指針為空,則表示不存在該數(shù)組元素下的第i+l級(jí)RoutSet,因而直接確定不存在待查詢路由表項(xiàng),并結(jié)束當(dāng)前查詢流程。 f3、路由表項(xiàng)IP地址前綴第M+l + ^Nx 32比特的掩碼長度大于第i級(jí)
0
哈希表所對(duì)應(yīng)的Ni、且匹配的Ni比特哈希元素內(nèi)容為空,即還未有IP地址前綴
第M+i+5;'Nx M+f;Nx比特匹配該哈希元素、且ip地址前綴總掩碼長度大于
0 0
M+1 + ^NX的路由表項(xiàng)存儲(chǔ),則直接確定不存在待查詢路由表項(xiàng),并結(jié)束當(dāng)前查詢流程;
0 f4、以匹配的哈希元素內(nèi)容為索引在內(nèi)存中查找到第i+l級(jí)RoutSet、而不是第i+l級(jí)哈希表,即未存有與該數(shù)組元素匹配且IP地址前綴總掩碼長度大于M+fiNx的路
0
由表項(xiàng),則直接確定不存在待查詢路由表項(xiàng),并結(jié)束當(dāng)前查詢流程。 3)、有公網(wǎng)或任意VPN的路由表項(xiàng)需要?jiǎng)h除 在刪除公網(wǎng)或任意VPN的路由表項(xiàng)之前,首先需要按照上述方式查找到待刪除路由表項(xiàng),在查找到待刪除路由表項(xiàng)之后,直接將該路由表項(xiàng)從其所在的RoutSet中刪除即可。而且,如果刪除了該路由表項(xiàng)的RoutSet中不再存有其他任何路由表項(xiàng),則可以進(jìn)一步將該RoutSet刪除;如果有同級(jí)的哈希表內(nèi)的預(yù)設(shè)同級(jí)RoutSet指針指向刪除的RoutSet,則還需要將同級(jí)的哈希表內(nèi)的預(yù)設(shè)同級(jí)RoutSet指針設(shè)置為空。
25
此外,對(duì)于第i級(jí)哈希表來說,如果其所有哈希元素都不具有下一級(jí)的第i + 1級(jí)哈希表、所有哈希元素下的第i+1級(jí)RoutSet均被刪除、且該第i級(jí)哈希表的同級(jí)RoutSet指針為空,則可以再進(jìn)一步地將該第i級(jí)哈希表刪除、并將該第i級(jí)哈希表的上一級(jí)哈希元素或數(shù)組元素的內(nèi)容設(shè)置為空。 以上,是結(jié)合存儲(chǔ)、查找、刪除的三種處理過程,對(duì)本發(fā)明實(shí)施例中路由維護(hù)和查找方法的詳細(xì)說明。 較佳地,參見圖2,在本發(fā)明實(shí)施例的路由維護(hù)和查找方法中,每級(jí)中的每個(gè)哈希表內(nèi)的預(yù)設(shè)同級(jí)RoutSet指針設(shè)置在該哈希表的第l字段,哈希表的后續(xù)字段則可以依次包括改哈希表的父哈希表指針(第1級(jí)哈希表的父哈希表指針為空)、作為該哈希表索引的上一級(jí)數(shù)組元素內(nèi)容或哈希元素內(nèi)容、以及該哈希表內(nèi)的所有2Ni個(gè)哈希元素。這樣,當(dāng)發(fā)生哈希沖突時(shí),直接讀取哈希表的第1字段即可依據(jù)預(yù)設(shè)同級(jí)RoutSet指針查找到同級(jí)的RoutSet,相比于預(yù)設(shè)同級(jí)RoutSet指針設(shè)置在該哈希表后續(xù)字段的其他方式,省去了該哈希表所有字段內(nèi)查詢同級(jí)RoutSet指針的處理過程,從而能夠進(jìn)一步提高路由存儲(chǔ)和查詢效率。 較佳地,參見圖3,在本發(fā)明實(shí)施例的路由維護(hù)和查找方法中,每級(jí)中的每個(gè)RoutSet內(nèi)進(jìn)一步設(shè)置有表示該RoutSet存放的所有路由表項(xiàng)IP地址前綴對(duì)應(yīng)比特(對(duì)于第1級(jí)RoutSet, IP地址前綴對(duì)應(yīng)比特為1 32比特,對(duì)于第i+1級(jí)RoutSet, IP地址
前綴對(duì)應(yīng)比特為M+l + I^Nx 32)的最大掩碼長度和最小掩碼長度,如果當(dāng)前存入至該
0
RoutSet的路由表項(xiàng)的IP地址前綴對(duì)應(yīng)比特的掩碼長度,大于該RoutSet記錄的最大掩碼長度,則將當(dāng)前存入至該RoutSet的路由表項(xiàng)的IP地址前綴的掩碼長度更新為該RoutSet記錄的最大掩碼長度;如果當(dāng)前存入至該RoutSet的路由表項(xiàng)的IP地址前綴對(duì)應(yīng)比特的掩碼長度,小于該RoutSet記錄的最小掩碼長度,則將當(dāng)前存入至該RoutSet的路由表項(xiàng)的IP地址前綴的掩碼長度更新為該RoutSet記錄的最小掩碼長度。這樣,在路由查詢時(shí),如果查詢到某個(gè)RoutSet,且已知的待查詢路由表項(xiàng)IP地址前綴對(duì)應(yīng)比特的掩碼長度大于該RoutSet記錄的最大掩碼長度,則可直接確定該RoutSet內(nèi)沒有待查詢路由表項(xiàng),從而省去了在該RoutSet內(nèi)進(jìn)行LPM匹配的過程;同理,如果已知的待查詢路由表項(xiàng)IP地址前綴對(duì)應(yīng)比特的掩碼長度小于該RoutSet記錄的最小掩碼長度,則可直接確定該RoutSet內(nèi)沒有待查詢路由表項(xiàng),從而也省去了在該RoutSet內(nèi)進(jìn)行LPM匹配的過程。進(jìn)而,由于省去了不必要的LPM匹配過程,因而進(jìn)一步提高了路由查詢的效率。 除此之外,在本發(fā)明實(shí)施例的路由維護(hù)和查詢方法中,公網(wǎng)和每個(gè)VPN可以設(shè)置兩張對(duì)應(yīng)的VR表,第一VR表用于存放IP地址前綴表示組播組(Group,G)地址的組播路由表項(xiàng)、第二VR表用于存放IP地址前綴表示單播源(Source, S)地址的單播路由表項(xiàng)。而且,參見圖4,在存放組播路由表項(xiàng)的第一 VR表的每一級(jí)RoutSet中,可進(jìn)一步具有路由指針(RoutePointer),該RoutePointer可指向匹配其所屬RoutSet上一級(jí)數(shù)組元素或哈希元素的組播路由表項(xiàng)所對(duì)應(yīng)的第二 VR表中,匹配對(duì)應(yīng)表示源地址的IP地址前綴首字節(jié)的數(shù)組元素。 這樣,路由存儲(chǔ)時(shí),在第一VR表中以組播路由表項(xiàng)的IP地址前綴的各比特為索引,查找到或建立對(duì)應(yīng)級(jí)別的RoutSet,在該RoutSet中存儲(chǔ)組播路由表項(xiàng),同時(shí),還按照單
26播路由表項(xiàng)表示源地址的IP地址前綴的首字節(jié),設(shè)置該RoutSet的RoutePointer、使之指 向?qū)?yīng)單播路由表項(xiàng)所對(duì)應(yīng)的第二 VR表中,與對(duì)應(yīng)單播路由表項(xiàng)表示源地址的IP地址前 綴的首字節(jié)匹配的數(shù)組元素,爾后,在該第二VR表中,以單播路由表項(xiàng)的IP地址前綴的后 續(xù)各比特為索引,逐級(jí)查找到對(duì)應(yīng)級(jí)別的RoutSet、并在該RoutSet中存儲(chǔ)單播路由表項(xiàng)。
同理,路由查詢時(shí),在第一VR表中以待查找組播路由表項(xiàng)的IP地址前綴的各比 特為索引,查找到或建立對(duì)應(yīng)級(jí)別的RoutSet,并在該RoutSet中LPM得到待查找組播路由 表項(xiàng),然后依據(jù)該RoutSet中的RoutePointer查找到對(duì)應(yīng)第二 VR表中與待查找單播表項(xiàng) 表示源地址的IP地址前綴的首字節(jié)匹配的數(shù)組元素,爾后,在該第二 VR表中,以待查找單 播路由表項(xiàng)的IP地址前綴的后續(xù)各比特為索引,逐級(jí)查找到對(duì)應(yīng)級(jí)別的RoutSet、并在該 RoutSet中LPM得到待查找單播路由表項(xiàng)。 在本發(fā)明實(shí)施例的路由維護(hù)裝置和路由查詢裝置中,均包括CPU和內(nèi)存,其中,路 由維護(hù)裝置和路由查詢裝置中的內(nèi)存,均用于存儲(chǔ)分別為公網(wǎng)和每個(gè)VPN設(shè)置的對(duì)應(yīng)VR 表、以及后續(xù)衍生出來的若干級(jí)哈希表和RoutSet ;而路由維護(hù)裝置中的CPU則是按照本實(shí) 施例中前述路由維護(hù)方法執(zhí)行相應(yīng)的處理,路由查詢裝置中的CPU則是按照本實(shí)施例中前 述路由查詢方法。 而且,與本發(fā)明實(shí)施例的路由維護(hù)和查找方法同理,對(duì)于本發(fā)明實(shí)施例的路由維 護(hù)裝置和路由查詢裝置來說,每級(jí)中的每個(gè)哈希表內(nèi)的預(yù)設(shè)同級(jí)RoutSet指針設(shè)置在該哈 希表的第1字段,哈希表的后續(xù)字段則可以依次包括改哈希表的父哈希表指針(第1級(jí)哈 希表的父哈希表指針為空)、作為該哈希表索引的上一級(jí)數(shù)組元素內(nèi)容或哈希元素內(nèi)容、以 及該哈希表內(nèi)的所有2M個(gè)哈希元素。這樣,當(dāng)發(fā)生哈希沖突時(shí),CPU直接讀取哈希表的第 1字段即可依據(jù)預(yù)設(shè)同級(jí)RoutSet指針查找到同級(jí)的RoutSet,相比于預(yù)設(shè)同級(jí)RoutSet指 針設(shè)置在該哈希表后續(xù)字段的其他方式,省去了該哈希表所有字段內(nèi)查詢同級(jí)RoutSet指 針的處理過程,從而能夠進(jìn)一步提高路由存儲(chǔ)和查詢效率。 此外,對(duì)于本發(fā)明實(shí)施例的路由維護(hù)裝置和路由查詢裝置來說,每級(jí)中的每個(gè) RoutSet內(nèi)進(jìn)一步設(shè)置有表示該RoutSet存放的所有路由表項(xiàng)IP地址前綴對(duì)應(yīng)比特(對(duì) 于第1級(jí)RoutSet, IP地址前綴對(duì)應(yīng)比特為1 32比特,對(duì)于第i+1級(jí)RoutSet, IP地址
前綴對(duì)應(yīng)比特為M+l + I^Nx 32 )的最大掩碼長度和最小掩碼長度,如果當(dāng)前存入至該
0
RoutSet的路由表項(xiàng)的IP地址前綴對(duì)應(yīng)比特的掩碼長度,大于該RoutSet記錄的最大掩 碼長度,則CPU將當(dāng)前存入至該RoutSet的路由表項(xiàng)的IP地址前綴的掩碼長度更新為該 RoutSet記錄的最大掩碼長度;如果當(dāng)前存入至該RoutSet的路由表項(xiàng)的IP地址前綴對(duì)應(yīng) 比特的掩碼長度,小于該RoutSet記錄的最小掩碼長度,則CPU將當(dāng)前存入至該RoutSet的 路由表項(xiàng)的IP地址前綴的掩碼長度更新為該RoutSet記錄的最小掩碼長度。這樣,在路由 查詢時(shí),如果CPU查詢到某個(gè)RoutSet,且已知的待查詢路由表項(xiàng)IP地址前綴對(duì)應(yīng)比特的掩 碼長度大于該RoutSet記錄的最大掩碼長度,則CPU可直接確定該RoutSet內(nèi)沒有待查詢 路由表項(xiàng),從而省去了在該RoutSet內(nèi)進(jìn)行LPM匹配的過程;同理,如果已知的待查詢路由 表項(xiàng)IP地址前綴對(duì)應(yīng)比特的掩碼長度小于該RoutSet記錄的最小掩碼長度,則CPU可直接 確定該RoutSet內(nèi)沒有待查詢路由表項(xiàng),從而也省去了在該RoutSet內(nèi)進(jìn)行LPM匹配的過 程。進(jìn)而,由于省去了 CPU不必要的LPM匹配過程,因而進(jìn)一步提高了路由查詢的效率。
與路由維護(hù)和查詢方法同理,在本發(fā)明實(shí)施例的路由維護(hù)和查詢裝置中,公網(wǎng)和 每個(gè)VPN可以設(shè)置兩張對(duì)應(yīng)的VR表,第一 VR表用于存放IP地址前綴表示組播組地址的 組播路由表項(xiàng)、第二VR表用于存放IP地址前綴表示單播源地址的單播路由表項(xiàng)。而且, 在存放組播路由表項(xiàng)的第一 VR表的每一級(jí)RoutSet中,可進(jìn)一步具有RoutePointer,該 RoutePointer可指向匹配其所屬RoutSet上一級(jí)數(shù)組元素或哈希元素的組播路由表項(xiàng)所 對(duì)應(yīng)的第二 VR表中,匹配對(duì)應(yīng)表示源地址的IP地址前綴首字節(jié)的數(shù)組元素。
這樣,路由存儲(chǔ)時(shí),CPU在第一VR表中以組播路由表項(xiàng)的IP地址前綴的各比特為 索引,查找到或建立對(duì)應(yīng)級(jí)別的RoutSet,在該RoutSet中存儲(chǔ)組播路由表項(xiàng),同時(shí),CPU還 按照單播路由表項(xiàng)表示源地址的IP地址前綴的首字節(jié),設(shè)置該RoutSet的RoutePointer、 使之指向?qū)?yīng)單播路由表項(xiàng)所對(duì)應(yīng)的第二 VR表中,與對(duì)應(yīng)單播路由表項(xiàng)表示源地址的IP 地址前綴的首字節(jié)匹配的數(shù)組元素,爾后,在該第二 VR表中,以單播路由表項(xiàng)的IP地址前 綴的后續(xù)各比特為索引,逐級(jí)查找到對(duì)應(yīng)級(jí)別的RoutSet、并在該RoutSet中存儲(chǔ)單播路由 表項(xiàng)。 同理,路由查詢時(shí),CPU在第一VR表中以待查找組播路由表項(xiàng)的IP地址前綴的各 比特為索引,查找到或建立對(duì)應(yīng)級(jí)別的RoutSet,并在該RoutSet中LPM得到待查找組播路 由表項(xiàng),然后CPU依據(jù)該RoutSet中的RoutePointer查找到對(duì)應(yīng)第二VR表中與待查找單播 表項(xiàng)表示源地址的IP地址前綴的首字節(jié)匹配的數(shù)組元素,爾后,在該第二VR表中,CPU以待 查找單播路由表項(xiàng)的IP地址前綴的后續(xù)各比特為索引,逐級(jí)查找到對(duì)應(yīng)級(jí)別的RoutSet、 并在該RoutSet中LPM得到待查找單播路由表項(xiàng)。 由此可見,本發(fā)明實(shí)施例中的路由維護(hù)和查詢方法、以及路由維護(hù)和查詢裝置,分 別為公網(wǎng)和每個(gè)VPN設(shè)置對(duì)應(yīng)的虛擬路由VR表,每張VR表中包含有2M個(gè)用于與IP地址 前綴最高字節(jié)匹配的M比特?cái)?shù)組元素,如果路由表項(xiàng)IP地址前綴的掩碼長度小于等于M,則 以該IP地址前綴的最高字節(jié)即可區(qū)分出該路由表項(xiàng),從而可直接在與IP地址前綴最高字 節(jié)匹配的M比特?cái)?shù)組元素下衍生出路由集合來存放該路由表項(xiàng)、并可直接在該路由集合中 查找到該路由表項(xiàng);如果路由表項(xiàng)IP地址前綴的掩碼長度大于M,則以該IP地址前綴的最 高字節(jié)不足以區(qū)分出該路由表項(xiàng),從而需要衍生出對(duì)應(yīng)IP地址前綴后續(xù)相應(yīng)比特的若干 級(jí)哈希表,直至該IP地址前綴的掩碼長度小于等于數(shù)組元素對(duì)應(yīng)的最高M(jìn)比特與后續(xù)若干 級(jí)哈希表所對(duì)應(yīng)的相應(yīng)比特之和,然后在衍生出的最后一級(jí)哈希表中與IP地址前綴對(duì)應(yīng) 該級(jí)哈希表的相應(yīng)比特所匹配的哈希元素下,衍生出路由集合來存放該路由表項(xiàng),并可按 照相同方式查找到該路由集合、在該路由集合中查找到該路由表項(xiàng)。 這樣,最多需要2(1級(jí)哈希表的情況)次 33-M次(32-M級(jí)哈希表的情況)直接 地址查詢,明顯少于(M大于1時(shí))或不多于(M等于1時(shí))現(xiàn)有技術(shù)中樹形結(jié)構(gòu)的最多32 次查詢,且M取值越大,查詢次數(shù)越是明顯少于現(xiàn)有技術(shù)中樹形結(jié)構(gòu)的最多32次查詢,從而 能夠提高路由查詢效率。 進(jìn)一步地,針對(duì)IP地址前綴取值相同、但掩碼長度不同的路由沖突,本發(fā)明實(shí)施 例可在匹配的同一個(gè)元素下針對(duì)短掩碼路由表項(xiàng)建立路由集合、針對(duì)長掩碼路由表項(xiàng)建立 同級(jí)的哈希表,再利用同級(jí)哈希表級(jí)聯(lián)同級(jí)的路由集合,從而解決了哈希沖突的問題。
再進(jìn)一步地,本發(fā)明實(shí)施例可記錄每個(gè)路由集合中存放的路由表項(xiàng)的最大掩碼長 度和最小掩碼長度,從而在待查詢的路由表項(xiàng)大于記錄的最大掩碼長度、或小于記錄的最
28小掩碼長度時(shí),無需在路由集合中查詢即可獲知不存在匹配的路由表項(xiàng),從而進(jìn)一步提高 路由查詢效率。 此外,本發(fā)明實(shí)施例可以為公網(wǎng)和每個(gè)VPN分別設(shè)置兩張對(duì)應(yīng)的VR表, 一張用于 存放表示組播組地址的路由表項(xiàng)、另一張用于存放表示組播源地址的路由表項(xiàng),從而也能 夠適用于組播路由,進(jìn)一步提高路由查詢的通用性。 下面,再舉若干實(shí)例,對(duì)本發(fā)明實(shí)施例中的路由維護(hù)和查詢方法、以及路由維護(hù)和 查詢裝置進(jìn)行進(jìn)一步說明。 在下述若干實(shí)例中,數(shù)組元素的比特?cái)?shù)M取8,哈希表級(jí)數(shù)最大為4級(jí),且第1級(jí) 哈希表對(duì)應(yīng)IP地址前綴的第9 20比特、第2級(jí)哈希表對(duì)應(yīng)IP地址前綴的第21 24比 特、第3級(jí)哈希表對(duì)應(yīng)IP地址前綴的第25 28比特、第4級(jí)哈希表對(duì)應(yīng)IP地址前綴的第 29 32比特,也就是說,VR表中的數(shù)組元素對(duì)應(yīng)IP地址的最高字節(jié),第1 4級(jí)哈希表則 順序?qū)?yīng)IP地址前綴的后續(xù)12、4、4、4比特。
實(shí)例一 對(duì)于需要存儲(chǔ)的IP地址前綴為1. 2. 3. 4/31的VPN1的私網(wǎng)路由表項(xiàng),依據(jù)VR-ID1 定位至VPN1對(duì)應(yīng)VR表。 在VPNl對(duì)應(yīng)VR表中,利用該路由表項(xiàng)的IP地址前綴l. 2. 3. 4/31的最高字節(jié)0x01 查找匹配的第2數(shù)組元素、即數(shù)組元素0x01。由于1. 2. 3. 4/31的掩碼長度大于8,因而查 找數(shù)組元素0x01下的第l級(jí)哈希表。但由于數(shù)組元素0x01的內(nèi)容為空,因而參見圖5a,創(chuàng) 建該數(shù)據(jù)元素0x01下的第1級(jí)哈希表、并將該數(shù)組元素0x01的內(nèi)容設(shè)置為創(chuàng)建的第1級(jí) 哈希表在內(nèi)存中的地址。 在第1級(jí)哈希表中,利用該路由表項(xiàng)的IP地址前綴1. 2. 3. 4/31的第9 20比特 0x020為索引查找到匹配的哈希元素0x020,由于從第9 32比特的掩碼長度(31-8) = 23 大于12,因而查找哈希元素0x020下的第2級(jí)哈希表。但由于哈希元素0x020的內(nèi)容為空, 因而參見圖5b,創(chuàng)建該哈希元素0x020下的第2級(jí)哈希表、并將該哈希元素0x020的內(nèi)容設(shè) 置為創(chuàng)建的第2級(jí)哈希表在內(nèi)存中的地址。 在第2級(jí)哈希表中,利用該路由表項(xiàng)的IP地址前綴1. 2. 3. 4/31的第21 24比 特0x3為索引查找到匹配的哈希元素0x3,由于第21 32比特的掩碼長度(31-8-12)= 11大于4,因而查找哈希元素0x3下的第3級(jí)哈希表。但由于哈希元素0x3的內(nèi)容為空,因 而參見圖5c,創(chuàng)建該哈希元素0x3下的第3級(jí)哈希表、并將該哈希元素0x3的內(nèi)容設(shè)置為創(chuàng) 建的第3級(jí)哈希表在內(nèi)存中的地址。 在第3級(jí)哈希表中,利用該路由表項(xiàng)的IP地址前綴1. 2. 3. 4/31的第25 28比 特0x0為索引查找到匹配的哈希元素0x0,由于第25 32比特的掩碼長度(31_8_12_4)= 7大于4,因而查找哈希元素0x0下的第4級(jí)哈希表。但由于哈希元素OxO的內(nèi)容為空,因 而參見圖5d,創(chuàng)建該哈希元素0x0下的第4級(jí)哈希表、并將該哈希元素0x0的內(nèi)容設(shè)置為創(chuàng) 建的第4級(jí)哈希表在內(nèi)存中的地址。 在第4級(jí)哈希表中,利用該路由表項(xiàng)的IP地址前綴1. 2. 3. 4/31的第28 32比 特0x4為索引查找到匹配的哈希元素0x4,由于第28 32比特的掩碼長度(31-8-12-4-4) =3小于4,因而查找哈希元素0x4下的第5級(jí)RoutSet。但由于哈希元素0x4的內(nèi)容為 空,因而參見圖5e,創(chuàng)建該哈希元素0x4下的第5級(jí)RoutSet、并將該哈希元素0x0的內(nèi)容設(shè)置為創(chuàng)建的第4級(jí)哈希表在內(nèi)存中的地址,然后在第5級(jí)RoutSet中存放IP地址前綴為 1. 2. 3. 4/31的VPN1的私網(wǎng)路由表項(xiàng),并將該RoutSet的最大掩碼長度和最小掩碼長度均設(shè) 置為3。 此后,當(dāng)需要查找IP地址前綴為1. 2. 3. 4/31的VPN1的私網(wǎng)路由表項(xiàng)時(shí),首先依 據(jù)VR-ID1定位至VPN1對(duì)應(yīng)的VR表,然后依次以0x01、0x020、0x3、0x0、0x4為索引,通過數(shù) 組元素Ox01、數(shù)組元素0x01下第1級(jí)哈希表中的哈希元素0x020、該哈希元素0x020下第2 級(jí)哈希表中的哈希元素0x3、該哈希元素下0x3第3級(jí)哈希表中的哈希元素OxO、該哈希元 素0x0下第4級(jí)哈希表中的哈希元素0x4,查找到該哈希元素0x4下的RoutSet。此后,由于 IP地址前綴為1. 2. 3. 4/31的最后4位掩碼長度為3,未大于該哈希元素0x4下的RoutSet 中的最大掩碼長度、也未小于該RoutSet中的最小掩碼長度,因而在RoutSet中即可LPM得 到IP地址前綴為1. 2. 3. 4/31的VPN1的私網(wǎng)路由表項(xiàng)。
實(shí)例二 基于實(shí)例一如圖5e的存儲(chǔ)結(jié)果,又有IP地址前綴為1. 2. 0. 0/16的VPN1的私網(wǎng) 路由表項(xiàng)需要存儲(chǔ),依據(jù)VR-ID1定位至VPN1對(duì)應(yīng)VR表。 在VPN1對(duì)應(yīng)VR表中,利用該路由表項(xiàng)的IP地址前綴1. 2. 0. 0/16的最高字節(jié)OxOl 查找匹配的第2數(shù)組元素、即數(shù)組元素0x01。由于1. 2. 0. 0/16的掩碼長度大于8,且該數(shù) 組元素0x01的內(nèi)容為創(chuàng)建的第1級(jí)哈希表在內(nèi)存中的地址,因而以數(shù)組元素0x01的內(nèi)容 為索引,在內(nèi)存中查找數(shù)組元素0x01下的第1級(jí)哈希表。 在第1級(jí)哈希表中,利用該路由表項(xiàng)的IP地址前綴1. 2. 0. 0/16的第9 20比特 0x020為索引查找到匹配的哈希元素0x020,由于從第9 32比特的掩碼長度(16_8) = 8 小于12,因而查找哈希元素0x020下的第2級(jí)RoutSet。但由于哈希元素0x020的內(nèi)容為 第2級(jí)哈希表,因而參見圖6,創(chuàng)建該哈希元素0x020下的第2級(jí)RoutSet但保留該哈希元 素0x020下的第2級(jí)哈希表、并設(shè)置該哈希元素0x020下的第2級(jí)哈希表內(nèi)的同級(jí)RoutSet 指針指向創(chuàng)建的第2級(jí)RoutSet,然后在第2級(jí)RoutSet中存放IP地址前綴為1. 2. 0. 0/16 的VPN1的私網(wǎng)路由表項(xiàng),并將該RoutSet的最大掩碼長度和最小掩碼長度均設(shè)置為8。
此后,當(dāng)需要查找IP地址前綴為1. 2. 0. 0/16的VPN1的私網(wǎng)路由表項(xiàng)時(shí),首先依 據(jù)VR-ID1定位至VPN1對(duì)應(yīng)的VR表,然后依次以0x01、0x020為索引,通過數(shù)組元素0x01、 數(shù)組元素0x01下第1級(jí)哈希表中的哈希元素0x020、該哈希元素0x020下第2級(jí)哈希表 的同級(jí)RoutSet指針查找到該哈希元素0x020下的RoutSet。此后,由于IP地址前綴為 1. 2. 0. 0/16的第9 32位掩碼長度為8,未大于該哈希元素0x020下的RoutSet中的最大 掩碼長度、也未小于該RoutSet中的最小掩碼長度,因而在RoutSet中即可LPM得到IP地 址前綴為1. 2. 0. 0/16的VPN1的私網(wǎng)路由表項(xiàng)。
實(shí)例三 基于實(shí)例二如圖6的存儲(chǔ)結(jié)果,有IP地址前綴為1. 2. 3. 4/31的VPN1的私網(wǎng)路由 表項(xiàng)需要查詢并刪除,依據(jù)VR-ID1定位至VPN1對(duì)應(yīng)VR表。 在VPN1對(duì)應(yīng)VR表中,利用該路由表項(xiàng)的IP地址前綴的最高字節(jié)OxOl查找匹配 的第2數(shù)組元素、即數(shù)組元素0x01。由于1. 2. 3. 4/31的掩碼長度大于8,因而以數(shù)組元素 0x01的內(nèi)容為索引查找數(shù)組元素0x01下的第1級(jí)哈希表。 在第1級(jí)哈希表中,利用該路由表項(xiàng)的IP地址前綴1. 2. 3. 4/31的第9 20比特0x020為索引查找到匹配的哈希元素0x020,由于從第9 32比特的掩碼長度(31_8) = 23 大于12,因而以哈希元素0x020的內(nèi)容為索引查找哈希元素0x020下的第2級(jí)哈希表。
在第2級(jí)哈希表中,利用該路由表項(xiàng)的IP地址前綴1. 2. 3. 4/31的第21 24比 特0x3為索引查找到匹配的哈希元素0x3,由于第21 32比特的掩碼長度(31-8-12)= 11大于4,因而以哈希元素0x3的內(nèi)容為索引查找哈希元素0x3下的第3級(jí)哈希表。
在第3級(jí)哈希表中,利用該路由表項(xiàng)的IP地址前綴1. 2. 3. 4/31的第25 28比 特0x0為索引查找到匹配的哈希元素0x0,由于第25 32比特的掩碼長度(31_8_12_4)= 7大于4,因而以哈希元素0x0的內(nèi)容為索引查找哈希元素0x0下的第4級(jí)哈希表。
在第4級(jí)哈希表中,利用該路由表項(xiàng)的IP地址前綴1. 2. 3. 4/31的第28 32比 特0x4為索引查找到匹配的哈希元素0x4,由于第28 32比特的掩碼長度(31-8-12-4-4) =3小于4,因而以哈希元素0x4的內(nèi)容為索引查找哈希元素0x4下的第5級(jí)RoutSet。
在第5級(jí)RoutSet中,參見圖7a,將IP地址前綴為1. 2. 3. 4/31的VPN1的私網(wǎng)路 由表項(xiàng)刪除,且由于該RoutSet為空,因而還將該RoutSet刪除,并將第4級(jí)哈希表中哈希 元素0x4的內(nèi)容設(shè)置為空。參見圖7b,由于第4級(jí)哈希表中所有哈希元素的內(nèi)容均為空, 因而刪除第4級(jí)哈希表,并將第3級(jí)哈希表中哈希元素0x0的內(nèi)容設(shè)置為空,依此類推,第 3級(jí)哈希表和第2級(jí)哈希表也被刪除,但由于第1級(jí)哈希表的哈希元素0x020下還具有第2 級(jí)RoutSet,因而將第l級(jí)哈希表的哈希元素0x020內(nèi)容改為第2級(jí)RoutSet在內(nèi)存中的地 址,即將哈希元素0x020的內(nèi)容改為第2級(jí)RoutSet的索引。 以上三個(gè)實(shí)例均是以VPN的私網(wǎng)路由為例,公網(wǎng)路由的存儲(chǔ)、查詢、刪除過程與之 相同,組播路由的存儲(chǔ)、查詢、刪除過程也與之同理、但需要通過RoutPointer執(zhí)行對(duì)兩個(gè) VR表的處理。 以上所述僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在 本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換以及改進(jìn)等,均應(yīng)包含在本發(fā)明的保 護(hù)范圍之內(nèi)。
3權(quán)利要求
一種路由維護(hù)方法,其特征在于,分別為公網(wǎng)和每個(gè)VPN設(shè)置對(duì)應(yīng)的虛擬路由VR表,每張VR表中包含有2M個(gè)用于與IP地址前綴最高字節(jié)匹配的M比特?cái)?shù)組元素、每個(gè)數(shù)組元素下可衍生出第1級(jí)哈希表和/或第1級(jí)路由集合、第i級(jí)哈希表中每個(gè)哈希元素下可衍生出第i+1級(jí)哈希表和/或第i+1級(jí)路由集合、i大于等于1且小于等于哈希表的預(yù)設(shè)最大級(jí)數(shù)P、P為大于等于1且小于等于32-M的正整數(shù),且對(duì)于需要存儲(chǔ)的公網(wǎng)或任意VPN的路由表項(xiàng),該路由維護(hù)方法包括利用該路由表項(xiàng)的IP地址前綴的最高字節(jié)在對(duì)應(yīng)VR表中查找匹配的數(shù)組元素;當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度小于等于M時(shí),將該路由表項(xiàng)存放至匹配的數(shù)組元素下的第1級(jí)路由集合中;當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度大于M時(shí),從匹配的數(shù)組元素下的第1級(jí)哈希表開始,依次查找第i級(jí)哈希表中與IP地址前綴第比特匹配的Ni比特哈希元素、并針對(duì)第i級(jí)哈希表判斷該路由表項(xiàng)IP地址前綴第比特的掩碼長度是否小于等于Ni,如果是,將該路由表項(xiàng)存放至第i級(jí)哈希表中匹配的Ni比特哈希元素下的第i+1級(jí)路由集合中,否則,繼續(xù)針對(duì)第i級(jí)哈希表中匹配的Ni比特哈希元素下的第i+1級(jí)哈希表進(jìn)行判斷;其中,N0取0,且Ni為滿足N1~NP之和等于32-M這一條件下任意設(shè)定的正整數(shù)。
2. 如權(quán)利要求l所述的路由維護(hù)方法,其特征在于,當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度小于等于M時(shí),以匹配的數(shù)組元素內(nèi)容為索引在 內(nèi)存中查找到第1級(jí)路由集合;當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度大于M時(shí),以匹配的數(shù)組元素內(nèi)容為索引在內(nèi)存 中查找到第1級(jí)哈希表,然后針對(duì)第i級(jí)哈希表如果路由表項(xiàng)IP地址前綴IP地址前綴第<formula>formula see original document page 2</formula>比特的掩碼長度小于等于0Ni,則以匹配的Ni比特哈希元素內(nèi)容為索引查找匹配的Ni比特哈希元素下的第i+l級(jí)路 由集合;如果路由表項(xiàng)IP地址前綴第<formula>formula see original document page 2</formula>比特的掩碼長度大于Ni,則以匹配的 Ni比特哈希元素內(nèi)容為索引查找匹配的Ni比特哈希元素下的第i+l級(jí)哈希表。
3. 如權(quán)利要求2所述的路由維護(hù)方法,其特征在于,當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度小于等于M時(shí),如果匹配的數(shù)組元素內(nèi)容為空, 則進(jìn)一步創(chuàng)建該數(shù)據(jù)元素下的第1級(jí)路由集合、并將該數(shù)組元素內(nèi)容設(shè)置為創(chuàng)建的第1級(jí) 路由集合在內(nèi)存中的地址;當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度大于M時(shí),如果匹配的數(shù)組元素內(nèi)容為空,則進(jìn) 一步創(chuàng)建該數(shù)據(jù)元素下的第1級(jí)哈希表、并將該數(shù)組元素內(nèi)容設(shè)置為創(chuàng)建的第1級(jí)哈希表 在內(nèi)存中的地址,然后針對(duì)第i級(jí)哈希表如果路由表項(xiàng)iP地址前綴第<formula>formula see original document page 2</formula>比特的掩碼長度小于等于Ni,則進(jìn)一步創(chuàng)建匹配的Ni比特哈希元素下的第i+l級(jí)路由集合、并將該Ni比特哈希元素內(nèi)容設(shè)置 為創(chuàng)建的第i+l級(jí)路由集合在內(nèi)存中的地址;如果路由表項(xiàng)IP地址前綴第M+l + 2Nx 32比特的掩碼長度大于Ni、且匹配的Ni0比特哈希元素內(nèi)容為空,則進(jìn)一步創(chuàng)建匹配的Ni比特哈希元素下的第i+l級(jí)哈希表、并將 該Ni比特哈希元素內(nèi)容設(shè)置為創(chuàng)建的第i+l級(jí)哈希表在內(nèi)存中的地址。
4. 如權(quán)利要求3所述的路由維護(hù)方法,其特征在于,當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度小于等于M時(shí),如果匹配的數(shù)組元素內(nèi)容已記錄 有該數(shù)據(jù)元素下的第1級(jí)哈希表在內(nèi)存中的地址,則進(jìn)一步創(chuàng)建該數(shù)據(jù)元素下的第1級(jí)路 由集合、并設(shè)置該數(shù)組元素下的第1級(jí)哈希表內(nèi)的同級(jí)路由集合指針指向該數(shù)據(jù)元素下的 第l級(jí)路由集合;當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度大于M時(shí),如果匹配的數(shù)組元素內(nèi)容已記錄有該 數(shù)據(jù)元素下的第1級(jí)路由集合在內(nèi)存中的地址,則進(jìn)一步創(chuàng)建該數(shù)據(jù)元素下的第1級(jí)哈希 表、并設(shè)置該數(shù)組元素下的第1級(jí)哈希表內(nèi)的同級(jí)路由集合指針指向該數(shù)據(jù)元素下的第1 級(jí)路由集合,然后針對(duì)第i級(jí)哈希表如果路由表項(xiàng)iP地址前綴第M+l + liNx 32比特的掩碼長度小于等于Ni、且匹配0的Ni比特哈希元素內(nèi)容為該Ni比特哈希元素下的第i+l級(jí)哈希表在內(nèi)存中的地址,則進(jìn) 一步創(chuàng)建匹配的Ni比特哈希元素下的第i+l級(jí)路由集合、并設(shè)置該Ni比特哈希元素下的 第i+l級(jí)哈希表內(nèi)的同級(jí)路由集合指針指向該Ni比特哈希元素下的第i+l級(jí)路由集合;如果路由表項(xiàng)iP地址前綴第M+l + liNx 32比特的掩碼長度大于Ni、且匹配的Ni0比特哈希元素內(nèi)容為該Ni比特哈希元素下的第i+l級(jí)路由集合在內(nèi)存中的地址,則進(jìn)一步 創(chuàng)建匹配的Ni比特哈希元素下的第i+l級(jí)哈希表、將該Ni比特哈希元素內(nèi)容設(shè)置為創(chuàng)建 的第i+l級(jí)哈希表在內(nèi)存中的地址、并設(shè)置該Ni比特哈希元素下的第i+l級(jí)哈希表內(nèi)的同 級(jí)路由集合指針指向該Ni比特哈希元素下的第i+l級(jí)路由集合。
5. 如權(quán)利要求4所述的路由維護(hù)方法,其特征在于,每級(jí)中的每個(gè)哈希表內(nèi)的同級(jí)路 由集合指針設(shè)置在該哈希表的第1字段。
6. 如權(quán)利要求1至5中任一項(xiàng)所述的路由維護(hù)方法,其特征在于,每級(jí)中的每個(gè)路由集 合內(nèi)進(jìn)一步設(shè)置有表示該路由集合中存放的所有路由表項(xiàng)IP地址前綴對(duì)應(yīng)比特的最大掩 碼長度和最小掩碼長度。
7. 如權(quán)利要求1至5中任一項(xiàng)所述的路由維護(hù)方法,其特征在于,公網(wǎng)和每個(gè)VPN設(shè)置 兩張對(duì)應(yīng)的VR表,第一 VR表用于存放組播路由表項(xiàng)、第二 VR表用于存放單播路由表項(xiàng);且,第一VR表的路由集合中進(jìn)一步具有路由指針,所述路由指針指向匹配其所屬路由 集合上一級(jí)數(shù)組元素或哈希元素的組播路由表項(xiàng)所對(duì)應(yīng)的第二VR表中,與對(duì)應(yīng)單播路由 表項(xiàng)IP地址前綴首字節(jié)匹配的數(shù)組元素。
8. 如權(quán)利要求1至5中任一項(xiàng)所述的路由維護(hù)方法,其特征在于,利用VR-ID來區(qū)分公 網(wǎng)和不同VPN所分別對(duì)應(yīng)的VR表,且連續(xù)的VPN順序?qū)?yīng)取值連續(xù)的VR-ID。
9. 如權(quán)利要求1至5中任一項(xiàng)所述的路由維護(hù)方法,其特征在于,所述M取8。
10. —種路由維護(hù)裝置,該裝置包括CPU和內(nèi)存,其特征在于,所述內(nèi)存中存儲(chǔ)有分別為公網(wǎng)和每個(gè)VPN設(shè)置的對(duì)應(yīng)虛擬路由VR表,每張VR表中包 含有2M個(gè)用于與IP地址前綴最高字節(jié)匹配的M比特?cái)?shù)組元素、每個(gè)數(shù)組元素下可衍生出 第1級(jí)哈希表和/或第1級(jí)路由集合、第i級(jí)哈希表中每個(gè)哈希元素下可衍生出第i+1級(jí) 哈希表和/或第i+1級(jí)路由集合、i大于等于1且小于等于哈希表的預(yù)設(shè)最大級(jí)數(shù)P、 P為 大于等于1且小于等于32-M的正整數(shù);對(duì)于需要存儲(chǔ)的公網(wǎng)或任意VPN的路由表項(xiàng),所述CPU利用該路由表項(xiàng)的IP地址前綴 的最高字節(jié)在對(duì)應(yīng)VR表中查找匹配的數(shù)組元素;當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度小于等于M時(shí),所述CPU將該路由表項(xiàng)存放至匹 配的數(shù)組元素在所述內(nèi)存中的第1級(jí)路由集合中;當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度大于M時(shí),所述CPU從匹配的數(shù)組元 素在所述內(nèi)存中的第1級(jí)哈希表開始,依次查找第i級(jí)哈希表中與IP地址前綴第<formula>formula see original document page 4</formula>比特匹配的Ni比特哈希元素、并針對(duì)第i級(jí)哈希表判斷該路由表 項(xiàng)lP地址前綴第<formula>formula see original document page 4</formula>比特的掩碼長度是否小于等于Ni,如果是,將該路由表 項(xiàng)存放至第i級(jí)哈希表中匹配的Ni比特哈希元素下的第i+1級(jí)路由集合中,否則,繼續(xù)針 對(duì)第i級(jí)哈希表中匹配的Ni比特哈希元素下的第i+1級(jí)哈希表進(jìn)行判斷;其中,N0取0,且Ni為滿足N1 NP之和等于32-M這一條件下任意設(shè)定的正整數(shù)。
11. 如權(quán)利要求10所述的路由維護(hù)裝置,其特征在于,當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度小于等于M時(shí),所述CPU進(jìn)一步以匹配的數(shù)組元 素內(nèi)容為索引在內(nèi)存中查找到第1級(jí)路由集合;當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度大于M時(shí),以匹配的數(shù)組元素內(nèi)容為索引在內(nèi)存 中查找到第1級(jí)哈希表,然后依次針對(duì)第i級(jí)哈希表執(zhí)行所述判斷,且針對(duì)第i級(jí)哈希表如果路由表項(xiàng)IP地址前綴IP地址前綴第<formula>formula see original document page 4</formula>比特的掩碼長度小于等于 Ni,則所述CPU進(jìn)一步以匹配的Ni比特哈希元素內(nèi)容為索引查找匹配的Ni比特哈希元素 下的第i+1級(jí)路由集合;如果路由表項(xiàng)IP地址前綴第<formula>formula see original document page 4</formula>比特的掩碼長度大于Ni,則所述CPU進(jìn) 一步以匹配的Ni比特哈希元素內(nèi)容為索引查找匹配的Ni比特哈希元素下的第i+l級(jí)哈希表。
12. 如權(quán)利要求11所述的路由存儲(chǔ)裝置,其特征在于,當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度小于等于M時(shí),如果匹配的數(shù)組元素內(nèi)容為空, 則所述CPU進(jìn)一步在所述內(nèi)存中創(chuàng)建該數(shù)據(jù)元素下的第1級(jí)路由集合、并將該數(shù)組元素內(nèi) 容設(shè)置為創(chuàng)建的第1級(jí)路由集合在內(nèi)存中的地址;當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度大于M時(shí),如果匹配的數(shù)組元素內(nèi)容為空,則進(jìn) 一步創(chuàng)建該數(shù)據(jù)元素下的第1級(jí)哈希表、并將該數(shù)組元素內(nèi)容設(shè)置為創(chuàng)建的第1級(jí)哈希表 在內(nèi)存中的地址,然后針對(duì)第i級(jí)哈希表如果路由表項(xiàng)IP地址前綴第M+l + li'Nx 32比特的掩碼長度小于等于Ni、且匹配0的Ni比特哈希元素內(nèi)容為空,則所述CPU進(jìn)一步在所述內(nèi)存中創(chuàng)建匹配的Ni比特哈希元 素下的第i+l級(jí)路由集合、并將該Ni比特哈希元素內(nèi)容設(shè)置為創(chuàng)建的第i+l級(jí)路由集合在 內(nèi)存中的地址;如果路由表項(xiàng)IP地址前綴第M+l + 2Nx 32比特的掩碼長度大于Ni、且匹配的Ni0比特哈希元素內(nèi)容為空,則所述CPU進(jìn)一步在所述內(nèi)存中創(chuàng)建匹配的Ni比特哈希元素下的 第i+l級(jí)哈希表、并將該Ni比特哈希元素內(nèi)容設(shè)置為創(chuàng)建的第i+l級(jí)哈希表在內(nèi)存中的地 址。
13. 如權(quán)利要求12所述的路由維護(hù)裝置,其特征在于,當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度小于等于M時(shí),如果匹配的數(shù)組元素內(nèi)容已記錄 有該數(shù)據(jù)元素下的第1級(jí)哈希表在內(nèi)存中的地址,則所述CPU進(jìn)一步在所述內(nèi)存中創(chuàng)建該 數(shù)據(jù)元素下的第1級(jí)路由集合、并設(shè)置該數(shù)組元素下的第1級(jí)哈希表內(nèi)的同級(jí)路由集合指 針指向該數(shù)據(jù)元素下的第1級(jí)路由集合;當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度大于M時(shí),如果匹配的數(shù)組元素內(nèi)容已記錄有該 數(shù)據(jù)元素下的第1級(jí)路由集合在內(nèi)存中的地址,則進(jìn)一步創(chuàng)建該數(shù)據(jù)元素下的第1級(jí)哈希 表、并設(shè)置該數(shù)組元素下的第1級(jí)哈希表內(nèi)的同級(jí)路由集合指針指向該數(shù)據(jù)元素下的第1 級(jí)路由集合,然后針對(duì)第i級(jí)哈希表如果路由表項(xiàng)IP地址前綴第M+l + 5Nx 32比特的掩碼長度小于等于Ni、且匹配0的Ni比特哈希元素內(nèi)容為該Ni比特哈希元素下的第i+l級(jí)哈希表在內(nèi)存中的地址,則所 述CPU進(jìn)一步在所述內(nèi)存中創(chuàng)建匹配的Ni比特哈希元素下的第i+l級(jí)路由集合、并設(shè)置該 Ni比特哈希元素下的第i+l級(jí)哈希表內(nèi)的同級(jí)路由集合指針指向該Ni比特哈希元素下的 第i+l級(jí)路由集合;如果路由表項(xiàng)IP地址前綴第M+l + 2Nx 32比特的掩碼長度大于Ni、且匹配的Ni0比特哈希元素內(nèi)容為該Ni比特哈希元素下的第i+l級(jí)路由集合在內(nèi)存中的地址,則所述 CPU進(jìn)一步在所述內(nèi)存中創(chuàng)建匹配的Ni比特哈希元素下的第i+l級(jí)哈希表、將該Ni比特哈 希元素內(nèi)容設(shè)置為創(chuàng)建的第i+l級(jí)哈希表在內(nèi)存中的地址、并設(shè)置該Ni比特哈希元素下的 第i+l級(jí)哈希表內(nèi)的同級(jí)路由集合指針指向該Ni比特哈希元素下的第i+l級(jí)路由集合。
14. 如權(quán)利要求10至13中任一項(xiàng)所述的路由維護(hù)裝置,其特征在于,公網(wǎng)和每個(gè)VPN 設(shè)置兩張對(duì)應(yīng)的VR表,第一 VR表用于存放組播路由表項(xiàng)、第二 VR表用于存放單播路由表 項(xiàng);且,第一VR表的路由集合中進(jìn)一步具有路由指針,所述路由指針指向匹配其所屬路由 集合上一級(jí)數(shù)組元素或哈希元素的組播路由表項(xiàng)所對(duì)應(yīng)的第二VR表中,與對(duì)應(yīng)單播路由 表項(xiàng)IP地址前綴首字節(jié)匹配的數(shù)組元素。
15. 如權(quán)利要求10至13中任一項(xiàng)所述的路由維護(hù)裝置,其特征在于,公網(wǎng)和不同VPN 所分別對(duì)應(yīng)的VR表以VR-ID區(qū)分,且連續(xù)的VPN順序?qū)?yīng)取值連續(xù)的VR-ID。
16. 如權(quán)利要求10至13中任一項(xiàng)所述的路由維護(hù)裝置,其特征在于,所述M取8。
17. —種路由查詢方法,其特征在于,分別為公網(wǎng)和每個(gè)VPN設(shè)置對(duì)應(yīng)的虛擬路由VR 表,每張VR表中包含有2M個(gè)用于與IP地址前綴最高字節(jié)匹配的M比特?cái)?shù)組元素、每個(gè)數(shù)組 元素下可衍生出第1級(jí)哈希表和/或第1級(jí)路由集合、第i級(jí)哈希表中每個(gè)哈希元素下可 衍生出第i+l級(jí)哈希表和/或第i+l級(jí)路由集合、i大于等于1且小于等于哈希表的預(yù)設(shè) 最大級(jí)數(shù)P、P為大于等于1且小于等于32-M的正整數(shù),且對(duì)于需要查詢的公網(wǎng)或任意VPN 的路由表項(xiàng),該路由查詢方法包括利用該路由表項(xiàng)的IP地址前綴的最高字節(jié)在對(duì)應(yīng)VR表中查找匹配的數(shù)組元素; 當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度小于等于M時(shí),在匹配的數(shù)組元素下的第1級(jí)路 由集合中查找該路由表項(xiàng);當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度大于M時(shí),從匹配的數(shù)組元素下的第1級(jí)哈希表開始,依次查找第i級(jí)哈希表中與IP地址前綴第M+l + liNx M+f;Nx比特匹配的Ni0 0比特哈希元素、并針對(duì)第i級(jí)哈希表判斷該路由表項(xiàng)iP地址前綴第M+l + li'Nx 32比0特的掩碼長度是否小于等于Ni,如果是,在第i級(jí)哈希表中匹配的Ni比特哈希元素下的第 i+l級(jí)路由集合中查找該路由表項(xiàng),否則,繼續(xù)針對(duì)第i級(jí)哈希表中匹配的Ni比特哈希元素 下的第i+l級(jí)哈希表進(jìn)行判斷;其中,N0取0,且Ni為滿足N1 NP之和等于32-M這一條件下任意設(shè)定的正整數(shù)。
18. 如權(quán)利要求17所述的路由查詢方法,其特征在于,當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度小于等于M時(shí),以匹配的數(shù)組元素內(nèi)容為索引在 內(nèi)存中查找到第1級(jí)路由集合;當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度大于M時(shí),以匹配的數(shù)組元素內(nèi)容為索引在內(nèi)存 中查找到第1級(jí)哈希表,然后針對(duì)第i級(jí)哈希表如果路由表項(xiàng)IP地址前綴IP地址前綴第M+l + liNx 32比特的掩碼長度小于等于0Ni,則以匹配的Ni比特哈希元素內(nèi)容為索引查找匹配的Ni比特哈希元素下的第i+l級(jí)路 由集合;如果路由表項(xiàng)IP地址前綴第M+l + liNx 32比特的掩碼長度大于Ni,則以匹配的0Ni比特哈希元素內(nèi)容為索引查找匹配的Ni比特哈希元素下的第i+l級(jí)哈希表。
19. 如權(quán)利要求18所述的路由查詢方法,其特征在于,當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度小于等于M時(shí),如果匹配的數(shù)組元素內(nèi)容為空, 則結(jié)束當(dāng)前查詢;當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度大于M時(shí),如果匹配的數(shù)組元素內(nèi)容為空,則結(jié) 束當(dāng)前查詢。
20. 如權(quán)利要求19所述的路由查詢方法,其特征在于,當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度小于等于M時(shí),如果匹配的數(shù)組元素內(nèi)容已記錄 有該數(shù)據(jù)元素下的第1級(jí)哈希表在內(nèi)存中的地址,則進(jìn)一步查詢該數(shù)組元素下的第1級(jí)哈希表內(nèi)的同級(jí)路由集合指針,如果該同級(jí)路由集合指針指向該數(shù)據(jù)元素下的第1級(jí)路由集 合,則在該第1級(jí)路由集合中查詢路由表項(xiàng),否則結(jié)束當(dāng)前查詢;當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度大于M時(shí),如果匹配的數(shù)組元素內(nèi)容已記錄有該 數(shù)據(jù)元素下的第1級(jí)路由集合在內(nèi)存中的地址,則進(jìn)一步結(jié)束當(dāng)前查詢;當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度大于M時(shí),且匹配的數(shù)組元素內(nèi)容為第1級(jí)哈希 表,則針對(duì)第i級(jí)哈希表如果路由表項(xiàng)iP地址前綴第M+l + I^Nx 32比特的掩碼長度小于等于Ni、且匹配0的Ni比特哈希元素內(nèi)容為該Ni比特哈希元素下的第i+l級(jí)哈希表在內(nèi)存中的地址,則進(jìn) 一步在該Ni比特哈希元素下的第i+l級(jí)哈希表內(nèi)的同級(jí)路由集合指針,如果該同級(jí)路由集 合指針指向該Ni比特哈希元素下的第i+l級(jí)路由集合,則在該第i+l級(jí)路由集合中查詢路 由表項(xiàng),否則結(jié)束當(dāng)前查詢;如果路由表項(xiàng)IP地址前綴第M+l + li Nx 32比特的掩碼長度大于Ni、且匹配的Ni0比特哈希元素內(nèi)容為該Ni比特哈希元素下的第i+l級(jí)路由集合在內(nèi)存中的地址,則結(jié)束當(dāng) 前查詢。
21. 如權(quán)利要求20所述的路由查詢方法,其特征在于,通過直接讀取哈希表的第1字段 來查詢同級(jí)路由集合指針。
22. 如權(quán)利要求17至21中任一項(xiàng)所述的路由查詢方法,其特征在于,每級(jí)中的每個(gè)路 由集合內(nèi)進(jìn)一步設(shè)置有表示該路由集合中存放的所有路由表項(xiàng)IP地址前綴對(duì)應(yīng)比特的最 大掩碼長度和最小掩碼長度;如果待查詢路由表項(xiàng)IP地址前綴對(duì)應(yīng)比特的掩碼長度大于查找到的路由集合所記錄 的最大掩碼長度、或小于查找到的路由集合所記錄的最小掩碼長度,則直接結(jié)束當(dāng)前查詢。
23. 如權(quán)利要求17至21中任一項(xiàng)所述的路由查詢方法,其特征在于,公網(wǎng)和每個(gè)VPN 設(shè)置兩張對(duì)應(yīng)的VR表,第一VR表用于存放組播路由表項(xiàng)、第二VR表用于存放單播路由表 項(xiàng);在第一VR表中以待查找組播路由表項(xiàng)的IP地址前綴的各比特為索引,查找到對(duì)應(yīng)級(jí) 別的路由集合、并在該路由集合中查找到待查找組播路由表項(xiàng),然后依據(jù)該路由集合中的 路由集合指針查找到對(duì)應(yīng)第二 VR表中,與待查找單播表項(xiàng)的IP地址前綴的首字節(jié)匹配的 數(shù)組元素,并在該第二VR表中以待查找單播路由表項(xiàng)的IP地址前綴的后續(xù)各比特為索引, 逐級(jí)查找到對(duì)應(yīng)級(jí)別的路由集合、并在該路由集合中查找到待查找單播路由表項(xiàng)。
24. 如權(quán)利要求17至21中任一項(xiàng)所述的路由查詢方法,其特征在于,利用VR-ID來區(qū) 分公網(wǎng)和不同VPN所分別對(duì)應(yīng)的VR表,且連續(xù)的VPN順序?qū)?yīng)取值連續(xù)的VR-ID。
25. 如權(quán)利要求17至21中任一項(xiàng)所述的路由查詢方法,其特征在于,所述M取8。
26. —種路由查詢裝置,該裝置包括CPU和內(nèi)存,其特征在于,所述內(nèi)存中存儲(chǔ)有分別為公網(wǎng)和每個(gè)VPN設(shè)置的對(duì)應(yīng)虛擬路由VR表,每張VR表中包 含有2M個(gè)用于與IP地址前綴最高字節(jié)匹配的M比特?cái)?shù)組元素、以及任意數(shù)組元素下衍生 出的第1級(jí)哈希表和/或第1級(jí)路由集合、第i級(jí)哈希表中任意個(gè)哈希元素下衍生出的第 i+l級(jí)哈希表和/或第i+l級(jí)路由集合、i大于等于1且小于等于哈希表的預(yù)設(shè)最大級(jí)數(shù)P、P為大于等于1且小于等于32-M的正整數(shù);對(duì)于需要查詢的公網(wǎng)或任意VPN的路由表項(xiàng),所述CPU利用該路由表項(xiàng)的IP地址前綴 的最高字節(jié)在對(duì)應(yīng)VR表中查找匹配的數(shù)組元素;當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度小于等于M時(shí),所述CPU在匹配的數(shù)組元素的第 1級(jí)路由集合中查找該路由表項(xiàng);當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度大于M時(shí),所述CPU從匹配的數(shù)組元素下的第1級(jí)哈希表開始,依次查找第i級(jí)哈希表中與IP地址前綴第<formula>formula see original document page 8</formula>比特匹配的Ni比特哈希元素、并針對(duì)第i級(jí)哈希表判斷該路由表項(xiàng)IP地址前綴第 <formula>formula see original document page 8</formula>比特的掩碼長度是否小于等于Ni,如果是,所述CPU在第i級(jí)哈希表中匹 配的Ni比特哈希元素下的第i+1級(jí)路由集合中查找該路由表項(xiàng),否則,所述CPU繼續(xù)針對(duì) 第i級(jí)哈希表中匹配的Ni比特哈希元素下的第i+1級(jí)哈希表進(jìn)行判斷;其中,N0取0,且Ni為滿足N1 NP之和等于32-M這一條件下任意設(shè)定的正整數(shù)。
27. 如權(quán)利要求26所述的路由查詢裝置,其特征在于,當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度小于等于M時(shí),所述CPU以匹配的數(shù)組元素內(nèi)容 為索引在內(nèi)存中查找到第1級(jí)路由集合;當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度大于M時(shí),所述CPU以匹配的數(shù)組元素內(nèi)容為索 引在內(nèi)存中查找到第1級(jí)哈希表,然后針對(duì)第i級(jí)哈希表如果路由表項(xiàng)IP地址前綴IP地址前綴第<formula>formula see original document page 8</formula>比特的掩碼長度小于等于 Ni,則所述CPU在所述內(nèi)存中以匹配的Ni比特哈希元素內(nèi)容為索引查找匹配的Ni比特哈 希元素下的第i+1級(jí)路由集合;如果路由表項(xiàng)IP地址前綴第<formula>formula see original document page 8</formula>比特的掩碼長度大于Ni,則所述CPU在 所述內(nèi)存中以匹配的Ni比特哈希元素內(nèi)容為索引查找匹配的Ni比特哈希元素下的第i+1 級(jí)哈希表。
28. 如權(quán)利要求27述的路由查詢裝置,其特征在于,當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度小于等于M時(shí),如果匹配的數(shù)組元素內(nèi)容為空, 則所述CPU結(jié)束當(dāng)前查詢;當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度大于M時(shí),如果匹配的數(shù)組元素內(nèi)容為空,則所 述CPU結(jié)束當(dāng)前查詢。
29. 如權(quán)利要求28所述的路由查詢裝置,其特征在于,當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度小于等于M時(shí),如果匹配的數(shù)組元素內(nèi)容已記錄 有該數(shù)據(jù)元素下的第1級(jí)哈希表在內(nèi)存中的地址,則所述CPU進(jìn)一步查詢該數(shù)組元素下的 第1級(jí)哈希表內(nèi)的同級(jí)路由集合指針,如果該同級(jí)路由集合指針指向該數(shù)據(jù)元素下的第1 級(jí)路由集合,則所述CPU在該第1級(jí)路由集合中查詢路由表項(xiàng),否則結(jié)束當(dāng)前查詢;當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度大于M時(shí),如果匹配的數(shù)組元素內(nèi)容已記錄有該 數(shù)據(jù)元素下的第1級(jí)路由集合在內(nèi)存中的地址,則所述CPU進(jìn)一步結(jié)束當(dāng)前查詢;當(dāng)該路由表項(xiàng)IP地址前綴的掩碼長度大于M時(shí),且匹配的數(shù)組元素內(nèi)容為第1級(jí)哈希 表,則針對(duì)第i級(jí)哈希表如果路由表項(xiàng)IP地址前綴第M+l + 2Nx 32比特的掩碼長度小于等于Ni、且匹配0的Ni比特哈希元素內(nèi)容為該Ni比特哈希元素下的第i+1級(jí)哈希表在內(nèi)存中的地址,則所 述CPU進(jìn)一步在該Ni比特哈希元素下的第i+l級(jí)哈希表內(nèi)的同級(jí)路由集合指針,如果該同 級(jí)路由集合指針指向該Ni比特哈希元素下的第i+1級(jí)路由集合,則所述CPU在該第i+1級(jí) 路由集合中查詢路由表項(xiàng),否則結(jié)束當(dāng)前查詢;如果路由表項(xiàng)IP地址前綴第M+l + liNx 32比特的掩碼長度大于Ni、且匹配的Ni0比特哈希元素內(nèi)容為該Ni比特哈希元素下的第i+1級(jí)路由集合在內(nèi)存中的地址,則所述 CPU結(jié)束當(dāng)前查詢。
30. 如權(quán)利要求26至29中任一項(xiàng)所述的路由查詢裝置,其特征在于,公網(wǎng)和每個(gè)VPN 設(shè)置兩張對(duì)應(yīng)的VR表,第一 VR表用于存放組播路由表項(xiàng)、第二 VR表用于存放單播路由表 項(xiàng);所述CPU在第一 VR表中以待查找組播路由表項(xiàng)的IP地址前綴的各比特為索引,查找 到對(duì)應(yīng)級(jí)別的路由集合、并在該路由集合中查找到待查找組播路由表項(xiàng),然后依據(jù)該路由 集合中的路由集合指針查找到對(duì)應(yīng)第二 VR表中,與待查找單播表項(xiàng)的IP地址前綴的首字 節(jié)匹配的數(shù)組元素,并在該第二 VR表中以待查找單播路由表項(xiàng)的IP地址前綴的后續(xù)各比 特為索引,逐級(jí)查找到對(duì)應(yīng)級(jí)別的路由集合、并在該路由集合中查找到待查找單播路由表 項(xiàng)。
31. 如權(quán)利要求26至29中任一項(xiàng)所述的路由查詢裝置,其特征在于,所述CPU利 用VR-ID來區(qū)分公網(wǎng)和不同VPN所分別對(duì)應(yīng)的VR表,且連續(xù)的VPN順序?qū)?yīng)取值連續(xù)的 VR-ID。
32. 如權(quán)利要求26至29中任一項(xiàng)所述的路由查詢裝置,其特征在于,所述M取8。
全文摘要
本發(fā)明公開了一種路由維護(hù)方法和裝置以及路由查詢方法和裝置。本發(fā)明分別為公網(wǎng)和每個(gè)VPN設(shè)置對(duì)應(yīng)的虛擬路由(VR)表,如果路由表項(xiàng)IP地址前綴的掩碼長度小于等于M,則直接在VR表中與IP地址前綴最高字節(jié)匹配的M比特?cái)?shù)組元素下的路由集合中存放、查詢該路由表項(xiàng);如果路由表項(xiàng)IP地址前綴的掩碼長度大于M,則逐級(jí)查詢對(duì)應(yīng)IP地址前綴后續(xù)相應(yīng)比特的若干級(jí)哈希表,直至該IP地址前綴的掩碼長度小于等于數(shù)組元素對(duì)應(yīng)的最高M(jìn)比特與后續(xù)若干級(jí)哈希表所對(duì)應(yīng)的相應(yīng)比特之和,然后匹配的哈希元素下的路由集合中存放、查詢該路由表項(xiàng)。因此,本發(fā)明能夠提高路由查詢效率、且同時(shí)適用于組播路由。
文檔編號(hào)H04L12/56GK101695054SQ200910235609
公開日2010年4月14日 申請日期2009年9月30日 優(yōu)先權(quán)日2009年9月30日
發(fā)明者宋小恒 申請人:杭州華三通信技術(shù)有限公司;