明辨路由協定的種類、分類和特性
路由技術分析從零開始

2010-03-30
上一期介紹過網路構成的基礎設備Hub、Bridge與Switch,本期接著介紹相關的Routing知識。相信大家一定聽過路由器這個名稱,但是為什麼叫路由器?而路由又是什麼意思?這篇文章將詳細介紹路由的技術以及相關的協定。
路由(Routing)是決定網路封包要如何送往外部網路到達目的地的過程。而Cisco路由器(Router)會取得達到路由所必須的資訊,並加以維護,而為了取得並維護這樣的路由資訊,必須使用路由協定。路由協定非常複雜,種類也多,為了管理Cisco路由器來達到企業內部的網路路由,第一步必須了解路由協定的種類與詳細運作過程。  

交換器(Switch)也可以把封包轉發到目的地,但是不要把路由與之前所介紹過的交換器技術混在一起,路由器是運作於網路協定的第三層,而交換器則運作於網路協定的第二層,它們所分析的根據和運作的方式截然不同。  

路由簡介  

路由器(路由器)最主要的工作就是決定要將網路封包送往何處,而為了要達到這樣的目的,路由器至少必須做到以下這些事情:  

1. 知道目的端的位址在哪裡。
2. 標示出來源端的位址,並把它學習起來。
3. 尋找這個封包可能要送往的路徑有哪些。
4. 從可能的路徑中選出最佳路徑。
5. 維護並更新這些路由所需的資料。

一般網路架構中,免不了一定會有許多台路由器設備,如上圖所示。

為了讓圖中的10.120.2.0與172.16.1.0能找到路徑互相傳遞資料封包,中間的路由器設備就必須互相「分享」所學習到的資料,加上可以得知本地端路由器設備所直接連接到的終端設備,就可以形成一個表格,稱為Routing Table。 Routing Table收集並整理出所有路由所需的資訊。假設路由器A與10.120.2.0這台電腦直接連接,而172.16.1.0若曾經傳送封包經過路由器A,則路由器A會知道172.16.1.0這台電腦位於路由器A右邊的介面,假設路由器A右邊的介面為S0,左邊為E0,則路由器A的Routing Table如下所示:

在路由器A中,會把從其他路由器傳過來的路由資訊記錄在自己的Routing Table中。針對那些直接連接於路由器A的電腦,路由器A已經可以確認每一台電腦可以透過哪些介面到達,因此路由器A會把所有直接連接到路由器A的電腦與介面的對應關係輸入到Routing Table中,換句話說,那些沒有直接連接到路由器A的電腦與介面的對應關係,一定要透過別台路由器設備來學習而得知,或是由管理人員手動輸入。

路由器決定發送封包的方式

路由器設備會根據Routing Table的資料來決定如何轉發資料封包,剛才提到有兩種方式可以得知其他電腦與這台路由器設備介面的對應關係,第一種方式是由管理人員手動輸入,這種方式也稱為靜態路由(Static Route)。而另一種方式是透過其他路由器設備來學習,學習的方式是透過路由協定(Routing Protocol)來交換資訊。Routing Protocol也是學習路由器設備相關知識最重要的一環,不同的Routing Protocol有不同的使用時機,其運作方式也不盡相同,這種經過學習而建立出來的路由資訊,就稱為動態路由(Dynamic Route)。

靜態路由

靜態路由(Static Route)必須由管理人員手動輸入,好處是速度很快,不須要經過學習,但是缺點就是網路拓樸若有任何的改變,管理人員必須更新這些資料到路由器設備中,比較麻煩且耗費人力,也必須具備很好的維護能力才行。這種方式比較適合幾乎不會有變動的網路拓樸。

動態路由

動態路由(Dynamic Route)就不須要手動輸入,較屬於Worry-Free的類型,一切的工作都交給路由器設備之間去協調,互相交換並學習這些資料,管理人員只要做Routing Protocol的設定即可。這種方式比較耗費系統資源,速度也稍微慢一些,因為系統需要時間去做學習的動作,也需要一點時間才能把Routing Table建立得比較完整。不過,好處是一旦網路架構有任何的改變,網路管理人員不須要做太多事情來管理並且維護Routing Table。

底下針對這兩種方式做進一步的說明,同時會介紹這兩種方式的設定指令。

靜態路由的設定指令

一般來說,靜態路由會使用在連接stub network之間的連線,stub network指的是只能透過單一路由路徑連接的網路,因此有時候也稱stub network為leaf node。此外,靜態路由也常常被使用在指定預設閘道上,讓不知道要送往哪裡的網路封包送到預設閘道。使用在這些地方是因為這些設備的設定比較不容易變更,因此若使用靜態路由將可以節省不必要的學習過程。

