HCNA數通-路由協議基礎

路由器類似於現實生活中的GPS導航儀,你指定目的地,導航儀會根據當前位置計算出到達目的地的路線條目並選擇最優的路線。而在 一個IP網絡中,路由(Routing)是個非常非常基本的概念。網絡的基本功能,是使得處於網絡中的兩個IP節點能夠互相通信,而通信實際上就是數據交互的過程,數據交互則需要網絡設備(交換機、路由器)幫助我們來將數據在兩個通信節點之間進行傳輸。當路由器(或者其他三層設備)收到一個IP數據包,路由器會找出報文中的 IP頭裡的目的IP地址,然後拿著目的IP地址到自己的路由表(Routing Table)中進行查找,找到“最匹配”的路由條目後,將數據包根據路由條目所指示的出接口或下一跳IP轉發出去,這就是路由(Routing)。

而每臺路由器都會在本地維護一個路由表,路由表中裝載著路由器通過各種途徑獲知的路由條目(Routes),每一條路由條目由路由前綴(路由所關聯的目的網絡號)、路由信息來源、出接口或下一跳IP、優先級、開銷等信息元素構成。路由器通過直連、靜態的或者動態的方式獲取路由條目並維護自己的路由表,路由表是每臺支持路由功能的設備進行數據轉發的依據和基礎,是一個非常重要的概念,任何一臺支持路由功能的設備要執行數據轉發或路由的動作,就必須擁有及維護一 張路由表。

2.為什麼要有動態路由協議

上面已經說了,路由器是依賴自己維護的路由表來進行數據轉發的,而路由表又是由許多路由條目構成的,路由器要將數據轉發到目的地就必須有路由。一臺路由器可以從多種來源學習到路由條目:

  • 直連路由

    直連路由顧名思義,就是直接連接在路由器上的接口路由條目,路由器在初始啟動後,如果我們為其接口配置IP地址,並且接口的物理及協議(鏈路)的狀態都為UP,則路由器能夠自動地學習該接口的網絡號,將這條直連路由裝載進路由表,這其實很好理解,因為這是我“家門口”的網絡嘛,無需詢問別人,自己知道怎麼走出大門口。

  • 靜態路由

    直連網絡能夠自動學習,可是非直連網絡可就無法自動學習了,那麼一種最簡單的方式,就是通過手工配置的方式為路由器創建靜態的路由表項,這叫靜態路由。靜態路由由於其是靜態手工配置,因此可管理性非常高,但是也有明顯的缺陷,因為你要到一個目的地, 就必須做一條靜態路由的配置,那麼如果網絡特別龐大、設備數量特別多呢?工作量就相當大了,這是低效且不切實的;再者靜態路由無法根據網絡拓撲的變更做出 動態的感知,因此當網絡發生變化時(新加入路由設備或者原有路由設備發生故障),管理員可能不得不重新配置或調整靜態路由。因此,我們迫切需要一種動態的機制,來幫助路由器更加靈活的維護路由信息。這種機制就是下面要講的動態路由。

  • 動態路由

  • 所謂動態路由,就是由網絡中的路由器之間互相通信,傳遞路由信息,利用收到的路由信息更新路由表的過程,它能實時地適應網絡結構的變化。動態路由選擇依賴於路由選擇協議來收集與傳播有關信息。路由選擇協議是為了學習與維護路由表,它獲取網絡上其他參與者的路由更新數據包。這樣,路由器之間便能夠交換可達網絡的信息以及每個網絡的狀態。只有運行同一種路由協議的路由器之間才會交換信息。網絡拓撲發生變化後,新信息將會傳遍整個網絡,路由器都將更新其路由表,以反映變化後的拓撲。

3.動態路由協議的分類

根據作用的範圍,路由協議可分為:

  • 內部網關協議(Interior Gateway Protocol,簡稱IGP):在一個自治系統內部運行。

  • 外部網關協議(Exterior Gateway Protocol,簡稱EGP):運行於不同自治系統之間。

HCNA數通-路由協議基礎

所謂的(AS)自治系統,指的就是一個獨立自治的、自我管理的路由選擇域。

