📑 题目:16. 什么是 Traceroute ?
参考解析
Traceroute 是构建在 ICMP 协议之上的应用。
Traceroute ,是用来侦测主机到目的主机之间所经路由情况的重要工具,也是最便利的工具。
前面说到,尽管 ping 工具也可以进行侦测,但是,因为 IP 头的限制,ping 不能完全的记录下所经过的路由器。所以Traceroute 正好就填补了这个缺憾。
Traceroute 的原理是非常非常的有意思。
- 它受到目的主机的 IP 后,首先给目的主机发送一个 TTL=1(还记得 TTL 是什么吗?)的 UDP(后面就知道 UDP是什么了)数据包,而经过的第一个路由器收到这个数据包以后,就自动把 TTL 减1,而 TTL 变为 0 以后,路由器就把这个包给抛弃了,并同时产生 一个主机不可达的 ICMP 数据报给主机。
- 主机收到这个数据报以后再发一个 TTL=2 的 UDP 数据报给目的主机,然后刺激第二个路由器给主机发 ICMP 数据 报。如此往复直到到达目的主机。
这样,traceroute 就拿到了所有的路由器 IP 。从而避开了 IP 头只能记录有限路由 IP 的问题。
有人要问,我怎么知道 UDP 到没到达目的主机呢?
这就涉及一个技巧的问题,TCP 和 UDP 协议有一个端口号定义,而普通的网络程序只监控少数的几个号码较小的端口,比如说 80、23 等等。而 traceroute 发送的是端口号 >30000(真变态) 的 UDP 包,所以到达目的主机的时候,目的主机只能发送一个端口不可达的 ICMP 数据报给主机。主机接到这个报告以后就知道,目标主机到了。
? 很多情况下,在我们 ping 不通目标地址时,会尝试使用 traceroute 命令,看看是否在中间哪个 IP 无法访问。