只是想知道到底是什么不允许 tracert 通过。
$ tracert google.com
Tracing route to google.com
1 - - - Request timed out.
2 214 ms 69 ms 737 ms 114.108.194.45
3 231 ms 217 ms 278 ms 114.108.192.186
4 114.108.192.186 reports: Destination net unreachable
实际上,如果我能找到有关列出的 IP 地址的信息,那将非常令人兴奋。它是来自某个地方的路由器吗?还是它会进入某个地方的谷歌光纤?反射卫星?
答案1
您正在使用的Windowstracert
程序的选项有限:它仅使用属于ICMP协议,如今许多防火墙都会阻止该协议。这就是路由跟踪并不总是返回有意义的答案的原因。
这促使 Linux 开发人员提供更丰富的路由跟踪工具集,支持除传统 icmp 和 udp 之外的不同方法,其中包括raw, dccp, tcpconn
和几种不同版本的 TCP 探测。您可以找到可用方法的详细描述在 Linux 的 traceroute 手册页上。
不过,Windows 中存在一些可以扩大可能性范围的替代资源:您可以在以下链接中找到它们在我们的姊妹网站 serverfault 上回答一个问题。
编辑:
回应 Loogai 的评论:路线追踪仅有的显示网关,IE连接两个不同子网的组件,而不是其他网络组件。这是由于 TTL(=生存时间)的属性而发生的。数据包有一个有效期,就像牛奶一样,它就是 TTL。这样做是为了让数据包无法正确路由,一段时间后可能会被丢弃:毕竟,您不希望它们堆积数天或数周。实现该目的的机制是 TTL,这是一个整数计数,每次数据包通过网关时,计数都会减少一个单位。通常,数据包的生成值为 TTL=64(但这取决于协议和操作系统),这样它们就有很大的机会到达其预期目的地。
但是,路由跟踪数据包(最初)生成时 TTL=1。当它们到达第一个网关(通常是 LAN 上的网关)时,TTL 会减一,然后网关会意识到数据包已过期,并向数据包的发起者写回信息,说明数据包已失效。这样,网关就会向路由跟踪程序暴露其存在。现在,一个新的数据包以 TTL=2 发出,这样它就会穿过第一个网关,但不会穿过第二个网关;这种情况会一直持续到到达最终目的地,或者遇到非常严密的防火墙(以先发生者为准)。
这就是跟踪路由的工作方式,这也是为什么您只能看到网关而看不到其他本地机器的原因。
答案2
您可以使用类似的服务谁是查找有关特定 IP 地址的 DNS 信息。这样您就可以了解谁在处理该 IP 地址以及该 IP 地址位于世界的哪个位置。