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

4-8 距離向量 繞路法

內容:

  • 4-8-1 距離向量繞路簡介

  • 4-8-2 距離向量演算法推演

  • 4-8-3 距離向量的迴路問題

  • 4-8-4 距離向量表的震盪情形

4-8-1 距離向量 繞路簡介

『距離向量路徑選擇法』(Distance Vector RoutingDV Routing是一種動態的分散式路徑選擇演算法。由此演算法所屬的路由器,路由表是由鄰近相鄰路由器共同建立而成,因此稱之為『分散式』。網路上每一個路由器都必須維護一個二維的『向量表』(Vector Table,向量表格內紀錄本身路由器到每一個路由器的已知的最佳距離。路由器定期和鄰近路由器交換向量表(並不廣播給所有路由器)來建立路由表;當路由器接收到鄰近傳來的向量表時再修正本身的向量表,向量表的內容就一直修正再傳送,整個網路狀況因而能夠漸漸地傳遞到每一個路由器上。隨著時間路由器上之路由表的資料漸漸完備,也逐漸能找出最佳路徑。由於向量表只傳送給相鄰的路由器,對網路的頻寬佔用較少,所以不會造成廣播風暴。

對於向量表中各個欄位,如果使用路由器之間距離的數值,稱之為『距離向量』(Distance Vector。表示兩個路由器之間相距幾個路由器,向量表又稱為『距離表』(Distance Table。但目前使用之DV routing並不只估計相鄰之間的距離,而是將各個路由器之間的佇列延遲、頻寬和網路壅塞情況來計算相鄰路由器間的『距離費用』(Distance Cost。假設路由器已知它相鄰路由器的『距離』,如果距離費用是封包跳躍次數,則其值剛好為 1;如果距離費用為佇列長度,則路由器僅需計算每個佇列;如果距離費用是延遲時間,則路由器可利用一個特殊的 Echo 封包要求鄰近路由器回應,再計算要求和回應之間時間的差距,取它的一半值就是延遲時間。

4-8-2 距離向量演算法的推演

我們以圖 4-13 為範例來說明路由器之間距離向量的傳遞,和路由表建立的過程。在圖中兩個端點(如,AB)之間的標示值(6),為該兩端點之間的距離費用,其值的來由也許經過:跳躍次數、延遲時間等等因素所計算出來的。並假設距離向量傳遞路徑為:A B C D E。當距離向量進入某一路由器後,便和本身的路由表搜尋出所有可能到達的路徑,再由新建立的路由表之中尋找出最短路徑。緊接著,又將該最短路徑路由表傳遞給下一個路由器。一直到最後,觀察路由器 E 的路由表的變化結果,便可瞭解距離向量演算法的運作情形。

4-13 距離向量演算法範例

4-14 (a) ~ (e) 為各個路由器的起始距離向量表,並假設所有路由器都未和其他路由器交換訊息。針對每一個向量表,我們記錄了:從該路由器到其他路由器所經由不同相鄰路由器的費用。例如DE(A, B) 是從 E經由 A B 的費用。其他空白部份表示沒有訊息,也可說是路徑費用無限大(∞)。

4-14 (a) ~ (c) 路由器的起始路由表

 

4-14 (d)(e) 路由器的起始路由表

4-15 為向量表傳遞後,路由器依照進入的向量表和本身路由表,建構新的路由表,其步驟如下:

(1) 路由器(如 B)首先登錄自己和進入向量表的路由器(如 A)之間的費用(DB(A, A) = 6)。

(2) 再搜尋向量表(如圖 4-14 (a))中可能到達的端點(其值不是 ∞),兩個路徑費用的合如小於表中內所紀錄的值,便取代它。

(3) 搜尋索有路徑後,建立新的路由表,再由新的路由向量表找出最短路徑,再將其傳遞給下一個路由器。

我們以圖 4-13 為例子,來推演距離向量演算法建構新路由表的過程,而距離傳遞方向假設只有單一路徑,其方向為: A B C D E。我們以下列步驟來觀察推演的過程:

(1) 路由器 A 沒有收到其他路由器的向量表,依照自己向鄰近路由器查詢之距離費用(如 4-14 (a))建構出路由表。如圖 4-15 所示,最短路徑是由距離向量表中,查出每列的向量值最低者,並將其建立成路由表。如圖中,它可經由 B 到達 B 的費用是 6DA(B, B))為該列最小值;又 DA(E, E) = 1 也是該列最小值。路由器 A 建構路由表後,再將該路由表傳遞給 BA B),緊接著下一步驟。

4-15 路由器 A 自行建構路由表

(2) A B):路由器 A 將路由表(圖 4-15)傳遞給路由器 BB 起始距離向量表如圖 4-14 (b),再利用這兩個向量表建立出新的距離向量表。首先,B 由路由表中查出它自己經由 A A 的費用(DB(A, A) = 6)。再由 A 的向量表中查詢可能到達的端點(BE),得知可經由 A 到達 EDA(E, E) = 1)。則將兩個端點路徑費用的和(DB(A, A) + DA(E, E) = 7)填入經由 A E 的欄位內。再由表中的每一列的最小值,找到最短路徑(如第四列),建構出路由表如圖 4-16 所示。並將路由表傳遞給 CB C),接下一步驟。