根據使用的算法,路由協議可分為:

  • 距離矢量協議(Distance-Vector):包括RIP(路由信息協議)、IGRP(內部網關路由協議,已退出歷史)和BGP(邊界網關協議)也叫路徑矢量協議(Path-Vector)

  • 鏈路狀態協議(Link-State):包括OSPF(開放最短路徑優先)和IS-IS(中間系統到中間系統)

  • 高級距離矢量協議(Advance Distance-Vector)也叫混合路由協議:如EIGRP(加強型的內部網關路由協議)

HCNA數通-路由協議基礎

根據發送更新的路由條目是否包含子網掩碼可以將IP路由協議分為有類路由協議和無類路由協議。

HCNA數通-路由協議基礎

4.關於距離矢量路由協議

我們先初步認識一下距離矢量路由協議。

動態路由協議,大家可以理解為賦予了路由器一種“語言”交流能力。在靜態路由環境下,路由器之間都互相不交流的,比較悶騷。但是一旦激活了動態路由協議,路由器之間就能夠進行互相的通告和學習。

在上圖中,初始情況下,R2是無法知道遠程網絡、R1的直連網絡1.1.1.0/24的,在R1和R2激活了距離矢量的動態路由協議後,R1將自己“家門口”的路由 1.1.1.0/24通告給R2(當然,需要在配置RIP時把網段宣告出去),在通告路由的同時,還告訴R2你要前往1.1.1.0/24所需花費的“代價,或成本(Metric)”,這樣一來R2就能動態的從R1 學習到這條路由並且裝載進路由表。於是當R2要發送數據去往1.1.1.0/24的時候,就會將數據包丟給下一跳路由器、也就是路由的通告者R1。這就是 所謂的距離矢量。最具代表性的距離矢量路由協議是RIP,RIP是一個有著悠久歷史的路由協議,簡單、小巧,但是也存在很大侷限,這使得它幾乎很少在現今 的網絡環境中被使用。

使用距離矢量路由協議的路由器並不瞭解網絡的拓撲。該路由器只知道:

  • 自身與目的網絡之間的距離

  • 應該往哪個方向或使用哪個接口轉發數據包

實際上,運行距離矢量路由協議的路由器,所有路由器都定期地將自己的整張路由表(或路由表的一部分)更新給直連的其他路由器(鄰接路由器),接著鄰接路由器根據收到的信息判斷是否要對自己的路由表進行修改(例如,是否有去往特定網路的更佳路徑),這一過程將定期地重複進行。於是就進行一系列的路由收發行為,最終的結果是,大家都心滿意足的填充好了自己的路由表。

5.關於鏈路狀態路由協議

距離矢量路由協議是直接將自己的路由表更新給直連路由器,並且路由器並不瞭解整個拓撲結構,這很容易在特定情況下產生諸如路由環路之類的問題(因此距離矢量路由協議定義了一系列防止環路的特性)。相比之下,鏈路狀態路由協議則更新的不再是路由表或路由條目,而是對鏈路(接口)的描述等,每臺路由器僅在其接口(鏈路)的狀態發生變化時,才將變化後的狀態發送給其他所有路由器(或網絡中稱為區域的一部分所有路由器),通過鏈路狀態信息的泛洪,路由器蒐集這些鏈路狀態信息並裝載進鏈路狀態數據庫,隨後運行特定的算法計算出一個無環的拓撲最後把最優的路由條目放入路由表。因此運行鏈路狀態路由協議的路由器是知曉網絡的拓撲結構的。鏈路狀態路由協議應該說是目前業內IGP應用的主流,其中最具代表性的當屬OSPF和ISIS。

6.關於高級距離矢量(混合)路由協議

顧名思義,混合路由協議兼具距離矢量和鏈路狀態的特徵。這些協議只發送變化後的消息(這類似於鏈路狀態信息),且只將這些消息發送給鄰接路由器(這類似於距離矢量路由協議)。使用該協議的有EIGRP。

7.關於有類和無類路由協議

