car*_*995 0 networking routing traceroute
今天,当我尝试www.google.com从我的路由器和我的 PC跟踪路由时,我看到了一个奇怪的行为。
路由器的跟踪路由
traceroute to www.google.com (173.194.38.176), 30 hops max, 40 byte packets
1 10.74.128.182 (10.74.128.182) 69.669 ms 10.74.128.178 (10.74.128.178) 36.885 ms 10.74.128.182 (10.74.128.182) 38.042 ms
2 10.74.128.181 (10.74.128.181) 36.468 ms 37.848 ms 35.048 ms
3 10.64.7.74 (10.64.7.74) 75.262 ms 10.64.7.86 (10.64.7.86) 44.339 ms 40.346 ms
4 kph-148-48.tm.net.my (203.106.148.48) 40.021 ms 48.847 ms 39.153 ms
5 10.64.7.90 (10.64.7.90) 41.705 ms 42.232 ms 40.001 ms
6 10.55.34.234 (10.55.34.234) 48.969 ms 48.335 ms 49.216 ms
7 * * 72.14.203.186 (72.14.203.186) 47.921 ms
8 209.85.242.240 (209.85.242.240) 61.557 ms 61.469 ms 47.117 ms
9 209.85.242.232 (209.85.242.232) 59.473 ms 61.54 ms 55.777 ms
10 72.14.233.105 (72.14.233.105) 64.806 ms 61.513 ms 59.459 ms
11 sin04s02-in-f16.1e100.net (173.194.38.176) 61.45 ms 56.76 ms 55.513 ms
Run Code Online (Sandbox Code Playgroud)
PC 的跟踪路由
Tracing route to www.google.com [173.194.38.179] over a maximum of 30 hops:
1 1 ms <1 ms 1 ms router.asus.com [192.168.1.1]
2 118 ms 81 ms 118 ms 10.74.128.178
3 38 ms 37 ms 39 ms 10.74.128.177
4 45 ms 50 ms 72 ms 10.64.7.86
5 43 ms 41 ms 41 ms kph-148-48.tm.net.my [203.106.148.48]
6 * * * Request timed out.
7 * * * Request timed out.
8 * * * Request timed out.
And onwards like that…
Trace complete.
Run Code Online (Sandbox Code Playgroud)
为什么有两个不同的地址(10.74.128.182和10.74.128.178)?这是否意味着数据包在不同时间被路由到 2 个不同的路由器?如果是这种情况,为什么tracert我的 PC(Windows 7)上的命令没有显示出来?
在路由器的traceroute中,第一个和第二个跟踪(10.74.128.178和10.74.128.181)的IP都在同一个网络地址中,因为它是A类IP,并按前8位(即10)进行分类。因此我只是想知道如何发送数据包到同一网络中的两个路由器?
为什么tracert我的 PC 上的命令在路由器命令捕获完整跟踪*后显示空结果?kph-148-48.tm.net.my [203.106.148.48]tracert
在路由器的跟踪路由中,在第 4 行是公共地址 ( 203.106.148.481) 之后,接下来的 2 跳是私有地址 (10.64.7.90和10.55.34.234)。之后它又变回了属于 google ( 72.14.203.186) 的公共地址。我认为私有地址在 Internet 上是不可路由的?当我尝试 ping 2 个私人地址时,我确实收到了回复。所以我只是想知道我的电脑如何能够访问公共地址之后的私有网络上的 IP。
Traceroute 的工作原理是连续发送 IP TTL(生存时间)值越来越高的 IP 数据包:1、2、3...每跳都会递减 TTL。当它达到 0 时,不路由数据包,并向源发送 ICMP 超时消息,这就是运行 traceroute 的系统确定路由的方式。
这似乎是在许多 Linux 安装中找到的 traceroute 版本。此 traceroute 命令为每个 TTL 值发送三个数据包。所以你看到的是两个数据包去了10.74.128.182,一个去了10.74.128.178。
由于这是路由器之后的第一个跃点,因此它可能是路由器的网关地址。可能是 HSRP 或类似的东西在起作用:可能有两个设备使用浮动 IP 地址进行负载平衡。例如:您使用网关地址 10.0.0.1,但在幕后这实际上指向10.0.0.2并10.0.0.3分担负载。这实际上可以使用 HSRP。有类路由不再真正使用。10.0.0.0/8 范围只是您的 ISP 正在使用的 RFC1918 IP 地址。
不同版本的 traceroute 发送不同的数据包。您在路由器上使用的 Linux 版本默认发送 UDP 数据包;您 PC 上的 Windows 版本会发送 ping。看起来 ping 在第 5 跳和第 6 跳之间被阻塞了,但这只是一个猜测。在您的 PC 上尝试不同的 traceroute 实用程序,我敢打赌您会得到不同的结果。
你是对的。RFC1918 地址在公共 Internet 上不可路由。所以我的回答是,即使您在第 4 跳看到一个公共 IP 地址,您还没有离开您的 ISP。如果有,您应该无法使用私有源地址获取 TTL 过期消息。第 3 跳和第 5 跳中类似的 IP 地址也表明了这一点:它们都使用了地址10.64.7.0/24(可能不是巧合)。可以这样说就足够了:IP 地址几乎是任意的,并且在它们自己的网络中,您的 ISP 可以自由拥有具有公共和私有接口接口的路由器。第 3 跳和第 4 跳就是这种情况。数据包也有可能在离开您的 ISP 网络后通过没有公共 IP 地址的路由器;在这种情况下,您不应收到 traceroute 回复。
| 归档时间: |
|
| 查看次数: |
3410 次 |
| 最近记录: |