ICMP是互联网控制报文协议,支持主机或者路由器。这种协议报文主要分两种:差错报告报文和网络探寻报文,在这里,差错报告报文又可以分五种,网络探寻报文可以分两种。
差错报告报文:
1、 目的不可达:报文达到目的主机,但是不能向上交付。
2、 源抑制:类似TCP协议的拥塞控制,通过反馈网络环境的拥塞情况,控制发射源的速率,但是现在已经不使用了。
3、 超时/超期:在IP数据报的头部有个RTT来控制IP数据报最多被转发多少次,每转发一次,TTL-1,当TTL为0,就丢弃改数据报,并发送ICMP差错报告。
4、 参数问题:IP数据报参数出错,无法转发。
5、 重定向:IP数据报的转发路径错误,无法发送给目的主机。
网络探询报文:
1、 回声请求和应答报文:探索网络路径的报文。
2、 时间戳请求和应答报文:用于请求时间戳。
ICMP报文结构
ICMP报文是通过封装成IP数据报进行发送的,它的格式相对简单,笔者直接在图一中进行展示。
图一:ICMP数据报结构
在图一中,类型和代码确定了ICMP代码的类型,下面是相关类型和编码(代码)所对应的报文分类。
图二:相关类型和编码(代码)所对应的报文分类
几种不发送ICMP差错报文的特殊情况:
1、 如果ICMP在发送过程中出错,不发送ICMP差错报文。
2、 如果IP数据报分片了,那么就只有第一个分片出错发送ICMP报文,其他情况不发送。
3、 对于多播IP数据报发送出错,均不发送ICMP差错报文。
4、 对于特殊地址(如127.0.0.0或者0.0.0.0)的IP数据报不发送ICMP差错报文。
ICMP的应用例子:Traceroute(寻找源主机到目的主机的路径)
原理:一次发送3个端口错误(可以到达目的主机,但是不能交付给上层应用)的IP数据报通过设置TTL(1到n),通过返回的ICMP得到路径。
图三:Traceroute原理v