「聽說就拿出來講?」這是前一陣子筆者同事和世界某知名智慧型手機製造商洽談時,所聽到的用語。到底「聽說」來的資訊,是否可以拿出來講?這可能要看情況,以網路路由器來說,把聽說來的資訊(也就是可能不準確的資訊)拿出來與其他路由器設備分享,可能就會造成很大的問題,因為出現了「路由?圈」。
假設路由器A的左邊為E0介面,右邊為S0介面,路由器B的左邊為S0介面,右邊為S1介面,路由器C的左邊為S0介面,右邊為E0介面。由圖2中可以發現,每一台路由器設備對於旁邊直接連接的網段,其在Routing Table中的值為0,因為不需要經過任何的網路設備就可以到達這些網段,所以Hops Count為0。
|
▲圖2 連接Router設備的網路架構圖。 |
接著,這些路由器設備會把自身的Routing Table與其他鄰近的路由器設備分享,所以路由器B可以從路由器C所送來的資料中學習到透過路由器C可以到達10.4.0.0的網段,因此在路由器B的Routing Table中,10.4.0.0的值為1,因為必須透過一台設備才能到達。
隨後,路由器B把Routing Table丟給路由器A,此時路由器A發現,因為路由器B要到達10.4.0.0必須經過一台網路設備,所以從路由器A到10.4.0.0須經過兩台網路設備,因為還要多經過路由器B,所以在路由器A設備中的Routing Table裡,10.4.0.0的值為2。
所以,針對10.4.0.0這筆資料,會記錄下10.4.0.0, S0, 2,代表「可以從這台設備的S0介面出去,經過兩台網路設備之後,可以到達10.4.0.0的網路區段。
讀者應該就可以發現這Distance Vector的精髓,為什麼要稱為Distance Vector了。從剛剛的Routing Table中可以發現,其資料會記錄著S0和2這兩種資料,其中S0代表要從哪個「方向」出去,而2則是記錄下「距離」,因此多筆這樣的資料就會形成一個距離向量的資料集合。
如何選擇最佳網路路徑
事實上,真正的網路拓撲架構絕對比上面的例子要來得複雜好幾倍,所以從一個地點到另一個地點可能存在著不只一個網路路徑,而這個時候該如何選擇最佳的網路路徑,便是路由協定所要做的事情了。
每一種Distance Vector路由協定演算法都會採用不同的方式來決定如何選擇最佳網路路徑,這些演算法基本上都會針對每一條路徑給予一個評判值,如果評判值越小,代表這條路徑越好。
這個評判值可以是從這條路徑的某一個特徵所計算而得,也可以透過綜合多個特徵來計算。大部分演算法可能會使用下列的特徵來決定某個路徑的評判值為何:
- 1. 必須經過的網路設備數目(Hops Count)。
- 2.所使用的頻寬(Bandwidth)。頻寬越大的路徑,當然就越好,例如100Mbps的乙太網路路徑就比10Mbps的乙太網路路徑還要好。
- 3.Delay,也就是從來源端傳送網路封包到目的端所必須花費的時間。
- 4. Load,網路資源數量。
- 5.網路品質信賴度(Reliability),大部分是指網路線的資料錯誤率。
- 6.最大傳輸單元(Maximum Transmission Unit,MTU),這是指在路徑上所有線路中的最大可接受資料傳輸單元長度。
筆者之前的文章中有提到,RIPv1、RIPv2及IGRP都屬於Distance Vector路由演算法,其中,RIP採用「必須經過的網路設備數目」,也就是Hops Count,來評判路徑的好壞,而IGRP則是綜合頻寬與Delay兩種特徵來決定路徑的好壞。
路由迴圈問題的詳細產生過程
Distance Vector路由演算法是將整份Routing Table只與鄰近路由器設備分享,而且會每隔一段時間就與其他路由器設備分享Routing Table的資料,所以當更新動作不夠快的時候,最可能造成的就是資料不一致的問題。以圖3來說明Distance Vector路由演算法是在怎樣的情況下讓Routing Table的資料產生不一致的情況。
|
▲圖3 連接路由器設備的網路架構。 |
假設目前有以上三台的路由器設備,路由器A的左邊為E0介面,右邊為S0介面,路由器B的左邊為S0介面,右邊為S1介面,路由器C的左邊為S0介面,右邊為E0介面。與之前的範例相同,所以圖3顯示出這三台路由器設備目前的Routing Table資料情況。現在假設10.4.0.0的網路區段連線如圖4所示發生問題。
|
▲圖4 10.4.0.0網段開始發生問題。 |
因為路由器C設備與10.4.0.0的網路區段是直接連接的,所以路由器C設備能夠在第一時間發現無法到達10.4.0.0網路區段,因此路由器C設備會更新自己的Routing Table,標示10.4.0.0網段為無法到達,並且不再發送任何網路封包透過E0介面前往10.4.0.0的網路區段。但是,此時路由器A和路由器B兩台設備都還不知道10.4.0.0網段發生問題,所以還是相信10.4.0.0網段是可以到達的。
接著,當路由器B設備準備要發送它的定期對外更新資料動作時,將會發送自己的Routing Table資料給路由器C設備,如圖5所示。
|
▲圖5 路由器C收到關於10.4.0.0的錯誤資料。 |
這時因為路由器C會從自己的S0介面收到由路由器B設備所送過來的Routing Table資料,而此時資料中顯示10.4.0.0網段是可以到達的,所以路由器C設備會以為原來可透過自己的S0介面出去,經過路由器B設備能到達10.4.0.0網段,並須經過兩台網路設備(直接把路由器B設備的Routing Table中針對10.4.0.0網段的距離加一),於是路由器C就會更新自己的Routing Table。此時,Routing Table就已有錯誤資料的事情發生,但更慘的還在後頭。
|
▲圖6 路由器C把錯誤資料發送出去。 |
若此時路由器C設備也到了應該對其他設備做Routing Table同步的動作(圖6),路由器C設備會先發送自己的Routing Table給路由器B設備,此刻與上面的情況類似,路由器B設備會以為原來可以從自己的S1介面出去,透過路由器C設備而到達10.4.0.0網段,所以路由器B設備就會乖乖地更新自己的Routing Table,並記錄前往10.4.0.0網段的Hops Count為3。