網絡原理考點之路由選擇算法

這部分內容以選擇和填空題較多,如2019年10月 20題

又如2019年4月 30題

答:

共分爲兩大類:

一、全局式路由選擇算法

以所有結點之間的連通性及所有鏈路的費用爲輸入。鏈路狀態算法LS。

二、分佈式路由選擇算法

以迭代、分佈式的方式計算出最低費用路徑。沒有結點有關於所有網絡鏈路費用的完整信息,每個結點僅有與其直接相連的鏈路的費用知識即可開始工作。然後通過迭代計算過程並與相鄰結點交換信息,一個結點逐漸計算出到達某目的節點或一組目的結點的最低費用路徑。距離向量算法DV。


瞭解以上這些,對於考試而言就足夠了,但這部分其實還是挺有用的,所以多記錄了下。

鏈路狀態路由選擇算法LS

實踐中(用OSPF路由選擇協議),經常由鏈路狀態廣播算法來完成。

ls算法的步驟流程

1、確認在物理上與之相連的路由器並獲得它們的IP地址。當一個路由器開始工作後,它首先向整個網絡發送一個“HELLO”分組數據包。每個接收到數據包的路由器都將返回一條消息,其中包含它自身的IP地址。

2、測量相鄰路由器的延時(或者其他重要的網絡參數,比如平均流量)。爲做到這一點,路由器向整個網絡發送響應分組數據包。每個接收到數據包的路由器返回一個應答分組數據包。將路程往返時間除以2,路由器便可以計算出延時。(路程往返時間是網絡當前延遲的量度,通過一個分組數據包從遠程主機返回的時間來測量。)該時間包括了傳輸和處理兩部分的時間——也就是將分組數據包發送到目的地的時間以及接收方處理分組數據包和應答的時間。

3、向網絡中的其他路由器廣播自己的信息,同時也接收其他路由器的信息。 
在這一步中,所有的路由器共享它們的知識並且將自身的信息廣播給其他每一個路由器。這樣,每一個路由器都能夠知道網絡的結構以及狀態。

4、使用一個合適的算法,確定網絡中兩個節點之間的最佳路由。 
在這一步中,路由器選擇通往每一個節點的最佳路由。它們使用一個算法來實現這一點,如Dijkstra最短路徑算法。在這個算法中,一個路由器通過收集到的其他路由器的信息,建立一個網絡圖。這個圖描述網絡中的路由器的位置以及它們之間的鏈接關係。每個鏈接都有一個數字標註,稱爲權值或成本。這個數字是延時和平均流量的函數,有時它僅僅表示節點間的躍點數。例如,如果一個節點與目的地之間有兩條鏈路,路由器將選擇權值最低的鏈路。詳見自已的算法《迪科斯特算法》

距離向量路由選擇算法DV

計算機網絡通常使用動態路由算法,因爲這類算法能夠適應網絡的拓撲和流量變化。

距離矢量路由算法”的基本思想如下:每個路由器維護一個距離矢量(通常是以延時是作變量的)表,然後通過相鄰路由器之間的距離矢量通告進行距離矢量表的更新。每個距離矢量表項包括兩部分:到達目的結點的最佳輸出線路,和到達目的結點所需時間或距離,通信子網中的其它每個路由器在表中佔據一個表項,並作爲該表項的索引。每隔一段時間,路由器會向所有鄰居結點發送它到每個目的結點的距離表,同時它也接收每個鄰居結點發來的距離表。這樣以此類推,經過一段時間後便可將網絡中各路由器所獲得的距離矢量信息在各路由器上統一起來,這樣各路由器只需要查看這個距離矢量表就可以爲不同來源分組找到一條最佳的路由。

現假定用延時作爲距離的度量,舉一個簡單的例子,如圖7-37所示。假設某個時候路由器Y收到其鄰居路由器X的距離矢量,其中m是Y估計到達路由器X的延時。若Y路由器知道它到鄰居Z的延時爲n,那麼它可以得知Z通過Y到達X需要花費時間m+n。如果Z路由器還有其他相鄰路由器,則對於從其他每個鄰居那兒收到的距離矢量,該路由器執行同樣的計算,最後從中選擇費時最小的路由作爲Z去往X的最佳路由,然後更新其路由表,並通告給其鄰居路由器。

                                                                           圖7-37  距離矢量路由算法簡單實例

選路環路(routing loop)和計數到無窮(count-to-infinity)問題

當某條鏈接的費用減少時,我們稱之爲有一個“好消息”。在網絡中,好消息的傳遞往往很迅速。

例如,存在這樣一個網絡:

