ICMP重定向(ICMP Redirect)
1.概述
在以太網中路由器之間基於IP路由轉發,將用戶的數據包盡力而爲的轉發到目的地。一般狀況下,主機都會將去往遠程的數據包發送到下一跳路由器,路由器再盡最大努力轉發數據。可是在某些狀況下,收到數據包的路由器可能並非去往目的地的最優選擇,也就是說該路由器並不在源於目標的路徑當中,或者說數據源應該將數據交給其它路由器來轉發數據(最佳路由器)。若是某臺路由器真的發現本身不該該爲用戶轉發數據,而但願讓用戶選擇其餘路由器來轉發數據,那麼它就會經過向數據源發送ICMP重定向(ICMP Redirect)來告訴對方,讓對方不要再將數據包發向本身,而是發送到其餘最佳的路由器。網絡
這裏因爲IP是不可靠的容易出現丟包,因此爲盡力而爲的在IP網絡中傳輸。測試
2.路由器向源發送ICMP重定向的狀況有兩種:
2.1 當路由器從某個接口收到數據包後,還要將數據包從同一個接口發往目的地,也就是路由器收到數據包的接口正是去往目的地的出口時,則會向源發送ICMP 重定向,通告對方直接將數據包發向本身的下一跳便可,不要再發給本身。spa
2.2 數據包源IP和本身轉發時下一跳IP地址是同一網段時,也會像源發送ICMP重定向,通告對方直接將數據包轉發給本身的下一跳路由器。debug
注:路由器再向數據發送ICMP重定向的同時,也會正常轉發收到的數據包,並不會中斷網絡。3d
3.實驗案例:
3.1 實驗拓撲
注:ICMP在Cisco設備中是基於接口下配置的,默認爲開啓狀態。blog
3.2 拓撲說明
這裏主要用到4個路由器,其實Internet這個路由器暫時無需配置,R1,R2,R3的接口G0/0在10.1.1.0/24這個廣播域中;R2和R4的接口G0/1在20.1.1.0/24這個廣播域中;而R3將去往任何目的的數據所有須要交給R1進行轉發。接口
4.實驗過程
4.1 基礎網絡環境配置
(1)配置R1ip
R1>enable
R1#configure terminal
R1(config)#interface GigabitEthernet0/0
R1(config-if)#ip address 10.1.1.1 255.255.255.0
R1(config-if)#no shutdown
R1(config-if)#exit
R1(config)#ip route 0.0.0.0 0.0.0.0 10.1.1.2
R1(config)#end路由
說明:R1將去往任何目的地的數據包所有交給10.1.1.2這個下一跳地址,即交給R2來轉發。terminal
(2)配置R2
R2#conf t
R2(config)#int g0/0
R2(config-if)#ip add 10.1.1.2 255.255.255.0
R2(config-if)#no sh
R2(config-if)#exit
R2(config)#int g0/1
R2(config-if)#ip add 20.1.1.2 255.255.255.0
R2(config-if)#no sh
R2(config-if)#exit
說明:R2同時鏈接10.1.1.0/24和20.1.1.0/24這兩個直連網段。
(3)配置R3
R3#conf t
R3(config)#int g0/0
R3(config-if)#ip add 10.1.1.3 255.255.255.0
R3(config-if)#no shutdown
R3(config-if)#exit
R3(config)#ip route 0.0.0.0 0.0.0.0 10.1.1.1
R3(config)#end
說明:R3將去往任何目的地的數據包所有交給10.1.1.1,也就是選擇R1做爲網關進行轉發。
(4)配置R4
R4#conf t
R4(config)#int g0/1
R4(config-if)#ip add 20.1.1.4 255.255.255.0
R4(config-if)#no sh
R4(config-if)#exit
R4(config)#ip route 0.0.0.0 0.0.0.0 20.1.1.2
R4(config)#end
說明:因爲R4與R2直連都在20.1.1.0/24網段內,因此均可以相互通信,可是R1,R2,R3在10.1.1.0/24網段內若是沒有路由默認R1和R3是不能訪問R4,因爲以前R3下一跳路由指向R1,而後R1下一跳又指向R2,由此R4必須向R2指向一條回指路由(反向路由,回程路由)。由於靜態路由雙向互指才能夠通信。
4.2 測試ICMP重定向
(1)在R3上向目標網絡20.1.1.0發送數據包來測試ICMP重定向,而且打開debug觀察數據包:
說明:從上面信息能夠看出,因爲R3的網關是10.1.1.1,因此會將去往20.1.1.0/24的數據包發給網關R1,可是R1從接口G0/0收到數據包後,檢查路由表得知須要再將數據包從相同接口G0/0發給10.1.1.2,不只知足發送ICMP重定向狀況的第一條同接口進出,也知足第二條源和下一跳同網段,因此R1向源發送了ICMP重定向,數據包中明確告訴R3將去往20.1.1.4的數據包直接交給10.1.1.2,即交給R2。
(2)更改R3的路由方式
查看路由配置
R3(config)#do show run | in ip route
ip route 0.0.0.0 0.0.0.0 10.1.1.1
配置靜態路由由接口轉發:
R3(config)#no ip route 0.0.0.0 0.0.0.0 10.1.1.1
R3(config)#ip route 0.0.0.0 0.0.0.0 g0/0
查看抓包狀態:
說明:能夠看出,R1並無再發送ICMP重定向,由於R3並無將去往20.1.1.0/24的數據包發向R1,具體緣由,由普通ARP的原理能夠得知。
4.3 關閉ICMP重定向
在R1接口上關閉ICMP重定向:
R3(config)#int g0/0
R3(config-if)#no ip redirects
更改路由配置:
R3(config)#no ip route 0.0.0.0 0.0.0.0 GigabitEthernet0/0
R3(config)#ip route 0.0.0.0 0.0.0.0 10.1.1.1
說明:須要開啓ICMP重定向,輸入命令ip redirects;ICMP重定向功能不建議關閉。
注:在接口上開啓HSRP後,默認會關閉ICMP重定向的功能,在IOS 12.1(3)T和之後的版本能夠手工開啓ICMP重定向功能。
查看測試結果: