0.0.0.0,127.0.0.1和localhost有什么区别?

Cie*_*iel 246 ip jekyll

我使用JekyllVagrant我的Mac上.我发现Jekyll server将绑定0.0.0.0:4000而不是127.0.0.1:4000.也gem server将被默认绑定到该地址.我仍然可以通过它访问它http://localhost:port.但是Jekyll,似乎默认设置(例如0.0.0.0:4000)需要访问Internet.Jekyll server没有互联网,我无法运行.这是一个小虫子吗?

我也用Vagrant.我在Vagrantfile中设置了端口转发(8080 => 4000),因为我JekyllVagrant虚拟机中安装并在Macintosh下测试它.如果我使用默认设置(0.0.0.0:4000),它可以工作.我可以从我的野生动物园参观它http://localhost:8080.但如果没有互联网,我无法绑定到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之间的区别?任何人都可以解释为什么差异会导致这个问题

Cap*_*tic 368

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

"localhost"通常是127.0.0.1IP地址的主机名.它通常设置在/etc/hosts(或Windows下等同于名称为"hosts"的地方%WINDIR%).您可以像使用任何其他主机名一样使用它 - 尝试"ping localhost"以查看它如何解析127.0.0.1.

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

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

  • 只是为了强调另一个常见的误解;您无法使用客户端连接到 0.0.0.0,您必须知道服务器正在侦听哪些实际地址。例如,如果服务器在地址为 10.9.8.7 和 192.168.128.64 的系统上运行,则当服务器进程侦听 0.0.0.0 (当然,假设防火墙等不会因其他原因单独阻止您的访问)。 (9认同)
  • “除了描述绑定到0.0.0.0以外,这基本上是正确的。它不会像您描述的那样绑定到*每个可用的网络接口,而是绑定到所有**地址**。在TCP堆栈中,这是已知的作为INADDR_ANY –从已删除的@strangemonad答案中。 (4认同)

spr*_*tex 37

我将通过示例解释 127.0.0.1 和 0.0.0.0 的区别:

想象一下,您在远程计算机上运行任何 Web 服务器(例如 Nginx),以便您希望 Internet 上的任何人都可以访问它。

如果您的 Nginx Web 服务器侦听 127.0.0.1:80,那么除了您登录该服务器之外,没有人可以访问它。

如果 Web 服务器监听 0.0.0.0:80,互联网上的任何人都可以通过在浏览器中输入您的服务器 IP 地址来连接到您的服务器。

请注意,可以侦听任何端口,而不是端口 80。我在本例中使用了 80,因为这是 Web 服务器的默认端口,并且浏览器不会强制用户在输入 IP 地址后键入它。

  • 您没有_解释_ 127.0.0.1 和 0.0.0.0 之间的区别,您只是举例说明了它。 (9认同)

San*_*ain 14

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

但是,您可能希望了解应用程序在移动设备或其他笔记本电脑/计算机上的运行方式.

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

jekyll serve --host 0.0.0.0
Run Code Online (Sandbox Code Playgroud)

这会将您的应用程序绑定到主机并在下一次使用后从其他主机连接到它

http://host's IP adress/4000 
Run Code Online (Sandbox Code Playgroud)