localhost、127.0.0.0、0.0.0.0都代表啥?

244 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第14天,点击查看活动详情

在正常开发中,尤其是配置Nginx或者hosts时候,会出现127.0.0.1、0.0.0.0、localhost。你知道它们之间的区别吗?

1.IP地址分类

1.1IP地址的描述

ip地址由net-idhost-id两部分组成,net-ip代表着所在的网络号,host-ip代表着IP地址所在网络中的主机号。

IP-address ::=  { <Network-number>, <Host-number> }

1.2 IP地址分类

IP地址分为A~E 5类,根据net-id占用的字节长度和网络号的前几位来分类。

  • **A类地址:**网络号占1个字节。网络号的第一位固定为0。
  • **B类地址:**网络号占2个字节。网络号的前两位固定为10。
  • **C类地址:**网络号占3个字节。网络号的前三位数字固定为 110。
  • **D类地址:**前四位为1110,用于组播,即一对多通信。
  • **E类地址:**前四位为1111,留待以后使用。其中ABC三类地址为单播地址(unicast),用于一对一通信,最常用。

1.3 特殊IP地址

特殊的 IP 地址用于做一些特殊的事情。RFC1700 中定义了以下特殊 IP 地址。

  1. **{0,0}:**网络号和主机号都是0,表示“这个网络上的这个主机”,只能作为源地址。
  2. **{0, host-id}:**该网络上的主机。只能用作源地址。
  3. **{-1,-1}:**表示网络号和主机号的所有位都为1(二进制),用于本网络广播,只能作为目的地址,发送到该地址的数据包无法转发到 源地址在网络之外。
  4. **{net-id,-1}:**直接向指定网络广播。只能用作目标地址。
  5. **{net-id, subnet-id,-1}:**直接广播到指定网络的指定子网。仅用作目的地址。
  6. **{net-id,-1,-1}:**直接向指定网络的所有子网广播。只能用作目标地址。
  7. **{127,}:**网络号为127的任何IP地址。它们都是内部主机环回地址(loopback),永远不会出现在主机以外的网络中。

2.解释下localhost、127.0.0.0、0.0.0.0都代表啥

2.1 0.0.0.0

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

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

使用总结

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

2.2 127.0.0.1

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

利用

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

2.3 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 www.baidu.com
# 以下行适用于支持 IPv6 的主机
::1 ip6-localhost ip6-loopback 
fe00::0 ip6-localnet ff00:: 

上面的第一行是几乎每台计算机上的默认配置。但是localhost的含义并不仅限于127.0.0.1。

localhost是用来指代这台电脑或这台主机的域名,可以用来获取运行在这台机器上的网络服务。在大多数系统上,localhost 指向 127.0.0.1(对于 IPv4)和 ::1(对于 IPv6)。

127.0.0.1    localhost
::1          localhost

所以在使用的时候要注意确认是IPV4还是IPV6