我们知道,互联网的网络层提供的是“best effort”尽力而为的服务,IP协议本身并没有任何可以帮助发方测试连接性能或者了解线路故障的机制。但是对于故障和错误的处理,是必不可少的,所以网络层通过采用Internet控制报文协议来完成这件事情,这就是ICMP协议的由来。
路由器严密监视Internet数据包,当路由器在处理某一个数据包的时候发生了意外或者错误,那么就通过ICMP协议来向数据包的源端报告相应的事件;ICMP报文也可以测试Internet性能和连接特性。每一种ICMP消息类型都封装在IP数据包中。
当数据报产生差错时ICMP向数据报的源端回报差错情况,源端必须把差错交给一个应用程序或采取其他措施来纠正。最重要的一些ICMP数据报类型有十几种,他们都是在ICMP报文头中的type类型定义的,如下所示:
第一种type=0是检测目标节点是否可达。主机或路由器向指定目标发送ICMP ECHO请求报文,请求报文包含一个可选的数据区;收到ECHO请求报文(type=8)的机器应立即回应一个应答报文(type=0),应答报文包含了请求报文中数据的拷贝. 我们所熟知的ping命令,就是利用了ICMP的这种特性,只有两个主机真正能够相连,才能ping通,收到对方给自己的回应。
这里说一下