ICMP是(Internet Control Message Protocol)Internet控制報文協議。它是TCP/IP協議族的一個IP層子協議,用於在IP主機、路由器之間傳遞控制消息。控制消息是指網絡通不通、主機是否可達、路由是否可用等網絡本身的消息。這些控制消息雖然並不傳輸用戶數據,但是對於用戶數據的傳遞起着重要的作用。
ICMP位於TCP/IP協議族中IP層。
ICMP的主要功能包括:確認IP包是否成功送達目標地址,通知在發送過程當中IP包被廢棄的具體原因,改善網絡設置等。同時ICMP的這種通知消息會使用IP進行發送,收到ICMP包的主機會分解ICMP的首部和數據與以后得知具體發生的原因。
ICMP報文在IP數據報內部被傳輸,正式規范參考RFC792.
ICMP報文的前4個字節都是一樣的,但是剩下的其他字節則互不相同。
類型字段可以有15個不同的值,以描述特定類型的ICMP報文。某些ICMP報文還使用代碼字段的值來進一步描述不同的條件。校驗和字段覆蓋整個ICMP報文,算法與IP首部校驗和相同。
ICMP消息分類
ICMP消息大致分成兩類:一類是通知出錯原因的錯誤消息(差錯報文),另一類是用於診斷的查詢消息(查詢報文)。
常用ICMP消息類型
不同類型由報文中的類型字段和代碼字段來共同決定。
類型3:ICMP目標不可達消息
IP路由器無法將IP數據包發送給目標地址時,會給發送端主機返回一個目標不可達的ICMP消息。並在這個消息中顯示不可達的具體原因。而在實際通信過程中常遇到錯誤代碼為1,表示主機不可達,它是指路由表中沒有改主機信息或者該主機沒有聯網的意思。
類型5:ICMP重定向消息
如果路由器發送端主機使用了次優的路徑發送數據,那么它會返回一個ICMP重定向消息給這個主機,在這個消息中包含了最合適的路由消息和源數據。這主要發生在路由器持有更好的路由器信息的情況下,路由器會通知這樣的ICMP消息給發送端主機一個更適合的發送路由。
類型11:ICMP超時消息
IP包中有有一個字段叫做TTL,它的值就是每經過一次路由器就會被減1,直到0時該IP包會被丟棄,此時IP路由器將會發送一個ICMP超時的消息給發送端主機,並通過該包已被丟棄。
設置IP包生存周期的主要目的,是為了在路由控制遇到問題發生循環狀態時,避免IP包無休止地在網絡上被轉發。
類型0、8:ICMP回送消息
用於進行通信的主機或路由器之間,判斷所發送的數據包是否已經成功到達對端的一種消息。可以向對端主機發送回送請求的消息(類型8),也可以接受對端主機發回來的回送應答消息(類型0)。網絡上最常用的ping命令,就是利用這個消息實現的。
參考:
ICMP百度百科
跟我學TCP/IP系列4--IP協議
圖解TCP/IP
TCP/IP詳解卷一