在生产环境中,我们常用ping命令测试主机是否在线。那么,ping命令使用的是什么协议呢?其实,ping使用的是ICMP协议。Internet控制报文协议ICMP(Internet Control Message Protocol)是网络层的一个重要协议。ICMP协议用来在网络设备间传递各种差错和控制信息,它对收集各种网络信息、诊断和排除网络故障具有至关重要的作用。所以,在使用基于ICMP的应用时,需要对ICMP的工作原理非常熟悉。
ICMP协议报文格式
从上图可以看到,ICMP消息封装在IP报文中。 ICMP消息的格式取决于Type和Code字段,其中Type字段为消息类型,包含以下几种情况:
- type=0 ,code =0 表示Echo Reply
- type=8 ,code =0 表示=Echo Request
- type=3 ,code =0 表示网络不可达
- type=3 ,code =1 表示主机不可达
- type=3 ,code =2 表示协议不可达
- type=3 ,code =3 表示端口不可达
- type=5 ,code =0 表示重定向
ICMP应用
ICMP的一个典型应用是Ping。 Ping是检测网络连通性的常用工具,同时也能够收集其他相关信息。用户可以在Ping命令中指定丌同参数,如ICMP报文长度、 发送的ICMP报文个数、 等待回复响应的超时时间等,设备根据配置的参数来构造并发送ICMP报文,迚行Ping测试。
Ping常用的配置参数说明如下:
- -a source-ip-address指定发送ICMP ECHO-REQUEST报文的源IP地址。 如果不指定源IP地址,将采用出接口的IP地址作为ICMP ECHOREQUEST报文发送的源地址。
- -c count指定发送ICMP ECHO-REQUEST报文次数。 缺省情况下发送5个ICMP ECHO-REQUEST报文。
- -h ttl-value指定TTL的值。 缺省值是255。
- -t timeout指定发送完ICMP ECHO-REQUEST后,等待ICMP ECHOREPLY的超时时间。
ICMP的另一个典型应用是Tracert。Tracert基于报文头中的TTL值来逐跳跟踪报文的转发路径。 为了跟踪到达某特定目的地址的路径,源端首先将报文的TTL值设置为1。 该报文到达***个节点后,TTL超时,于是该节点向源端发送TTL超时消息,消息中携带时间戳。 然后源端将报文的TTL值设置为2,报文到达第二个节点后超时,该节点同样返回TTL超时消息,以此类推,直到报文到达目的地。 这样,源端根据返回的报文中的信息可以跟踪到报文经过的每一个节点,并根据时间戳信息计算往返时间。 Tracert是检测网络丢包及时延的有效手段,同时可以帮助管理员发现网络中的路由环路。
Tracert常用的配置参数说明如下:
- -a source-ip-address指定tracert报文的源地址。
- -f first-ttl指定初始TTL。 缺省值是1。
- -m max-ttl指定***TTL。 缺省值是30。
- -name使能显示每一跳的主机名。
- -p port指定目的主机的UDP端口号。