ICMP(Internet control message protocol)协议是互联网控制报文协议,这里的控制是指监控网络的状态,比如主机是否可达,路由是否可达,端口是否可达等,以便于上层做一些差错处理。它是处于IP层和TCP层的协议,一般被认为是IP层的协议。
ICMP报文是封装在IP包里面的,因为传输的时候需要源IP地址和目标IP地址,可以抓个包证明一下。
1.wireshark抓包验证
我们常用的ping是基于ICMP协议的,因此我们ping某个网站然后抓包可以看到ICMP报文的细节,下图是用wireshark抓到的包:
我们分析第一个ICMP包,可以看到这个包的细节,这里有四条内容:
- 第一条是物理层的帧,包括多少字节,在哪个网卡被捕获到的
- 第二条是Ethernet II,意思是以太网第二层,也就是MAC层,包含源mac地址(src)和目的mac地址(dst)
- 第三条是IP协议,包含着源IP地址和目标IP地址
- 第四条是ICMP协议
因此可以证明ICMP需要封装IP头的。ICMP报文携带的信息比较少,因为是用来检测路通不通的,所以也没有必要携带太多东西。
2.ping的报文组成
打开上述的第四条内容,我们可以看到它的内容: