ICMP (Internet Control Message Protocol Internet控制報文協議)
ICMP是TCP/IP協議族的一個子協議,用於在IP主機、路由器之間傳遞控制消息。控制消息是指網絡通不通、主機是否可達、路由是否可用等網絡本身的消息。這些控制消息雖然並不傳輸用戶數據,但是對於用戶數據的傳遞起着重要的作用。
ICMP協議是一種面向非連接的協議,用於傳輸出錯報告控制信息。它是一個非常重要的協議,它對於網絡安全具有極其重要的意義,它是TCP/IP協議族的一個子協議,屬於網絡層協議,主要用於在主機與路由器之間傳遞控制信息,包括報告錯誤、交換受限控制和狀態信息等。當遇到IP數據無法訪問目標、IP路由器無法按當前的傳輸速率轉發數據包等情況時,會自動發送ICMP消息。
ICMP的消息可以分爲錯誤消息,請求消息和響應消息。
偵測遠端主機是否存在;
建立及維護路由資料;
重導資料傳送路徑;
資料流量控制;
ICMP3個重要類型:
路由通告和路由選擇:分別是類型9和類型10,它們用於ICMP路由器發現協議(IRDP),IRDP協議用於某些操作系統發現本地路由器;
重定向:ICMP類型5,被路由器用於通知主機去往指定目標的網關,是數據鏈路上的另外一臺路由器;
ICMP重定向(ICMP Redirect)
網絡中的路由器通過相互之間的共同努力,將用戶的數據包轉發到目的地。通常情況下,主機都會將去往遠程網絡的數據包發送到路由器,路由器再盡最大努力轉發數據。但是在某些情況下,收到數據包的路由器可能並不是去往目的地的最優選擇,也就是說該路由器並不在源與目標的路徑當中,或者說數據源應該將數據交給其它路由器來轉發。如果某臺路由器真的發現自己不應該爲用戶轉發數據,而希望讓用戶選擇其它路由器來轉發數據,那麼它就會通過向數據源發送ICMP重定向(ICMP Redirect)來告訴對方,讓對方不要再將數據包發向自己,而應該發到其它路由器.
需要路由器向源發送ICMP重定向的情況有兩種:
1. 當路由器從某個接口收到數據包後,還要將數據包從同一個接口發往目的地,就是路由器收到數據包的接口正是去往目的地的出口時,則會向源發送ICMP重定向,通告對方直接將數據包發向自己的下一跳即可,不要再發給自己;
2. 數據包的源IP和自己轉發時的下一跳IP地址是同網段時,則會向源發送ICMP重定向,通告對方直接將數據包發向自己的下一跳。
路由器在向數據源發送ICMP重定向的同時,也會正常轉發收到的數據包,並不會中斷網絡; ICMP重定向是基於接口配置的,默認爲開啓狀態。
Eg:
R1#show running-config
interface FastEthernet0/0
ipaddress 192.168.1.1 255.255.255.0
duplexauto
speedauto
!
ip route 192.168.2.0 255.255.255.0192.168.1.2
R2#show running-config
interface FastEthernet0/0
ipaddress 192.168.2.1 255.255.255.0
!
interface FastEthernet0/0
ipaddress 192.168.1.2 255.255.255.0
duplexauto
speedauto
!
R3#show running-config
interface FastEthernet0/0
ipaddress 192.168.1.3 255.255.255.0
duplexauto
speedauto
!
ip route 0.0.0.0 0.0.0.0 192.168.1.1
驗證:
R3#ping 192.168.2.1
R3#debug ip icmp
*Mar 1 00:11:53.039: ICMP:redirect rcvd from 192.168.1.1- for 192.168.2.1 use gw 192.168.1.2
*Mar 100:11:53.091: ICMP: echo reply rcvd, src 192.168.2.1, dst 192.168.1.3
*Mar 100:11:53.159: ICMP: echo reply rcvd, src 192.168.2.1, dst 192.168.1.3
*Mar 100:11:53.191: ICMP: echo reply rcvd, src 192.168.2.1, dst 192.168.1.3
*Mar 100:11:53.219: ICMP: echo reply rcvd, src 192.168.2.1, dst 192.168.1.3
*Mar 100:11:53.271: ICMP: echo reply rcvd, src 192.168.2.1, dst 192.168.1.3
R1#debug ip icmp
ICMP packet debugging is on
*Mar 1 00:11:53.651: ICMP:redirect sent to 192.168.1.3 for dest 192.168.2.1, use gw 192.168.1.2
關閉ICMP重定向:
R1(config)#int f0/0
R1(config-if)#no ip redirects
在接口上開啓HSRP後,默認會關閉ICMP重定向的功能,在IOS 12.1(3)T和以後的版本可以手工開啓ICMP重定向功能。