公众号旧文

为什么现在 IP 地址的 .0 和 .255 也能用了?

作者:胖子阅读 —

起因是我看到了和我处在同一个/24的公网

111.164.177.0 和 111.164.177.255

都是在正常使用的主机地址。

图片

图片

一时间有一些恍惚:

.0 不是网络地址吗?.255 不是广播地址吗?

怎么这俩 IP 都能当主机地址了?

包括我在内的很多人学网络时都会被老师强调:

一个 C 段(/24)里
.0 是网络地址
.255 是广播地址
.1 是网关
.2–.254 才是主机

但当我们真正去观察公网 IP 时,却经常发现:

.0 在用
.255 在用
网关也不一定是 .1

这到底是怎么回事?难道运营商违规了吗?

答案是:不是网络变了,而是我们当初学得太简化了。

一、那条规则从哪里来的?

我们先回到最经典的模型:

192.168.1.0/24
子网掩码:255.255.255.0

在这个结构下:

地址 作用
192.168.1.0 网络地址
192.168.1.255 广播地址
192.168.1.1 常见网关
192.168.1.2–254 主机地址

这确实是对的。

但它只在一个前提下成立:

子网掩码是 255.255.255.0(也就是 /24)

问题来了:现实中的公网几乎很少用完整的 /24 分给家庭用户。

二、运营商根本不是按 /24 在给你分网段

现代网络通常是这样分配的:

  • /23
  • /22
  • /21
  • /20

只要掩码不是 /24,那么:“.0 是网络地址” 这句话就可能不成立。

三、举个最直观的例子

假设某运营商有这样一个网段:

1.2.2.0/23
掩码:255.255.254.0

这个子网的实际范围是:

1
.
2
.
2
.
0
 –
1.2.3.255

广播地址是:

1
.
2
.
3
.
255

那么请问:

1
.
2
.
2
.
255
 是不是合法的主机地址?
1
.
2
.
3
.
0
 是不是合法的主机地址?

答案是:完全合法。

因为在 /23 结构里,.0 不一定是网络地址,.255不一定是广播地址。

四、运营商甚至可能根本没有“广播”

在家庭宽带中,大量使用:

  • PPPoE
  • IPoE
  • MPLS
  • VLAN
  • 三层交换
  • 点对点链路

尤其是 /31 点对点结构(RFC 3021 标准):

x
.x.x.
0
x
.x.x.
1

两个都可以是主机地址。

根本没有广播地址这个概念。

在现代运营商网络里:

  • 广播域被极度压缩
  • ARP 可能被代理
  • 纯三层转发为主

广播在公网环境中几乎没有意义。

五、为什么我们会被误导?

因为教学模型必须简单。

“一个 C 段 254 台主机”,这是为了方便理解 IP 的结构。

但互联网从 1993 年就开始使用 CIDR(无类域间路由)了。

也就是说早就没有“C 段”的概念了。

C 类网络的概念是历史遗留。

现代互联网只认:

IP
 + 掩码长度

不认“C 段”。

六、再说一个常见误区:.1 一定是网关?

不一定。

在运营商网络中,你可能看到:

  • .254 是网关
  • .253 是网关
  • 甚至根本没有传统意义上的“网关 IP”

因为可能是:

  • 三层接口
  • 虚拟网关
  • BNG
  • BRAS

网关只是逻辑概念,不是固定数字。

七、家庭宽带常见的真实情况

如果你现在用的是家庭宽带,很可能:

  • 你拿到的是 /32
  • 或者 CGNAT 内部地址
  • 或者 /30 点对点

例如 CGNAT 常用的网段:

100
.
64
.
0
.
0
/
10

运营商内部会切分成大量小子网。

在这种结构里:.0 和 .255 出现在用户身上是完全正常的。

八、真正应该记住的规则

不要再记:.0 不能用,.255 不能用

应该记:只有在当前子网掩码下的网络地址和广播地址不能用。

而不是固定数字不能用。

九、一句话总结

“.0 和 .255 不能用”,只是 /24 教学模型下的特例。

现代公网世界里:是否可用,取决于掩码,而不是取决于最后一个数字。