一:ICMP頭
ICMP是TCP/IP協議簇中的一個功能協議,負責提供在TCP/IP網絡上的設備、服務以及路由器可用性的消息
大多數網絡檢修技巧和工具都是基於常用的ICMP消息類型
類型(Type):ICMP消息基於RFC規範的類型或分類
代碼(Code):ICMP消息基於RFC規範的子類型
校驗和(Checksum):用來保證ICMP頭和數據在抵達目的地時的完整性
可變域(Variable):依賴於 Type 和 Code
二:ICMP類型和消息
ICMP數據部分的結構取決於由Type和Code域中的值所定義的用途
ICMP類型域可以作爲數據包的分類,Code域作爲它的子類。Type域的值爲3 意味着“目標不可達”。但只有這個信息可能不足以發現問題,當數據包在Code域中指明值爲3,也就是“端口不可達”時,可以知道是通信端口的問題
三:Echo的請求與響應
ICMP因爲ping工具而廣爲人知,ping用來檢測一個設備的可連接性
ping命令每次向一個設備發送一個數據包,並等待回覆,ping命令只包含兩步,請求與響應
echo和ping經常混用:ping是一個工具的名字,ping工具用來發送ICMP的echo請求數據包
可以看出上圖是192.168.100.138給192.168.100.1發出的echo請求,這是一個簡單的ICMP數據包,包含了很少的數據。
Sequence number用來匹配請求和響應
在ICMP數據包可變域還有一串隨機文本字符
第二個數據包是echo響應數據包,對應上一個請求包,Sequence number一致,當這個數據包被192.168.100.138成功接收到之後,ping就會報告成功
還可以使用ping的選項來增加它的數據填充,這樣在檢測不同類型的網絡時,就可以強制將數據包分片,在檢測具有較小分片大小的網絡時會用到。
四:路由跟蹤
路由跟蹤功能用來識別一個設備都另一個設備的通路。在一個簡單的網絡中,這個通路可能只經過一個路由器,甚至一個不經過。在複雜的網絡中可能要經過數十個路由器才能到達目的地。確定數據包從一個目的地到另一個目的地的實際路徑,對於通信檢修非常重要。
通過使用ICMP,路由跟蹤可以畫出數據包的路徑
上圖中的TTL設置爲1,這個數據包再遇到第一個路由器會被丟棄掉。因爲目標地址爲4.2.2.1 ,故源設備和目的設備之間至少會有一個路由器,所以這個數據包不會到達目的地。
上圖是第一個數據包的響應的數據包,類型11 代碼爲0 指數據包TTL在傳輸過程中超時,因此目的不可達
這個ICMP響應數據包有時候被叫做雙頭包,因爲這個ICMP的結尾部分還包含了原先echo請求的IP頭和ICMP數據副本,在網絡檢修是十分有用
上圖中的TTL設置爲2, 一直持續TTL長到9得到了響應
上圖的src來自 4.2.2.1 ,type爲0 code 爲0 ,根據每一次的src即可得到傳輸路徑