常见的路由选择算法
一、路由表
所謂路由表,指的是路由器或者其他互聯(lián)網(wǎng)網(wǎng)絡(luò)設(shè)備上存儲(chǔ)的表,該表中存有到達(dá)特定網(wǎng)絡(luò)終端的路徑,在某些情況下,還有一些與這些路徑相關(guān)的度量。
二、常見路由表生成算法
路由算法是提高路由協(xié)議功能,盡量減少路由時(shí)所帶來(lái)開銷的算法。當(dāng)實(shí)現(xiàn)路由算法的軟件必須運(yùn)行在物理資源有限的計(jì)算機(jī)上時(shí)高效尤其重要。路由算法必須健壯,即在出現(xiàn)不正?;虿豢深A(yù)見事件的情況下必須仍能正常處理,例如硬件故障、高負(fù)載和不正確的實(shí)現(xiàn)。因?yàn)槁酚善魑挥诰W(wǎng)絡(luò)的連接點(diǎn),當(dāng)它們失效時(shí)會(huì)產(chǎn)生重大的問(wèn)題。最好的路由算法通常是那些經(jīng)過(guò)了時(shí)間考驗(yàn),證實(shí)在各種網(wǎng)絡(luò)條件下都很穩(wěn)定的算法。
此外路由算法必須能快速聚合,聚合是所有路由器對(duì)最佳路徑達(dá)成一致的過(guò)程。當(dāng)某網(wǎng)絡(luò)事件使路徑斷掉或不可用時(shí),路由器通過(guò)網(wǎng)絡(luò)分發(fā)路由更新信息,促使最佳路徑的重新計(jì)算,最終使所有路由器達(dá)成一致。聚合很慢的路由算法可能會(huì)產(chǎn)生路由環(huán)或網(wǎng)路中斷。
(一)靜態(tài)路由算法
1.Dijkstra算法(最短路徑算法)
Dijkstra(迪杰斯特拉)算法是典型的單源最短路徑算法,用于計(jì)算一個(gè)節(jié)點(diǎn)到其他所有節(jié)點(diǎn)的最短路徑。主要特點(diǎn)是以起始點(diǎn)為中心向外層層擴(kuò)展,直到擴(kuò)展到終點(diǎn)為止。Dijkstra算法是很有代表性的最短路徑算法,在很多專業(yè)課程中都作為基本內(nèi)容有詳細(xì)的介紹,如數(shù)據(jù)結(jié)構(gòu),圖論,運(yùn)籌學(xué)等等。Dijkstra一般的表述通常有兩種方式,一種用永久和臨時(shí)標(biāo)號(hào)方式,一種是用OPEN, CLOSE表的方式,這里均采用永久和臨時(shí)標(biāo)號(hào)的方式。注意該算法要求圖中不存在負(fù)權(quán)回路。
Dijkstra算法執(zhí)行下列步驟:
1)路由器建立一張網(wǎng)絡(luò)圖,并且確定源節(jié)點(diǎn)和目的節(jié)點(diǎn),在這個(gè)例子里我們?cè)O(shè)為V1和V2。然后路由器建立一個(gè)矩陣,稱為“鄰接矩陣”。在這個(gè)矩陣中,各矩陣元素表示權(quán)值。例如,[i, j]是節(jié)點(diǎn)Vi與Vj之間的鏈路權(quán)值。如果節(jié)點(diǎn)Vi與Vj之間沒有鏈路直接相連,它們的權(quán)值設(shè)為“無(wú)窮大”。
2)路由器為網(wǎng)路中的每一個(gè)節(jié)點(diǎn)建立一組狀態(tài)記錄。此記錄包括三個(gè)字段: 前序字段——表示當(dāng)前節(jié)點(diǎn)之前的節(jié)點(diǎn)。
長(zhǎng)度字段——表示從源節(jié)點(diǎn)到當(dāng)前節(jié)點(diǎn)的權(quán)值之和。 標(biāo)號(hào)字段——表示節(jié)點(diǎn)的狀態(tài)。每個(gè)節(jié)點(diǎn)都處于一個(gè)狀態(tài)模式:“永久”或“暫時(shí)”。3)路由器初始化(所有節(jié)點(diǎn)的)狀態(tài)記錄集參數(shù),將它們的長(zhǎng)度設(shè)為“無(wú)窮大”,標(biāo)號(hào)設(shè)為“暫時(shí)”。
4)路由器設(shè)置一個(gè)T節(jié)點(diǎn)。例如,如果設(shè)V1是源T節(jié)點(diǎn),路由器將V1的標(biāo)號(hào)更改為“永久”。當(dāng)一個(gè)標(biāo)號(hào)更改為“永久”后,它將不再改變。一個(gè)T節(jié)點(diǎn)僅僅是一個(gè)代理而已。
5)路由器更新與源T節(jié)點(diǎn)直接相連的所有暫時(shí)性節(jié)點(diǎn)的狀態(tài)記錄集。
6)路由器在所有的暫時(shí)性節(jié)點(diǎn)中選擇距離V1的權(quán)值最低的節(jié)點(diǎn)。這個(gè)節(jié)點(diǎn)將是新的T節(jié)點(diǎn)。
7)如果這個(gè)節(jié)點(diǎn)不是V2(目的節(jié)點(diǎn)),路由器則返回到步驟5。
8)如果節(jié)點(diǎn)是V2,路由器則向前回溯,將它的前序節(jié)點(diǎn)從狀態(tài)記錄集中提取出來(lái),如此循環(huán),直到提取到V1為止。這個(gè)節(jié)點(diǎn)列表便是從V1到V2的最佳路由。
2.擴(kuò)散法
事先不需要任何網(wǎng)絡(luò)信息;路由器把收到的每一個(gè)分組,向除了該分組到來(lái)的線路外的所有輸出線路發(fā)送。 將來(lái)會(huì)有多個(gè)分組的副本到達(dá)目的地端,最先到達(dá)的,可能是走了“最優(yōu)”的路徑 常見的擴(kuò)散法是選擇性擴(kuò)散算法。
(二)動(dòng)態(tài)路由算法
1.距離向量路由算法
距離向量路由算法(Bellman-Ford Routing Algorithm),也叫做最大流量演算法(Ford-FulkersonAlgorithm),其被距離向量協(xié)議作為一個(gè)算法,如RIP, BGP, ISO IDRP, NOVELL IPX。使用這個(gè)算法的路由器必須掌握這個(gè)距離表(它是一個(gè)一維排列-“一個(gè)向量”),它告訴在網(wǎng)絡(luò)中每個(gè)節(jié)點(diǎn)的最遠(yuǎn)和最近距離。在距離表中的這個(gè)信息是根據(jù)臨近接點(diǎn)信息的改變而時(shí)時(shí)更新的。表中數(shù)據(jù)的量和在網(wǎng)絡(luò)中的所有的接點(diǎn)(除了它自己本身)是等同的。這個(gè)表中的列代表直接和它相連的鄰居,行代表在網(wǎng)絡(luò)中的所有目的地。每個(gè)數(shù)據(jù)包括傳送數(shù)據(jù)包到每個(gè)在網(wǎng)上的目的地的路徑和距離/或時(shí)間在那個(gè)路徑上來(lái)傳輸(我們叫這個(gè)為“成本”)。這個(gè)在那個(gè)算法中的度量公式是跳躍的次數(shù),等待時(shí)間,流出數(shù)據(jù)包的數(shù)量,等等。在距離向量路由算法中,相鄰路由器之間周期性地相互交換各自的路由表備份。當(dāng)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)發(fā)生變化時(shí),路由器之間也將及時(shí)地相互通知有關(guān)變更信息。 其優(yōu)點(diǎn)是算法簡(jiǎn)單容易實(shí)現(xiàn)。缺點(diǎn)是慢收斂問(wèn)題,路由器的路徑變化需要像波浪一樣從相鄰路由器傳播出去,過(guò)程緩慢。
每一個(gè)相鄰路由器發(fā)送過(guò)來(lái)的路由表都要經(jīng)過(guò)以下步驟:1)對(duì)地址為X的 路由器發(fā)過(guò)來(lái)的路由表,先修改此路由表中的所有項(xiàng)目:把”下一跳”字段中的地址改為X,并把所有”距離”字段都加1。
2)對(duì)修改后的路由表中的每一個(gè)項(xiàng)目,進(jìn)行以下步驟:(1)將X的路由表(修改過(guò)的),與S的路由表的目的網(wǎng)絡(luò)進(jìn)行對(duì)比。若在X中出現(xiàn),在S中沒出現(xiàn),則將X路由表中的這一條項(xiàng)目添加到S的路由表中。
(2)對(duì)于目的網(wǎng)絡(luò)在S和X路由表中都有的項(xiàng)目進(jìn)行下面步驟 :
(2.1)在S的路由表中,若下一跳地址是x,則直接用X路由表中這條項(xiàng)目替換S路由表中的項(xiàng)目。
(2.2)在S的路由表中,若下一跳地址不是x
,若X路由表項(xiàng)目中的距離d小于S路由表中的距離,則進(jìn)行更新。
3)若3分鐘還沒有收到相鄰路由器的更新表,則把此相鄰路由器記為不可到達(dá)路由器,即把距離設(shè)置為16。
2.鏈路狀態(tài)最短路由優(yōu)先算法SPF
1)發(fā)現(xiàn)鄰居結(jié)點(diǎn),并學(xué)習(xí)它們的網(wǎng)絡(luò)地址;
2)測(cè)量到各鄰居節(jié)點(diǎn)的延遲或者開銷;
3)創(chuàng)建鏈路狀態(tài)分組;
4)使用擴(kuò)散法發(fā)布鏈路狀態(tài)分組;
5)計(jì)算到每個(gè)其它路由器的最短路徑。
使用Dijkstra算法處理鏈路信息
四、路由收斂原理
路由收斂:指網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)發(fā)生變化后,路由表重新建立到發(fā)送再到學(xué)習(xí)直至穩(wěn)定,并通告網(wǎng)絡(luò)中所有相關(guān)路由器都得知該變化的過(guò)程。也就是網(wǎng)絡(luò)拓?fù)渥兓鸬耐ㄟ^(guò)重新計(jì)算路由而發(fā)現(xiàn)替代路由的行為。
通過(guò)路由收斂可以使路由域中所有路由器對(duì)當(dāng)前的網(wǎng)絡(luò)結(jié)構(gòu)和路由轉(zhuǎn)發(fā)達(dá)成一致的狀態(tài)。
收斂時(shí)間是指從網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)發(fā)生變化到網(wǎng)絡(luò)中所有路由設(shè)備中路由表重新保持一致的狀態(tài)轉(zhuǎn)換過(guò)程。
觸發(fā)條件
1、路由器失效
2、連接失效
3、管理度量調(diào)整等
總結(jié)
- 上一篇: 地址解析协议ARP
- 下一篇: NAT技术和代理服务器