在生产环境中,我们常用Ping命令测试主机是否在线。那么,ping命令使用的是什么协议呢?其实,ping使用的是ICMP协议。Internet控制报文协议ICMP(Internet Control Message Protocol)是网络层的一个重要协议。ICMP协议用来在网络设备间传递各种差错和控制信息,它对收集各种网络信息、诊断和排除网络故障具有至关重要的作用。所以,在使用基于ICMP的应用时,需要对ICMP的工作原理非常熟悉。

ICMP协议报文格式

icmp协议的概念和功能(ICMP协议两个典型的应用你都会用了吗)(1)

从上图可以看到,ICMP消息封装在IP报文中。 ICMP消息的格式取决于Type和Code字段,其中Type字段为消息类型,包含以下几种情况:

  1. type=0 ,code =0 表示Echo Reply
  2. type=8 ,code =0 表示=Echo Request
  3. type=3 ,code =0 表示网络不可达
  4. type=3 ,code =1 表示主机不可达
  5. type=3 ,code =2 表示协议不可达
  6. type=3 ,code =3 表示端口不可达
  7. type=5 ,code =0 表示重定向
ICMP应用

ICMP的一个典型应用是Ping。 Ping是检测网络连通性的常用工具,同时也能够收集其他相关信息。用户可以在Ping命令中指定丌同参数,如ICMP报文长度、 发送的ICMP报文个数、 等待回复响应的超时时间等,设备根据配置的参数来构造并发送ICMP报文,迚行Ping测试。

Ping常用的配置参数说明如下:

  1. -a source-ip-address指定发送ICMP ECHO-REQUEST报文的源IP地址。 如果不指定源IP地址,将采用出接口的IP地址作为ICMP ECHOREQUEST报文发送的源地址。
  2. -c count指定发送ICMP ECHO-REQUEST报文次数。 缺省情况下发送5个ICMP ECHO-REQUEST报文。
  3. -h ttl-value指定TTL的值。 缺省值是255。
  4. -t timeout指定发送完ICMP ECHO-REQUEST后,等待ICMP ECHOREPLY的超时时间。

ICMP的另一个典型应用是tracert。Tracert基于报文头中的TTL值来逐跳跟踪报文的转发路径。 为了跟踪到达某特定目的地址的路径,源端首先将报文的TTL值设置为1。 该报文到达第一个节点后,TTL超时,于是该节点向源端发送TTL超时消息,消息中携带时间戳。 然后源端将报文的TTL值设置为2,报文到达第二个节点后超时,该节点同样返回TTL超时消息,以此类推,直到报文到达目的地。 这样,源端根据返回的报文中的信息可以跟踪到报文经过的每一个节点,并根据时间戳信息计算往返时间。 Tracert是检测网络丢包及时延的有效手段,同时可以帮助管理员发现网络中的路由环路。

Tracert常用的配置参数说明如下:

  1. -a source-ip-address指定tracert报文的源地址。
  2. -f first-ttl指定初始TTL。 缺省值是1。
  3. -m max-ttl指定最大TTL。 缺省值是30。
  4. -name使能显示每一跳的主机名。
  5. -p port指定目的主机的UDP端口号。

ICMP到底还有那些应用呢?欢迎大家在下方留言讨论。

,