路由選擇協議(RIP、OSPF、BGP)


路由選擇協議(RIP、OSPF、BGP)

一種廣義分類:

  • 全局式路由選擇算法(GRA),用完整的、全局性的網絡知識計算從源到目的地之間的最低費用路徑,具有全局狀態信息的算法常被稱作 鏈路狀態(Link State LS)算法
  • 分散式路由選擇協議(DRA),以迭代、分布式的方式計算出最低費用路徑,如 距離向量(Distance-Vector DV)算法——每個結點維護到網絡中所有其他結點的費用(距離)估計的向量。

另一種廣義分類:

  • 靜態路由選擇算法
  • 動態路由選擇算法:能夠當網絡流量負載或拓撲發生變化時改變路由選擇路徑;

還有一種分類方式:

根據它是負載敏感的還是負載尺寸的進行划分。

  • 負載敏感算法:鏈路費用會動態地變化以反映出底層鏈路的當前擁塞水平;
  • 負載遲鈍算法:當今大多數路由選擇算法,某條鏈路的費用不明顯的反映其當前的擁塞水平,如 RIP、OSPF、BGP。

鏈路狀態路由選擇算法

OFPS算法就是用的LS算法,DIjkstra算法

Dijkstra算法是迭代算法,性質是經算法的第k次迭代后,可知道到k個目的結點的最低費用路徑,在到所有目的結點的最低費用路徑之中,這k條路徑具有k個最低費用。

當LS算法終止時,對於每個結點,都得到了從源結點沿着它的最低費用路徑的前一結點,對於每個前一結點 又有它的前一結點,以此可以構造從源結點到所有目的結點的最短路徑,從此可以構造路由器轉發表。

復雜性

最差情況下為 O(n2)

可能出現的問題——振盪

鏈路費用其實就是鏈路上承載的負載,例如反映要歷經的時延。

鏈路費用可能是非對稱的,即沿着正方向和反方向傳播的費用可能不同。

出現該現象最根本的原因是:鏈路費用和所承載的流量有關系。

簡單來說就是,初始的路由選擇完畢之后,路由器使用該轉發表將流量引導到響應的鏈路和路由上,但當該鏈路上的流量變多后,該鏈路費用可能會發生變化,此時路由選擇也會發生變化(比如本來選擇的是順時針,現在可能變為了逆時針更好)。這樣一來,當路徑上的流量發生變化之后路由選擇也會總是發生變化,因此就出現了振盪。

解決方法:

  • 強制鏈路費用不依賴於所承載的流量(不可能)
  • 確保並非所有的路由器都同時運行LS算法,也就是路由器以一定周期來運行LS算法。

距離向量路由選擇算法

特點:

  • 分布式:每個結點都要從一個或多個直接相連鄰居接收到信息,執行計算,然后將其計算結果分發給鄰居;
  • 迭代:此過程一直要持續到鄰居之間無更多信息要交換為止;
  • 異步:它不要求所有結點相互之間步伐一致地操作。

Bellman-Ford方程:dx(y) = minv{c(x, v) + dv(y)}

v是x的所有鄰居,即x到y的最短距離為,x到v加v到y的最短距離。若結點x的距離向量因這個更新步驟而改變,結點x接下來將向它的每個鄰居發生其更新后的距離向量。

基本思想:Dx = [Dx(y) : y∈N] 是結點x的距離向量,該向量是從x到在N中的所有其他結點y的費用估計的向量。

  • 對於每個鄰居v,從x到直接相連鄰居v的費用為c(x, v);
  • 結點x的距離向量,即Dx = [Dx(y) : y∈N],包含了x到N中所有目的地y的費用的估計值;
  • 它的每個鄰居的距離向量,即對x的每個鄰居v,有Dv = [Dv(y) : y∈N]

具體過程舉例

  • 初始化后,每個結點向它的兩個鄰居發送其距離向量;
  • 在結點重新計算它們的距離向量之后,它們再次向其鄰居發送它們的更新距離向量(若發送改變);
  • 從鄰居接收更新距離向量,重新計算路由選擇表項和通知鄰居到目的地的最低費用路徑的費用已經變化的過程繼續下去,直到無更新報文發送為止。

可能出現的問題——鏈路費用改變與鏈路故障

當好消息出現——x到y之間費用減少:

  • 在t0時刻,y檢測到鏈路費用變化(4->1),更新其距離向量,並通知其鄰居這個變化;
  • 在t1時刻,z收到來自y的更新報文並更新了其距離表。它計算出到x的新最低費用(5->2),它向鄰居發送了它的新距離向量;
  • 在t2時刻,y收到來自z的更新並更新其距離表。y的最低費用未變,因此y不發送任何報文給z。算法進入靜止狀態。

