寫在前面:本人是一名計算機系大二的學生,會不定時的將我的學習筆記分享給大家!如果需要更多的學習資源可以通過我的GitHub自行下載!
靜態路由下一跳和出接口的區別,你真的理解了嗎?
1、概述
- 當我們在配置靜態路由時,在使用串型鏈路中,是一種點到點的鏈路
對於大多數很來說,很多人都知道靜態路由配置下一跳比出接口更好,但卻很少人能夠說清爲什麼,接下來讓我們一起來解開這個疑惑!
-
在配置靜態路由時,下一跳可以使用下一路由器的IP地址,也可以使用本路由器的出站接口。在點對點的網絡中,兩者可能沒有什麼差別,但在以太網中,兩者有很大差別。
-
在以太網中,兩個相鄰知道接口之間的通信是依靠MAC地址。相鄰接口通信時,需要知道對方的MAC地址,根據MAC地址將通信數據轉換成數據幀後交付給網絡,進而發送到到對方。而對方MAC地址的獲得,是通過第二層數據幀廣播,由ARP協議完成的。
當靜態路由中使用出站接口做爲下一跳時,路由器會認爲目標網絡和接口處在“直連網絡”
中。
2、實驗演示
實驗拓撲
實驗要求
- 配置基本的地址信息
- 使用靜態路由讓pc1和pc3互通
使用下一跳
基本配置
【r1】
#
interface GigabitEthernet0/0/0
ip address 100.0.0.1 255.255.255.0
int g0/0/1
ip add 10.0.0.254 24
#
ip route-static 20.0.0.0 255.255.255.0 100.0.0.2
#
---------
【r2】
#
interface GigabitEthernet0/0/1
ip address 100.0.0.1 255.255.255.0
int g0/0/1
ip add 20.0.0.254 24
#
ip route-static 10.0.0.0 255.255.255.0 100.0.0.1
#
查看路由表
[r1]dis ip routing-table protocol static
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Public routing table : Static
Destinations : 1 Routes : 1 Configured Routes : 1
Static routing table status : <Active>
Destinations : 1 Routes : 1
Destination/Mask Proto Pre Cost Flags NextHop Interface
20.0.0.0/24 Static 60 0 RD 100.0.0.2 GigabitEthernet
0/0/0
Static routing table status : <Inactive>
Destinations : 0 Routes : 0
[r2]dis ip routing-table protocol static
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Public routing table : Static
Destinations : 1 Routes : 1 Configured Routes : 1
Static routing table status : <Active>
Destinations : 1 Routes : 1
Destination/Mask Proto Pre Cost Flags NextHop Interface
10.0.0.0/24 Static 60 0 RD 100.0.0.1 GigabitEthernet
0/0/0
Static routing table status : <Inactive>
Destinations : 0 Routes : 0
可以看到,下一跳都是正確的。
查看arp地址表
[r1]dis arp br //可以看到還沒有pc4的地址表
IP ADDRESS MAC ADDRESS EXPIRE(M) TYPE INTERFACE VLAN/CEVLAN
------------------------------------------------------------------------------
100.0.0.1 00e0-fc04-77b5 I - GE0/0/0
100.0.0.2 00e0-fc30-63e8 16 D-0 GE0/0/0
10.0.0.1 5489-98c4-3156 16 D-0 GE0/0/1
------------------------------------------------------------------------------
Total:4 Dynamic:2 Static:0 Interface:2
測試ping通,並抓包
pc3去pingpc1
- 可以看到,在ICMP發送報文請求之前會先請求ARP,獲取對方的mac地址
<r2>dis arp
IP ADDRESS MAC ADDRESS EXPIRE(M) TYPE INTERFACE VPN-INSTANCE
VLAN/CEVLAN PVC
------------------------------------------------------------------------------
100.0.0.2 00e0-fc30-63e8 I - GE0/0/0
100.0.0.1 00e0-fc04-77b5 5 D-0 GE0/0/0
20.0.0.254 00e0-fc30-63e9 I - GE0/0/1
20.0.0.1 5489-9842-6023 18 D-0 GE0/0/1
20.0.0.2 5489-983b-61d6 4 D-0 GE0/0/1
------------------------------------------------------------------------------
Total:5 Dynamic:3 Static:0 Interface:2
使用出接口
配置
【r1】
#
ip route-s 20.0.0.0 255.255.255.0 g0/0/0
#
-----------
【r2】
#
ip route-s 10.0.0.0 255.255.255.0 g0/0/0
#
查看路由表
- 使用出接口時,pc1會以爲pc3是
直連網絡
,直接請求對方的mac地址。 - 在以太網中,直連網絡中主機間的通信是通過ARP協議廣播來獲取到要交付的目標主機的MAC地址的。也就是說,當R1左側網絡中的PC1要和R2右側網絡的PC1和PC3通信時,數據傳遞到R1時,R1看到目標網絡是自己的直連網絡(由於靜態路由中指定下一跳爲自身接口所致),於是R1就要在g0/0/0所處網絡發出ARP請求廣播,來尋找20.0.0.1對應的MAC地址。
測試pc1和pc3的連通性,並抓包
- pc3ping不通pc1,並且可以看到r2請求的是r1出接口的地址
問題
- 使用出接口時,路由器會認爲所在網段是同一網段,求求不到目標地址的Mac地址
解決方法
1、 使用下一跳
2、開啓代理ARP
-
【r1】 # int g0/0/0 arp-proxy enable #
-
<r1>dis arp IP ADDRESS MAC ADDRESS EXPIRE(M) TYPE INTERFACE VPN-INSTANCE VLAN/CEVLAN PVC ------------------------------------------------------------------------------ 100.0.0.1 00e0-fc04-77b5 I - GE0/0/0 100.0.0.2 00e0-fc30-63e8 20 D-0 GE0/0/0 20.0.0.2 00e0-fc30-63e8 20 D-0 GE0/0/0 10.0.0.254 00e0-fc04-77b6 I - GE0/0/1 ------------------------------------------------------------------------------ Total:4 Dynamic:2 Static:0 Interface:2 <r2>dis arp IP ADDRESS MAC ADDRESS EXPIRE(M) TYPE INTERFACE VPN-INSTANCE VLAN/CEVLAN PVC ------------------------------------------------------------------------------ 100.0.0.2 00e0-fc30-63e8 I - GE0/0/0 100.0.0.1 00e0-fc04-77b5 3 D-0 GE0/0/0 20.0.0.254 00e0-fc30-63e9 I - GE0/0/1 20.0.0.1 5489-9842-6023 17 D-0 GE0/0/1 20.0.0.2 5489-983b-61d6 3 D-0 GE0/0/1 ------------------------------------------------------------------------------ Total:5 Dynamic:3 Static:0 Interface:2
-
開啓代理arp後,r1將會替pc1答應此arp請求,r1中將產生arp緩存
-
從上述實驗中我們知道,當R1中使用g0/0/0接口做爲到達目標網絡20.0.0.1\24的下一跳時,R1左側網絡中的PC,如果要和R2右側的20.0.0.0/24網絡中的所有PC通信,那麼在R1上均會產生ARP緩存記錄。可以想象:當雙方通信的PC很多時,R1中勢必會產生大量的ARP緩存,從而可能會導致R1的內存被耗盡。
-
如果R1中到20.0.0.0/24網絡的靜態路由設置爲 ip route 20.0.0.0 255.255.255.0 100.0.0.2,這樣的話,R1中到20.0.0.0/24網絡的數據包,都只會交付給100.0.0.2。R1通過ARP協議來獲取100.0.0.2對應的MAC地址,然後將數據包以第二層數據幀方式交付出去。也就是說,R1上只會保留一條ARP緩存信息,即:100.0.0.2 R2的F0/1的MAC。這樣可以避免R1中產生大量ARP緩存而導致內存耗盡!
總結
在配置靜態路由時,既可指定發送接口,也可指定下一跳地址,到底採用哪種方法,需要根據實際情況而定:對於支持網絡地址到鏈路層地址解析的接口(直接連到主機)或點到點接口(ppp),指定發送接口即可;對於nbma接口,如以太網接口、VLAN接口、封裝x.25或幀中繼的接口、撥號口等,支持點到多點,這時除了配置ip路由外,還需在鏈路層建立二次路由,即ip地址到鏈路層地址的映射(如dialer map ip、x.25 map ip或frame-relay map ip等),這種情況配置靜態路由不能指定發送接口,應配置下一跳ip地址。
-
如果在點到點網絡環境下,無論是指定下一跳地址還是出接口,其效果都是一樣的。但是在廣播網絡環境下,指定下一跳地址和指定出接口將會達到不同的效果。如果指定爲出接口的話,那麼不管數據包的目標地址是否有效,每次當數據包到達時都會觸發一個ARP請求和相應,又因爲ARP代理功能在IOS環境下默認是打開的,這就意味着路由器需要配備大量的ARP高速緩存。而如果是指定爲下一跳地址的話,僅當第一個去往目標網絡的數據包到達時,纔會觸發ARP請求。
-
所以爲了便於路由的查找和減少ARP緩存條目過多的辦法就是同時指定出接口和下一跳地址。這樣做的話,路由條目在路由表中表現爲非直連網絡,其管理距離值爲1。
本文均屬肉肉原創,如有不詳或錯誤,歡迎指出!
本文作者:肉肉
版權聲明:博客所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明出處!