0.0.0.0、127.0.0.1和localhost有什么区别?


271

我使用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),它将起作用。我可以从Safari浏览器中访问它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之间的区别?谁能解释为什么差异会导致此问题


这篇文章可能有帮助howtogeek.com/225487/...
方兴

Answers:


408

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也将接受该接口上的连接。

希望可以回答您问题的IP方面。我不熟悉Jekyll或Vagrant,但是我猜测您的端口转发8080 => 4000以某种方式绑定到了特定的网络适配器,因此当您本地连接到该适配器时,它不在路径上127.0.0.1


嗯,即使没有将hosts文件指向,它也ping localhost似乎可以在Windows 上运行。 127.0.0.1localhost
Pacerier,2015年

同意Pacerier。至少在Windows中,默认情况下,本地主机的行为默认为0.0.0.0(不是127.0.0.1)
drodsou 2016年

5
“除了描述绑定到0.0.0.0以外,这基本上是正确的。它不会像您所描述的那样绑定到每个可用的网络接口,而是绑定到所有地址。在TCP堆栈中,这被称为INADDR_ANY-从删除的答案中得知的@strangemonad。
彼得·Dobrogost

15

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

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

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

jekyll serve --host 0.0.0.0

这会将您的应用程序绑定到主机,并在从其他主机连接到该主机之后用于下一个用途

http://host's IP adress/4000 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.