當壞消息出現——x到y之間費用增加:

  • 在鏈路費用變化之前,Dy(x) = 4,Dy(z) = 1,Dz(y) = 1和 Dz(x) = 5。在t0時刻,y檢測到鏈路費用變化(4->60):

    • y計算其到x的新最低費用路徑的費用值為:Dy(x) = min{c(y, x) + Dx(x), c(y, z) + Dz(x)} = min{60 + 0, 1 + 5} = 6;
    • 在從全局來看,這個6是錯的,因為它是根據z到x的最短路徑為5算出來的,這個5又是根據x到y費用增多之前的4算出來的,現在變化了自然就不是這樣了;
  • 在t1時刻,會遇到路由環路,即為到達x,y通過z路由,z又通過y路由。路由環路就像一個黑洞,目的地為x的分組在t1時刻到達y或z后,將在這兩個結點之間不停地來回反復;

  • 接下來就會進入 無窮計數 階段。由於y已經算出到x的心得最低費用(5),在t1時刻將通知z,當z收到y的新距離向量,它指示了y到x的新最低費用是6,則計算出z到x的心最低費用為 Dz(x) = min{50+0, 1+6} = 7,然后又通知y;

  • 類似的方式,z收到y的新距離向量,算出到x的新最低費用Dy(x) = 8,繼續傳播又算出 Dz(x) = 9;

  • 即我們的更新過程一直會進行,直到z將最終確定它到x的最短距離不是通過y,而是直接到x時(因為若是通過y,則鏈路費用會不停的變化)。

  • 增加毒性逆轉:若z通過y路由選擇到達目的地x,則z將通告y,它自己到x的距離是無窮大的 即Dz(x) = ∞。也就是說y永遠不會試圖通過z路由到達x路由。

LS和DV路由選擇算法的比較

DV算法

  • 每個節點僅與它的直接相連的鄰居交談,但它為其鄰居提供了從它自己到網絡中(它所知道的)所有其他節點的最低開銷估計;
  • DV算法要求在每次迭代時,在兩個直接相連鄰居之間交換報文,而且僅當在新的鏈路開銷導致與該鏈路相連節點的最低開銷路徑發生改變時,才傳播已改變的鏈路開銷
  • DV算法收斂較慢,且在收斂時會遇到路由選擇環路、無窮計數問題;
  • DV算法中一個不正確的節點計算值會擴散到整個網絡

LS算法

  • LS算法需要全局信息,每個節點(經廣播)與所有其他節點通信但僅告訴它們與它直接相連鏈路的開銷
  • LS算法要求每個節點都知道網絡中每條鏈路的開銷,這就要求要發送O(|N||E|)個報文,而且無論何時一條鏈路的開銷改變時,必須向所有節點發送新的鏈路開銷;
  • LS算法是一個要求O(|N||E|)個報文的O(|N|2)算法;
  • 在LS算法下,路由計算在某種程度上是分離的,提供了一定程度的健壯性

層次路由選擇

由於規模管理自治兩個方面的原因,隨着路由器數目變得很大,涉及路由選擇信息的計算、存儲及通信(例如LS更新或最低費用路徑的變化)的開銷將高得不可實現,以及公司要求按照自己的意願運行路由器的話就需要管理自治。因此就出現了 通過將路由器組織進管理系統(AS) 的方法來解決。

  • 每個AS由一組通常處在相同管理控制下的路由器組成(如,由相同的ISP運營或屬於相同的公司網絡);
  • 在相同的AS中的路由器全部運行相同的路由選擇算法,且擁有彼此的信息;
  • 在AS內部運行的路由選擇算法叫做 自治系統內路由選擇算法,間AS間運行的路由選擇算法叫做 自治系統間路由選擇算法
    • 相互通信的兩個AS必須運行相同的自治系統間路由選擇算法;
    • 實際上,因特網中所有AS都運行相同的;
  • AS間互聯時,AS內的路由器需要想AS外的目的地轉發分組,這些負責與其他AS通信的路由器成為 網關路由器

AS內部路由選擇算法——RIP

  • RIP,路由選擇信息協議,是一種距離向量協議;

  • 使用條數作為其費用度量,即每條鏈路費用為1;

  • 一條路徑的最大費用被限制為15,因此若距離為16則為不可達;

  • 若有更新或30s內無更新,則路由器會向其鄰居發送 RIP相應報文(RIP通告),內容為發送方路由器的距離向量和該路由器的轉發表,鄰居就會通過該信息來看是否更新自己的距離向量和路由表;

  • 若一台路由180s內未從某個鄰居聽到報文,則該鄰居被認為是不可達的;

  • 路由器在UDP上用端口520相互發送RIP請求和相應報文,RIP被當作一個應用層進程來實現,能在標准套接字上發送和接收報文。

