電腦網路與連結技術第四章 網路層 上一頁    下一頁

4-7 鏈路狀態繞路法

內容:

  • 4-7-1 鏈路狀態繞路簡介

  • 4-7-2 利用 Hello 封包詢問

  • 4-7-3 計算鏈路費用

  • 4-7-4 建立鏈路狀態廣播給其他路由器

  • 4-7-5 計算最短路徑

  • 4-7-6 鏈路狀態的異常

4-7-1 鏈路狀態繞路簡介

『鏈路狀態路徑選擇』(Link-State RoutingLS Routing是屬於動態演算法。路由器必須隨時依照最新消息計算出路由路徑,也隨時更新路由表。它是一種『半集中式』(Quasi-centralized的路徑選擇演算法(Routing algorithm)。首先每一個路由器必須定期測量它和鄰近路由器之間的費用,這費用可能和佇列延遲、頻寬等因素有關,不同通訊協定都有各自的定義。這費用又稱為『鏈路費用』(Link Cost。當每一路由器測出相鄰之間的費用後,定期廣播給其他『所有』路由器,該廣播的訊息又稱為『鏈路狀態』(Link State訊息。同樣的,任何一部路由器也會接收到其他路由器廣播的鏈路狀態,再依照這些訊息計算出到達其他路由器的最短路徑,並建構路由表。路由表上註明欲往哪一個路由器的下一個路由器位置(如圖 4-8 所示)。因此在LS Routing演算法下每一個路由器建立路由表的步驟如下:

(1) 利用 Hello 封包查詢相鄰路由器

(2) 計算鏈路費用

(3) 建立鏈路狀態封包並廣播給所有路由器

(4) 計算出最短路徑及更新路由表

以下分別說明各步驟的處理程序:

4-7-2 利用 Hello 封包查詢相鄰路由器

當路由器啟動後,立即發送 Hello 封包(Hello Request)給所有相鄰路由器(或定期發送)。當其它路由器收到 Hello 封包後,必須立即回覆該 Hello 封包(Hello Response),並告知路由器名稱。如圖 4-10 所示,路由器 A 發送 Hello 查詢封包(H_Re)給相鄰路由器(BCD),相鄰路由器也回應 Hello 封包(H_Rp)給它。路由器因為這樣而知道有哪些路由器和它相鄰。

 

4-10 發送 Hello 封包查詢及回應

4-7-3 計算鏈路費用

發送 Hello 之路由器,由相鄰路由器的回應 Hello 封包,而得知它們之間的路徑費用。再由這些訊息計算出到達相鄰路由器之間的鏈路費用。依照各種通訊協定的需求,針對路徑費用的定義也不盡相同,可能採用傳輸延遲、佇列延遲、或頻寬容量等等因素,但最容易取得的是傳輸延遲。當路由器發送查詢 Hello 封包(H_Re)後,到它收到某一路徑回應(H_Rp)的時間,計算之間差異,再取一半的值(除以 2),這就是該路徑的傳輸延遲時間,一般都以微秒(ms)為單位。在圖 4-11 之中,我們假設所有路由器都經過廣播 Hello 封包後,計算出它們之間的路徑費用(也是鏈路狀態),並假設鏈路兩端所計算費用都相同(如,A B B A)。

 

4-11 鏈路狀態範例

4-7-4 建立鏈路狀態封包並廣播給所有路由器

由上一步驟,各路由器已得知相鄰路由器之間的狀態值(如圖 4-11),並各自建立鏈路狀態封包,如圖 4-12 所示。

 

4-12 鏈路狀態封包範例

各路由器再將它的鏈路狀態封包廣播給網路上『所有』路由器。同樣的,每一部路由器也收到所有其他路由器的鏈路狀態封包,再由這些訊息計算出欲往某一路由器的最佳路徑,也建立了路由表。既然任何一部路由器都可由網路收到所有鏈路狀態,並算出自己的路由表,因此我們稱之為『半集中式』的路徑選擇法。

針對廣播鏈路狀態封包可能造成廣播風暴(Broadcast Storm)的問題,其類似熱馬鈴薯方法發送。每一個路由器收到封包後,便往其他路徑複製轉送,才可以將封包廣播到所有路由器上。因此,我們必須在封包上編有封包序號和時間戳記(Time-stamp)。當封包進入路由器後檢查該封包是否來過,如果來過便將其拋棄不再轉送。還有時間戳記是用來更新封包序號紀錄,決定是否可以刪除。

4-7-5 計算出最短路徑及更新路由表

當每一路由器收到其他所有路由器的鏈路狀態封包,必須計算出它到達任何一部路由器的最佳路徑。在圖形理論中,有許多尋找最短路徑的演算法,較被常用的是Dijkstra’s shortest path algorithm。其演算法如下

## Dijkstra’s shortest path algorithm

Define:

N: set of all nodes such that shortest path from source to these nodes is known. N initially is empty.

D(v): cost of known least cost path from source to node v.

c(i, j): cost of link i to j, c(i, j)=∞ if i, j not directly connected.

p(v): previous node (neighbor of v) along shortest path from source to v.

Algorithm:

source node: A

iterative: after k steps know shortest path to nearest k neighbors

  • Initialization:

N = {A}

For all nodes v

If v adjacent to A

             Then D(v) = c(A, v)

Else D(v) = ∞

  • Loop

find w not in N such that D(w) is smallest

add w into N

update D(v) for all not in N:

        D(v) = min(D(v), D(w)+c(w, v))

Until all nodes in N

## end of algorithm

我們用圖 4-11為範例,每一路由器所收到的鏈路狀態封包如圖 4-12 所示。又以路由器 A 為例,尋找最短路徑的步驟如圖 4-13 所示。所有路由器演算法演算後所建立的路由表如圖 4-14 所示。

 

4-11 以路由器 A 為範例之演算過程

路由器 A

路由器 B

路由器 C

路由器 D

路由器 E

路由器 F

目的地

下一站

目的地

下一站

目的地

下一站

目的地

下一站

目的地

下一站

目的地

下一站

A

 

A

A

A

D

A

A

A

D

A

E

B

B

B

 

B

B

B

B

B

D

B

E

C

D

C

C

C

 

C

E

C

C

C

E

D

D

D

D

D

D

D

 

D

D

D

E

E

D

E

D

E

E

E

E

E

 

E

E

F

D

F

D

F

E

F

E

F

F

F

 

4-12 所有路由器之路由表(以圖 4-11 為例)

4-7-6 鏈路狀態的異常狀態

鏈路狀態之路徑選擇方法雖然簡單,但會有下列異常狀態:

(1) 廣播風暴(Broadcast Storm):網路上每一個路由器必須隨時計算相鄰之間的鏈路費用,並廣播給網路上所有的路由器。如果每次廣播的時間間隔太長,則網路上任何變更將無法即時反映給所有路由器,會造成連結上困難;但廣播間隔時間太短容易造成廣播風暴。而且為了廣播路徑狀態給所有路由器也會佔用不少頻寬。

(2) 報喜不報憂:對每個路由器都是主動廣播它所計算的鏈路狀態。任何路由器啟動時都會按時發送鏈路狀態。但當中某一路由器發生故障,它便失去廣播狀態之能力;其它路由器要能偵測出這一條鏈路是故障的,這可能要經過一段不短的時間,在這期間內也容易造成連結上的錯誤。

當然,上列的異常狀況有許多方法來克服,還不至於太困難。但一般來說,任何一個路由器要將它的鏈路狀況廣播給網路上所有路由器,在較大的網路上使用也太不夠經濟,何況,網路上路由器愈多,所佔用的頻寬也就愈大。

 

翻轉工作室:粘添壽

 

電腦網路與連結技術:

 

 

翻轉電子書系列: