一、ICMP簡介
互聯(lián)網(wǎng)控制消息協(xié)議(英語:Internet Control Message Protocol,縮寫:ICMP)是互聯(lián)網(wǎng)協(xié)議族的核心協(xié)議之一。它用于網(wǎng)際協(xié)議(IP)中發(fā)送控制消息,提供可能發(fā)生在通信環(huán)境中的各種問題反饋。
通過這些信息,使管理者可以對所發(fā)生的問題作出診斷,然后采取適當(dāng)?shù)拇胧┙鉀Q。
ICMP 依靠IP來完成它的任務(wù),它是IP的主要部分。
它與傳輸協(xié)議(如TCP和UDP)顯著不同:它一般不用于在兩點間傳輸數(shù)據(jù)。它通常不由網(wǎng)絡(luò)程序直接使用,除了 ping 和 traceroute 這兩個特別的例子。
IPv4中的ICMP被稱作ICMPv4,IPv6中的ICMP則被稱作ICMPv6。
雖然ICMP是包含在IP數(shù)據(jù)包中的,但是對ICMP消息通常會特殊處理,會和一般IP數(shù)據(jù)包的處理不同,而不是作為IP的一個子協(xié)議來處理。在很多時候,需要去查看ICMP消息的內(nèi)容,然后發(fā)送適當(dāng)?shù)腻e誤消息到那個原來產(chǎn)生IP數(shù)據(jù)包的程序,即那個導(dǎo)致ICMP消息被發(fā)送的IP數(shù)據(jù)包。
很多常用的工具是基于ICMP消息的。
traceroute 是通過發(fā)送包含有特殊的TTL的包,然后接收ICMP超時消息和目標(biāo)不可達消息來實現(xiàn)的。
ping 則是用ICMP的"Echo request"(類別代碼:8)和"Echo reply"(類別代碼:0)消息來實現(xiàn)的。
二、 從 netstat 看icmp報文收發(fā)情況
# netstat -s
Icmp:
14907358 ICMP messages received
797 input ICMP message failed.
ICMP input histogram:
destination unreachable: 1740
timeout in transit: 506
echo requests: 14904857
echo replies: 228
timestamp request: 27
14918071 ICMP messages sent
0 ICMP messages failed
ICMP output histogram:
destination unreachable: 4815
echo request: 8209
echo replies: 14904857
timestamp replies: 27
IcmpMsg:
InType0: 228
InType3: 1740
InType8: 14904857
InType11: 506
InType13: 27
OutType0: 14904857
OutType3: 4815
OutType8: 8209
OutType14: 27
OutType69: 163

三、 ICMP報文結(jié)構(gòu)

ICMP 報文類型
一類是 查詢類報文 :主要用于信息的查詢和采集,比如采集傳輸路徑上的每個路由器都是誰,本次傳輸?shù)膱笪氖欠襁_到目的地等。
另一類是 差錯診斷類報文 :主要用于診斷網(wǎng)絡(luò)故障,比如傳輸報文被丟棄的原因是什么等。


四、參考
互聯(lián)網(wǎng)控制消息協(xié)議wiki
https://zh.wikipedia.org/wiki/%E4%BA%92%E8%81%94%E7%BD%91%E6%8E%A7%E5%88%B6%E6%B6%88%E6%81%AF%E5%8D%8F%E8%AE%AE
https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol
互聯(lián)網(wǎng)協(xié)議 — ICMP 互聯(lián)網(wǎng)控制消息協(xié)議
https://blog.51cto.com/u_15301988/5133364
ICMP控制報文協(xié)議
https://klose911.github.io/html/tii/icmp.html
什么是互聯(lián)網(wǎng)控制消息協(xié)議(ICMP)?
https://www.cloudflare.com/zh-cn/learning/ddos/glossary/internet-control-message-protocol-icmp/