为什么 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 来引用您的计算机。因此,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. 双击 DisabledComponents。

  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 解析期间哪些前缀优先于其他前缀。

啊,因此使用该 KB,我们可以在这里添加条目,表示 IPv4 的优先级高于 IPv6。

笔记:除非您遇到兼容性问题,否则没有必要覆盖此行为。更改 Windows Server 上的此设置会破坏我们的邮件服务器,因此应谨慎处理...

答案2

环回接口独立于您的以太网接口而存在。

即使没有复杂的IPv6您将有两个不同的地址。

回送IPv4地址:127.0.0.1
您的以太网接口的 IPv4 地址:192.168.0.10

环回接口可能位于不同的软件层,与实际硬件距离较远。例如,我怀疑它是否依赖于您的特定以太网接口驱动程序。

答案3

Localhost 和您的 IP 地址不是一回事。

localhost 是一个特殊的软件专用 IP 地址,它链接到您的系统。Localhost 或 127.0.0.1 是一个环回地址。它始终指向您的系统,并且只能从您的计算机访问。此路由发生在操作系统级别,并且绝对不会离开 NIC... 因此它没有机会访问网络....

ping 你自己 IP 地址的方法类似,但它可能涉及整个网络堆栈,因为它需要检测它是你的 IP 地址,并且正确路由...

效果应该是一样的,但是也可以有区别。

例如,拔掉网线。ping 您的静态 IP 地址。您可能无法路由到主机,或者出现其他错误。现在 ping localhost 或 127.0.0.1,就可以正常工作了。

答案4

看起来“Localhost”别名正在解析为 IPv6 环回,而当您明确使用 IPv4 地址时显然不会。

相关内容