ICMP:Internet控制報文協議
ICMP是(Internet Control Message Protocol)Internet控制報文協議。它是TCP/IP協議族的一個IP層子協議,用於在IP主機、路由器之間傳遞控制消息。控制消息是指網絡通不通、主機是否可達、路由是否可用等網絡本身的消息。這些控制消息雖然並不傳輸用戶數據,但是對於用戶數據的傳遞起著重要的作用。
ICMP位於TCP/IP協議族中IP層。
ICMP的主要功能包括:確認IP包是否成功送達目標地址,通知在發送過程當中IP包被廢棄的具體原因,改善網絡設置等。同時ICMP的這種通知消息會使用IP進行發送,收到ICMP包的主機會分解ICMP的首部和數據與以後得知具體發生的原因。
ICMP報文的前4個字節都是一樣的,但是剩下的其他字節則互不相同。
類型字段可以有15個不同的值,以描述特定類型的ICMP報文。某些ICMP報文還使用代碼字段的值來進一步描述不同的條件。校驗和字段覆蓋整個ICMP報文,算法與IP首部校驗和相同。
檢驗和 : 用於檢驗整個ICMP報文。但是IP首部檢驗和並不檢驗IP數據報的內容,因此不能保證經過傳輸的ICMP報文不產生差錯。
ICMP消息分類
ICMP消息大致分成兩類:一類是通知出錯原因的錯誤消息(差錯報文),另一類是用於診斷的查詢消息(查詢報文)
常用ICMP消息類型
不同類型由報文中的類型字段和代碼字段來共同決定。
下面是幾種常見的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的報文格式返回,發送方計算這個時間差。一些系統不響應這種報文。
ICMP:Internet控制報文協議