我们知道,互联网的网络层提供的是“best effort”尽力而为的服务,IP协议本身并没有任何可以帮助发方测试连接性能或者了解线路故障的机制。但是对于故障和错误的处理,是必不可少的,所以网络层通过采用Internet控制报文协议来完成这件事情,这就是ICMP协议的由来。

        路由器严密监视Internet数据包,当路由器在处理某一个数据包的时候发生了意外或者错误,那么就通过ICMP协议来向数据包的源端报告相应的事件;ICMP报文也可以测试Internet性能和连接特性。每一种ICMP消息类型都封装在IP数据包中。

Internet控制报文协议ICMP

        当数据报产生差错时ICMP向数据报的源端回报差错情况,源端必须把差错交给一个应用程序或采取其他措施来纠正。最重要的一些ICMP数据报类型有十几种,他们都是在ICMP报文头中的type类型定义的,如下所示:

Internet控制报文协议ICMP


        第一种type=0是检测目标节点是否可达。主机或路由器向指定目标发送ICMP ECHO请求报文,请求报文包含一个可选的数据区;收到ECHO请求报文(type=8)的机器应立即回应一个应答报文(type=0),应答报文包含了请求报文中数据的拷贝. 我们所熟知的ping命令,就是利用了ICMP的这种特性,只有两个主机真正能够相连,才能ping通,收到对方给自己的回应。

        第二种是目标端不可达。当路由器无法投递包的时候,向源端发回一个目标端不可达报文,并丢弃该数据报。

        源抑制是指,当路由器发现达到路由器的数据包速率要大于自己的处理速度,且缓冲区将要溢出的时候,就向源端发送一个抑制报文,这样源收到这个报文就会减缓发送的速度,避免路由器缓冲区溢出造成丢包。

        重定向路由是指,当主机刚开始加入网络的时候,它是不知道路由器和网络的有关信息的。主机要从最少的信息开始逐渐了解新的路由信息,所以在刚开始的时候,主机可能发送自己的信息给错误的路由,当路由器检测到主机使用了一条非优化路由时就向主机发送一个重定向的ICMP报文,请求主机改变路由,同时转发初始数据报。在这里,路由器起到了“老师”的作用,不断给非最佳路径的消息找到更好的路径,并且告诉主机下一次这个信息应该向哪里传递。

        请求应答时间戳用于测算链路拥塞程度。在发送的时候,记录时间,在收到应答的时候也记录时间,这两个时间相减就是链路花费时间的两倍,如果这个时间过大,那么就说明链路过于拥塞,驱使路由器重新调整路由。

        回显和回显应答比请求应答时间戳简单一些,它只是用于检测一个主机是否还在连接着。主机收到回显请求之后要立刻给于回显应答。它不包含时间戳。

        

        总而言之,互联网控制报文协议是为了减轻IP协议不可靠性而产生的协议,ICMP的种种类型都是为了让主机更好的处理故障以及处理连接的问题,使得网络层更加的健壮。

相关文章: