ping 之类的工具或使用 tcp/ip 协议的任何其他工具如何知道 192.168.1.1 或 10.0.0.1 是本地 ip 地址,而 8.8.8.8 或 74.142.23.95 是公共 ip 地址?192.168.xx 和 10.0.xx 是否硬编码以保留供本地使用?
答案1
是的,确实如此预订的经过RFC 1918适合在私人网络中使用。
但实际上这并不重要。您可以从 RIPE 或其他任何地方获取一组“公共”IP 地址,并将其用于您的私人网络,一切仍将正常运作。保留只是出于政治原因,以便管理员可以毫无困难地建立自己的私人网络。
类似的工具ping
不管地址是“私有”还是“本地”或“公共”。它们只是向给定地址发送一个数据包,而你的操作系统会查看路由表来决定下一步将其发送到哪里。
例如,当您在 Windows 上使用 IP 地址10.2.3.4/16
(网络掩码格式:)255.255.0.0
和网关配置以太网卡时10.2.0.1
,它会将以下条目添加到路由表中:
10.2.3.4/32
(网络掩码255.255.255.255
)到接口Loopback
(您自己的地址始终通过环回接口路由,它们永远不会进入网络。)
10.2.0.0/16
(网络掩码255.255.0.0
)到接口Local Area Connection
(根据定义,您所在子网中的地址是本地的。)
0.0.0.0/0
(网络掩码0.0.0.0
)到网关10.2.0.1
(其他一切都不是本地的。)
换句话说,你告诉操作系统范围内的所有地址10.2.0.0/16
都是本地的,操作系统会处理一切。
查看路由表:
- 在 Linux 上,
ip route
(IPv4) 和ip -6 route
(IPv6) - 在 Windows 上,
route print
(≤XP 上为 IPv4,≥Vista 上为 v4/v6) - 在 Windows XP 上
netsh interface ipv6 show route
(IPv6) - 在 Windows、Linux、BSD 和其他类 Unix 上
netstat -r -n
(IPv4) - 在 Linux 和一些类 Unix 上,
netstat -r -n -6
(IPv6)
可以使用相同的工具编辑路由表。例如,要将所有内容标记为本地,您可以在 Linux 上172.16.0.0/16
使用。ip route add 172.16.0.0/16 dev eth0
答案2
公有和私有 IP 地址在 RFC 中有定义。以下是私有 IP 地址:
10.0.0.0/8
172.16.0.0/12
192.168.0.0/16
这些 IP 地址也是环回的:
127.0.0.0/8
其他都是公开的。
大多数工具不需要知道公共或私有 IP 地址。