ICMP 经常被认为是IP 层的一个组成部分。它传递差错报文以及其他需要注意的信息。ICMP 报文通常被IP 层或更高层协议(TCP 或UDP)使用。一些ICMP 报文把差错报文返回用户进程。
1.ICMP 协议的数据封装
ICMP 报文是封装在IP 数据报中的,当IP 首部的“协议”字段值是“01”时,表明封装的数据是ICMP 数据。ICMP 协议的数据封装格式如图2-3-14 所示。
图2-3-14 ICMP 协议的数据封装格式
2.ICMP 报文的格式
ICMP 报文的格式如图2-3-15 所示。
所有ICMP 报文的前4 字节都是一样的,但是其他字节则互不相同。
图2-3-15 ICMP 报文的格式
“类型”字段可以有15 个不同的值,以描述特定类型的ICMP 报文。某些ICMP 报文还使用代码字段的值来进一步描述不同的条件。表2-3-1 所示为不同类型值的ICMP 报文的描述。
表2-3-1 不同类型值的ICMP 报文的描述
续表
3.ICMP 回显请求和回显应答报文的格式及实例
ICMP 回显请求和回显应答报文的格式如图2-3-16 所示。
图2-3-16 ICMP 回显请求和回显应答报文的格式
在命令行状态下,使用Ping 命令Ping 搜狐网站(www.sohu.com)的截图如图2-3-17所示,图示中所使用的Ping 命令是缺省状态,所以连续发了4 个ECHO 数据报,获得了4对ECHO 数据报。
图2-3-17 Ping 搜狐网站
图2-3-18 和图2-3-19 所示为Wireshark 抓包,分别是回显请求报文和回显应答报文。可以看到,这两个报文只有类型不同,其标识符、序号和选项数据都是一样的,因为这两个报文是一问一答的响应报文对。其他3 对报文标识符都是512,序号各有不同——第2对的序号是512,第3 对的序号是768,第4 对的序号是1024。只有序号相同的报文才是一对请求和应答报文。另外,从图中也可以看出,每个报文发送32 字节的数据。
(www.xing528.com)
图2-3-18 ICMP 回显请求报文实例
图2-3-19 ICMP 回显应答报文实例
4.ICMP 超时报文的格式及实例
ICMP 超时报文的格式如图2-3-20 所示。
Wireshark 抓包的ICMP 超时报文如图2-3-21 所示,观察其类型值为“0b”,即十进制数11。
说明:
ICMP 超时报文的产生原理: 当路由器收到TTL 值为1 的数据报时,会向源主机发送ICMP 超时报文,将收到的数据报的IP 首部和IP 数据部分的前8 字节作为ICMP 超时报文的数据部分,并且丢弃收到的数据报。
图2-3-20 ICMP 超时报文的格式
图2-3-21 ICMP 超时报文的实例
5.ICMP 检验和
用Wireshark 捕获的ICMP 报文如图2-3-22 所示。
图2-3-22 ICMP 报文
从图2-3-17 所示的ICMP 报文中可知,8983 是ICMP 报文的检验和,那么这个数是怎样计算出来的呢? 其计算方法如下:
(1)将校验和置为“00 00”,把报文看成以2 字节为单位的数字组成。
(2)进行十六进制求和:
0800 +0000 +0001 +0d19 +6162 =767c
(3)ffff-767c =8983,验证该数是正确的。
6.ICMP 协议小结
ICMP 协议是TCP/IP 协议族的一个协议,用于在IP 主机、路由器之间传递控制消息。控制消息是指网络通与不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。我们在网络中经常用到ICMP 协议,只不过未觉察到而已。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。