我很困惑为什么 mac os 上的 traceroute 不显示我家路由器的 IP 地址。
我到 www.google.com 的跟踪路由如下所示
1 182.55.226.3 (182.55.226.3) 11.116 ms 13.576 ms 14.185 ms
2 183.90.44.217 (183.90.44.217) 8.347 ms 5.254 ms 7.229 ms
3 183.90.44.201 (183.90.44.201) 7.215 ms 5.495 ms 7.216 ms
4 203.117.35.193 (203.117.35.193) 7.693 ms
203.117.35.105 (203.117.35.105) 9.191 ms
203.117.35.221 (203.117.35.221) 7.427 ms
5 203.117.34.81 (203.117.34.81) 7.399 ms 7.444 ms
203.117.34.85 (203.117.34.85) 9.939 ms
6 203.117.37.22 (203.117.37.22) 14.190 ms
203.117.36.38 (203.117.36.38) 7.944 ms
203.117.37.22 (203.117.37.22) 12.577 ms
7 72.14.198.156 (72.14.198.156) 9.226 ms
72.14.196.189 (72.14.196.189) 12.200 ms 7.388 ms
8 108.170.240.242 (108.170.240.242) 5.872 ms * *
9 216.239.57.50 (216.239.57.50) 14.198 ms
72.14.234.96 (72.14.234.96) 8.626 ms
216.239.57.50 (216.239.57.50) 10.731 ms
10 72.14.239.65 (72.14.239.65) 10.027 ms
64.233.175.215 (64.233.175.215) 12.213 ms
72.14.233.43 (72.14.233.43) 28.103 ms
11 * * 216.239.35.168 (216.239.35.168) 16.768 ms
12 64.233.175.215 (64.233.175.215) 11.001 ms *
既然 traceroute 显示数据包访问 google.com 服务器时经过的路由器,为什么我的第一个路由器不是接收数据包的家庭路由器 ( 192.168.0.1 )。相反,182.55.226.3 似乎来自我所在国家/地区的路由器之一。traceroute 应该显示我家路由器的私有 IP 地址还是公共 IP 地址。第一跳的 IP 地址也与我的路由器的外部 IP 地址不匹配。
跟踪路由到我的路由器的 WAN IP 地址只给出一个跳数。但是,当我尝试跟踪路由到 182.55.226.3 时,结果如下。
traceroute to 182.55.226.3 (182.55.226.3), 64 hops max, 52 byte packets
1 * * *
2 * * *
3 * * *
4 * * *
5 * * *
6 * * *
7 * * *
8 * * *
9 * * *
10 * * *
11 * * *
12 * * *
答案1
为什么我的第一个路由器不是接收数据包的家庭路由器(192.168.0.1)。
traceroute 是如何工作的?它发送具有不同 TTL(生存时间)属性值的 ping 数据包。通常情况下,每个路由器都会减少 TTL,并将此数据包路由到下一跳,如果其值大于 0,或者如果它变为零,它会放弃 ping 并向后发送“TTL 已过期”数据包。因此 traceroute 发送 TTL=1 的数据包并从跟踪中的最近节点接收“TTL 已过期”(并提取其 IP),然后它发送 TTL=2 的数据包并从跟踪中的第二个节点接收“TTL 已过期”......依此类推,直到 pong 返回。
通常任何路由器都会将 TTL 减少 1。但它可以将其减少 2、3 或更多(意味着这种跟踪非常昂贵),或者不改变它(自我隐藏),或者增加它(允许长距离跟踪)。
看来您的路由器不会更改 TTL。因此,当 TRACEROUTE 发送 TTL=1 的数据包时,路由器只会路由它而不更改 TTL。下一跳会将其递减,结果为 0,它会发送“TTL 已过期”... 并且跟踪中的第一个节点是 182.55.226.3(它是您的路由器 WAN 接口的默认网关吗?),而不是您的路由器(192.168.0.1)。
答案2
您的路由器有多个网络接口。192.168.0.1 是内部接口上的地址,而(很可能)182.55.226.3 是您的 ISP 分配给路由器的外部接口上的地址。
一些路由器使用内部接口地址响应跟踪路由,一些路由器使用外部接口地址响应。
如果您的路由器有一个可以在其中查看其外部地址的 Web 界面,请检查它是否与最近的匹配traceroute
。