ICMP又叫做互联网控制报文协议,他可以弥补IP报文不可靠传输的缺陷,当IP数据包传输发生错误比如说端口不可达主机不可达(3),超时,(重定向)ICMP就会把错误信息封装成包返回给主机,他还有一个功能是用做查询报文,比如说ping查询,traceroute查询
    ping命令他就是使用一个类型码为8的ICMP报文作为请求,类型为0的ICMP报文用做回应,用来定位另一个主机是否可达,返回一些传输的字节数,时间,ttl等信息
    traceroute命令可以给目的主机发送一些ttl从1递增的udp数据包,然后由于ttl跳数不够中间的路由器就会返回一些超时的icmp数据报,就可以获取一些中间的路由信息(ip),为什么是udp包(可以设置不可能的端口号从而知道是否到达主机)
    还可以故意设置不分片来确定路径的MTU

    有人要问,我怎么知道 UDP 到没到达目的主机呢?这就涉及一个技巧的问题,TCP 和 UDP 协议有一个端口号定义,而普通的网 络程序只监控少数的几个号码较 小的端口,比如说80,比如说23,等等。而 traceroute 发送的是端口号>30000(真变态)的 UDP 报,所以到 达目的主机的时候,目的 主机只能发送一个端口不可达的 ICMP 数据报给主机。主机接到这个报告以后就知道,主机到了,所以,说 Traceroute 是一个骗子一点也不为过