在開始聊路由之前,我們首先要明白在網絡通訊里,什么是路由?什么是路由表、路由器以及網關的相關術語;路由簡單講就是指網絡數據包從源頭到目標的路徑,主要用來為不同網絡間通訊提供數據包轉發依據;路由表就是多條路由信息的集合,主要作用就是用來存儲路由信息,以及為路由器提供路由的依據;路由器就是指具有路由功能和維護路由表的網絡設備;所謂網關是指路由器上的接口ip地址(一台路由器一個接口對應一個廣播域,所以路由器天生就是用來隔離廣播域的);
路由器工作原理
當路由器(或其他三層設備)收到一個ip數據包時,首先會查看該包的ip頭部中的目標ip地址,並在路由表中進行查找和匹配,在匹配到最優路由后,將數據包扔給對應路由所指的出接口或下一跳,從而完成數據包的轉發;當收到的ip數據包在路由表中沒有匹配的路由時,路由器會自動丟棄對應的ip數據包;簡單講就是路由器收到報文,然后查找路由表,如果有對應匹配的路由,就把對應報文從對應路由所指定的出接口或下一條所在同網段ip地址所在接口發出去;如果沒有匹配的路由信息則自動丟棄該數據報文;從上述描述我們不難理解,一個數據報文要想從路由器通過,必須滿足對應路由器上要有匹配的路由;有了匹配的路由,對應路由器就知道把對應數據報文從那個接口轉發出去;
ip路由過程
提示:當一個報文從10.3.1.0發出,首先會被RA收到,RA收到報文后,一看該報文是到10.4.1.0網絡,然后就查看自己的路由表,看看有沒有到達10.4.1.0路由;如果有就從對應路由所指定的出接口轉發出去;如果沒有就丟棄;同樣的原理,當數據包從RA的E0口發送出去以后,對應與RA的E0口直連的RB的E0口就會收到對應的數據報文;當RB收到RA轉發出來的報文以后,也會先看對應報文的目標網絡,然后和自己的路由表中的路由進行匹配;匹配到就從對應的接口發出去;依次類推,最終數據包會到達RC,RC收到報文以后,查看路由表發現對應報文的目標網絡是和自己E1口直連,然后RC會把對應報文從E1口發送出去;到此路由器的工作就完成了;后續就是通過目標ip地址,arp廣播拿到對應目標ip地址mac,然后進行二層以太網封裝,最終將數據報文送達到對應主機或設備的網卡上,由對應目標ip地址所在設備進行處理;
查看路由表
<Huawei>display ip routing-table Route Flags: R - relay, D - download to fib ------------------------------------------------------------------------------ Routing Tables: Public Destinations : 4 Routes : 4 Destination/Mask Proto Pre Cost Flags NextHop Interface 127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0 127.0.0.1/32 Direct 0 0 D 127.0.0.1 InLoopBack0 127.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0 255.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0 <Huawei>
提示:Destination/Mask字段用來描述目標網絡和掩碼;Proto用來描述路由的來源,常見的路由來源有Direct(直連),static(靜態),ospf(動態路由學習中的一種),RIP等等;pre用來描述對應路由的優先級,如果有多條不同的路由到達相同目標網絡,優先級越低對應路由就越優先匹配;cost是用來描述對應路由的開銷,多條相同路由來源到達相同目標網絡,開銷越低,對應路由就越優先匹配;NextHop用來描述下一跳地址,所謂下一跳就是指ip報文所經由的下一個路由器的接口地址;interface用來描述出接口(ip報文從哪個接口轉發出去);
路由器轉的發原則
1、被轉發到路由必須存在(如果不存在該路由條目,路由器收到此類報文會直接丟棄不做任何處理);
2、根據最長匹配原則進行匹配,也就是掩碼越長越優先轉發;
提示:如圖所示,R1上有兩條靜態路由,分別都能到達3.3.3.3,其中一條是出接口為g0/0/0掩碼為24,一條是g0/0/1掩碼為32,現在我們看看數據報文到底會走哪一邊呢?
驗證:用tracert 3.3.3.3來查看對應數據包會走的那一條路?
[R1]tracert 3.3.3.3 traceroute to 3.3.3.3(3.3.3.3), max hops: 30 ,packet length: 40,press CTRL_C to break 1 4.4.4.4 30 ms 10 ms 10 ms 2 5.5.5.3 20 ms 30 ms 30 ms [R1]
提示:可以看到當目標地址相同時,相同協議,優先級,開銷的情況下掩碼越長越優先匹配上;
3、當掩碼長度一樣,會比較優先級,優先級數字越小越優先轉發;
示例:還是上述實驗top,修改下靜態路由,把g0/0/1上的優先級改調大一點,看看對應數據包是否還會選擇下面的路呢?
提示:當我們把原來的32位掩碼路由刪除以后,重新添加24為掩碼的優先級為80的路由以后,對應路由表中反而就只有一條優先級為60的路路由;說明相同目標網絡,相同掩碼以及相同協議和開銷的情況下,優先級越低的路由優先匹配(因為路由表中只存在最優路由);此時我們在R1上訪問3.3.3.3時,數據報文會從g0/0/0發出,因為路由表中就只有一條路由;
驗證:用R1 tracert 3.3.3.3,看看數據包是否走R2到達R3?
[R1]tracert 3.3.3.3 traceroute to 3.3.3.3(3.3.3.3), max hops: 30 ,packet length: 40,press CTRL_C to break 1 1.1.1.2 20 ms 20 ms 10 ms 2 2.2.2.3 30 ms 30 ms 30 ms [R1]
提示:可以看到數據包走g0/0/0到達1.1.1.2,然后在到達R3的2.2.2.2;
常用路由協議默認優先級
4、當掩碼和優先級一樣,會比較開銷(cost值),開銷越小越優先轉發;
示例:還是上述的top,全網運行ospf,然后修改g0/0/0上的開銷為50,看看對應的路由表中會存放那條路由?
[R1]dis ip routing-table Route Flags: R - relay, D - download to fib ------------------------------------------------------------------------------ Routing Tables: Public Destinations : 13 Routes : 14 Destination/Mask Proto Pre Cost Flags NextHop Interface 1.1.1.0/24 Direct 0 0 D 1.1.1.1 GigabitEthernet0/0/0 1.1.1.1/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/0 1.1.1.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/0 2.2.2.0/24 OSPF 10 2 D 1.1.1.2 GigabitEthernet0/0/0 3.3.3.3/32 OSPF 10 2 D 4.4.4.4 GigabitEthernet0/0/1 OSPF 10 2 D 1.1.1.2 GigabitEthernet0/0/0 4.4.4.0/24 Direct 0 0 D 4.4.4.1 GigabitEthernet0/0/1 4.4.4.1/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/1 4.4.4.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/1 5.5.5.0/24 OSPF 10 2 D 4.4.4.4 GigabitEthernet0/0/1 127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0 127.0.0.1/32 Direct 0 0 D 127.0.0.1 InLoopBack0 127.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0 255.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0 [R1]int g0/0/0 [R1-GigabitEthernet0/0/0]ospf cost 50 [R1-GigabitEthernet0/0/0]q [R1]dis ip routing-table Route Flags: R - relay, D - download to fib ------------------------------------------------------------------------------ Routing Tables: Public Destinations : 13 Routes : 13 Destination/Mask Proto Pre Cost Flags NextHop Interface 1.1.1.0/24 Direct 0 0 D 1.1.1.1 GigabitEthernet0/0/0 1.1.1.1/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/0 1.1.1.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/0 2.2.2.0/24 OSPF 10 3 D 4.4.4.4 GigabitEthernet0/0/1 3.3.3.3/32 OSPF 10 2 D 4.4.4.4 GigabitEthernet0/0/1 4.4.4.0/24 Direct 0 0 D 4.4.4.1 GigabitEthernet0/0/1 4.4.4.1/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/1 4.4.4.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/1 5.5.5.0/24 OSPF 10 2 D 4.4.4.4 GigabitEthernet0/0/1 127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0 127.0.0.1/32 Direct 0 0 D 127.0.0.1 InLoopBack0 127.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0 255.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0 [R1]
提示:可以看到在沒有改g0/0/0接口開銷時,在路由表中存在兩條到達3.3.3.3的路由,而更改了g0/0/0接口開銷以后,對應路由表中只有一條開銷為2的路由;說明當去往同一目標ip地址時,掩碼優先級一樣時,開銷越低越優先被匹配;
5、當掩碼、優先級、開銷都一樣,則負載分擔;
示例:還是上述top,我們把g0/0/0接口上的開銷刪除,看看對應路由會有什么變化?
[R1]dis ip routing-table Route Flags: R - relay, D - download to fib ------------------------------------------------------------------------------ Routing Tables: Public Destinations : 13 Routes : 13 Destination/Mask Proto Pre Cost Flags NextHop Interface 1.1.1.0/24 Direct 0 0 D 1.1.1.1 GigabitEthernet0/0/0 1.1.1.1/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/0 1.1.1.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/0 2.2.2.0/24 OSPF 10 3 D 4.4.4.4 GigabitEthernet0/0/1 3.3.3.3/32 OSPF 10 2 D 4.4.4.4 GigabitEthernet0/0/1 4.4.4.0/24 Direct 0 0 D 4.4.4.1 GigabitEthernet0/0/1 4.4.4.1/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/1 4.4.4.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/1 5.5.5.0/24 OSPF 10 2 D 4.4.4.4 GigabitEthernet0/0/1 127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0 127.0.0.1/32 Direct 0 0 D 127.0.0.1 InLoopBack0 127.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0 255.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0 [R1]int g0/0/0 [R1-GigabitEthernet0/0/0]d th [V200R003C00] # interface GigabitEthernet0/0/0 ip address 1.1.1.1 255.255.255.0 ospf cost 50 # return [R1-GigabitEthernet0/0/0]undo ospf cos [R1-GigabitEthernet0/0/0]undo ospf cost [R1-GigabitEthernet0/0/0]d th [V200R003C00] # interface GigabitEthernet0/0/0 ip address 1.1.1.1 255.255.255.0 # return [R1-GigabitEthernet0/0/0]q [R1]dis ip routing-table Route Flags: R - relay, D - download to fib ------------------------------------------------------------------------------ Routing Tables: Public Destinations : 13 Routes : 14 Destination/Mask Proto Pre Cost Flags NextHop Interface 1.1.1.0/24 Direct 0 0 D 1.1.1.1 GigabitEthernet0/0/0 1.1.1.1/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/0 1.1.1.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/0 2.2.2.0/24 OSPF 10 2 D 1.1.1.2 GigabitEthernet0/0/0 3.3.3.3/32 OSPF 10 2 D 4.4.4.4 GigabitEthernet0/0/1 OSPF 10 2 D 1.1.1.2 GigabitEthernet0/0/0 4.4.4.0/24 Direct 0 0 D 4.4.4.1 GigabitEthernet0/0/1 4.4.4.1/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/1 4.4.4.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/1 5.5.5.0/24 OSPF 10 2 D 4.4.4.4 GigabitEthernet0/0/1 127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0 127.0.0.1/32 Direct 0 0 D 127.0.0.1 InLoopBack0 127.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0 255.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0 [R1]
提示:刪除g0/0/0上的接口開銷以后,對應路由表中就有兩條去往3.3.3.3的路由,他們掩碼優先級開銷都一樣,此時當r1收到一個去往3.3.3.3的報文后,有可能數據包走g0/0/0,也有可能走g0/0/1;
等價路由(ECMP, Equal Cost Multi-Path)
類似上一個示例,同一個路由來源,當達到同一個目標網絡有幾條相同度量值的路由時,這些路由都會被加入到路由表中, 數據包會在這幾個鏈路上進行負載分擔。所謂負載分擔不是負載均衡,負載分擔是指多條鏈路上都會有流量,不一定是平均分配的;而負載均衡是指多條鏈路上的流量是平均負載的;
路由表的形成以及路由的來源
路由表的形成就是一條條路由信息的集合,路由的來源主要由三個,第一個是直連路由,所謂直連路由是路由a連接路由B,中間沒有任何設備,這個就叫做直連;直連路由的形成必須滿足兩個條件,首先對應直接接口都正確配置了地址,其次對應接口都接線了,並且接口物理狀態是up狀態,這兩個條件必須同時滿足,直連路就會生成;一般在模擬器上我們連好線,配置上地址,對應直連路由就會自動生成; 路由信息除了來自直連路由,還來自靜態路由和動態路由;靜態路由就是管理員人工手動添加到路由;動態路由是指路由器之間通過動態路由協議學習到的路由;常用的動態路由協議有rip,ospf,bgp,isis;