ICMP是(Internet Control Message Protocol)Internet控制報文協議。它是TCP/IP協議族的一個子協議,用于在IP主機、路由器之間傳遞控制消息。控制消息是指網絡通不通、主機是否可達、路由是否可用等網絡本身的消息。這些控制消息雖然并不傳輸用戶數據,但是對于用戶數據的傳遞起著重要的作用。
它工作在OSI七層模型的中的第三層——網絡層。
每一個ICMP消息都將包含引發這條ICMP消息的數據包的完全IP包頭,這樣,端點系統就會知道實際上哪一個數據包沒有發送到目的地.另外引發此ICMP消息的數據包的前8個字節也將包括在內,這通常是TCP或者UDP包頭.
ICMP報文的結構如下圖所示:
其中類型(TYPE)和代碼(CODE)共同確定了ICMP傳輸的消息。而檢驗和則用于驗證ICMP的完整性。TYPE和CODE的對應表如下:
- 面向無連接
- 是TCP/IP協議族的一個子協議,屬于網絡層協議
- 傳遞的是控制信息
- PING和Tracert等命令就是基于ICMP協議
- ICMP就是一個“錯誤偵測與回報機制”
- 偵測遠端主機是否存在
- 建立及維護路由資料
- 重導資料傳送路徑(ICMP重定向:在特定的情況下,雅思英語當路由器檢測到一臺機器使用非優化路由的時候,它會向該主機發送一個ICMP重定向報文,請求主機改變路由。)
當我們使用PING命令進行主機探測時,使用的就是ICMP協議。
ICMP協議本身的特點決定了它非常容易被用于攻擊網絡上的路由器和主機。
- “Ping of Death” 攻擊的原理是:如果ICMP數據包的尺寸超過64KB上限時,主機就會出現內存分配錯誤,導致TCP/IP堆棧崩潰,致使主機死機。(操作系統已經取消了發送ICMP數據包的大小的限制,解決了這個漏洞)
- 向目標主機長時間、連續、大量地發送ICMP數據包,也會最終使系統癱瘓。大量的ICMP數據包會形成“ICMP風暴”,使得目標主機耗費大量的CPU資源處理,疲于奔命。
對于“ICMP風暴”問題,解決方案1是在路由器上對ICMP數據包進行帶寬限制,將ICMP占用的帶寬控制在一定的范圍內,這樣即使有ICMP攻擊,它所占用的帶寬也是非常有限的,對整個網絡的影響非常少
解決方案2是設置一個防火墻,過濾ICMP包。一些現有的防火墻就會屏蔽ICMP包。