為什麼 ping“localhost”和 ping“本地 IP 位址”之間存在差異?

為什麼 ping“localhost”和 ping“本地 IP 位址”之間存在差異?

在 Windows 上使用cmdping給出了以下結果:

  • 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 偏好設定的設置,以粗體強調:

  1. 在登錄編輯器中,找到並點選以下註冊表​​子項目:

     HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters
    
  2. 雙擊DisabledComponents 以修改DisabledComponents 條目。

    注意:如果DisabledComponents 條目不可用,則必須建立它。為此,請按照下列步驟操作:

    1. 在“編輯”功能表中,指向“新建”,然後按一下“DWORD(32 位元)值”。

    2. 鍵入“DisabledComponents”,然後按 Enter 鍵。

    3. 雙擊禁用組件。

  3. 在「值資料:」欄位中鍵入下列任一值,將 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 介面。
  4. 重新啟動電腦以使此設定生效。

這個前綴策略表是什麼?

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

環回介面獨立於您的乙太網路介面而存在。

即使沒有併發症IPv6您將有兩個不同的地址。

環回IPv4位址:127.0.0.1
您的乙太網路介面的 IPv4 位址:192.168.0.10

環回介面很可能位於不同的軟體層,距離真實硬體更遠。我懷疑這是否取決於您特定的乙太網路介面驅動程式。

答案3

本機和您的 IP 位址不是同一件事。

本機是一個特殊的軟體專用 IP 位址,連結到您的系統。本機或 127.0.0.1 是環回位址。它始終指向您的系統,並且只能從您的電腦存取。該路由發生在作業系統級別,並且絕對不會離開網卡...因此它沒有機會訪問網路...

Ping 您自己的 IP 位址類似,但它可能涉及整個網路堆疊,因為它需要偵測這是您的 IP 位址,並且正確路由

效果應該是一樣的,但也可能有差異。

例如,拔掉網路電纜。 Ping 您的靜態 IP 位址。您可能無法取得到主機的路由,或出現其他錯誤。現在 ping localhost 或 127.0.0.1,就可以了。

答案4

看起來「Localhost」別名正在解析為 IPv6 環回,而當您明確使用 IPv4 位址時,顯然它不會解析。

相關內容