有類和無類路由協議最大的區別在於:

  • 有類路由協議在發送路由更新時只發送網絡而不發送子網掩碼,RIPv1和IGRP(現在版本的路由器已經不支持此協議)屬於有類路由協議。

  • 無類路由協議在發送路由更新時在發送網絡的同時還會發送 子網掩碼。RIPv2、EIGRP、OSPF、IS-IS和BGP等大多數較新的網絡都使用無類路由協議。

也許你會問,既然現在幾乎所有網絡都在使用無類路由協議,那還學有類路由協議幹嘛?我只能說IT發展的速度太快了!要知道當時路由器和貓等WAN網絡設備的CPU和內存等性能相比現在是很低的,如果路由器在更新的時候發送明細路由即帶子網掩碼的話不但耗內存和CPU資源而且會佔用路由器不少存儲空間。相反,如果對多條明細路由能夠在邊界進行自動彙總的話那麼上面提到的兩個問題就能得到改善!所以有類路由協議具有如下特徵:

  • 發送的路由條目不帶子網掩碼,接收到路由條目的路由根據路由主類別(A類、B類和C類)進行判斷並填充。

  • 在邊界進行自動彙總:路由器只發送主網絡信息(網絡中所以子網的彙總),在主網絡邊界,有類路由協議自動創建一條有類彙總路由。

下面我們用一個實例來說明一下有類路由協議的工作機制和規則:

HCNA數通-路由協議基礎

R1的路由表:

R1#show ip route

Gateway of last resort is not set

R 172.16.0.0/16 [120/1] via 10.2.0.2, 00:00:02, Serial0/2 //該路由是從R2的172.16.1.0和172.16.2.0彙總後接收到的,R2從右邊的172.16.0.0 B類網絡跨越10.0.0.0 A類網絡後發送給R1。

10.0.0.0/16 is subnetted, 2 subnets

C 10.2.0.0 is directly connected, Serial0/2 //直連路由

C 10.1.0.0 is directly connected, Loopback0 //直連路由


R2的路由表:

R2#show ip route

Gateway of last resort is not set

172.16.0.0/24 is subnetted, 2 subnets

R 172.16.1.0 [120/1] via 172.16.2.3, 00:00:07, Serial0/3 //從R3學習到的RIP明細路由條目

C 172.16.2.0 is directly connected, Serial0/3 //直連路由

10.0.0.0/16 is subnetted, 2 subnets

C 10.2.0.0 is directly connected, Serial0/1 //直連路由

R 10.1.0.0 [120/1] via 10.2.0.1, 00:00:03, Serial0/1 //從R1學習到的明細路由條目


R3的路由表:

R3#

R3#sh ip route

Gateway of last resort is not set

172.16.0.0/24 is subnetted, 2 subnets

C 172.16.1.0 is directly connected, Loopback0 //直連路由

C 172.16.2.0 is directly connected, Serial0/2 //直連路由

R 10.0.0.0/8 [120/1] via 172.16.2.2, 00:00:15, Serial0/2 //該路由是從R2的10.1.0.0和10.2.0.0彙總後接收到的,R2從左邊的10.0.0.0A類網絡跨越172.16.0.0 B類網絡後發送給R3。

我們對上圖R1的LO 0 接口IP地址做一下變更,看看路由表會發生什麼變化,變更後得拓撲圖如下所示:

HCNA數通-路由協議基礎

R1的路由表:

R1#sh ip route

Gateway of last resort is not set

R 172.16.0.0/16 [120/1] via 10.2.0.2, 00:00:27, Serial0/2

10.0.0.0/8 is variably subnetted, 2 subnets, 2 masks

C 10.2.0.0/16 is directly connected, Serial0/2

C 10.1.0.0/24 is directly connected, Loopback0


R2的路由表:

R2#show ip route

Gateway of last resort is not set

172.16.0.0/24 is subnetted, 2 subnets

R 172.16.1.0 [120/1] via 172.16.2.3, 00:00:14, Serial0/3

C 172.16.2.0 is directly connected, Serial0/3

10.0.0.0/16 is subnetted, 1 subnets

C 10.2.0.0 is directly connected, Serial0/1


R3的路由表:

