【问题标题】:What is the difference between 0.0.0.0, 127.0.0.1 and localhost?0.0.0.0、127.0.0.1 和 localhost 有什么区别?
【发布时间】:2014-01-13 18:02:20
【问题描述】:

我在我的 Mac 上使用 JekyllVagrant。我发现Jekyll server 将绑定到0.0.0.0:4000 而不是127.0.0.1:4000gem server 默认绑定到这个地址。我仍然可以通过http://localhost:port 访问它。但是对于Jekyll似乎默认设置(例如 0.0.0.0:4000)需要访问 Internet。我不能在没有互联网的情况下运行Jekyll server这是一个小错误吗?

我也使用Vagrant。我在 Vagrantfile 中设置了端口转发(8080 => 4000),因为我在Vagrant 虚拟机中安装了Jekyll 并在Macintosh 下对其进行了测试。如果我使用默认设置(0.0.0.0:4000),它可以工作。我可以通过 http://localhost:8080 从我的 Safari 访问它。但如果没有互联网,我无法绑定到 0.0.0.0:4000。我使用jekyll server -H 127.0.0.1 将服务绑定到127.0.0.1:4000,然后我无法通过http://localhost:8080 访问它。

谁能解释 0.0.0.0、127.0.0.1 和 localhost 之间的区别?谁能解释为什么差异会导致这个问题

【问题讨论】:

标签: ip jekyll


【解决方案1】:

127.0.0.1 通常是分配给“环回”或仅限本地接口的 IP 地址。这是一个“假”网络适配器,只能在同一主机内通信。当您希望支持网络的应用程序仅为同一主机上的客户端提供服务时,通常会使用它。在127.0.0.1 上侦听连接的进程将只接收该套接字上的本地连接。

"localhost" 通常是127.0.0.1 IP 地址的主机名。它通常设置在/etc/hosts(或在%WINDIR% 下某处名为“hosts”的Windows 等效项)中。您可以像使用任何其他主机名一样使用它 - 尝试“ping localhost”以查看它如何解析为 127.0.0.1

0.0.0.0 有几个不同的含义,但在这种情况下,当服务器被告知监听0.0.0.0 时,这意味着“监听每个可用的网络接口”。从服务器进程的角度来看,IP 地址为127.0.0.1 的环回适配器看起来就像机器上的任何其他网络适配器一样,因此被告知侦听0.0.0.0 的服务器也将接受该接口上的连接。

这有望回答您问题的 IP 方面。我不熟悉 Jekyll 或 Vagrant,但我猜你的端口转发 8080 => 4000 以某种方式绑定到特定的网络适配器,所以当你本地连接到 127.0.0.1 时它不在路径中

【讨论】:

  • 嗯,ping localhost 似乎可以在 Windows 上运行甚至 没有主机文件将 127.0.0.1 指向 localhost
  • 同意Pacerier。至少在 Windows 中,localhost 默认表现为 0.0.0.0(不是 127.0.0.1)
  • "除了您对绑定到 0.0.0.0 的描述之外,这大部分是正确的。这不会像您描述的那样绑定到 每个可用的网络接口,而是绑定到所有地址。在 TCP 堆栈中,这被称为 INADDR_ANY - 来自 @strangemonad 的已删除答案。
【解决方案2】:

在当前版本的 Jekyll 中,默认为 http://127.0.0.1:4000/
这很好,如果您已连接到网络但不希望其他人访问您的应用程序。

但是,您可能希望查看您的应用程序如何在移动设备或其他笔记本电脑/计算机上运行。

在这种情况下,您可以使用

jekyll serve --host 0.0.0.0

这会将您的应用程序绑定到主机,然后使用以下命令从其他主机连接到它

http://host's IP adress/4000 

【讨论】:

    猜你喜欢
    • 2011-11-15
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    • 2018-08-10
    • 2022-10-28
    相关资源
    最近更新 更多