以上頁這個網路架構圖為例,說明靜態路由的設定方式:

在上面這個網路架構圖中,要在路由器A上設定讓路由器A本身知道可以透過路由器A的S0介面到達172.16.1.0的子網路,這裡準備設定的是靜態路由的方式。另外,也打算用靜態路由的方式,在路由器B上設定,讓路由器B知道若要從172.16.1.0這個Stub Network連到外面的網路的話,可以透過路由器A來達成。

設定靜態路由

首先,設定路由器A設備的靜態路由,設定靜態路由的語法如下所示:

R_A(config)#ip route 172.16.1.0 255.255.255.0 172.16.2.1

其中,靜態路由指令的關鍵字是ip route,後面的172.16.1.0代表這筆靜態路由目的地的網路IP位址,接著,255.255.255.0就是這個目的地子網路的網路遮罩,而最後的172.16.2.1則代表為了到達目的地而要經過的下一台路由器設備的IP位址。

因為路由器A和路由器B位於同一個網路區段內,所以就路由器A而言,路由器B的IP位址是172.16.2.1,對於路由器A前往172.16.1.0網路區段而言,路由器B就是下一台路由器設備。因此,這邊要設定路由器B的IP位址。

這樣一來,當路由器A拿到一個要送往172.16.1.0子網路的封包時,路由器A就知道要把這個封包送給哪一個路由器設備來轉送了。雖然對於路由器A而言,要到達172.16.1.0子網路可能要經過許許多多的路由器設備,但是,並不須要記錄每一台位於路途中的路由器設備,因為事實上路由器A只要知道「下一台」是誰就好了,至於接下來要再轉送給誰,那就是下一台路由器設備的責任。

須注意的是,設定靜態路由是在Global Configuration模式下執行,因為這個靜態路由資訊是針對整台路由器設備而言,所以並非在其他模式中設定。若要把這筆靜態路由設定成為「永久存在」,即使介面都關掉了,也要讓這筆靜態路由存在的話,可以在指令的最後面加上permanent關鍵字,如下所示:

R_A(config)#ip route 172.16.1.0 255.255.255.0 172.16.2.1 permanent

靜態路由通常會用來做類似上面這樣的用途,簡單來說,就是要針對那些並非直接連接到這台路由器設備的網路,手動增加這樣的路由資訊。但必須注意的是,針對這種單一連線(Uni-directional)的靜態路由,其設定必須是連線的兩端都要設定才行。

設定預設路由資料

事實上,預設閘道可以透過靜態路由來設定。所謂的預設路由就是當不知道要將這個封包送往哪裡的時候,就會採用這個預設路由所指定的路徑。若以上面的範例來說明,若要在路由器B上設定,讓那些不知道要送往哪裡的封包都送到路由器A,則設定方式如下:

R_B(config)#ip route 0.0.0.0 0.0.0.0 172.16.2.2

這個指令的不同之處在於把將目的地的網路IP設定為0.0.0.0,並將網路遮罩也設定為0.0.0.0。

檢視靜態路由設定值

若要檢視靜態路由的設定值,可以透過「show ip route」指令來查看,這個指令用來檢視所有路由表中的路由資料,其指令與執行結果如下所示:

路由器#show ip route Codes: C – connected, S – static, I – IGRP, R – RIP, M – mobile, B – BGP, D – EIGRP, EX – EIGRP external, O – OSPF, IA – OSPF inter area, E1 – OSPF external type 1, E2 – OSPF external type 2, E – EGP, i – IS-IS, L1 – IS-IS level 1, L2 – IS-IS level 2, * - candidate default, U – per-user static route
Gateway of last resort is 0.0.0.0 to network 0.0.0.0.
10.0.0.0/8 is subnetted, 1 subnets
C   10.1.1.0 is directly connected, Serial0 S*  0.0.0.0/0 is directly connected, Serial0

執行這個指令後,一開始會列出結果中用到的種類說明,這個指令在後面的文章中會經常出現,目前讀者只須注意S關鍵字是代表靜態路由,由執行結果的最後一行可以看到這最後一筆的路由前面標示著S*,其中S是為了讓使用者明白這筆的確是靜態路由,而*表示這筆路由是最近一次被使用的路由資訊。

而從這一行的剩餘文字可以看出,這筆路由代表的路由方式是「透過Serial 0介面可到達0.0.0.0/0的網路」,而0.0.0.0是用來表示預設路由,因此可以看出這筆路由是指預設的路由。

動態路由

