正文開始
1.路由算法綜述
路由器轉發分組是通過路由表轉發的,而路由表是通過各種算法得到的。主機通常直接與一台路由器相連接,該路由器即為該主機的默認路由器(defaultrouter) ,又稱該主機的第一跳路由器(first-hop router)每當主機發送一個分組時,該分組被傳送給它的默認路由器。源主機的默認路由器稱作源路由器(sourcerouter) ,目的主機的默認路由器稱作目的路由器(destination router)。 一個分組從源主機到目的主機的路由選擇問題顯然可歸結為從源路由器到目的路由器的路由選擇問題。
❝【路由選擇算法的分類】1)靜態路由算法(又稱非自適應路由算法)2)動態路由算法(又稱自適應路由算法);常用的動態路由算法可分為兩類:距離-向量路由算法和鏈路狀態路由算法。
❞
2.靜態路由算法
- 由網絡管理員手工配置路由信息。當網絡的拓撲結構或鏈路的狀態發生變化時,網絡管理員需要手工去修改路由表中相關的靜態路由信息。大型和復雜的網絡環境通常不宜采用靜態路由。一方面,網絡管理員難以全面了解整個網絡的拓撲結構;另一方面,當網絡的拓撲結構和鏈路狀態發生變化時,路由器中的靜態路由信息需要大范圍地調整,這一工作的難度和復雜程度非常高。
- 靜態路由算法的優點是簡便、可靠,在負荷穩定、拓撲變化不大的網絡中運行效果很好,因此仍廣泛用於高度安全的軍事系統和較小的商業網絡。
- 動態路由算法能改善網絡的性能並有助於流量控制;但算法復雜,會增加網絡的負擔,有時因對動態變化的反應太快而引起振盪,或反應太慢而影響網絡路由的一致性,因此要仔細設計動態路由算法,以發揮其優勢。
3.距離-向量路由算法(RIP)
在距離-向量路由算法中,所有結點都定期地將它們的整個路由選擇表傳送給所有與之直接相鄰的結點。這種路由選擇表包含:
- 每條路徑的目的地(另一結點)。
- 路徑的代價(也稱距離)。
❝【注意】這里的距離是一個抽象的概念,如RIP 就將距離定義為“跳數"。跳數指從源端口到達目的端口所經過的路由個數,每經過一個路由器,跳數加1 。
❞
在這種算法中,所有結點都必須參與距離向量交換,以保證路由的有效性和一致性,也就是說,所有的結點都監聽從其他結點傳來的路由選擇更新信息,並在下列情況下更新它們的路由選擇表:
- 被通告一條新的路由,該路由在本結點的路由表中不存在,此時本地系統加入這條新的路由。
- 發來的路由信息中有一條到達某個目的地的路由,該路由與當前使用的路由相比,有較短的距離(較小的代價)。此種情況下,就用經過發送路由信息的結點的新路由替換路由表中到達那個目的地的現有路由。
❝【距離向量路由算法的實質】是,迭代計算一條路由中的站段數或延遲時間,從而得到到達一個 目標的最短(最小代價)通路。它要求每個結點在每次更新時都將它的全部路由表發送給所有相 鄰的結點。顯然,更新報文的大小與通信子網的結點個數成正比,大的通信子網將導致很大的更 新報文。由於更新報文發給直接鄰接的結點,所以所有結點都將參加路由選擇信息交換。基於這 些原因,在通信子網上傳送的路由選擇信息的數量很容易變得非常大。
❞
❝RIP(Routing Information Protocol,路由信息協議),采用距離-向量算法,在實際使用中已經較少適用。在默認情況下,RIP使用一種非常簡單的度量制度:距離就是通往目的站點所需經過的鏈路數,取值為0~16,數值16表示路徑無限長。RIP進程使用UDP的520端口來發送和接收RIP分組。RIP分組每隔30s以廣播的形式發送一次,為了防止出現“廣播風暴”,其后續的分組將做隨機延時后發送。在RIP中,如果一個路由在180s內未被刷新,則相應的距離就被設定成無窮大,並從路由表中刪除該表項。RIP分組分為兩種:請求分組和響應分組。
❞
4.鏈路狀態路由算法(OSPF)
鏈路狀態路由算法要求每個參與該算法的結點都具有完全的網絡拓撲信息,它們執行下述兩項任務:
- 第一,主動測試所有鄰接結點的狀態。兩個共享一條鏈接的結點是相鄰結點,它們連接到同一條鏈路,或者連接到同一廣播型物理網絡。
- 第二,定期地將鏈路狀態傳播給所有其他結點。
典型的鏈路狀態算法是OSPF算法。
在一個鏈路狀態路由選擇中,一個結點檢查所有直接鏈路的狀態,並將所得的狀態信息發送給網上的所有其他結點,而不是僅送給那些直接相連的結點。每個結點都用這種方式從網上所有其他的結點接收包含直接鏈路狀態的路由選擇信息。
每當鏈路狀態報文到達時,路由結點便使用這些狀態信息去更新自己的網絡拓撲和狀態“視野圖”,一旦鏈路狀態發生變化,結點就對更新的網絡圖利用Dijsktra最短路徑算法重新計算路由,從單一的源出發計算到達所有目的結點的最短路徑。
❝【注意】這是Dijsktra算法的一個實際應用,別忘了
❞
鏈路狀態路由算法主要有三個特征:
- 向本自治系統中所有路由器發送信息,這里使用的方法是泛洪法,即路由器通過所有端口向所有相鄰的路由器發送信息。而每個相鄰路由器又將此信息發往其所有相鄰路由器(但不再發送給剛剛發來信息的那個路由器)。
❝【洪泛法小知識】洪泛法(Flooding)是一種簡單的路由算法,將收到的封包,往所有的可能連結路徑上遞送,直到封包到達為止。洪泛法被使用在橋接器上,Usenet以及點對點檔案分享等。部份的路由協定也以洪泛法為基礎,例如開放式最短路徑優先(OSPF)、距離向量群體廣播路由協定(DistanceVectorMulticastRoutingProtocol,DVMRP)。無線隨意網絡也使用洪泛法來進行路由。
❞
- 發送的信息是與路由器相鄰的所有路由器的鏈路狀態,但這只是路由器所知道的部分信息。所謂“鏈路狀態”,是指說明本路由器與哪些路由器相鄰及該鏈路的“度量”。對於OSPF 算法,鏈路狀態的"度量”主要用來表示費用、距離、時延、帶寬等。
- 只有當鏈路狀態發生變化時,路由器才向所有路由器發送此消息。由於一個路由器的鏈路狀態只涉及相鄰路由器的連通狀態,而與整個互聯網的規模並無直接關系,因此鏈路狀態路由算法可以用於大型的或路由信息變化聚斂的互聯網環境。
鏈路狀態路由算法的主要優點是,每個路由結點都使用同樣的原始狀態數據獨立地計算路徑,而不依賴中間結點的計算;鏈路狀態報文不加改變地傳播,因此采用該算法易於查找故障。當一個結點從所有其他結點接收到報文時,它可以在本地立即計算正確的通路,保證一步匯聚。最后,由於鏈路狀態報文僅運載來自單個結點關於直接鏈路的信息,其大小與網絡中的路徑結點數目無關,因此鏈路狀態算法比距離-向量算法有更好的規模可伸展性。
❝【距離-向量路由算法與鏈路狀態路由算法的比較】:在距離-向量路由算法中,每個結點僅與它 的直接鄰居交談,它為它的鄰居提供從自已到網絡中所有其他結點的最低費用估計。在鏈路狀態 路由算法中,每個結點通過廣播的方式與所有其他結點交談,但它僅告訴它們與它直接相連的鏈 路的費用。相較之下,距離-向量路由算法有可能遇到路由環路等問題。
❞
❝【路由環路問題】:在維護路由表信息的時候,如果在拓撲發生改變后,網絡收斂緩慢產生了不協調或者矛盾的路由選擇條目,就會發生路由環路的問題,這種條件下,路由器對無法到達的網絡路由不予理睬,導致用戶的數據包不停在網絡上循環發送,最終造成網絡資源的嚴重浪費。(例子和解決方案由於篇幅過大,感興趣的請自行百度百科(狗頭保命))
❞
❝OSPF(Open Shortest Path First開放式最短路徑優先)是對鏈路狀態路由協議的一種實現,著名的迪克斯加算法被用來計算最短路徑樹。OSPF支持負載均衡和基於服務類型的選路,也支持多種路由形式,如特定主機路由和子網路由等。OSPF的簡單說就是兩個相鄰的路由器通過發報文的形式成為鄰居關系,鄰居再相互發送鏈路狀態信息形成鄰接關系,之后各自根據最短路徑算法算出路由,放在OSPF路由表,OSPF路由與其他路由比較后優的加入全局路由表。
❞
5.層次路由
當網絡規模擴大時,路由器的路由表成比例地增大。這不僅會消耗越來越多的路由器緩沖區空間,而且需要用更多CPU 時間來掃描路由表,用更多的帶寬來交換路由狀態信息。因此路由選擇必須按照層次的方式進行。
因特網將整個互聯網划分為許多較小的自治系統(注意一個自治系統中包含很多局域網),每個自治系統有權自主地決定本系統內應采用何種路由選擇協議。如果兩個自治系統需要通信,那么就需要一種在兩個自治系統之間的協議來屏蔽這些差異。據此,因特網把路由選擇協議划分為兩大類
- 一個自治系統內部所使用的路由選擇協議稱為內部網關協議(IGP), 也稱域內路由選擇,具體的協議有RIP 和OSPF 等。
- 自治系統之間所使用的路由選擇協議稱為外部網關協議(EGP), 也稱域間路由選擇,用在不同自治系統的路由器之間交換路由信息,並負責為分組在不同自治系統之間選擇最優的路徑。具體的協議有BGP 。
使用層次路由時, OSPF 將一個自治系統再划分為若干區域(Area), 每個路由器都知道在本區域內如何把分組路由到目的地的細節,但不用知道其他區域的內部結構。采用分層次划分區域的方法雖然會使交換信息的種類增多,但也會使OSPF 協議更加復雜。但這樣做卻能使每個區域內部交換路由信息的通信量大大減小,因而使OSPF協議能夠用於規模很大的自治系統中。