4-16 路由器 B 經過(A B)後建立新的路由表

(3) B C):路由器 B 將路由表(圖 4-16)傳遞給路由器 CC 起始距離向量表如圖 4-14 (c) ,再利用這兩個向量表建立出新的距離向量表如圖 4-17 所示。首先 C 由本身路由表中查詢出到達路由器 B 之間的費用(DC(B, B) = 1),在搜尋 B 的向量表可能到達的端點(AE)。

到達 A(經由 B 到達 A):DC(B, B) + DB(A, A) = 1 +6 = 7,原向量表中的值為無限大(∞),因而取代為 7

到達 E(經由 B 到達 E):DC(B, B) + DB(A, E) = 1 +7 = 8,填入表格。

搜尋完後所建立之向量表,再找出最短路徑,建立出新的路由表,如圖 4-17 所示。並將路由表傳遞給 DC D),接下一步驟。

 

4-17路由器 C 經過(B C)後建立新的路由表

(4) C D):路由器 C 將路由表(圖 4-17)傳遞給路由器 D。又C 的起始距離向量表如圖 4-14 (d) ,再利用這兩個向量表建立出新的距離向量表。而 D C 的費用是 2DD(C, C)),另由向量表(圖 4-17)中查詢出可經由 C 到達之端點為 ABE。搜尋步驟如下:

到達 ADD(C, A) = DD(C, C) + DC(B, A) = 2 + 7 = 9

到達 BDD(C, B) = DD(C, C) + DC(B, B) = 2 + 1 = 3

到達 EDD(C, E) = DD(C, C) + DC(B, E) = 2 + 8 = 10

搜尋完後所建立之向量表及所建構出新的路由表如 4-18 所示。再將它的路由表傳遞給 E,緊接下一步驟(D E)。

4-18路由器 D 經過(C D)後建立新的路由表

(5) D E):路由器 D 將路由表(圖 4-18)傳遞給路由器 E。又E 的起始距離向量表如圖 4-14 (e) ,再利用這兩個向量表建立出新的距離向量表。搜尋步驟如下:

到達 ADE(D, A) = DE(D, D) + DD(C, A) = 2 + 9 = 11

到達 BDE(D, B) = DE(D, D) + DD(C, C) = 2 + 3 = 5

到達 CDE(D, C) = DE(D, D) + DD(C, C) = 2 + 2 = 4

搜尋完後所建立之向量表及所建構出新的路由表如 4-19 所示。

4-19路由器 E 經過(D E)後建立新的路由表

以上所推演的過程之中,只有單一路徑(A B C D E)。當然,在正常情況下,路由器會隨時交換它們之間的距離向量表。假設,它們之間的路徑費用沒有改變,路由器 E 的向量表和路由表將如圖 4-20 (a)(b) 所示。

4-20 路由器 E 的距離向量表和路由表

但是如何來建立和更新路由表?一般我們會使用圖形理論中的分散式-非同步的最短路徑演算法。較常用的是Bellman-Ford Algorithm

## Bellman-Ford algorithm (at node X)

  • Initialization:

for all adjacent nodes (column) v

    D(*, v) =

    D(v, v) = c(X, v)

  • Loop

Execute distributed topology update procedure

Forever

## end of Bellman-Ford algorithm

## Topology Update Algorithm

