Internet Control Message Protocol


 ICMP协议是TCP/IP协议簇中位于网络层的功能型协议,ICMP协议是IP协议的一部分并且依赖于IP协议来传递消息,比如Ping命令用的就是ICMP协议的消息类型。

 在命令行中输入ping <主机地址> ,如果目标主机地址在线,并且不受到防火墙规则等影响的话,就可以看到ping命令的响应了。

在Windows系统的ping命令会显示字节大小、RTT、TTL响应信息。

RTT是往返时间,记录的是从发送端发送数据开始到发送端收到接收端的确认一共经历的时长。

TTL是数据包的生存时间,每经过一个路由器TTL就会减去1,直到0就会丢弃该数据包,这是为了避免网络数据包一直被转发影响整个网络,TTL不同操作系统推荐值不一样,一般Windows系统是64,部分unix系统是128。

以上收到了四次来自目标地址的回复,也就是4个数据包。通过wireshark抓包如下:

 一共抓到8条ICMP数据包?通过查看可得知这是4次发送ICMP的echo请求包,每次发送后收到4次ICMP的echo响应包。

点击第一个请求包:

可以看到有物理层、数据链路层和网络层。IPv4和ICMP协议同是网络层协议。

 序号①标明了TTL是64,而上面命令行的TTL是56,这是因为点击的数据包是请求包,也就是发送包,当前主机不知道这个数据包会经历多少个路由器,所以默认推荐值是64,如果这个数据包经过了64个路由器就丢弃。

 序号②标明ICMP协议的类型,是Echo的请求包。

 序号③是包中携带的随机数据,在收到响应包上面也会有随机数据,响应包的随机数据就是请求包的随机数据,这是为了让主机确认这是自己请求的响应包。

随后观察第第二个数据包,也就是响应包:

先看红色箭头所指向的位置,附带了RTT数据(8.729ms)。

 随后看序号①,TTL变成56,也就是数据包经过了64-56=8个路由器(仅供参考)。

 序号②的ICMP类型发生了变化,标志这是一个Echo的响应包。

序号③的数据和请求包的数据一致。

RTT数越大,就代表与目标主机通讯的网络越糟糕。

若是发送的ICMP请求包目标地址接收不到,或者目标地址在一定时间内没有回复响应包,就表明双方网络不通(该方法收到防火墙规则等的影响)。

以上实验通过ping命令展示出了ICMP协议的部分方面,以及在大多数网络检修中的应用。