我通过 SSH 连接到远程主机194.199.68.165
,然后使用 traceroute 检查路径132.227.62.122
,我注意到有一些私有 IP,例如 10.230.10.1
bash-4.0# traceroute -T 132.227.62.122
traceroute to 132.227.62.122 (132.227.62.122), 30 hops max, 60 byte packets
1 194.199.68.161 (194.199.68.161) 1.103 ms 1.107 ms 1.097 ms
2 sw-ptu.univ.run (10.230.10.1) 1.535 ms 1.625 ms 2.172 ms
3 sw-univ-gazelle.univ.run (10.10.20.1) 6.891 ms 6.937 ms 6.927 ms
4 10.10.5.6 (10.10.5.6) 1.544 ms 1.517 ms 1.518 ms
5 194.167.142.22 (194.167.142.22) 2.993 ms 2.985 ms 2.976 ms
为什么主机附近有私人地址?
这些私有地址的用途是什么?我的意思是为什么他们要将公共 IP 放在私有 IP 后面?
谢谢!
答案1
看起来你很难理解弗兰克·托马斯所说的话。
假设您位于主机 A。如果您想到达主机 D,则需要通过路由器 B 和 C。B 和 C 都在公共网络上有接口(分别为 155.10.30.1 和 132.277.62.1)。但是,它们的内部路由网络由私有空间分配。也就是说,要从 B 路由到 C,您必须经过私有网络。如果您要从 A 跟踪路由到 D,您会看到类似以下内容:
traceroute to 132.227.62.122 (132.227.62.122), 30 hops max, 60 byte packets
1 155.10.30.1 1.103 ms 1.107 ms 1.097 ms
2 10.10.10.2 1.535 ms 1.625 ms 2.172 ms
3 132.277.62.122 6.891 ms 6.937 ms 6.927 ms
请注意,此示例的时间无关紧要。
因此,即使网络的两端都是公共的,路由器 B 也有一个通过 C 到达 D 的路由。现在,请理解 - 在现实世界中,B 可能也有一条通往互联网的路由。但是,在这种情况下,D 的网络通过 C 在 B 上有一个更好的路由(或用技术术语来说 - 更低的度量)。因此,您看到的是私有网络。
发生这种情况的原因取决于具体网络。我猜一下。你似乎在大学网络上。我这样说是基于你的内部的IP 地址有一个 DNS 条目。其中有一个univ
。如果确实如此,则您现在正在大学内或大学内部进行路由。因此,从一所大学到另一所大学的最佳路线实际上可能是内部路线,而不是通过互联网。他们可能有自己运行的电路,或者他们可能使用 MPLS 或帧中继来创建专用电路。
希望有所帮助。
答案2
Tracert 的工作原理是向目标主机发送数据包,但将 TTL 设置为下一个预期跳数(例如,其第一个数据包的 TTL=0,然后是 TTL=1,等等)。当 TTL=0 时,第一个路由器将向使用其自身 IP 作为发送方的主机返回 ICMP TTL 超出消息,并丢弃该数据包。在列出结果时,tracert 会关注该 TTL 超出消息。
因此,如果在第 9 跳左右(初始 TTL=10),而通向目的地的下一跳是通过内部网络(10.230.10.0/24),则该网络的路由器会注意到生存时间已过期,并再次通过向主机发送 ICMP TTL 超出消息做出响应,使用发送方 IP 10.230.10.1。请记住,NAT 路由器的两侧之间都有一跳,因此确实会出现 NAT 网络。由于不了解您的具体情况,我无法告诉您更多信息,但 ISP 和大学等大型组织在内部使用许多私人网络。
通过使用此方法,您可以观察通过私有网络移动的路径,而无需实际上能够直接从它们发送或接收。
更多信息这里。