和靜態路由比較起來,動態路由複雜許多,因為動態路由是透過學習來取得所有的路由資訊,而這樣的學習方法與這些路由資訊的維護方式都定義在Routing Protocol中。Routing Protocol可能會包含以下幾項資訊:

1. 如何傳遞資訊的更新到其他路由器設備?
2. 什麼樣的資訊須要被傳遞?
3. 什麼時候要做資訊傳遞的動作?
4. 如何得知其他路由器設備已經取得由本地端傳遞出去的更新資訊?

而Routing Protocol與Routed Protocol不一樣,Routing Protocol指的是路由器設備之間互相溝通以便取得路由資訊,並維護這些路由資訊的協定。Routed Protocol指的卻是當Routing Protocol發生效用之後,路由器設備要將網路封包拿來套用的網路協定,一般而言,Routed Protocol指的就是IP Protocol,而Routing Protocol就有很多種,例如RIP或IGRP等等。

學習路由器的相關知識,其實最重要的就是學習各種Routing Protocol是如何運作的,這是最重要的一環,因此以下分別針對不同的Routing Protocol加以說明。而底下文章的「路由協定」所指的都是Routing Protocol。

自治系統與路由協定

自治系統,英文全稱是Autonomous System,簡稱為AS。一個自治系統是指所有處於同樣的管理網域(Administrative Domain)下所有網路的集合,而一個管理網域指的是主機,路由器與內部連接網路的集合,而這個集合是歸屬於相同管理下運作的。

有些路由協定是運作在同一個自治系統之中,而某些路由協定則是運作在不同的自治系統之間,若以運作於自治系統的內部與外部來區分路由協定的話,可以分成內部路由協定(Interior Gateway Protocol)與外部路由協定(Exterior Gateway Protocol)。內部路由協定簡稱為IGP,而外部路由協定則簡稱為EGP。屬於內部路由協定的路由協定包含RIPv1、RIPv2、IGRP、EIGRP及OSPF。而屬於外部路由協定的路由協定則有BGP。

Administrative Distance值

前面提到靜態路由與動態路由,而動態路由也有各式各樣的路由協定,事實上,動態路由的各種協定與靜態路由都可以同時運作在同一個網路之中,當資訊有所衝突,不知道要聽從哪一個路由協定的時候,就必須依靠AD(Administrative Distance)值來決定每一種不同路由協定的可靠程度。

AD值是一個從0~255的整數,每一種路由協定都有一個AD值與之對應,代表這個路由協定所提供之資訊的可靠程度,其值越低,代表可靠程度越高。現在用以下這個圖例來說明:

假設路由器A要轉送網路封包到路由器D設備,而在路由器A的Routing Table中,有一筆路由顯示可以從路由器B設備到達路由器D,而這個路徑是採用靜態路由的設定方式。另外,有一筆路由顯示可以從路由器C設備到達路由器D設備,這條路由則是由RIP路由協定所學習而來。

此時,路由器A設備就會選擇靜態路由的方式,因為靜態路由的AD值比較低,代表靜態路由的可靠程度比較高。所有的動態路由協定的AD值與靜態路由的AD值如下圖所示:

當然,如果讀者對這樣的預設值不是很滿意,可以透過Cisco IOS對單一的Cisco路由器設備做設定。

Classful路由協定

所謂的Classful的路由協定是指當傳遞路由資訊時,不會傳遞子網路遮罩的訊息。當使用Classful的路由協定時,所有運行的網路都必須使用相同的子網路遮罩,因為Classful的路由協定會自動做到自動路由匯總(Automatic Route Summarization),而且運行Classful路由協定的網路必須使用Major的網路遮罩數目,例如Class A的網路,就要使用預設的網路遮罩,就是255.0.0.0,而Class B網路的預設網路遮罩是255.255.0.0,同理可知,Class C網路的預設網路遮罩是255.255.255.0。

如果當路由器設備收到更新的路由資訊,其資訊中包含與接收介面相同的網路遮罩,則這台路由器設備就會採用這個接收介面的網路遮罩。如果路由器設備收到的路由資訊中所包含的網路遮罩與接收介面的設定不同,則路由器設備就會依照網路IP來套用預設的網路遮罩。

也就是說,若收到的網路IP是屬於Class A的網路,則套用255.0.0.0,若是Class B的網路,則套用255.255.0.0,如果是Class C的網路,則套用255.255.255.0當作網路遮罩。屬於Classful的路由協定有RIPv1和IGRP。

避免讓Classful路由協定丟棄封包

