公众号旧文
你知道127.0.0.2是本机,那0.0.0.0又是谁?
不知道127.0.0.2是本机的,可以去看一下这篇:
下面是正文:
很多人在启动程序时都见过:
Server
listening
on
0.0.0.0:8080
甚至在服务器配置里,也经常看到:
listen
0.0.0.0
乍一看,这个地址好像很奇怪。
127.0.0.1 至少还是个正常的 IP,
可 0.0.0.0 看起来就像一个什么都没有的地址。
那它到底代表什么?
答案是:
0.0.0.0 不是一个具体的地址,而是所有地址。
一、0.0.0.0 = 所有网卡
一台电脑通常不只有一个 IP。
比如你的电脑可能同时有:
- 本地回环地址:127.0.0.1
- 局域网地址:192.168.1.23
- Tailscale 地址:10.0.0.5
- 甚至还有 IPv6 地址
如果一个程序只监听某个地址,比如:
127
.
0
.
0
.
1
:
8080
那就意味着:
只有本机自己可以访问。
局域网里的其他设备,是访问不到这个服务的。
但如果程序监听的是:
0
.
0
.
0
.
0
:
8080
意思就变成:
监听本机的所有网络接口。
也就是说:
- 本机访问可以
- 局域网访问可以
- 公网访问也可以(如果端口开放)
这就是为什么很多服务器程序默认会显示:
Listening
on
0.0.0.0
因为这样最方便。
二、为什么要设计一个 0.0.0.0?
当然是为了避免做复杂配置。
假设没有 0.0.0.0。
如果你的服务器有 3 个 IP:
192
.
168
.
1
.
10
10
.
0
.
0
.
5
172
.
16
.
1
.
3
那程序就必须分别监听:
192
.
168
.
1
.
10
:
8080
10
.
0
.
0
.
5
:
8080
172
.
16
.
1
.
3
:
8080
这会非常麻烦。
于是网络协议干脆设计了一个特殊地址:
0.0.0.0
意思是:我不关心具体 IP,
只要是这台机器的地址,全都监听。
三、0.0.0.0 还有另一个用途
除了监听所有地址, 0.0.0.0 还有一个非常重要的作用:
默认路由。
在很多路由表里,你可能见过:
0
.
0
.
0
.
0
/
0
这代表:
所有未知目的地。
换句话说:
只要数据包找不到更具体的路由, 就走这条默认路径。
所以:
- 0.0.0.0 → 所有 IP
- 0.0.0.0/0 → 所有网络
这就是互联网中最宽泛的一条路由。
四、一个容易混淆的地方
很多人第一次看到:
0
.
0
.
0
.
0
会误以为它是一个无效地址。
实际上确实 不能直接访问 0.0.0.0。
比如你在浏览器输入:
http
:
//0.0.0.0
肯定是打不开的。
因为它并不是一个真实的主机地址。
它更像是一个 占位符,用来表达:
所有可能的地址。
五、总结一下
网络里有很多特殊 IP。
最常见的几个是:
- 127.0.0.1 → 本机回环地址
- 0.0.0.0 → 所有本机地址
- 255.255.255.255 → 受限广播地址
其中:
- 127.0.0.1 是 访问自己
- 0.0.0.0 是 监听所有地址
- 255.255.255.255 是 通知所有设备
所以当你下次看到程序输出:
Server
listening
on
0.0.0.0
它的意思其实是:
这台服务器正在对整个网络开放。