Ip 0.0.0.0、127.0.0.1和localhost之间有什么区别?

Ip 0.0.0.0、127.0.0.1和localhost之间有什么区别?,ip,jekyll,Ip,Jekyll,我正在mac电脑上使用Jekyll和Vagrant。我发现Jekyll服务器将绑定到0.0.0:4000而不是127.0.0.1:4000。默认情况下,gem服务器也将绑定到此地址。我仍然可以通过http://localhost:port。但是对于Jekyll,似乎默认设置(例如0.0.0.0:4000)需要访问Internet。没有Internet,我无法运行Jekyll服务器。这是一个小错误吗 我也使用流浪汉。自从我在Vagrant虚拟机中安装了Jekyll并在Macintosh下对其进行测

我正在mac电脑上使用
Jekyll
Vagrant
。我发现
Jekyll服务器
将绑定到
0.0.0:4000
而不是
127.0.0.1:4000
。默认情况下,
gem服务器
也将绑定到此地址。我仍然可以通过
http://localhost:port
。但是对于
Jekyll
似乎默认设置(例如0.0.0.0:4000)需要访问Internet。没有Internet,我无法运行
Jekyll服务器。这是一个小错误吗

我也使用流浪汉。自从我在
Vagrant
虚拟机中安装了
Jekyll
并在Macintosh下对其进行测试以来,我已经在Vagrantfile中设置了端口转发(8080=>4000)。如果我使用默认设置(0.0.0.0:4000),它会工作。我可以使用
http://localhost:8080
。但是如果没有互联网,我就不能绑定到0.0.0.0:4000。我使用
jekyll服务器-H 127.0.0.1
将服务绑定到
127.0.0.1:4000
,然后我无法通过
http://localhost:8080


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

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
时,这意味着“监听每个可用的网络接口”。从服务器进程的角度来看,IP地址为
127.0.0.1
的环回适配器与机器上的任何其他网络适配器一样,因此被告知侦听
0.0.0
的服务器也将接受该接口上的连接


希望这能回答你问题的IP端。我不熟悉Jekyll或Vagrant,但我猜您的端口转发
8080=>4000
以某种方式绑定到特定的网络适配器,因此在当前版本的Jekyll中,当您本地连接到
127.0.0.1
时,它不在路径中,默认为。
如果您已连接到网络,但不希望其他任何人访问您的应用程序,这是很好的

但是,您可能希望了解应用程序在移动设备或其他笔记本电脑上的运行情况

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

jekyll serve --host 0.0.0.0
这会将您的应用程序绑定到主机&接下来使用以下命令从其他主机连接到它

http://host's IP adress/4000 

嗯,
ping localhost
似乎在Windows上工作,即使hosts文件没有指向
127.0.0.1
localhost
。同意Pacerier。至少在Windows中,localhost在默认情况下表现为0.0.0.0(而不是127.0.0.1)“除了您对绑定到0.0.0.0的描述之外,这基本上是正确的。这并不像您所描述的那样绑定到每个可用的网络接口,而是绑定到所有地址。在TCP堆栈中,这被称为INADDR_ANY–来自@squndermonad的已删除答案。本文可能会有所帮助