某一時刻,Y檢測到它到X的鏈路費用由4減少爲1,好消息當然要告訴大家了,於是它更新了自己的距離向量,並通知了Z。Z在收到Y的更新報文後,也更新了自己的距離向量(由5減爲2),並向鄰居們發送更新報文。而後,Y又收到了Z的更新報文,但它發現並沒有改變自己的最低費用,於是保持不變。這樣,僅僅經過了兩次迭代網絡就達到了靜止。好消息通過網絡得到了迅速傳播。

但是,當鏈路費用增加(甚至斷開)時,就不會這麼簡單了。

我們看下面這個例子:

 

還是X、Y、Z三個節點。此時Y檢測到它到X的路徑費用由4增加到了60。此時節點Z的距離向量爲:d(X) = 5(此時Z還沒有更新,所以還是5), d(Y) = 1, d(Z) = 0。於是Y在更新向量時發現,咦,Z到X的距離只有5,那可以先到Z再到X,於是Y的距離向量更新爲:d(x) = 5 + 1 =6, d(Y) = 0, d(z) = 1。我們可以發現,這個邏輯顯然是錯誤的,因爲Z到X的距離爲5的前提是要經過Y,但Y更新後的路徑又要經過Z,這就形成了一個選路環路(routing-loop)問題。因爲Y的距離向量更新了(雖然是錯誤的),但它還是向Z發送了更新報文。Z收到更新報文後,比較了下鄰居們到X的距離,發現經過Y的路徑距離爲1 + 6(環路形成後的Y的向量) = 7,小於直接到X的距離,於是Z也更新的自己的距離向量,然後又將更新後的距離向量發給Y。Y收到後又更新向量爲8,然後再發給Z。。。這樣循環往復,更新報文在Y和Z之間傳來傳去,直到第44次迭代後,Z算出它經由Y的路徑費用大於50爲止。此時,Z最終確定到X的最短路徑費用是直接到達X的費用50,而Y也得到了最短路徑是經Z到X的費用51。

可以看出,雖然最後還是得到了正確的信息(最後的50和51是正確的!),但壞消息的傳播與好消息相比實在是慢太多了!而且,如果X和Y之間的費用爲10000,Z和X的費用是9999時,就會出現計數到無窮(count-to-infinity)的問題!

只有深入進去,才能發現些有價值的問題點,才能找到解決問題的途徑。

毒性逆轉方法(The Reverse-Poison(Split-horizon) Hack) 

上述的選路環路問題可以通過毒性逆轉的技術加以避免。它的基本思想是:如果Z的最短路徑要通過鄰居Y,那麼它將告訴Y自己到目的節點的距離是∞。這樣,Z向Y撒了一個善意的謊言,使得只要Z經過Y選路到X,它就會一直持續講述這個謊言,這樣Y也就永遠不會嘗試從Z選路到X了,也就避免了環路問題。

我們將毒性逆轉技術應用於上例。Y在更新自己的距離向量時,發現Z到X的距離是∞,於是它將d(x)無奈地更新爲60,並向Z發送了更新報文。Z收到報文後更新自己的d(X)爲50(直接選路到X),併發給Y更新報文(此時因爲Z不需要經過Y進行選路,因此將告訴Y自己到X的距離爲50)。Y在接收到Z的報文後,重新將距離更新爲1 + 50 = 51,並告訴Z自己到X的距離是∞(實際是51)。Z收到報文後,發現最低耗費並沒有改變,因此算法進入靜止狀態。

LS算法和DV算法的比較:

  • 報文複雜性

LS 算法要求每個結點都知道網絡中每條鏈路的費用,要發送O(|N|*|E|)個報文。而且無論何時一條鏈路的費用改變時,必

須向所有結點發送新的鏈路費用。

DV算法要求在每次迭代時,在兩個直接相連鄰居之間交換報文。當鏈路費用改變時,DV 算法僅當在新的鏈路費用導致與該鏈路相連結點的最低費用路徑發生改變時,才傳播已改變的鏈路費用。

  • 收斂速度

LS算法的實現是一個要求O(|N|*|E|)個報文的O(|N|^2)算法。

DV 算法收斂較慢,且在收斂時會遇到路由選擇環路,還會遭遇無窮計數的問題。

  • 健壯性。

如果一臺路由器發生故障、行爲錯亂或受到破壞時

LS算法:路由器能夠向其連接的一條鏈路廣播不正確費用。作爲LS廣播的一部分,一個結點也可損壞或丟棄它收到的任何LS廣播分組。但是每個LS結點都僅計算自己的轉發表。因此路由計算在某種程度上是分離的,提供了一定程度的健壯性。

DV算法:一個結點可向任意或所有目的結點通告其不正確的最低費用路徑。因此一個不正確的結點計算值會擴散到整個網絡。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章