一、 簡介
ICMP(INTERNET CONTROL MESSAGE PROTOCOL)網絡控制消息協議。
協議號為1
ICMP報文在IP報文內部

一、 ICMP類型:
ICMP報文主要有兩個功能:查詢報文和差錯報文
二、 ICMP報文頭:
//定義ICMP首部 typedef struct _icmphdr{ unsigned char i_type; //8位類型 unsigned char i_code; //8位代碼 unsigned short i_cksum; //16位校驗和, 從TYPE開始,直到最后一位用戶數據,如果為字節數為奇數則補充一位 unsigned short i_id ; //識別號(一般用進程號作為識別號), 用於匹配ECHO和ECHO REPLY包 unsigned short i_seq ; //報文序列號, 用於標記ECHO報文順序 unsigned int timestamp; //時間戳 }ICMP_HEADER;

一、 ICMP報文的各種狀態:
目的不可達報文(Destination Unreachable Message)
找不到目的IP傳遞路徑
code:
0 = net unreachable
1 = host unreachable
2 = protocol unreachable
3 = port unreachable
4 = fragmentation needed and DF set
5 = source route failed


源端口抑制報文(Source Quench Message)
路由器在處理報文時會有一個緩存隊列。如果超過了最大緩存隊列,將無法處理,從而丟棄報文,並向源發送一個ICMP源冷卻報文(Type為4),告訴對方不在接收報文了。
報文格式:


超時報文(Time Exceeded Message)
網絡傳輸IP數據報的過程中,如果IP數據報的TTL值逐漸遞減為0時,需要丟棄數據報,這時候路由器需要向源發送方發送ICMP超時報文(Type為11),code為0,表示傳輸過程中超時了。


參數錯誤報文(Parameter Problem Message)
當路由器或主機處理數據報文時,發現因為報文頭的參數錯誤而不得不丟棄報文時,需要向源發送方發送參數錯誤報文(Type為12).當錯誤為0時,報文中的Pointer指出錯誤的字節位置。


改變路由重定向(Redirect Message)
當路由收到IP數據報,發現數據報的目的地址在路由表中沒有,他就會發ICMP重定向報文(Type為5)個源發送方,告訴它發送的地址不在


回送請求和回答(Echo or Echo Reply Message)
Type為8是請求回顯報文(Echo);Type(0)是回顯應答報文(Echo Reply
)。請求回顯包或回顯應答報文屬於查詢報文,Ping就是用這種報文進行查詢和應答的。


時間戳請求和回答(Timestamp or timestamp Reply Message)
時間戳報文時用來記錄收發以及傳輸時間的報文Originate Timestamp記錄的是發送方發送報文的時刻。Receive Timestamp記錄的是接收方收到的報文的時刻;Transmit Timestamp表示回顯這最后發送報文的時刻。


