127.0.0.1和0.0.0.0等特殊IP的区别
最近开发中遇到了一些特殊IP的使用,所以写点东西,以供参考。
本机IP
本机IP是指电脑在网段中分配到的IP地址,局域网内的其他电脑能够通过这个IP,访问本机。如果本机处于多个网段之中,那么拥有多个IP地址,也是很常见的。
用拟人的说法来说,比如你同时具备了健身卡号和借书证号,健身房根据健身卡号确定你是谁,图书馆根据借书证号码确定你是谁。
127.0.0.1
回环地址loopback
,是一个IP集合:127.0.0.1
~127.255.255.254
,其中最出名的就是127.0.0.1
。
Linux下使用命令ifconfig
,Windows使用ipconfig
,可以看到如下图:
他是虚拟的设备接口,不需要网卡就能拥有这个网段,那么他自然不能被外部网络访问。这个特性使127.0.0.1
经常:
- 被使用在本机通信中,比如本机服务端/客户端联调,或者反向代理。
- 被指定为域名localhost的ip地址,因为他就是指向本机,而且不会变(不像本机IP)。
::1
和127.0.0.1
相同,只不过他是ipv6形式的,0:0:0:0:0:0:0:1
的缩写。
0.0.0.0
代表全部IP地址,包括本机IP和回环IP。
比如说你有两个IP地址:192.168.1.3
、172.17.1.3
,你想部署一个服务,供两个网段的客户端访问。那么你可以部署到0.0.0.0
。则访问这两个IP的用户都能访问到这个服务。
案例
假设我有一个服务器,有两个IP地址:192.168.1.3
、172.17.1.3
,我的web服务器设置host
如表头,那么当我在特定机器访问特定IP时(如每行头列),返回如下表:
- | host=127.0.0.1 | host=192.168.1.3 | host=172.17.1.3 | host=0.0.0.0 |
---|---|---|---|---|
本机访问127 | Y | N |
N |
Y |
本机访问192 | N |
Y | N |
Y |
本机访问172 | N |
N |
Y | Y |
外机访问127 | - | - | - | - |
外机访问192 | N |
Y | N |
Y |
外机访问172 | N |
N |
Y | Y |
可见,不管你部署到哪个IP,都只能用本IP访问,除了0.0.0.0
,简直万能!
证明一下
启动一个nginx
容器:docker run -it --name nnn --rm -v /_04dockervolume/nginx:/etc/nginx/conf.d/ nginx
设置三个服务,分别绑定172.17.0.2:77
、0.0.0.0:78
、127.0.0.1:79
外部访问
本机访问容器IP:
curl 172.17.0.2:77|grep total
curl 172.17.0.2:78|grep total
curl 172.17.0.2:79|grep total
内部访问
进入容器,访问自己:
# 172
curl 172.17.0.2:77|grep total
curl 172.17.0.2:78|grep total
curl 172.17.0.2:79|grep total
# 127
curl 127.0.0.1:77|grep total
curl 127.0.0.1:78|grep total
curl 127.0.0.1:79|grep total
意不意外,惊不惊喜。
完毕。