預設上,Classful的路由協定都會假設所有直接連接於這個路由器設備的子網路都被塞到自己的Routing Table中,當路由器設備收到一個封包,而這個封包的目的端網路不存在於這台路由器設備的Routing Table中,那這台運行於Classful路由協定的路由器設備就會把這個網路封包給丟棄,因為這台路由器設備會假設這樣的目的端網路並不存在,即使有設定預設路由,也是一樣。例如下圖這樣的網路架構:

若路由器B並沒有把前往路由器A的路徑加到Routing Table中,那透過路由器A要前往另一端網路的封包都會被丟棄。

但是,網路管理人員可以藉由ip classless指令來避免這樣的事情發生,這個指令執行於Global Configuration模式下,該指令預設是啟動的。依照上面的網路架構圖,可以在路由器B設備上執行下列的指令來設定:

路由器_B(config)#ip route 0.0.0.0 0.0.0.0 10.1.1.2
路由器_B(config)#ip classless

這樣一來,當路由器B收到的封包,其封包的目的端網路位址即使不存在於路由器B的Routing Table之中,路由器B設備也會把這個封包轉送給預設路由所指到的路由器設備,而不會直接丟棄。

Classless路由協定

Classless路由協定可以解除Classful的設計限制,因此,有些人認為Classless路由協定是第二代的路由協定。

Classful路由協定最主要的缺點是當使用Classful路由協定在交換路由資訊時,子網路遮罩的資訊並不會被交換,因此就會變成要求一定要在相同的Major網路中使用相同的網路遮罩,但是Classless可以支援VLSM(Variable-Length Subnet Mask),也就是不定長度子網路遮罩,因此沒有Classful路由協定那樣的限制。

Classless路由協定另一個不良的限制是會自動做Route Summarization。但是,在Classless的路由環境中,Route Summarization可以手動控制,而且還可以藉由控制位元的方式來決定如何做Route Summarization。

不僅如此,Classless路由協定還可以因為這樣的細部控制,進而控制住Routing Table的資料筆數大小,這些詳細情形會在未來的文章中一一介紹。整體歸納上述所言,屬於Classless的路由協定有RIPv2、EIGRP、OSPF和IS-IS等協定。

路由協定特性整理

什麼是路由協定?其實就像是一套方法論,可以把網路封包透過路由的方式送到目的地。而以上簡單提到路由協定的基本知識,可以從中看到一些路由協定的名稱和特性,這裡先將路由協定的特性簡單整理成以下的表格:

這個表格的最後一行是路由收斂速度,從這個表格中可以看出EIGRP的收斂速度最快,因為EIGRP維護一個Backup Route資料庫,因此如果EIGRP路由協定的最佳路徑不見了,EIGRP可以在最短的時間內取得其次最佳的路徑,而不須要做重新計算的動作。

Distance Vector演算法和Link State演算法

接著說明上面的表格中出現的Distance Vector演算法和Link State演算法。對於內部路由協定而言,其所採用的演算法大致分為Distance Vector、Link State和Balanced Hybrid三種。

簡單來說,Distance Vector是利用方向與所必須經過的設備數目(Hops)來決定路徑,並會在鄰近的路由器設備間將這些路徑資料互相分享。

而Link State則是使用最短路徑演算法(Shortest Path First),至於Balanced Hybrid則是綜合了Distance Vector和Link State兩種演算法。

Distance Vector路由演算法與Link State路由演算法最大的不同在於,Link State演算法只會傳遞少部分更新的路由資料,而且會把這樣的更新資料傳遞到各個路由器設備中,而Distance Vector路由演算法則會傳遞整份的資料,而且只會傳遞給鄰近的路由器設備而已。

不過,即使路由資料沒有任何的改變,Distance Vector也會將整份路由資料發送出來,而這裡指的整份路由資料指的就是發送端路由器設備中Routing Table的完整資料,當鄰近的路由器設備收到這整份路由資料後,會開始比較已知的路由路徑,並把有更新過的資料同步的本地端路由器設備中,因為這種方式都會假設接收到的資料一定是比自己還要新的資料,所以這種方式通常也被稱為「謠言路由方式」(Routing by rumor)。

就是因為這樣類似「以訛傳訛」的運作方式,所以會產生很多問題,這些問題和解決方案往後文章會慢慢為各位介紹。

結語

這篇文章簡單介紹路由協定的種類、分類和特性等等。算是開啟路由協定知識的開端,是相當基礎而且重要的一篇文章,最重要的部分就是Classful與Classless路由協定的區別,靜態路由協定與動態路由協定的不同處與優缺點比較,以及最後對於Distance Vector演算法和Link State演算法的差異。

要強記的部分是AD值,這個AD值相當重要,對於運行多種路由協定的環境特別重要,也可以因此得知各個路由協定之間的可靠性。


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!