At node X:

  • wait (until I see a link cost change to neighbor Y, or until I receive control message from neighbor W)

  • if (c(X, Y changes by δ)

/* change in cost to my neighbor, Y  */

change all column-Y entries in distance table by δ

if this changes cost of least cost path to some node Z, send control message to neighbors with my new minimum cost to Z.

  • if (control message received from my neighbor W)

/* shortest path via W to some node Z has changed */

DX(Z, W) = c(X, W) + new distance from W to Z

If cost of my least cost path to Z has changed send control message to neighbors with my new minimum cost to Z.

** end of Topology Update Algorithm

4-8-3 距離向量的迴路問題

距離向量之路徑選擇法雖然較適合於大網路上使用,但也可能造成兩種異常狀態:『迴路問題』(Looping『震盪情形』(Oscillations。我們先來討論迴路問題,其最主要的現象是:好消息傳的快,壞消息傳的慢。當路由器啟動時會即時計算本身的向量表,並向鄰近路由器通告,使整個網路迅速建立起來。網路使用一段時間後,各個路由器都已尋找出最佳路徑到其他路由器。但當中有任何路徑發生故障,必須再靠路由器之間的傳遞來發現路徑不通,重新計算最短路徑可能必須要一段傳遞時間。如圖 4-21 為好消息傳得快的範例,假設起始狀態之前端點 A B 之間斷線,因此,各端點到 A 之間的跳躍距離為無限大(∞)。當第一次傳遞時,B A 之間距離向量就被設定為 1。經過四次傳遞後,便可以將 A 路徑恢復的消息傳遞給所有端點。

4-21 迴路問題範例(好消息傳得快)

4-22 為壞消息傳得慢的範例,起始狀態是所有路徑都正常,各端點上也都有紀錄前往端點 A 的距離向量(跳躍距離)。當 A B 之間的路徑已斷線第一次傳遞時, B 無法傳送到 A,而將距離設為無限大,但它將這個訊息告訴 C,但 C 的紀錄裡有一路徑可到達 A 其向量值為 2,並將該值傳給 BB 因而設定其前往 A 的向量值為 3。第二次傳遞,B 告訴 C 經由它那裡到達 A 的路徑為 3,因此,C 又將其到達 A 的向量值改為 4。第三次,C 將它到達 A 的向量值傳遞給 B D,它們又將前往 A 的向量值改為 5 5。依此類推,如果要將 A 斷線的消息傳遞給所有端點,也許需要無止境的迴路。

4-22 迴路問題範例(壞消息傳得慢)

解決迴路問題在許多文獻中提出各種解決方法,但以下列兩種方法較為常用:

(A) 水平分離切口(Split Horizon Hack

路由器在發送距離向量表時,都先假設某一邊路徑已有斷線的可能,而去試探它。做法如下:如果路由器往某一路徑是最佳路徑,下一次發送向量表時,發送給該端點之路徑費用設定為無限大,而另一方向以正常向量值發送。宛如,水平切開兩邊缺口。如果對方路徑還是正常,下次發送正常向量值;如果已斷線就給無限大的向量值。在圖 4-23 之中,端點 C 送前往 A 端點的向量值無限大給 B,而以正常的向量值 2 給另一邊的 D

如果當時 A 已斷線,B 找不到最佳路徑,就將該向量值設定為無限大,並以下次傳送給 C。第二次切離時,D 將前往 A 的向量值設定為無限大並傳給 C,另一方面,它以正常向量值 3 傳給 E。端點 C 收到該向量值後,也找不到另一路徑可到達 A,便將該向量值設定為無限大。依此類推,每分離切割一次,就將 A 斷路的訊息往前發佈一個端點。也可以避免產生向量值傳遞迴路的問題。

4-23 水平分離切口法範例

(B) 暫停(Hold Down

當某一路由器發現路徑故障,首先將故障路徑的費用設定為無限大,通知鄰近路由器。等待一段時間後,接到其他的向量表,再依照當時情況決定最短路徑。

4-8-4 距離向量表震盪情形

當路徑費用是以資料流量大小來評估的情況下,路由器發現某一路徑傳輸流量較低,則將該路徑的向量值設定為最低,並發送給相鄰路由器。因此,所有的傳輸訊息便往該路徑發送,這個路徑費用又變得最高。路由器又將這個訊息告訴相鄰路由器,它們又停止往這個路徑傳送,這條路徑費用又變成最低。依此類推,這條路徑費用就一直震盪(Oscillations)不停。解決方法是:

(1) 不要定期的交換路徑資訊。交換訊息的時間加長,以減少震盪的現象。

(2) 減低資料流量對路徑費用的比率。以減少資料流量瞬間改變對整個路由表的影響。

 

翻轉工作室:粘添壽

 

電腦網路與連結技術:

 

 

翻轉電子書系列: