
1.什么是IP路由
在一個IP網絡中,路由(Routing)是個非常非常基本的概念。網絡的基本功能,是使得處于網絡中的兩
個IP節點能夠互相通信,而通信實際上就是數據交互的過程,數據交互則需要網絡設備幫助我們來將數據
在兩個通信節點之間進行傳輸。當路由器(或者其他三層設備)收到一個IP數據包,路由器會找出報文中
的IP頭里的目的IP地址,然后拿著目的IP地址到自己的路由表(RoutingTable)中進行查找,找到“最
匹配”的路由條目后,將數據包根據路由條目所指示的出接口或下一跳IP轉發出去,這就是路由(Routing)。
而每臺路由器都會在本地維護一個路由表,路由表中裝載著路由器通過各種途徑獲知的路由條目
(Routes),每一條路由條目由路由前綴(路由所關聯的目的網絡號及掩碼長度)、路由信息來源、出接口
或下一跳IP、優先級、開銷等信息元素構成。路由器通過直連、靜態的或者動態的方式獲取路由條目并維
護自己的路由表,路由表是每臺支持路由功能的設備進行數據轉發的依據和基礎,是一個非常重要的概念,
任何一臺支持路由功能的設備要執行數據轉發或路由的動作,就必須擁有及維護一張路由表。
路由表
任何一臺支持路由功能的設備要執行數據轉發或路由的動作,就必須擁有及維護一張路由表,路由表可以
理解為將數據包轉發到特定目的地所依據的一張“地圖”。在我司三層設備(如路由器、防火墻、三層交
換機等)上查看IP路由表的命令如下:
[Huawei]displayiprouting-table
每個路由條目必須包括下面幾個信息元素:
路由前綴:這是路由條目所關聯的目的網絡號。一條完整的路由前綴由:網絡號+前綴長度
構成,兩者缺一不可,例如192.168.1.0/24與192.168.1.0/25,雖然網絡號相同,都是192.168.1.0,
但是兩者絕對是兩條不同的路由、兩個不同的路由前綴,因為他們的前綴長度不相同。
協議類型:本條路由是通過什么途徑學習到的,例如是直連的,或是靜態的,或者是通過
OSPF、IS-IS、EIGRP、BGP等動態路由學習到的。
優先級與協議類型對應,路由表中路由的獲取來源有多種,每種協議類型對應不同的優先級,
優先級值越小越優先。當一臺路由器同時從兩種不同的路由協議學習到去往同一個目的地的路由
時,它將優選路由協議優先級小的那條路由。
開銷Cost路由的度量值,在許多書籍或文檔中也使用metric來描述。直連及靜態路由的cost
為0。通過動態路由協議學習到的Cost則根據實際環境。
指向目標的指針:指針不是指向路由器的直連目標網絡就是指向直連網絡內的另一臺路由
器地址,或者是到這個鏈路的本地接口。更接近目標網絡一跳的路由器叫下一跳(nexthop)路由
器。
3.路由優先級(Preference)
路由器可以通過多種途徑獲知路由條目:如靜態手工配置或通過各種動態路由協議學習等等。當路由器從
兩種不用的途徑獲知去往同一個目的地的兩條下一跳不相同的路由,那么路由器會比較這兩條路由的優先
級(Preference),優選Pre值小的路由。如果Pre值相等,例如是同種路由協議獲取到的,則進一步比較
開銷(Cost)值,當然,這其中還牽涉到不同的路由協議內在的工作機制問題,這就要針對不同的路由協
議具體討論了,我們這里暫時不涉及到這么深入。
如下圖,R3與R1運行的是RIP協議,R3又通過OSPF與R2建立鄰接關系。于是R3同時從RIP及OSPF
學習到了去往目的地1.1.1.0/24的路由,這兩條路由分別以R1和R2作為下一跳。R3最終選擇OSPF的路
由裝載進路由表,也就是將R2作為實際去往1.1.1.0/24的下一跳,因為OSPF協議的優先級值比RIP要小、
要更優。
針對不同的路由協議,對應的優先級見下表,這是個眾所周知的約定(不同的廠家,可能有所不同,下表
中羅列的是我司的產品特性):
路由協議或路由種類相應路由的優先級
4.靜態路由
1)關于靜態路由
路由器的天職,就是維護路由表以及依據路由表進行數據轉發。而路由表中包含通過各種途徑學習到的路
由表項或路由條目,主要有如下幾種途徑:
直連路由自動學習
使用靜態路由的方式手工添加路由條目
使用動態路由協議使得設備之間能夠進行路由信息的更新及學習,動態的維護路由表項
我們以下圖為例:
PC1及PC2的IP地址如圖所示,PC1的網關設置為172.16.1.254,也就是R1的GE0/0/0口IP;PC2的網
關設置為172.16.2.254也就是R2的GE0/0/0口IP。路由器的各接口IP地址如圖所示。那么在初始情況下,
對于R1而言,當所有接口UP以后,路由器自動學習活躍的接口所在網絡的網絡號并且維護自己的路由表,
例如R1的路由表,可能像下面這樣(省略了無關信息):
R2的路由表類似,這里不再贅述。現在當PC1要訪問PC2時,由于PC1的網關設置為R1的GE0/0/0口的
IP地址,于是PC1將目的地址為172.16.2.1的IP數據包發送給它的網關。而當R1收到這個數據包時,R1
發現這個數據包的目的地址是172.16.2.1,它就去查找自己的路由表,結果發現路由表中,并沒有匹配
172.16.2.1的條目,因此數據包被丟棄,自然到目前為止PC1是無法與PC2互訪的。那么如何才能夠使得
R1正常的轉發這個數據包呢?當然需要R1的路由表中有相關的條目來做指示。
最簡單的一種方式是,為R1使用靜態手工的方式來添加去往172.16.2.0/24網絡的路由條目,這種方式添
加的路由稱為靜態路由。這種方式最直接,可控性最高,配置也最簡單。在小型的網絡中,全網靜態路由
似乎沒有什么問題,但是在一個大型網絡中,如果純用靜態路由來做,工作量就非常大了,不僅僅工作量
大,另外一個更重要的缺陷是靜態路由無法根據網絡拓撲結構的變更而做出動態的調整,因此,在大規模
網絡中,我們往往采用靜態+動態路由協議的方式來完成路由的部署。
靜態路由的配置的命令非常簡單:
命令中的紅色字體部分是這條路由的目的網絡號(172.16.2.0)及掩碼(24),也就是路由前綴;藍色字體
部分是去往這個目的地的“下一跳IP”。于是R1的路由表變成下面這個樣子:
我們看到,R1的路由表里出現了一個新增的條目,路由前綴是172.16.2.0/24,協議類型為“靜態”,優先
級為60,出接口為GE0/0/1,去往目的地的下一跳IP是172.16.100.2。這樣一來,當R1收到PC1發往
172.16.2.1的數據包,它查看路由表,發現路由表中有一個條目匹配,于是R1將該數據包丟給該條路由指
示的下一跳IP172.16.100.2,這個數據包被傳輸到了R2,再由R2查它的路由表,發現數據包的目的地
172.16.2.1在本地路由表中有路由條目匹配,而且是直連網絡,因此R2將數據包根據路由條目所指示從
GE0/0/0口發送出去,最終PC2收到了這個數據包。
現在問題來了,我們在R1上增加了這條靜態路由后,PC1與PC2就能夠正常通信了么?答案是否定的,
為什么?因為兩個節點之間的數據通信是雙向的,有去得有回,在R1上增加去往172.16.2.0/24的靜態路
由后,PC1發往PC2的數據包是能夠被轉發到PC2的,但是如果此刻PC2要回送報文呢?PC2回送的數據
包目的IP地址就是172.16.1.1,這個數據包首先被PC2發往自己的網關也就是R2,那么R2查看路由表,
卻沒有發現匹配目的地172.16.1.1的路由,于是就丟包。
因此,為了使得PC1與PC2之間能夠相互通信,我們還需要做一步動作,也就是在R2上也增加一條路由,
路由的目的地是172.16.1.0/24網絡,下一跳呢?當然就是172.16.100.1了。如此一來PC1及PC2互相通信
就沒有問題了。
2)靜態路由的配置
方法一:關聯下一跳IP的方式:
紅色字體部分為該路由條目的網絡號
藍色字體部分為該網絡號的掩碼或者前綴長度
綠色字體部分為去往該網絡的下一跳IP
方法二:關聯出接口的方式:
紅色字體部分為該路由條目的網絡號
藍色字體部分為該網絡號的掩碼或者前綴長度
綠色字體部分為去往該網絡的出接口,注意,在我司的路由器上,靜態路由可關聯出接口或下一跳IP,
或兩者都關聯。但是如果出接口為廣播多路訪問型接口,例如以太網口,那么就必須關聯下一跳。如果為
點對點接口如rial接口,則可只關聯出接口。例如iproute-static172.16.2.024GigabitEthernet0/0/0
172.16.100.2
3默認路由
我們看上圖,對于R1而言,如果要到達R2所直連的172.16.1.0、2.0、3.0網絡,就必須有路由。如果采用
靜態路由的方式為R1添加路由,三個目的網絡就需要配置三條靜態路由。這樣不僅僅增加了配置工作量,
另一方面,也增加了R1的負擔,因為它需要維護更多的路由條目,而承載路由條目的路由表是需要占用設
備內存資源的。因此從網絡設計及優化的角度,我們往往在保證網絡路由可達性的同時,盡量減少路由器
路由表的條目數量。
在這個環境中,由于R1僅有一條出口線路,因此我們可以在R1上配置一條默認路由,下一跳為R2,如
此即可在保證R1到R2后方三個網絡可達的同時,路由條目達到最簡。具體的配置如下:
[R1]Iproute-static0.0.0.00.0.0.0172.16.100.2
或者簡寫成:
[R1]Iproute-static0.0.0.00172.16.100.2
默認路由的網絡號和掩碼都是全0,可匹配任意目的網絡前綴,可作為路由器的“最后求助對象”使用。
4浮動靜態路由
我們看上面的例子,對于R3及其下掛的網絡而言,要去往10.9.9.0/24網絡,通過R1及R2都可達。那么如
果在R3上,我們分別配置靜態路由:
[R3]iproute-static10.9.9.02410.1.13.1
[R3]iproute-static10.9.9.02410.1.23.2
這樣一來,由于這兩條路由都是去往同一個目的地,分別采用不同的下一跳IP,同時這兩條路由具備相同
的優先級,以及相同的開銷(cost,都為0),因此最終這兩條去往10.9.9.0/24網絡的路由被同時裝載進了
R3的路由表。這種現象我們稱為路由的等價負載均衡。最終的一個結果是,R3轉發去往10.9.9.0/24網絡的
流量,有可能會同時采用R1及R2作為下一跳。這種方法是存在一定的隱患的,例如有可能到達目的地的
數據包是非順序的。那么如果我希望R3去往10.9.9.0/24的流量始終先走單邊(如R1),當R1宕機或R1-R3
之間的互聯鏈路出現故障時,R3能夠自動將流量切換到R2呢?
這里我們就可以使用到浮動靜態路由的概念。我們已經知道使用iproute-static命令可以為設備添加靜態路
由,在默認情況下,這條命令所添加的靜態路由其優先級為60(在我司設備上,靜態路由的優先級默認為
60,其他設備廠商可能有所不同),這個靜態路由的優先級事實上是可以自定義的,例如,在R3上配置修
改為:
[R3]iproute-static10.9.9.02410.1.13.1#靜態路由默認優先級為60
[R3]iproute-static10.9.9.02410.1.23.2preference80#這條路由的優先級被設置為80
上述配置中,我們為R3添加了兩條靜態路由,目的網絡號都是10.9.9.0/24,下一跳分別為10.1.13.1及
10.1.23.2,留意到下一跳為R1的靜態路由,我們并沒有設置優先級,因此該條路由的優先級為默認的60,
另一條靜態路由,我們使用preference關鍵字指定了優先級80。那么這樣一來,這兩條路由,就會進行優
先級的比較,優先級小的路由將最終被放進路由表并作為數據轉發的依據,另一條優先級為80的路由,則
“潛藏”起來,并不出現在路由表中。
當R1宕機,或者R1-R3之間的直連鏈路發生故障時,iproute-static10.9.9.02410.1.13.1這條靜態路由失
效,iproute-static10.9.9.02410.1.23.2preference80也就浮現出來了,因此這是一種不錯的路徑備份機
制。
本文發布于:2023-03-06 07:36:34,感謝您對本站的認可!
本文鏈接:http://m.newhan.cn/zhishi/a/167805939414036.html
版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。
本文word下載地址:iproute.doc
本文 PDF 下載地址:iproute.pdf
| 留言與評論(共有 0 條評論) |