本發(fā)明屬于通信,尤其涉及一種基于下一跳分離的路由收斂方法。
背景技術(shù):
1、在現(xiàn)有的linux?os?tcp/ip協(xié)議棧和衛(wèi)星網(wǎng)絡(luò)系統(tǒng)中,路由表的構(gòu)建通常采用“前綴匹配+下一跳”的結(jié)構(gòu)用于指導(dǎo)ip分組報(bào)文轉(zhuǎn)發(fā),每條路由表中都記錄網(wǎng)絡(luò)前綴的下一跳ip地址及出接口。這些冗余的路由條目導(dǎo)致路由表內(nèi)存占用大。此外,當(dāng)前的轉(zhuǎn)發(fā)表項(xiàng)是將前綴與下一跳信息直接綁定,尤其在空間網(wǎng)絡(luò)環(huán)境下,路徑動(dòng)態(tài)變化頻繁,當(dāng)鏈路狀態(tài)變化或路徑失效時(shí),多個(gè)路由條目可能同時(shí)失效,缺乏統(tǒng)一索引和抽象機(jī)制的傳統(tǒng)路由組織方式難以支持高效的路由動(dòng)態(tài)更新,控制面需重新計(jì)算并更新多個(gè)前綴項(xiàng),增加了路由維護(hù)的復(fù)雜度和收斂時(shí)間,路由刷新效率很低。
2、現(xiàn)有的部分商用路由器、交換機(jī)支持路由下一跳分離機(jī)制,但是實(shí)現(xiàn)復(fù)雜,用于空間網(wǎng)絡(luò)內(nèi)存資源消耗大,沒(méi)有充分利用空間網(wǎng)絡(luò)的拓?fù)涮卣骱?jiǎn)化路由下一跳分離的實(shí)現(xiàn)。
技術(shù)實(shí)現(xiàn)思路
1、發(fā)明目的:針對(duì)目前每條路由存放下一跳ip地址和出接口的路由表項(xiàng)結(jié)構(gòu),造成路由占用內(nèi)存大、收斂慢的問(wèn)題,本發(fā)明公開(kāi)了一種空間網(wǎng)絡(luò)下一跳分離的路由快速收斂方法,在鏈路ip地址發(fā)生變化或者故障時(shí)實(shí)現(xiàn)快速路由刷新。
2、本發(fā)明提出的一種基于下一跳分離的路由收斂方法具體包括如下步驟:
3、s1、進(jìn)行路由前綴的下一跳分離:首先對(duì)網(wǎng)絡(luò)拓?fù)鋱?zhí)行路由計(jì)算,根據(jù)每個(gè)節(jié)點(diǎn)所有下一跳ip地址和出接口建立下一跳組數(shù)組,并為所有下一跳組分配一個(gè)數(shù)組索引;多個(gè)指向同一個(gè)下一跳出接口的路由表項(xiàng)共享同一個(gè)索引,并通過(guò)雙向鏈表進(jìn)行綁定,指向同一個(gè)下一跳出接口的路由表項(xiàng);
4、s2、下一跳ip地址變化時(shí)路由快速刷新:當(dāng)下一跳ip地址變化時(shí),通過(guò)修改對(duì)應(yīng)下一跳組中的下一跳ip地址,所有指向該下一跳組的路由表項(xiàng)的下一跳ip地址會(huì)同步更新,無(wú)需遍歷每條路由表項(xiàng)修改,從而實(shí)現(xiàn)路由快速刷新;
5、s3、下一跳出接口變化時(shí)路由快速刷新:當(dāng)下一跳出接口組合變化時(shí),更新一條路由表項(xiàng)中對(duì)應(yīng)的下一跳組的索引值,并通過(guò)雙向鏈表修改所有指向相同下一跳組的路由表項(xiàng)的索引值,無(wú)需遍歷所有路由表項(xiàng)逐一修改下一跳和出接口,從而實(shí)現(xiàn)路由快速刷新;
6、s4、路由查找與報(bào)文轉(zhuǎn)發(fā):當(dāng)節(jié)點(diǎn)接收到數(shù)據(jù)包時(shí),根據(jù)目的地址,查找前綴樹(shù)進(jìn)行最長(zhǎng)前綴匹配,獲得路由,根據(jù)前綴表項(xiàng)中的下一跳組索引,訪問(wèn)對(duì)應(yīng)的下一跳組,獲取下一跳ip地址和出接口,將數(shù)據(jù)包從出接口轉(zhuǎn)發(fā)到下一跳。
7、進(jìn)一步地,步驟s1所述的進(jìn)行路由前綴的下一跳分離,具體包括如下步驟:
8、s1.1路由計(jì)算:對(duì)網(wǎng)絡(luò)拓?fù)鋱?zhí)行路由計(jì)算,生成從當(dāng)前節(jié)點(diǎn)至所有可達(dá)目的地的路徑集合,所述路徑集合包括至所述目的地的最短路徑以及符合預(yù)設(shè)等價(jià)條件的路徑;對(duì)于每一條路徑,都提取其目的地址前綴及下一跳信息,并通過(guò)前綴樹(shù)的結(jié)構(gòu)組織所有路由前綴項(xiàng),實(shí)現(xiàn)對(duì)目的ip地址的最長(zhǎng)前綴匹配;
9、s1.2建立下一跳組:在衛(wèi)星網(wǎng)絡(luò)中,一個(gè)節(jié)點(diǎn)有個(gè)接口,一個(gè)節(jié)點(diǎn)去往一個(gè)目的地的最短路徑路由的等價(jià)路徑的下一跳數(shù)量為,則一個(gè)節(jié)點(diǎn)上所有路由的下一跳出接口組合數(shù)最大值,其中,,表示從個(gè)接口中選取個(gè)下一跳的方式的數(shù)量;為每個(gè)節(jié)點(diǎn)建立個(gè)下一跳組的數(shù)組,與種下一跳出接口組合對(duì)應(yīng),并為所有下一跳出接口組合分配一個(gè)數(shù)組索引,索引值為;
10、s1.3前綴表項(xiàng)進(jìn)行下一跳分離:對(duì)于每一條路由,基于其下一跳和出接口從的集合中查找到匹配的下一跳組數(shù)組nexthopgroup,從數(shù)組nexthopgroup中獲取下一跳組的索引,并將下一跳組的索引寫(xiě)入前綴表項(xiàng),最終每條路由對(duì)應(yīng)的前綴表項(xiàng)記錄其前綴地址prefix、前綴長(zhǎng)度length以及對(duì)應(yīng)的下一跳組索引nhg_index;
11、s1.4采用雙向鏈表記錄引用下一跳組的所有路由前綴表項(xiàng)的指針:每個(gè)下一跳組數(shù)組nexthopgroup包含一個(gè)指向雙向鏈表的指針prefix_list,該雙向鏈表的每個(gè)節(jié)點(diǎn)記錄一個(gè)前綴表項(xiàng)的地址指針prefix_entry,當(dāng)一個(gè)前綴表項(xiàng)與某一個(gè)下一跳組建立綁定關(guān)系后,會(huì)將該前綴項(xiàng)的地址指針加入鏈表節(jié)點(diǎn),該前綴表項(xiàng)關(guān)聯(lián)雙向鏈表的作用是當(dāng)下一跳發(fā)生變化時(shí),只需要基于該雙向鏈表即能夠完成所有路由前綴表項(xiàng)的更新,而不是在路由樹(shù)中去搜索所有引用該下一跳的前綴表項(xiàng),從而大幅度提升路由收斂速度。
12、進(jìn)一步地,步驟s1.2所述的為每個(gè)節(jié)點(diǎn)建立個(gè)下一跳組的數(shù)組,每個(gè)下一跳組數(shù)組nexthopgroup具體包括:
13、ecmp_number:等價(jià)負(fù)載均衡路由條數(shù),即下一跳的個(gè)數(shù),取值為1和2中的任一值;
14、outif1:出接口編號(hào);
15、outif2:第二個(gè)出接口編號(hào);
16、next_hop_ip1:下一跳的地址;
17、next_hop_ip2:第二個(gè)下一跳的地址;
18、prefix_list:指針,指向前綴表項(xiàng)指針的雙向鏈表。
19、進(jìn)一步地,步驟s1.4所述的每個(gè)下一跳組數(shù)組nexthopgroup包含一個(gè)指向雙向鏈表的指針prefix_list,該雙向鏈表采用標(biāo)準(zhǔn)的雙向鏈表數(shù)據(jù)結(jié)構(gòu),具體結(jié)構(gòu)為:鏈表本體維護(hù)頭指針head、尾指針tail及當(dāng)前鏈表長(zhǎng)度length,鏈表中每個(gè)節(jié)點(diǎn)包括三個(gè)字段,prefix_entry為指向前綴路由表項(xiàng)的指針,prev為前驅(qū)指針,next為后繼指針。
20、進(jìn)一步地,步驟s2所述的下一跳ip地址變化時(shí)路由快速刷新,只需要修改對(duì)應(yīng)下一跳組數(shù)組nexthopgroup中的下一跳ip地址,所述下一跳ip地址包括next_hop_ip1和next_hop_ip2,從而避免非下一跳分離路由表需要遍歷所有路由表項(xiàng)來(lái)完成下一跳ip地址的更新,極大地提升了路由表下一跳ip地址的更新速度。
21、進(jìn)一步地,步驟s3所述的下一跳出接口變化時(shí)路由快速刷新,具體過(guò)程為:
22、在檢測(cè)到節(jié)點(diǎn)故障、節(jié)點(diǎn)斷開(kāi)、鏈路故障或鏈路中斷中的任一事件時(shí),觸發(fā)路由重新計(jì)算,造成某些路由的下一跳發(fā)生變化,這時(shí)這些下一跳發(fā)生變化的路由對(duì)應(yīng)的下一跳出接口組合索引值變?yōu)樾碌膎ew_index,選擇任意一條受影響的路由,根據(jù)其前綴表項(xiàng)中舊的nhg_index值,遍歷舊nhg_index對(duì)應(yīng)的前綴表項(xiàng)指針的雙向鏈表,將鏈表中每個(gè)前綴表項(xiàng)節(jié)點(diǎn)的nhg_index改為new_index,最后將該條鏈表掛載到新的new_index下一跳組中,即能夠?qū)崿F(xiàn)所有相關(guān)路由表項(xiàng)的下一跳的更新。
23、有益效果:
24、1、通過(guò)將多個(gè)路由條目與同一個(gè)“下一跳組索引”進(jìn)行綁定,避免了每條路由表項(xiàng)都保存下一跳信息,顯著減少了路由表中的存儲(chǔ)重復(fù)度,降低路由表的內(nèi)存占用;
25、2、當(dāng)網(wǎng)絡(luò)拓?fù)浠蜴溌窢顟B(tài)發(fā)生變化時(shí),傳統(tǒng)方式需逐條遍歷路由表,對(duì)所有受影響前綴逐個(gè)更新下一跳信息。而在本發(fā)明中,當(dāng)下一跳信息改變時(shí),僅需要改變一條路由對(duì)應(yīng)的索引,即可同步到所有相關(guān)路由項(xiàng),顯著縮短了路由重收斂所需時(shí)間,提高網(wǎng)絡(luò)的動(dòng)態(tài)適應(yīng)能力和穩(wěn)定性。