• 网际控制报文协议(Internet Control Message Protocol)
  • 该协议主要是用于辅助IP协议进行数据传输的
  • ICMP协议可以报告错误信息或者异常情况

ICMP的报文数据是通过封装在IP数据报中进行数据传输的
**4 网络层ICMP与ping - 图1

ICMP报文首部

  • 8位类型:主要是指ICMP报文的种类
  • 8位代码:不同ICMP报文种类具体有哪些错误
  • 16位校验和:校验报文在整个传输中是否有错误

IP协议首部中,有一个8位协议,它表明的是IP数据所携带的具体数据是什么协议的。ICMP的字段值是1.

ICMP协议报文的两个类型

差错报告报文

4 网络层ICMP与ping - 图2

  • 网络不可达:IP地址可以表示一个网络,当主机号全0的时候表示的是某一个网络,如果整个网络不可达,。。。
  • 主机不可达:如果A和B要通信而B是离线或者关机状态,就会出现主机不可达
  • 网络重定向:传输给某一个网络的数据。可能不能走该网络了需要重定向
  • 主机重定向:如果发送的报文,主机告知不能受理

    询问报文

    4 网络层ICMP与ping - 图3

  • 回送请求或应答:验证网络是否通。A给B发送一个空数据,如果B收到,就给一个回应

  • 时间戳请求或应答:时间同步

    ICMP应用

    ping

    ping主要是使用ICMP的询问报文**它会发送回送请求或应答类型的报文。当使用ping命令的时候,他会先组装一个IP协议的报文,然后在IP数据报中组装ICMP的询问报文。然后通过数据链路层**发送出去。

    ①首先ping命令会先发送一个 ICMP Echo Request(请求包)给对端 ②对端接收到之后, 会返回一个ICMP Echo Reply(应答包) ③若没有返回,就是超时了,会认为指定的网络地址不存在。


ping查看本地网络故障

  1. ping本地回环地址127.0.0.1如果没有返回说明协议栈问题,重装
  2. 如果上一步返回正常,则ping网关地址(路由器地址)。内网则ping 192.168.1.1。不同则表示网线或路由器故障
  3. 继续ping远程地址如 ping www.baidu.com。不同则表明你家到ISP(互联网供应商,Internet Service Provider之间网络故障

traceroute/ Tracert

检测IP数据包在网络中的传播路径。计算机连接在虚拟互联网中,不需要关心数据报在网络中的传播路径。但当对网络故障排查时,需要使用traceroute进行寻踪。
差错报告报文
原理:

Traceroute命令用TTL字段和ICMP错误消息来确定从一个主机到网络上其他主机的路由。

  1. 首先Traceroute送出一个 TTL=1 的IP数据包到目的地,当路径上的第一个路由器收到这个数据包时,分组改写将TTL-1.
  2. 此时TTL为0,所以路由器会将此数据包丢掉并送回一个 ICMP time exceeded 消息(包括源地址、IP包内容以及路由器IP地址)
  3. Traceroute收到这个消息后便知道这个路由器存在于这个路径上,接着TraceRoute再送出一个 TTL=2 的数据包发现第二个路由器…重复直到某个数据包到达目的地
  4. 当数据包到达目的地后,该主机不会送回ICMP time exceeded消息,一旦到达目的地,由于Traceroute通过UDP数据包向不常见端口号33434发送数据包,因此会收到 ICMP port unreachable 消息,故可判断到达目的地

4 网络层ICMP与ping - 图4