目錄
一、報文結構
ICMP(網絡控制管理協議)報文是封裝在IP報文內部傳輸的,也就是ICMP報文是IP報文的數據部分。
下圖爲ICMP報文格式:
其中 8位類型,有15種不同類型,部分協議還可以複用8位代碼來擴展類型。
二、各種ICMP報文類型
可以總的將ICMP報文分爲查詢報文和差錯報文。
2.1 查詢報文
2.1.1 回顯請求和應答
Ping就是用這種報文進行查詢和迴應。Type(8)是請求回顯報文(Echo);Type(0)是回顯應答報文(Echo Reply)。
2.1.2 時間戳請求和應答
時間戳報文是用來記錄收發以及傳輸時間的報文。Originate Timestamp記錄的是發送方發送報文的時刻;Receive Timestamp記錄的是接收方收到報文的時刻;Transmit Timestamp表示回顯這最後發送報文的時刻。Type(13) 是請求報文,Type(14)是應答報文
2.1.3 信息請求和應答
這種報文是用來找出一個主機所在的網絡個數(一個主機可能會在多個網絡中)。報文的IP消息頭的目的地址會填爲全0,表示this,源地址會填爲源IP所在的網絡IP。
2.1.4 地址掩碼和應答
ICMP地址掩碼請求用於無盤系統在引導過程中獲取自己的子網掩碼。
2.2 差錯報文
2.2.1 目的不可達
網絡在傳輸過程中,發現目的無法到達, 這時候,就會向源主機發送目的不可達(type 爲 3), code 不同代表不同的原因。
2.2.2 冷卻報文
路由器在處理報文時會有一個緩存隊列。如果超過最大緩存隊列,將無法處理,從而丟棄報文。並向源發送方發一個ICMP源冷卻報文(Type爲4)
2.2.3 重定向
當路由收到IP數據報,發現數據報的目的地址在路由表上沒有,它就會發ICMP重定向報文(Type爲5)給源發送方
2.2.4 超時
網絡傳輸IP數據報的過程中,如果IP數據包的TTL值逐漸遞減爲0時,需要丟棄數據報。這時,路由器需要向源發送方發送ICMP超時報文(Type爲11),Code爲0,表示傳輸過程中超時了。
一個IP數據報可能會因爲過大而被分片,然後在目的主機側把所有的分片重組。如果主機遲遲沒有等到所有的分片報文,就會向源發送方發送一個ICMP超時報文,Code爲1,表示分片重組超時了。
2.2.5 參數錯誤
當路由器或主機處理數據報時,發現因爲報文頭的參數錯誤而不得不丟棄報文時,需要向源發送方發送 ICMP 參數錯誤(type爲12) IP首部錯誤code爲0,缺少必須的選項code爲1.