NO IMAGE

    ICMP是“Internet Control Message Protocol”(Internet控制訊息協議)的縮寫。它是TCP/IP協議族的一個子協議,用於在IP主機、路由器之間傳遞控制訊息。控制訊息是指網路通不通、主機是否可達、路由是否可用等網路本身的訊息。這些控制訊息雖然並不傳輸使用者資料,但是對於使用者資料的傳遞起著重要的作用。 

ICMP報文格式 

    ICMP報文包含在IP資料包中,屬於IP的一個使用者,IP頭部就在ICMP報文的前面,所以一個ICMP報文包括IP頭部、ICMP頭部和ICMP報文(見圖表,ICMP報文的結構和幾種常見的ICMP報文格式),IP頭部的Protocol值為1就說明這是一個ICMP報文,ICMP頭部中的型別(Type)域用於說明ICMP報文的作用及格式,此外還有一個程式碼(Code)域用於詳細說明某種ICMP報文的型別,所有資料都在ICMP頭部後面。RFC定義了13種ICMP報文格式,具體如下: 
型別程式碼     型別描述 
0    響應應答  (ECHO-REPLY) 
3    不可到達 
4    源抑制 
5    重定向 
8    響應請求(ECHO-REQUEST) 
11  超時 
12  引數失靈 
13  時間戳請求 
14  時間戳應答 
15  資訊請求(*已作廢) 
16  資訊應答(*已作廢) 
17  地址掩碼請求 
18  地址掩碼應答 

其中程式碼為15、16的資訊報文已經作廢。 

下面是幾種常見的ICMP報文: 
1.響應請求 

    我們日常使用最多的ping,就是響應請求(Type=8)和應答(Type=0),一臺主機向一個節點傳送一個Type=8的ICMP報文,如果途中沒有異常(例如被路由器丟棄、目標不迴應ICMP或傳輸失敗),則目標返回Type=0的ICMP報文,說明這臺主機存在,更詳細的tracert通過計算ICMP報文通過的節點來確定主機與目標之間的網路距離。

 

2.目標不可到達、源抑制和超時報文 

    這三種報文的格式是一樣的,目標不可到達報文(Type=3)在路由器或主機不能傳遞資料包時使用,例如我們要連線對方一個不存在的系統埠(埠號小於1024)時,將返回Type=3、Code=3的ICMP報文,它要告訴我們:“嘿,別連線了,我不在家的!”,常見的不可到達型別還有網路不可到達(Code=0)、主機不可到達(Code=1)、協議不可到達(Code=2)等。源抑制則充當一個控制流量的角色,它通知主機減少資料包流量,由於ICMP沒有恢復傳輸的報文,所以只要停止該報文,主機就會逐漸恢復傳輸速率。最後,無連線方式網路的問題就是資料包會丟失,或者長時間在網路遊蕩而找不到目標,或者擁塞導致主機在規定時間內無法重組資料包分段,這時就要觸發ICMP超時報文的產生。超時報文的程式碼域有兩種取值:Code=0表示傳輸超時,Code=1表示重組分段超時。

 

3.時間戳 
    時間戳請求報文(Type=13)和時間戳應答報文(Type=14)用於測試兩臺主機之間資料包來回一次的傳輸時間。傳輸時,主機填充原始時間戳,接收方收到請求後填充接收時間戳後以Type=14的報文格式返回,傳送方計算這個時間差。一些系統不響應這種報文。