更新規則

  • 對地址為 X 的相鄰路由器發來的 RIP 報文,先修改報文中的所有項目,把下一跳字段中的地址改為 X,並把所有的距離字段加 1;

  • 對修改后的 RIP 報文中的每一個項目,進行以下步驟:

    • 若原來的路由表中沒有目的網絡 N,則把該項目添加到路由表中;
    • 否則:若下一跳路由器地址是 X,則把收到的項目替換原來路由表中的項目;否則:若收到的項目中的距離 d 小於路由表中的距離,則進行更新(例如原始路由表項為 Net2, 5, P,新表項為 Net2, 4, X,則更新);否則什么也不做。
  • 若 180s還沒有收到相鄰路由器的更新路由表,則把該相鄰路由器標為不可達,即把距離置為 16。

RIP優缺點

  1. RIP非常適合小型網絡,它易於理解和配置,同時幾乎所有路由器都支持它。但是 RIP的跳數限制為15,超出該距離則無法訪問,限制了網絡的規模。
  2. RIP網絡收斂速度非常慢,當網絡出現故障時,要經過比較長的時間才能將此消息傳送到所有路由器。由於RIP中的任何路由更新都會占用大量帶寬,因此關鍵IT流程的資源受到限制。
  3. RIP不支持同一路由上的多條路徑,這可能會產生更多的路由環路。在使用固定跳數指標選擇最佳路由時,RIP在基於實時數據比較路由時無法工作。

AS內部路由選擇算法——OSPF

  • 向本自治系統中的所有路由器發送信息,這種方法是洪泛法;

  • 發送的信息就是與相鄰路由器的鏈路狀態,鏈路狀態包括與哪些路由器相連以及鏈路的度量,度量用費用、距離、時延、帶寬等來表示;

  • 只有當鏈路狀態發生變化時,路由器才會發送信息;

  • 所有路由器都具有全網的拓撲結構圖,並且是一致的。相比於 RIP,OSPF 的更新過程收斂的很快

RIP和OSPF比較

  • 路由協議類型: RIP是距離矢量協議,而OSPF是鏈路狀態協議。距離矢量協議使用跳數來確定傳輸路徑。鏈路狀態協議分析不同的源,如速度,成本和路徑擁塞,同時識別最短路徑。

  • 路由表構造: RIP使用周圍的路由器請求路由表。然后合並該信息並構造自己的路由表。該表定期發送到相鄰設備,同時更新路由器的合並表。在OSPF中,路由器通過僅從相鄰設備獲取所需信息來合並路由表。它永遠不會獲得設備的整個路由表,並且路由表構造非常簡單。

  • 跳數限制: RIP最多只允許15跳,而在OSPF中沒有這樣的限制。

  • 使用的算法: RIP使用距離向量算法,而OSPF使用最短路徑算法Dijkstra來確定傳輸路由。

  • 網絡分類:在RIP中,網絡分為區域和表格。在OSPF中,網絡被分類為區域,子區域,自治系統和骨干區域。

  • 復雜性級別: RIP相對簡單,而OSPF則要復雜得多。

  • RIP與OSPF應用: RIP適用於較小的網絡,因為它具有跳數限制。OSPF非常適合大型網絡。

自治系統間路由選擇

當源AS僅有一條通向外部AS的鏈路時,情況比較簡單,不做討論。

當有多條時,自治系統間路由選擇算法就起作用了,它的主要作用有兩個:

  • 從相鄰AS獲取可達性信息;
  • 向該AS中所有路由器傳播可達性信息。

BGP

在每個AS內部產生了網狀TCP連接。對於每條TCP連接,位於該連接端點的兩台路由器成為BGP對等方,沿着該連接發送所有BGP報文的TCP連接被稱為 BGP會話。此外,跨越兩個AS的BGP會話成為外部BGP會話(eBGP),在同一個AS中的兩台路由器之間的BGP會話成為內部BGP會話(iBGP)

BGP使得每個AS直到經過其相鄰AS可達哪些目的地。在BGP中,目的地不是主機 而是CDIR化的前綴,每個前綴標識一個子網或一個子網的集合。

簡要過程可以分為兩步:

  • 首先兩個AS的網關路由器使用eBGP會話交換其可達性信息;
  • 獲取可達性信息后,用iBGP會話向本AS內其他路由器發布這些前綴。

BGP詳解(有熱土豆路由選擇)

參考鏈接

1、RIP與OSPF協議詳細對比

2、RIP和OSPF的區別


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM