ping命令和traceroute命令是ICMP的排错工具。
ping
ping命令的功能是检测某个主机是否能够响应。ping命令用到的是ICMP分组。源主机发送一个ICMP回送请求报文,如果目标主机能够响应,就会返回一个ICMP回送回答报文。ping在回送请求和回送回答报文中设置了标识符字段。每发送一个新的报文序号就会增加。ping命令还可以用来计算往返的时间。ping发送序号从0开始的报文,对于每一次的探测,都给出一个往返时间RTT。
ping本机ip地址
ping baidu.com
traceroute
traceroute是用来跟踪过一个分组从源点到终点的路径。这里利用了ICMP的超时报文和终点不可达报文来找出一个分组的路由。基于UDP的服务。
首先,源主机会向重点发送一个TTL=1的分组,然后路由器R1收到后,TTL的值减为0,路由器就丢弃这个分组,并且返回一个超时ICMP报文,计下发送分组的时间。
然后源主机的收到这个ICMP报文后,利用ICMP的分组源地址来找出路由器R1的地址,计下分组的到达时间,求出时间差即为往返时间。
然后源主机再发送一个TTL=2的分组,这里R1会转发这个报文,但是R2会丢弃并且返回一个超时ICMP报文。这样就可以找到R2的地址,并且获得往返时间。
每次源主机都发送一个TTL+1的分组,直到最终跟踪到目标。
在分组到达最后的终点时候,不会被丢弃,那么如何返回一个ICMP报文呢?这里就用到了终点不可达报文了,traceroute把目标的UDP端口设置成一个不支持的端口,那么在分组到达的时候就会返回一个ICMP终点不可达报文。