R3#sh ip route

Gateway of last resort is not set

172.16.0.0/24 is subnetted, 2 subnets

C 172.16.1.0 is directly connected, Loopback0

C 172.16.2.0 is directly connected, Serial0/2

R 10.0.0.0/8 [120/1] via 172.16.2.2, 00:00:06, Serial0/2

此時,發現R2中R 10.1.0.0 [120/1] via 10.2.0.1, 00:00:03, Serial0/1這條路由條目沒有了!是不是覺得R2的路由表和你想象中的不一樣?下面給出答案!

有類路由協議發送路由更新時遵守如下規則:

  1. 同類發明細,異類發彙總。注:在路由邊界,將要發出的路由和出接口進行比較:是否是同一個主類,是同一個主類(A類看一個段,B類看兩個段,C類看三個段)則發路由明細(下面第二條是例外),不是則發送彙總!

    實例解析:上面的第一張圖(R1的LO 0接口為10.1.0.0/16)R1從S0/2接口把路由條目10.1.0.0/16發給R2,由於S0/2接口所在的子網10.2.0.0/16和要發送的子網屬於同一主類網絡(A類10.0.0.0),所以路由器R1會把明細路由10.1.0.0/16發送給R2。所以在R2的路由表裡會有R 10.1.0.0 [120/1] via 10.2.0.1, 00:00:03, Serial0/1的路由條目。

  2. 發出的路由條目和接口在同一主類網絡(如A類10.1.0.0/16通過10.2.0.0/16網段的接口發送出去),如果跟出接口的子網掩碼相同就可發出去,如果不同(10.1.0.0/24通過10.2.0.0/16網段的接口發送)就不能發出去。

    實例解析:上面的第二張圖(R1的LO 0接口為10.1.0.0/24)R1從S0/2接口把路由條目10.1.0.0/24發給R2,S0/2接口所在的子網10.2.0.0/16和要發送的子網屬於同一主類網絡(A類10.0.0.0),但是24位的和16位的子網掩碼不同,所以R1根本就不會把10.1.0.0/24的路由條目發送給R2。所以R2的路由表裡自然就不會有10.1.0.0的路由條目(第二張圖下R2的路由表)。為了驗證可以在R1上打開Debug ip rip packet。

  3. 如果是32位主機路由,不受上面第二條約束,直接發出。

    為了驗證,在R1上加一個環回口LO 1,IP地址為10.1.1.1/32.之後再到R2看路由表,結果如下:

    R2#sh ip route

    Gateway of last resort is not set

    172.16.0.0/24 is subnetted, 1 subnets

    R 172.16.1.0 [120/1] via 172.16.2.3, 00:00:06, Serial0/3

    C 172.16.2.0 is directly connected, Serial0/3

    10.0.0.0/8 is variably subnetted, 2 subnets, 2 masks

    R 10.3.0.1/32 [120/1] via 10.2.0.1, 00:00:16, Serial0/1 //得到驗證,32位的主機路由只要主類網絡一樣,子網掩碼可以不同。

    C 10.2.0.0/16 is directly connected, Serial0/1

有類路由協議在接收路由更新時遵守如下規則:

  1. 如果收到的路由與入接口在同一主類網絡,就以入接口的子網掩碼去匹配;如果匹配時發現主機位有1,則將其做為主機路由放入路由表。

    如上R2的路由表收到R3的路由條目172.16.1.0屬於同一主類網絡,所以就以接口S0/3的子網掩碼(255.255.255.0)去匹配。

  2. 收到的路由與入接口不在同一主類網絡,且自己路由表中並無此路由子網就以此路由的主類掩碼去匹配。

    如上R1的路由表中的172.16.0.0/16 [120/1] via 10.2.0.2, 00:00:27, Serial0/2,與R1本身的直連接口路由10.1.0.0/16和10.2.0.0/16不在同一主類網絡,而且自己路由表中本來並無此路由子網,所以就用B類主網16位的掩碼去匹配。

  3. 收到的路由與入接口不在同一主類網絡,但路由表中有此路由子網,就不接受。


分享到:


相關文章: