靜態路由算法主要有洪泛法,隨機走動法,最短路徑法,基於流量的路由算法
1.洪泛法(Flooding)
節點收到一個報文分組后,向所有可能的方向復制轉發。每個節點不接受重復分組,網絡局部故障也不影響通信,但大量重復分組加重了網絡負擔。這種方法適宜於網絡規模小,通信負載輕,可靠性要求極高的通信場合——如軍用通信中常用。
其改進方法是選擇前進方向的擴散法,可大大減少重復分組的數量。
2.隨機走動法(Random Walk)
節點收到分組后,向所有與之相鄰的節點中為分組隨機選擇出一個節點轉發出去;分組在網絡中亂竄,總有可能到達。這種方法雖然簡單,但不是最佳路由,通信效率低,分組傳輸延遲也不可預測,實用價值低。
3.最短路徑法(Shortest Path,SP)
一般來講,網絡節點直接相連,傳輸時延也不是絕對最小,這與線路質量、網絡節點“忙”與“閑”狀態,節點處理能力等很多因素有關。定量分析中,常用“費用最小”作為網絡節點之間選擇依據,節點間的傳輸時延是決定費用的主要因素。
最短路徑法,是由Dijkstra提出的,其基本思想是:將源節點到網絡中所有節點的最短通路都找出來,作為這個節點的路由表,當網絡的拓撲結構不變、通信量平穩時,該點到網絡內任何其它節點的最佳路徑都在它的路由表中。如果每一個節點都生成和保存這樣一張路由表,則整個網絡通信都在最佳路徑下進行。每個節點收到分組后,查表決定向哪個后繼節點轉發。
4.基於流量的路由算法(Flow-based Routing,FR)
SP算法只考慮網絡拓撲結構、尋找最短路徑,沒有考慮網絡流量、負載對路由選擇的影響,而FR算法就結合了網絡拓撲結構和通信流量兩方面的因素進行路由選擇。
FR算法需要知道網絡拓撲結構、節點之間的平均流量、各條線路的容量,然后在此基礎上采用適當的選擇算法,從而找出最佳路由。
FR算法的基本原理是根據知道一條線路的負荷和平均流量,用排隊計算出該線路的分組平均時延,再由所有線路的平均時延直接計算出流量加權平均值,從而得到整個網絡的平均分組時延。此方法可使網絡通信量更加平衡,得到較小的平均分組時延。
動態路由算法大致可以分為兩類:
- 距離矢量路由算法
- 鏈路狀態路由算法
下面我們來看一下這兩類算法的特點:
一、距離矢量路由算法
距離矢量路由算法(Distance Vector Routing),它是網絡上最早使用的動態路由算法,也稱為Bellman-Ford或者Ford-Fulkerson算法。基於這類算法實現的協議有:RIP、BGP等。
如圖,
這類算法的基本思路是:網絡中每一個路由器都要維護一張 矢量表 ,這個 矢量表 中的每一行都記錄了從當前位置能到達的目標路由器的最佳出口(接口)和距離(跳數)。
每隔一段時間當前路由器會向所有的鄰居節點發送自己的這個表,同時它也會接收每個鄰居發來的它們的表。並會將鄰居的表和自己的表做一個對比更新。
比如當前 路由器X 離 鄰居Y路由器 的距離是m,此時收到 鄰居Y 發來的表中寫到了“ 鄰居Y離路由器Z的距離是n ”,那 當前路由器X 就知道它離 路由器Z 的距離可能就是 m+n 了,如圖:
就這樣繼續類推,要不了多久,每個路由器就可以將網絡中所有路由節點和子網線路都匯聚起來了。這樣的話,每個路由器只需要查找自己的表就可以很容易的知道到達目的地的最佳出口(接口)是哪個了。
當然,當網絡結構發生變化的時候,各個路由器中的矢量表也會隨之動態更新。
好了,講到這里,基本上對「距離矢量路由算法」大概原理有個認識了,現在我們再來仔細分析分析這個算法的名字,可以發現,它的名字取的還是蠻有意思的,非常貼切。“距離”這個詞就基本表明了這個算法是通過 距離(跳數/時間)來度量2個路由網絡之間的線路的,而“矢量”這個詞,可以看出線路是有方向性的,且路由表中只記錄了數據包去往目的地應該走哪個出口方向,並不會記錄到達目的地的整條路徑。
「距離矢量路由算法」的優點很明顯:非常簡單清晰,且任何加入到網絡中的新節點都能很快的與其它節點建立起聯系獲得補充信息。
缺點呢,首先就是每次發送信息的時候,要發送整個全局路由表,太大了,因為每個路由器需要在矢量表中記錄下整個網絡的信息,導致需要較大存儲、CPU、網絡開銷,對資源的要求越來越高。還有一個問題就是收斂時間太慢,也就是路由器共享路由信息並使各台路由器掌握的網絡情況達到一致所需的時間比較久,收斂速度慢會導致有些路由器的表更新慢,從而造成路由環路的問題。
二、鏈路狀態路由算法
鏈路狀態路由算法(Link State Routing ),基於Dijkstra算法,它是以圖論作為理論基礎,用圖來表示網絡拓撲結構,用圖論中的最短路徑算法來計算網絡間的最佳路由。基於這類算法實現的協議有:OSPF 等。
如圖,
這類算法的基本思路是:采用的是不停的拼接地圖的方式。每一個路由器首先都會發現自己身邊的鄰居節點,然后將自己與鄰居節點之間的鏈路狀態包廣播出去,發送到整個網絡。這樣,當某個路由器收到從網絡中其它路由器廣播來的路由信息包(鏈路狀態包)之后,會將這個包中的信息與自己路由器上的信息進行拼裝,最終形成一個全網的拓撲視圖。