开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第14天,点击查看活动详情
在正常开发中,尤其是配置Nginx或者hosts时候,会出现127.0.0.1、0.0.0.0、localhost。你知道它们之间的区别吗?
1.IP地址分类
1.1IP地址的描述
ip地址由net-id跟 host-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 地址。
- **{0,0}:**网络号和主机号都是0,表示“这个网络上的这个主机”,只能作为源地址。
- **{0, host-id}:**该网络上的主机。只能用作源地址。
- **{-1,-1}:**表示网络号和主机号的所有位都为1(二进制),用于本网络广播,只能作为目的地址,发送到该地址的数据包无法转发到 源地址在网络之外。
- **{net-id,-1}:**直接向指定网络广播。只能用作目标地址。
- **{net-id, subnet-id,-1}:**直接广播到指定网络的指定子网。仅用作目的地址。
- **{net-id,-1,-1}:**直接向指定网络的所有子网广播。只能用作目标地址。
- **{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