公众号旧文
为什么 192.168.1.0/17 不是合法网络地址?
先说结论,原因是:网络地址必须是对齐的(aligned)。
而192.168.1.0/17没有对齐到/17的边界,所以它不是合法的网络地址。

下面我们一步一步来看。
一、/17 的真实子网掩码
/17 表示:
- 前 17 位是网络位
- 后 15 位是主机位
子网掩码是:
255.255.128.0
二进制:
11111111.11111111.10000000.00000000
关键就在 第三节。
二、第三节的步长是 128
第三节的网络位只有 1 位:
1xxxxxxx
所以网络只能从:
0
128
开始。
因此 /17 网络只有两个可能:
192.168.0.0/17
192.168.128.0/17
三、两个 /17 网络范围
第一个
192.168.0.0/17
范围:
192.168.0.0 - 192.168.127.255
第二个
192.168.128.0/17
范围:
192.168.128.0 - 192.168.255.255
四、192.168.1.0 在哪里?
192.168.1.0 属于:
192.168.0.0 – 192.168.127.255
所以它属于这个网络:
192.168.0.0/17
换句话说:
192.168.1.0/17
实际上等价于:
192.168.0.0/17
但 192.168.1.0 不是网络起点,所以不能写成网络地址。
五、判断网络地址的通用规则
一个 IP 要成为 网络地址,必须满足:
IP & 子网掩码 = IP本身
我们算一下:
192.168.1.0
AND
255.255.128.0
第三节:
1 & 128 = 0
结果:
192.168.0.0
说明真正的网络地址是:
192.168.0.0
而不是 192.168.1.0。
六、为什么很多人会写错
因为大家习惯了 /24 网络:
192.168.1.0/24
这里确实是合法网络地址。
但当变成:
/23
/22
/21
/17
网络边界就会改变。
例如:
| CIDR | 合法网络起点 |
|---|---|
| /24 | 每 1 个 |
| /23 | 每 2 个 |
| /22 | 每 4 个 |
| /21 | 每 8 个 |
| /17 | 每 128 个 |
所以 /17 必须从 0 或 128开始。
七、一个网络工程师常用的小技巧
快速判断的方法:
看变化的那一段,用 256 减掩码
例如:
255.255.128.0
第三节:
256 - 128 = 128
说明网络步长是:
0
128
总结
192.168.1.0/17 不是合法网络地址,因为:
- /17 的子网掩码是
255.255.128.0 - 网络边界在 第三节 0 和 128
- 192.168.1.0 并没有对齐到这个边界
- 真正的写法应该是:192.168.0.0/17