在開始閱讀前,可以先考慮以下問題,閱讀後也可以來檢驗學習的效果:
- 靜態路由和動態路由的區別,以及應用的場景。
- 為什麼要有預設路由?
- 動態路由中距離向量和鏈路狀態向量是怎麼一回事?
- 為什麼說 RIP V1 僅支援有類網路?
- RIP 的功能原理是什麼?
- 為什麼說 RIP 會出現成環的現象?
- 水平分割和毒性反轉解決的是什麼問題?
路由器
在之前關於路由器的介紹中,我們知道它是網路互聯的核心裝置,用於連線不同的網路,在網路之間轉發 IP 資料包。對於路由器來說,路由表是其內部最為重要的構成元件。當路由器需要轉發資料時,就會按照路由表和一定的匹配規則進行轉發。對於路由表來說,一般有兩種靜態和動態這兩種配置方式。下面將細化這一過程,分別討論靜態和動態路由使用場景,以及原理和配置。
回顧一下,對於一個路由器來說需要完成以下的工作:
- 識別資料包的目的地:通過匹配子網掩碼,確定出資料包應該發往的網段。
- 確定路由資訊的來源:當使用動態協議時,假如有多條路由可以到達某個網路,應該先評估將最優的那條新增到路由表中。
- 匹配路由:根據路由表選擇最合適的路由條目。
- 維護和更新:拓撲的資訊可能隨時方法改變,需要自動的更新。
靜態路由和動態路由的對比及應用場景
靜態路由:
- 是網路管理員在路由器上手動配置的路由條目
- 當網路拓撲改變時,需要讓管理員手動的更新路由條目
- 路由過程必須根據管理員的配置轉發
動態路由:
- 當拓撲改變時,可以自動的更新路由條目。
- 通過交換和路由更新來學習和維護遠端的路由。就是動態路由器定期會同步哥各個路由器之間的路由資訊,保持一致。
- 路由器發現新的網路是通過共享路由表來實現的。
總結一下,靜態路由將路由的轉發完全交給管理員,在出現拓撲更新等情況,都是由管理員進行維護。而動態路由則相反,所有的轉發,學習過程完全靠路由器自己。
靜態路由-應用場景:
- 小型的網路-比如只有幾臺路由器
- 到達目的地只有單一路徑時
- 當測試,排錯等情況想快速建立一條路由時
- 作為預設路由使用:比如作為外網的輸入
動態路由-應用場景:
-
大型的網路
-
當達到目的地有多條路徑時
靜態路由
在配置靜態路由時,主要配置目的網段和下一跳地址,在配置前需要進行如下的分析:
靜態路由的配置分析:
-
首先先統計網路個數
-
每個路由器需要配置的路由數目等於總網路數目減去本身連線的網路數目
-
目的網路位需要去的網路,也就是非直連的網路
-
下一跳為與自己直連路由器的介面地址
在為介面配置 IP 地址後,路由器就會生成兩條預設路由-表示直連
Loopback 介面的作用主要是用於測試,當接收到資料時,會將資料自動返回來。
# 預配置命令
enable
configure terminal
line console 0
no exec-timeout
logging synchronous
no ip domain lookup
# R3 Router
Router(config)#hostname R3
# Configure 1.1.1.1/24, 12.1.1.1/24 IP
Router(config)#int e 0/0
Router(config-if)# ip addr 12.1.1.1 255.255.255.0
Router(config-if)# no shutdown
Router(config)#int lo 0
Router(config-if)# ip addr 1.1.1.1 255.255.255.0
Router(config-if)# no shutdown
# Configure Static Route
# Method1:
Router(config)#ip route 2.2.2.0 255.255.255.0 12.1.1.2
Router(config)#ip route 3.3.3.0 255.255.255.0 12.1.1.2
Router(config)#ip route 23.1.1.0 255.255.255.0 12.1.1.2
# Method2:邊界配置預設路由比較省時間
Router(config)#ip route 0.0.0.0 0.0.0.0 12.1.1.2
// hostname R4
Router(config)#interface ethernet 0/0
Router(config-if)#ip address 12.1.1.2 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface loopback 0
Router(config-if)#ip address 2.2.2.2 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface ethernet 0/1
Router(config-if)#ip address 23.1.1.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
# Configure Static Route
Router(config)#ip route 1.1.1.0 255.255.255.0 12.1.1.1
Router(config)#ip route 3.3.3.0 255.255.255.0 23.1.1.2
# The configuration of R5 is same as the R3
想象這樣一種情況,假設到達 5.5.5.5/24 的網路,在 R4 配置靜態路由時,可以通過 R6 和 R7 兩條路徑。
這時資料包在到達該網路時,該如何選擇呢?
採用的原則如下:
- 首先通過 mask 匹配最長掩碼
- 如果最長掩碼一樣,比較 AD,可以手動配置
- 當 AD 一樣,可以比較 Metric
- 最後還一樣的話,通過負載均衡來實現
動態路由
路由器之間可以通過路由協議,自主學習來獲得的路由資訊,這樣的路由稱為動態路由。使用路由協議動態構建路由表不需要人工參與,並能自動的適應網路狀態的變化更新路由表,大型網路或狀態變化頻繁的網路通常會採用動態路由協議。
自制系統和分層路由
因特網的網路數量巨大,幾百萬個路由器相互相互連線在一起。要讓一個路由器記錄每個網路的資訊是不可能的,而且許多機構並不願意自己的網路內部細節對外暴露。基於以上的原因,因特網劃分了許多個自制系統(Autonomous System)。
自治系統內部的路由通過內部閘道器協議(IGP)交換路由資訊,典型的內部閘道器協議有 RIP 和 OSPF。
自治系統之間也需要交換路由資訊,自治系統之間使用外部閘道器協議(EGP)交換路由資訊,每個自治系統都會有邊界路由器來完成這個任務,目前因特網使用的外部閘道器協議是 BGP。
動態路由協議一般分為如上圖中這幾種:
距離向量路由協議:根據跳數來,選擇跳數最小的。如 RIP 協議。EIGRP 會把跳數作為參考。
鏈路狀態路由協議:通過自己計算和篩選怎麼走(鄰居表,拓撲表,路由表),如 OSPF,IS-IS 等。
RIP (距離向量)
應用層協議,使用 UDP 傳輸,埠為 520。RIP 和 IGRP 已經被淘汰,因為它們僅支援有類路由協議。(就是不能劃分子網的協議)
路由資訊協議(RIP)是路由器生產廠商之間使用的第一個開放標準,是連線不同廠商裝置使用最為廣泛的共有協議。RIP 協議有兩個版本,V2 版本比 V1 版本的基礎上增加了一些擴充特性,如更新認證、路由彙總、無類路由、VLSM, 將廣播改為組播等。
RIP 協議是基於距離向量的路由狀態協議。RIP 協議中,如果路由器 A 和 網路 B 直接相連,那麼路由器 A 到網路 B 的距離就是 N + 1。如果從路由器 A 出發 到達網路 B 需要經過 N 個路由器,則路由器 A 到網路 B 的距離就是 N + 1。
RIP 認為距離最小的路徑就是最好的路徑。RIP 中的距離也稱為 “跳數”,每增加一個路由器,跳數就加 1。
RIP 工作原理
- 每個路由器每隔 30s 給自己所有的鄰居路由器廣播 RIP 報文,報文的內容是這個路由器當前的路由資訊。
- 收到鄰居路由器的路由表資訊後,更新自己的路由表,下次將更新後的路由表告訴自己的鄰居
- 180s 沒有收到某個路由器的路由表資訊,就認為這個路由器出現故障,路由表中將所有以這個路由器為下一站的表項的距離修改為 16,表示不可達。再過 60s 依然沒有回覆,從路由表刪除
當兩個路由器共享一條鏈路或者在同一個物理網路中,就稱它們為鄰居
配置:
#三臺路由器正常配置埠
# R1
# r1(config)#router rip
# 關閉自動彙總,彙總成主類 A,B,C 類的網路。
r1(config-router)#no auto-summary
r1(config-router)#version 2
r1(config-router)#network 12.0.0.0
r1(config-router)#network 1.0.0.0
r1(config-router)#network 13..0.0
# R2,R3 同理
# 排錯命令
show ip rip database
show ip protocols/inc second
由於在向外通告網路時,存在 30s (預設)的時間差,這就有可能出現環路的現象。
比如在圖中 R3 宣告自己的網路後,恰巧 Lo 0 介面埠,此時 R3 會立即將直接在路由表中刪除 3.3.3.0 的網路。
但此時 R2 是不知道的,假設過了 10 s 後,到了 R2 該通告本身路由的情況,此時會組播發給 R1 和 R3.
而此時 R3 發現,R2 能到達 3.3.3.0 的網路,會將該網路加入自己的路由表,並且距離加一。
此時如果有資料包傳送 3.3.3.0 的網路,就會在 R2 和 R3 之間一直傳遞。而隨著下一通告週期的來臨,R2 和 R3
的舉例會一直增加,直到 16 在雙方的路由表消失。
如何解決成環的問題:
-
限制最大距離:RIP 協議允許一條路徑上最多包含 15 個路由器,距離的最大值為 16(表示網路不可達)
-
水平分割:路由器從某個介面接收到的更新資訊不允許再從這個介面發回去。
- 如 R2 收到了 R3 中到達 3.3.3.0 網路的路由資訊,在自己宣告時不會將到 3.3.3.0 的訊息再告訴 R3.
但水平分割依然無法解決像第一個圖中,有多條路徑可達的情況。
這裡的解決方法就是毒性反轉:
實際上是一種改進的水平分割,當路由器從某個介面上接收到某個網段的路由資訊後,並不是不往回傳送資訊了,而是將這個網段的跳數(距離)設為無限大,再傳送出去。收到此種的路由資訊後,接收方路由會立即拋棄該路由,而不是等到其老化時間到。
簡單來說,逆轉指的是對水平分割而言,原來是不傳送,現在是傳送。但是傳送的是距離為 16 的資訊,這樣就表明該網路不可達,所以叫毒。
這裡可以做一個實驗,利用關閉水平分割,手動造成成環現象。
# 關閉 R1 e 0/0 介面的水平分割
R1(config-if)#no ip split-horizon
# 關閉 R2 e 0/0 介面的水平分割
R2(config-if)#no ip split-horizon
# 設定 R2 的 e0/0 為被動,禁止傳送協議報文
R2(config-router)# passive-interface e 0/0
# 關閉 R2 的 loopback 0 口
# 設定 R2 的 e0/0 為主動
R2(config-router)#no passive-interface e 0/0
這時我們可以利用 show ip route
來觀察,會發現 R1 和 R2 的跳數一直都會增加,增加到 16,全都消失
原因:
由於把 R2 的埠設定成被動,R1 收不到 R2 關閉了 lo 0 的訊息。而且 R1,R2 的水平分割都已經被關閉。
這時 R2 會收到來自 R1 的它到 2.2.2.0 網路的跳數是 1,所以到 2.2.2.0 網路的跳數是 2。
由於 R2 已經無法通過直連到達 2.2.2.2。所以會更新自己的跳數。之後 R2 又會給 R1 傳送到 2.2.2.2 的跳數是 2。
由於 R1 本身到 2.2.2.2 網路就是通過 R2,所以會更新自己的路由表跳數為 3。就這樣以此類推直到到 16 結束。