
在 Windows 上使用cmd
並ping
給出了以下結果:
- ping “本機”:
- Ping “192.168.0.10”(本地 IP 位址):
這兩種情況不是完全一樣嗎?
我的意思是,我正在 ping 相同的介面、相同的機器和相同的位址。為什麼我會得到如此不同的結果?
編輯:這是我的ipconfig /all
螢幕:
答案1
您沒有 ping 通同一個接口,沒有任何實體接口,您仍然擁有“本地主機”。
您localhost
的 IP 位址用於指稱您的電腦的「內部」IP,而不是您電腦的任何「外部」IP。因此,ping 封包不會通過任何實體網路介面;僅透過虛擬環回接口直接將資料包從一個端口發送到另一個端口,無需任何實體躍點。
您可能仍然想知道為什麼localhost
要解析為::1
,而傳統上我們希望它解析為 IPv4 位址127.0.0.1
。請注意,它.localhost
傳統上是 TLD(請參閱RFC 2606),它指向環回 IP 位址(對於 IPv4,請參閱RFC 3330,特別是 127.0.0.0/8)。
localhost
使用查找nslookup
可以得到:
nslookup localhost
...
Name: localhost
Addresses: ::1
127.0.0.1
因此 Windows 偏好使用 IPv6 環回 IP 位址::1
(請參閱RFC 2373),因為它首先列出。
好吧,那麼,它從哪裡來呢,我們看一下hosts檔案。
type %WINDIR%\System32\Drivers\Etc\Hosts
...
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
...
嗯,我們得看看Windows的DNS設定。
這篇知識庫文章告訴我們一個影響 Windows 偏好設定的設置,以粗體強調:
在登錄編輯器中,找到並點選以下註冊表子項目:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters
雙擊DisabledComponents 以修改DisabledComponents 條目。
注意:如果DisabledComponents 條目不可用,則必須建立它。為此,請按照下列步驟操作:
在“編輯”功能表中,指向“新建”,然後按一下“DWORD(32 位元)值”。
鍵入“DisabledComponents”,然後按 Enter 鍵。
雙擊禁用組件。
在「值資料:」欄位中鍵入下列任一值,將 IPv6 協定配置為所需狀態,然後按一下「確定」:
- 鍵入
0
以啟用所有 IPv6 元件。 (Windows 預設設定)- 鍵入
0xffffffff
以停用除 IPv6 環回介面之外的所有 IPv6 元件。透過修改前綴策略表中的項目,此值還可以將 Windows 設定為優先使用 Internet 協定版本 4 (IPv4) 而不是 IPv6。有關詳細信息,請參閱來源位址和目標位址選擇。0x20
透過修改前綴策略表中的項目,輸入首選 IPv4 而不是 IPv6。- 鍵入
0x10
以在所有非隧道介面(LAN 和點對點協定 [PPP] 介面)上停用 IPv6。- 鍵入
0x01
以在所有隧道介面上停用 IPv6。其中包括站內自動隧道尋址協定 (ISATAP)、6to4 和 Teredo。- 鍵入
0x11
以停用除 IPv6 環回介面之外的所有 IPv6 介面。重新啟動電腦以使此設定生效。
這個前綴策略表是什麼?
netsh interface ipv6 show prefixpolicies
(或prefixpolicy
在早期版本上)
Precedence Label Prefix
---------- ----- --------------------------------
50 0 ::1/128
45 13 fc00::/7
40 1 ::/0
10 4 ::ffff:0:0/96
7 14 2002::/16
5 5 2001::/32
1 11 fec0::/10
1 12 3ffe::/16
1 10 ::/96
該表決定在 DNS 解析期間哪些前綴優先於其他前綴。
啊,所以使用該知識庫,我們可以在此處新增表示 IPv4 優先權高於 IPv6 的條目。
筆記:沒有理由覆蓋此行為,除非您遇到相容性問題。在我們的 Windows Server 上更改此設定會破壞我們的郵件伺服器,因此應該小心處理...
答案2
答案3
本機和您的 IP 位址不是同一件事。
本機是一個特殊的軟體專用 IP 位址,連結到您的系統。本機或 127.0.0.1 是環回位址。它始終指向您的系統,並且只能從您的電腦存取。該路由發生在作業系統級別,並且絕對不會離開網卡...因此它沒有機會訪問網路...
Ping 您自己的 IP 位址類似,但它可能涉及整個網路堆疊,因為它需要偵測這是您的 IP 位址,並且正確路由…
效果應該是一樣的,但也可能有差異。
例如,拔掉網路電纜。 Ping 您的靜態 IP 位址。您可能無法取得到主機的路由,或出現其他錯誤。現在 ping localhost 或 127.0.0.1,就可以了。
答案4
看起來「Localhost」別名正在解析為 IPv6 環回,而當您明確使用 IPv4 位址時,顯然它不會解析。