127.0.0.1, 0.0.0.0, 和localhost区别


程序员在正常开发中,尤其是配置NGINX时,会出现127.0.0.1、0.0.0.0、localhost。你知道它们之间的区别吗?

0.0.0.0
在 IPv4 中,0.0.0.0 地址用于指示无效、未知或不可用的目的地。

  • 在服务器中,0.0.0.0是指本机所有的IPV4地址。如果一台主机有两个IP地址,192.168.1.1和10.1.2.1,主机上的一个服务监听0.0.0.0的地址,那么可以通过这两个IP地址访问该服务。
  • 在路由中,0.0.0.0代表默认路由,在路由表中没有找到完全匹配的路由时对应的路由。

使用总结
  • 当主机没有被分配IP地址时,用来表示主机本身。(分配 IP 地址时的 DHCP)
  • 用作默认路由,意思是“任何 IPV4 主机”。用于指示目标机器不可用。
  • 用作服务器,表示本机上的任意IPV4地址。

127.0.0.1
127.0.0.1属于{127,}集合之一,所有网络号为127的地址都称为环回地址,所以环回地址!=127.0.0.1,是包含关系,即环回地址包含127.0.0.1。环回地址:所有发送到此类地址的数据包都应该是一个环回。
采用

  • 环回测试,通过ping 127.0.0.1 来测试机器上的网络设备、操作系统或TCP/IP 实现是否正常。
  • DDoS攻击防御:网站受到DDoS攻击后,域名A记录为127.0.0.1,即攻击者可以对自己进行攻击。
  • 这是大多数 Web 容器在测试时绑定的本地机器地址。

localhost
相比于127.0.0.1,localhost的意义更大。localhost 是域名,不是IP 地址。我们经常认为 localhost 和 127.0.0.1 是一样的,因为我们使用的大多数计算机都说 localhost 指向地址 127.0.0.1。在ubuntu系统中,该/etc/hosts文件会有如下内容:

127.0.0.1 localhost 
127.0.1.1 jason-Lenovo-V3000 
# 以下行适用于支持 IPv6 的主机
::1 ip6-localhost ip6-loopback 
fe00::0 ip6-localnet ff00:: 
0 ip6-mca

上面的第一行是几乎每台计算机上的默认配置。但是localhost的含义并不仅限于127.0.0.1。
localhost是用来指代这台电脑或这台主机的域名,可以用来获取运行在这台机器上的网络服务。在大多数系统上,localhost 指向 127.0.0.1(对于 IPv4)和 ::1(对于 IPv6)。