ICMP協議原理
IP協議提供盡力而為的服務,它定義如何將數據從源端傳輸到目的端,在這過程中,不負責對網絡層數據傳輸的差錯提供檢測和報告,為了保證網絡信息的正常交互,就誕生了ICMP,由它來承擔網絡層數據傳輸的差錯提供檢測和報告的作用!
ICMP:Internet Control Message Protocol(互聯網控制消息協議!)
功能:(故障診斷和錯誤報告)
- 確認IP包是否成功到達目標地址
ping工具(使用ICMP協議)
- 通知在發送過程中IP包被丟棄的原因
比如當一個數據包到達路由器時,如果發現數據包的IP頭部的TTL字段已經過期,它就會丟棄這個數據包,然后封裝一個ICMP TTL過期消息發送給數據包的發送端,告知它數據丟棄的原因是TTL已經過期!
ICMP報文格式
類型:占用1字節,標識ICMP報文的類型,從類型值來看ICMP報文可以分為兩大類。第一類是取值為1~127的差錯報文,第2類是取值128以上的信息報文!
代碼(編碼):占用1字節,標識對應ICMP報文的代碼!
注意:類型和代碼界定了這個ICMP消息的類型!
常見ICMP消息對應的類型和編碼:
校驗和:
從數據包計算出來的值來檢查其完整性。
通過完整性,我們可以檢查收到的數據是否沒有錯誤。
ICMP應用
ping
ping是檢測網絡連通性的常用工具,同時也能夠收集其他相關信息。
用戶可以在ping命令中指定不同參數,如ICMP報文長度、發送的ICMP報文個數、等待回復響應的超時時間等,設備根據配置的參數來構造并發送ICMP報文,進行ping測試。
常用參數:
ping命令的輸出信息中包括目的地址、ICMP報文長度、序號、TTL值、以及往返時間!
tracert
顯示數據包在網絡傳輸過程中經過的每一跳!
(tracert基于報文頭中的TTL值來逐跳跟蹤報文的轉發路徑)
tracert是檢測網絡丟包及時延的有效手段,同時可以幫助管理員發現網絡中的路由環路!
常用參數:
追蹤過程:
補充:
ICMP差錯報文:
ICMP控制報文:
ICMP路由和重定向報文:
ICMP請求與應答報文:
ICMP協議的安全性
協議的特點,決定了它非常容易被用于攻擊主機和路由器!
- ping of death(死亡之ping)
應對措施:
- 洪水攻擊
應對措施:
注意:為了不占用篇幅,以上攻擊實驗,會在<<Wireshark詳解>>系列中復現!
ping使用的兩個ICMP消息:
ICMP Echo-Request請求消息(類型:8):檢測目的的可達性
ICMP Echo-Reply回復消息(類型:0):目的收到ICMP Echo-Request請求消息后,根據IP報文中的源IP地址,向其發送ICMP Echo-Reply回復消息!