ICMP:当传送IP数据包发生错误--比如主机不可达等等,ICMP协议会把错误信息封包,然后传送回给主机。给主机一个处理错误的机会,这也就是为什么说建立在IP层以上的协议是可能做到安全的原因。
ICMP数据包由8bit的错误类型和8bit的代码和16bit的校验和组成。而前 16bit就组成了ICMP所要传递的信息。
Ping:给我们一个看主机到目的主机的路由的机会。这是因为,ICMP的ping请求数据报在每经过一个路由器的时候,路由器都会把自己的ip放到该数据报中。而目的主机则会把这个ip列表复制到回应icmp数据包中发回给主机。但是,无论如何,ip头所能纪录的路由列表是非常的有限。
Traceroute:首先给目的主机发送一个TTL=1(IP协议)的UDP数据包,而经过的第一个路由器收到这个数据包以后,就自动把TTL减1,而TTL变为0以后,路由器就把这个包给抛弃了,并同时产生一个主机不可达的ICMP数据报给主机。主机收到这个数据报以后再发一个TTL=2的UDP数据报给目的主机,然后刺激第二个路由器给主机发ICMP数据报。如此往复直到到达目的主机。这样,traceroute就拿到了所有的路由器ip。从而避开了ip头只能记录有限路由IP的问题。
参考资料
https://www.cnblogs.com/zyd112/p/7196341.html
https://blog.csdn.net/hero456123/article/details/11472363
https://blog.csdn.net/u013230767/article/details/48947357
https://www.zhihu.com/question/48684475/answer/263301532
https://blog.csdn.net/inject2006/article/details/2139149
https://blog.csdn.net/an_zhenwei/article/details/39554677