一、ICMP简介
互联网控制消息协议(英语:Internet Control Message Protocol,缩写:ICMP)是互联网协议族的核心协议之一。它用于网际协议(IP)中发送控制消息,提供可能发生在通信环境中的各种问题反馈。
通过这些信息,使管理者可以对所发生的问题作出诊断,然后采取适当的措施解决。
ICMP 依靠IP来完成它的任务,它是IP的主要部分。
它与传输协议(如TCP和UDP)显著不同:它一般不用于在两点间传输数据。它通常不由网络程序直接使用,除了 ping 和 traceroute 这两个特别的例子。
IPv4中的ICMP被称作ICMPv4,IPv6中的ICMP则被称作ICMPv6。
虽然ICMP是包含在IP数据包中的,但是对ICMP消息通常会特殊处理,会和一般IP数据包的处理不同,而不是作为IP的一个子协议来处理。在很多时候,需要去查看ICMP消息的内容,然后发送适当的错误消息到那个原来产生IP数据包的程序,即那个导致ICMP消息被发送的IP数据包。
很多常用的工具是基于ICMP消息的。
traceroute 是通过发送包含有特殊的TTL的包,然后接收ICMP超时消息和目标不可达消息来实现的。
ping 则是用ICMP的"Echo request"(类别代码:8)和"Echo reply"(类别代码:0)消息来实现的。
二、 从 netstat 看icmp报文收发情况
# 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报文结构
ICMP 报文类型
一类是 查询类报文 :主要用于信息的查询和采集,比如采集传输路径上的每个路由器都是谁,本次传输的报文是否达到目的地等。
另一类是 差错诊断类报文 :主要用于诊断网络故障,比如传输报文被丢弃的原因是什么等。
四、参考
互联网控制消息协议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
互联网协议 — ICMP 互联网控制消息协议
https://blog.51cto.com/u_15301988/5133364
ICMP控制报文协议
https://klose911.github.io/html/tii/icmp.html
什么是互联网控制消息协议(ICMP)?
https://www.cloudflare.com/zh-cn/learning/ddos/glossary/internet-control-message-protocol-icmp/