子网划分指南
子网掩码如何把地址拆成网络部分与主机部分,如何用块大小法手工算出任意子网,以及每一个子网计算器内部所做的运算。
定义子网的那一次运算
IPv4 地址是 32 位,子网掩码也是 32 位,形式是一串 1 后面跟一串 0。掩码为 1 的位置属于网络标识,为 0 的位置属于主机。子网划分里其它所有内容,都只是这个划分的推论。
地址 192.168.1.100 11000000.10101000.00000001.01100100
掩码 255.255.255.224 11111111.11111111.11111111.11100000
AND ---------------- --------------------------------
网络地址 192.168.1.96 11000000.10101000.00000001.01100000
广播地址 = 网络地址 OR (NOT 掩码)
192.168.1.127 11000000.10101000.00000001.01111111两次按位运算就能得到全部信息。网络地址是地址与掩码做 AND,把所有主机位清零;广播地址是把所有主机位置 1 后的网络地址,等价于地址 OR 通配符掩码。路由器每一次转发决策做的正是这件事。
块大小法
每次都转成二进制太慢。块大小法只用十进制算术就能得到同样的答案,用过几次之后你就能在脑子里划分子网。
1. 找出关键字节 —— 掩码既不是 0 也不是 255 的那个字节。 2. 块大小 = 256 −(该位置的掩码字节) 3. 用掩码字节反复减块大小,得到各子网边界; 或者把地址字节除以块大小并向下取整。 4. 网络地址 = 边界值(主机位全 0) 广播地址 = 边界值 + 块大小 − 1(主机位全 1) 可用地址 = 网络地址 + 1 到 广播地址 − 1
示例:172.16.45.200/26
/26 的掩码是 255.255.255.192,所以第四个字节是关键字节。块大小是 256 − 192 = 64,于是子网分别从 .0、.64、.128、.192 开始。
地址字节是 200。200 除以 64 得 3 余 8,所以网络地址落在第三个边界上:3 × 64 = 192。
网络地址 172.16.45.192
首个主机 172.16.45.193
最后主机 172.16.45.254
广播地址 172.16.45.255
可用主机 共 64 个地址中的 62 个
注意前三段字节完全没有被改动。/26 永远不会跨越字节边界,所以只有最后一个字节会变 —— 这正是这套方法在日常使用的那些前缀上如此快的原因。
值得背下来的几个块大小
常用前缀只需要记住六个。每个都等于 256 减去掩码字节,而且随着前缀变长依次减半。
| 前缀 | 掩码字节 | 块大小 | 地址数 | 可用主机 | 最后一个字节内的边界 |
|---|---|---|---|---|---|
| /24 | 0 | 256 | 256 | 254 | 每个最后一个字节一个 /24 |
| /25 | 128 | 128 | 128 | 126 | .0 与 .128 |
| /26 | 192 | 64 | 64 | 62 | .0、.64、.128、.192 |
| /27 | 224 | 32 | 32 | 30 | .0、.32、.64、.96、.128、.160、.192、.224 |
| /28 | 240 | 16 | 16 | 14 | 每 16 个地址一个 |
| /29 | 248 | 8 | 8 | 6 | 每 8 个地址一个 |
| /30 | 252 | 4 | 4 | 2 | 每 4 个地址一个 |
注意掩码字节的规律:128、192、224、240、248、252。每个都是前一个值加上剩余空间的一半,每走一步网络部分就多一位。记住这个数列,掩码就和前缀一样熟悉了。
按主机需求确定子网尺寸
从需求倒推。先为网络地址和广播地址加上两个,再找出能覆盖总数的、最小的 2 的幂。
示例:为 100 台设备选尺寸
- 需要 100 台设备
- 加 2 个给网络地址与广播地址:102 个地址
- 不小于 102 的最小 2 的幂是 128
- 128 个地址意味着 7 个主机位,所以前缀是 32 − 7 = /25
- 结果:126 个可用主机,富余 24 个用于扩展
子网:192.168.1.0/25 → 主机 .1 到 .126
改成 /24 会得到 254 个主机并浪费一半地址块;改成 /26 只有 62 个可用,不够用。/25 是正确答案,而富余的 24 个地址正好是你要的扩展余量。
VLSM 规划器可以一次性对整份需求清单完成这种尺寸计算,并按从大到小分配,保证互不重叠。
常见的子网划分错误
- 正好卡着需求划。按你今天拥有设备数的精确值来划分子网,就容不下一台新打印机,更别说再加一台交换机。永远向上取到下一个 2 的幂,关键网段甚至可以考虑再大一档。
- 主机范围差一个。首个可用地址是网络地址加一,最后可用地址是广播地址减一。对 192.168.1.96/27 来说是 .97 到 .126 —— 而不是 .96 到 .127。
- 让子网偏离块边界。/27 必须从 32 的整数倍开始。192.168.1.96/27 合法;192.168.1.100/27 不合法,它会同时与 .96 和 .128 两个块重叠。
- 数地址时忘了那两个保留地址。十条 /30 链路占用 40 个地址(4 × 10),但只提供 20 个可用地址,不是 40 个。
- 点对点链路上用 /24。两台路由器之间用 /24 会浪费 252 个地址。RFC 3021 的 /31 零浪费,/30 浪费两个。
- 掩码与通配符写混。通配符是掩码的按位取反。在 Cisco ACL 里,只有通配符为 0 的那些位才必须匹配,这与掩码的约定正好相反。
接下来看什么
速查
| 量 | 公式 | 以 /27 为例 |
|---|---|---|
| 主机位 | 32 − 前缀 | 32 − 27 = 5 |
| 地址总数 | 2^主机位 | 2^5 = 32 |
| 可用主机 | 2^主机位 − 2 | 32 − 2 = 30 |
| 块大小 | 2^主机位 | 32 |
| 子网掩码 | 前 n 位为 1,其余为 0 | 255.255.255.224 |
| 通配符掩码 | 掩码的取反 | 0.0.0.31 |
| 网络地址 | 地址 AND 掩码 | 主机位全部清零的地址 |
| 广播地址 | 网络地址 OR 通配符 | 主机位全部置 1 的地址 |
| 子网数量 | 2^借用的位数 | 从 /24 借 3 位 → 8 个 /27 |
最容易让人栽跟头的是地址总数与可用主机数的关系:一个 /27 有 32 个地址、30 个可用主机,两个数字在不同的场合都要用。算尺寸用地址总数,配地址用可用主机数。
常见问题
子网掩码到底在做什么?
它标出地址里哪些位标识网络、哪些位标识主机。掩码是一串 1 后面跟一串 0:1 与网络位对齐,0 与主机位对齐。把地址与掩码做逻辑 AND,就会清掉主机位、留下网络地址。
块大小法是什么?
它是一种只用十进制算术就能找出子网边界的方法。块大小等于 256 减去前缀结束处那个字节的掩码值 —— 对 /27 来说该字节是 224,所以块大小是 32。子网就从块大小的每一个整数倍开始,因此最后一个字节里的边界是 0、32、64、96,依此类推。
哪个字节是关键字节?
前缀长度所落在的那个字节。/26、/27、/28、/29、/30 都结束在第四个字节内,所以第四个字节是关键字节。/18 结束在第三个字节内,所以第三个字节是关键字节,第四个字节完全是主机空间 —— 每个 /18 的地址最后都落在 .0 到 .255 之间。
怎么算出网络地址和广播地址?
把关键字节向下取整到块大小的最近整数倍,就是网络地址。广播地址是网络地址加上块大小再减一。两者之间(不含这两个)的地址都可以分配给主机。以 192.168.1.100/27 为例:块大小是 32,100 向下取整得到 96,所以网络地址是 192.168.1.96,广播地址是 192.168.1.127。
为什么首尾两个地址不能用?
一个地址块的第一个地址是网络地址,用来标识子网本身;最后一个是广播地址,用来到达该子网内的所有主机。这两个都不能分配给某台设备。例外是 /31 —— RFC 3021 对点对点链路取消了这项保留 —— 以及作为单主机路由的 /32。
怎么选择子网尺寸?
把需要配置的设备数加上 2,再向上取到下一个 2 的幂。这样就得到主机位数,前缀就是 32 减去它。以 100 台设备为例:102 个地址,下一个 2 的幂是 128,需要 7 个主机位,所以前缀是 /25。
子网划分会改变可用地址的总数吗?
不会。划分一个地址块并不会从总体上创造或销毁地址 —— 它只是把同一片空间切分成更多、更小的块。真正变化的是可用数量,因为每多一个子网就要多保留两个地址给网络地址和广播地址。把一个 /24 拆成四个 /26,可用地址就从 254 个变成 4 × 62 = 248 个。