当我对不同的目标地址使用traceroute
(实际上tracert
是 Windows 命令)时,我总是得到相同的跳数。
例如:对于superuser.com
,我得到:
Tracing route to superuser.com [151.101.1.69]
over a maximum of 30 hops:
1 6 ms 1 ms 1 ms 192.168.0.1
2 2 ms 3 ms 3 ms 10.201.0.1
3 4 ms 2 ms 2 ms angeldropsltd.com [103.242.217.37]
4 8 ms 4 ms 4 ms 151.101.1.69
Trace complete.
对于microsoft.com
,我得到:
Tracing route to microsoft.com [23.100.122.175]
over a maximum of 30 hops:
1 3 ms 3 ms 1 ms 192.168.0.1
2 5 ms 2 ms 2 ms 10.201.0.1
3 4 ms 2 ms 2 ms angeldropsltd.com [103.242.217.37]
4 7 ms 4 ms 4 ms 23.100.122.175
Trace complete.
到目前为止,我尝试过的所有其他网站都是类似的。
我想知道发生这种情况的可能原因。我对traceroute
工作原理有一些了解。不同的目的地应该有不同的跳数。我的 ISP (天使滴)可能没有所有目标服务器直接地已连接。我认为我的 ISP 正在这里做一些事情。那么发生这种情况的原因是什么?
答案1
我会尽我所能向您解释这一点。但我不知道您的 ISP 为什么要这样做。
首先,了解 Traceroute 的工作原理很重要。Traceroute 的工作原理是设置其发出的 IP 数据包中的 TTL(生存时间)值。数据包沿途每经过一跳,TTL 就会减 1。当 TTL 达到 0 时,如果数据包未到达其预期目的地,则会发回 ICMP 不可达消息,其中包含最后到达的路由器的 IP 地址。
因此,当您发出该tracert
命令时,Windows 会发出一系列 ICMP 数据包,其 TTL 值不断增加。第一个数据包的 TTL 值为 1,下一个数据包的 TTL 值为 2,依此类推。通过这种方式,可以发现通往目的地的路径上的每个路由器 - 如果它回复 ICMP 不可达。如果它只是丢弃数据包,您会从 tracert 获得 * * * 响应,而没有任何信息。
因此,这里发生的情况似乎是您的 ISP(AngelDrops)不遵守 TTL 设置。相反,他们似乎在数据包到达他们时从数据包中剥离或过滤该信息。因此,一旦数据包到达 AngelDrops,他们就会以更高的“默认”TTL 将其转发到目的地。这会导致数据包一直穿越到目的地,您看到的最终响应来自目的地。
IP 数据包中的 TTL 实际上是为防止网络环路而设计的,网络环路是指数据包在网络内部不断地循环弹跳。
我希望这说得通。那么,您的 ISP 为什么要这样做呢?我不太清楚,但可能是他们认为篡改 TTL 可能会给网络带来安全风险,因此会对其进行过滤。遵守 TTL 数据对于网络正常运行来说并不是必要的。
因为我对天使滴,可能是因为这个 ISP 存在一些非标准问题,可能是无线问题,或者是 VPN 服务,或者诸如此类的问题。有很多可能的技术问题导致它们出现问题。
根据我在您的跟踪路由中看到的信息,您似乎正在使用某种共享互联网服务。您没有获得真正的公共 IP,因此您可能位于某种 NATted 网络之后,您与多个用户共享同一个公共 IP。这可以解释一切。