【问题标题】:What is the difference between 127.0.0.1 and localhost127.0.0.1 和 localhost 有什么区别
【发布时间】:2011-11-15 00:07:58
【问题描述】:

假设.../hosts中定义了以下内容:

127.0.0.1 localhost

如果有的话,使用127.0.0.1 和localhost 作为服务器名称之间的实际区别是什么,尤其是在访问本地运行的正在侦听连接的进程时?

【问题讨论】:

  • 你可以说localhost 是独立于协议的,IPv4 和 IPv6 都可以工作。
  • 另一个不同之处是大多数浏览器将localhost视为安全来源,而127.0.0.1不视为安全来源。

标签: sockets networking dns localhost


【解决方案1】:

没有什么不同。一个比另一个更容易记住。通常,您定义一个名称以与 IP 地址关联。您不必为 127.0.0.1 指定 localhost,您可以指定任何您想要的名称。

【讨论】:

    【解决方案2】:

    嗯,最可能的区别是您仍然需要在某处对localhost 进行实际查找。

    如果您使用127.0.0.1,那么(智能)软件会将其直接转换为 IP 地址并使用它。 gethostbyname 的一些实现将检测点格式(并且可能是等效的 IPv6 格式)并且根本不进行查找。

    否则,必须解析名称。并且无法保证您的hosts 文件实际上会使用 用于该分辨率(首先或完全),因此localhost 可能会成为一个完全不同的IP 地址。

    我的意思是,在某些系统上,可以绕过本地 hosts 文件。 host.conf 文件在 Linux(和许多其他 Unices)上控制这一点。

    【讨论】:

    • 主要区别在于可以通过 Unix Domain Socket 进行连接,如下所述:stackoverflow.com/questions/3715925/localhost-vs-127-0-0-1
    • /etc/nsswitch.conf 选择是否首先使用hosts 或 DNS 进行主机查找(如果 nss 正在运行)。
    • @DonViegues 这是 MySQL 特有的和 IMO 糟糕的设计。它将看到 localhost 并尝试使用 unix-socket 而不是使用 IP 进行连接,但对于 127.0.0.1 它只使用 IP。
    • @ArmanOrdookhani AFAIK 如果您通过 SSH 连接到远程主机,然后从那里连接到 MySQL(如 SSH 隧道到达 MySQL 服务器),您必须使用 127.0.0.1,作为一个整体事情发生在 TC/IP 上。但是,如果在同一台机器上运行的 2 个进程想要连接,则 localhost(unix 套接字)更快/有 lees 开销。谢谢!
    • @DonViegues 是的,你是对的,unix 套接字的开销比 TCP/IP 少。我只是想提一下这种行为是 MySQL 特有的,而不是操作系统或网络级别的行为。
    【解决方案3】:

    Wikipedia sums this up well:

    在现代计算机系统上,作为主机名的 localhost 会转换为 127.0.0.0/8(环回)网络块中的 IPv4 地址,通常是 127.0.0.1,或 IPv6 中的 ::1。

    唯一的区别是它将在 DNS 中查找localhost 解析的系统。这个查找真的非常快。例如,要访问stackoverflow.com,您在地址栏中输入了该地址(或使用了指向此处的书签)。无论哪种方式,您都是通过主机名到达这里的。 localhost 提供了类似的功能。

    【讨论】:

    • 这其实很重要。 localhost 可以解析为 IPv6 地址,而 127.0.0.1 不能。在仅 IPv6 的系统上使用 localhost 可以工作,而 127.0.0.1 则不能,因为 IPv4 不可用。
    • 在我的 Windows10 系统上,DNS 查找非常非常慢,大约需要 1100 毫秒。所以我切换到 127.0.0.1
    【解决方案4】:

    嗯,通过 IP 更快。

    基本上,当您通过服务器名称调用时,它会转换为原始IP。

    但是要记住一个 IP 是很困难的,因此创建了域名。

    我个人使用http://localhost 而不是http://127.0.0.1 或http://username。

    【讨论】:

    • localhost 更快,是不使用 TCP/IP
    • @Don Viegues - 你所说的与这个线程中的其他答案相矛盾。你能详细说明一下吗?
    • 是的,我将复制并粘贴我的其他评论:主要区别在于可以通过 Unix Domain Socket 进行连接,如下所述:stackoverflow.com/questions/3715925/localhost-vs-127-0-0-1
    • @DonViegues 是 MySQL 特有的,它在 special way 中处理 localhost。其他应用程序可能仍会查找 localhost。
    【解决方案5】:

    一些应用程序会特别对待“localhost”。 mysql 客户端会将 localhost 视为连接到本地 unix 域套接字的请求,而不是使用 tcp 连接到 127.0.0.1 上的服务器。这可能会更快,并且可能位于不同的身份验证区域中。

    我不知道其他应用程序将 localhost 与 127.0.0.1 区别对待,但可能有一些。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-13
      • 2020-12-18
      • 1970-01-01
      • 1970-01-01
      • 2011-09-28
      • 1970-01-01
      • 2013-12-18
      相关资源
      最近更新 更多