
像 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)
可以使用相同的工具來編輯路由表。例如,要將所有標記172.16.0.0/16
為本機,您可以在 Linux 上使用ip route add 172.16.0.0/16 dev eth0
。
答案2
RFC 中定義了公有和私有 IP 位址。這些是私有 IP 位址:
10.0.0.0/8
172.16.0.0/12
192.168.0.0/16
這些 IP 位址也是環回的:
127.0.0.0/8
其他的是公開的。
大多數工具不需要知道公有或私人 IP 位址。