Internet控制消息協議ICMP(Internet Control Message Protocol)是網絡層的一個重要協議。使用IP的基本支持,但是ICMP實際上是IP的一個組成部分,必須由每個IP模塊實現。
ICMP協議用來在網絡設備之間傳遞各種差錯和控制信息,並對於收集各種網絡信息、診斷和排除各種網絡故障等方面起着至關重要的作用。當遇到IP數據無法訪問目標、IP路由器無法按當前的傳輸速率轉發數據包等情況時,會自動發送ICMP消息。
ICMP的工作原理
ICMP提供一致易懂的出錯報告信息。發送的出錯報文返回到發送原數據的設備,因為只有發送設備才是出錯報文的邏輯接受者。發送設備隨后可根據ICMP報文確定發生錯誤的類型,並確定如何才能更好地重發失敗的數據包。
ICMP唯一的功能是報告問題而不是糾正錯誤,糾正錯誤的任務由發送方完成。
ICMP的功能
1.重定向
ICMP重定向報文是ICMP控制報文中的一種。在特定的情況下,當路由器檢測到一台機器使用非優化路由的時候,它會向該主機發送一個ICMP重定向報文,請求主機改變路由。路由器也會把初始數據報向它的目的地轉發.
![]() |
1.當主機A向服務器A請求訪問,如圖可知主機A的IP地址時10.0.0.1/24,服務器A的IP地址時20.0.0.1/24,不是在同一網段,不能直接通信;因此主機A將數據包傳輸給其默認網關RTB 10.0.0.100/24,讓其進行轉發; 2.路由器RTB接收到數據包后,檢查自己的路由表,發現下一跳到RTA 10.0.0.200/24 ,轉發數據的接口與當時接收數據的接口相同,這時默認網關會給主機A發送一個ICMP重定向報文, 3.主機A會根據默認網關回饋的重定向報文將數據包傳送給RTA 10.0.0.200/24,讓RTA進行轉發。 |
發生ICMP重定向通常有兩種情況:
1)當路由器從某個接口收到數據還需要從相同接口轉發該數據時;
2)當路由器從某個接口到發往遠程網絡的數據時發現源ip地址與下一跳屬於同一網段時。
|
2.差錯檢測
檢測兩台主機之間能否正常的進行收發,使用的命令就是PingICMP Echo Request和ICMP Echo Replay分別用來查詢和響應某些信息,進行差錯檢測。 |
|
3.錯誤報告
![]() |
當網絡設備無法訪問目標時,中間設備會自動發送ICMP目的不可達報文到發送端。 ICMP定義了各種錯誤消息,用於診斷網絡連接性問題;根據這些錯誤消息,源設備可以判斷出數據傳輸失敗的原因。 舉例:
|
ICMP數據包結構
![]() |
ICMP消息的格式取決於Type和Code字段, 其中Type字段為消息類型,Code字段包含該消息類型的具體參數。后面的校驗和字段用於檢查消息是否完整。
|
ICMP消息類型和編碼類型
![]() |
ICMP定義了多種消息類型,用於不同的場景。有些消息不需要Code字段來描述具體類型參數,僅用Type字段表示消息類型。
其中網絡不可達指的是沒有這個網段;主機不可達指的是有這個網段,但是網段里頭沒有這台主機;端口不可達指的是主機沒有開放這個端口(最常用);協議不可達指的是不支持這個協議號。 |
ICMP應用
ping應用
ICMP的一個典型應用是Ping。Ping是檢測網絡連通性的常用工具,同時也能夠收集其他相關信息。
用戶可以在Ping命令中指定不同參數,如ICMP報文長度、發送的ICMP報文個數、等待回復響應的超時時間等,設備根據配置的參數來構造並發送ICMP報文,進行Ping測試。
Ping常用的配置參數說明如下:
- -a source-ip-address指定發送ICMP ECHO-REQUEST報文的源IP地址。如果不指定源IP地址,將采用出接口的IP地址作為ICMP ECHO-REQUEST報文發送的源地址。
- -c count指定發送ICMP ECHO-REQUEST報文次數。缺省情況下發送5個ICMP ECHO-REQUEST報文。
- -h ttl-value指定TTL的值。缺省值是255。
- -t timeout指定發送完ICMP ECHO-REQUEST后,等待ICMP ECHO-REPLY的超時時間。
tracert應用
ICMP的另一個典型應用是Tracert。Tracert基於報文頭中的TTL值來逐跳跟蹤報文的轉發路徑。
為了跟蹤到達某特定目的地址的路徑,源端首先將報文的TTL值設置為1。該報文到達第一個節點后,TTL超時,於是該節點向源端發送TTL超時消息,消息中攜帶時間戳。然后源端將報文的TTL值設置為2,報文到達第二個節點后超時,該節點同樣返回TTL超時消息,以此類推,直到報文到達目的地。
這樣,源端根據返回的報文中的信息可以跟蹤到報文經過的每一個節點,並根據時間戳信息計算往返時間。Tracert是檢測網絡丟包及時延的有效手段,同時可以幫助管理員發現網絡中的路由環路。
Tracert常用的配置參數說明如下:
- -a source-ip-address指定tracert報文的源地址。
- -f first-ttl指定初始TTL。缺省值是1。
- -m max-ttl指定最大TTL。缺省值是30。
- -name使能顯示每一跳的主機名。
- -p port指定目的主機的UDP端口號。
![]() |
|
Ping使用的是哪兩類ICMP消息?
lPing利用ICMP Echo請求消息(Type值為8)來發起檢測目的可達性。目的端收到ICMP Echo請求消息后,根據IP報文頭中的源地址向源端發送ICMP Echo回復消息(Type值為0)。
當網絡設備收到TTL值為0的IP報文時,會如何操作?
l如果IP數據包在到達目的地之前TTL值已經降為0,則收到IP數據包的網絡設備會丟棄該數據包,並向源端發送ICMP消息通知源端TTL超時。