公众号旧文

你知道127.0.0.2是本机,那0.0.0.0又是谁?

作者:胖子阅读 —

不知道127.0.0.2是本机的,可以去看一下这篇:

你知道127.0.0.1是本机,那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

它的意思其实是:

这台服务器正在对整个网络开放。