一文彻底明白127.0.0.1和0.0.0.0地址的区别是什么?
今天这个问题是上个月的时候粉丝问道的,今天就来提一下
我们先来看下共同点:
- 都属于特殊地址。
- 都属于A类地址。
- 都是IPV4地址。
接下来我们分别看下他们的区别:
0.0.0.0
首先,0.0.0.0
是不能被ping
通的。0.0.0.0称为“unspecified”,即未指定(即无效的,无意义的)地址。从功能上看,一般用于某些程序/网络协议中不便使用具体ip的特殊情况(说白了就是一个用于某些比较坑的情况的“占位符”),比如DHCP客户端还未获取到ip的时候规定使用0.0.0.0作“源地址”,或者在服务器中,0.0.0.0
并不是一个真实的的IP地址,它表示本机中所有的IPV4地址。服务器不指定在哪个网卡上监听时,也使用0.0.0.0,这个时候监听本机中所有IP的端口。
用途:
- 用作服务端,表示本机上的任意IPV4地址。
127.0.0.1
首先我们要先知道一个概念,凡是以127
开头的IP地址,都是回环地址(Loop back address),其所在的回环接口一般被理解为虚拟网卡,并不是真正的路由器接口。
所谓的回环地址,通俗的讲,就是我们在主机上发送给127
开头的IP地址的数据包会被发送的主机自己接收,根本传不出去,外部设备也无法通过回环地址访问到本机。
最后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这个地址。
但是localhost的意义并不局限于127.0.0.1。
localhost是一个域名,用于指代this computer或者this host,可以用它来获取运行在本机上的网络服务。
在大多数系统中,localhost被指向了IPV4的127.0.0.1和IPV6的::1。
代码语言:javascript复制127.0.0.1 localhost
::1 localhost
所以,在使用的时候要注意确认IPV4还是IPV6
总结
127.0.0.1 是一个环回地址。并不表示“本机”。0.0.0.0才是真正表示“本网络中的本机”。
在实际应用中,一般我们在服务端绑定端口的时候可以选择绑定到0.0.0.0,这样我的服务访问方就可以通过我的多个ip地址访问我的服务。
比如我有一台服务器,一个外放地址A,一个内网地址B,如果我绑定的端口指定了0.0.0.0,那么通过内网地址或外网地址都可以访问我的应用。但是如果我之绑定了内网地址,那么通过外网地址就不能访问。所以如果绑定0.0.0.0,也有一定安全隐患,对于只需要内网访问的服务,可以只绑定内网地址。