NetCalcLab

子网划分指南

子网掩码如何把地址拆成网络部分与主机部分,如何用块大小法手工算出任意子网,以及每一个子网计算器内部所做的运算。

定义子网的那一次运算

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 减去掩码字节,而且随着前缀变长依次减半。

常用前缀的块大小
前缀掩码字节块大小地址数可用主机最后一个字节内的边界
/240256256254每个最后一个字节一个 /24
/25128128128126.0 与 .128
/26192646462.0、.64、.128、.192
/27224323230.0、.32、.64、.96、.128、.160、.192、.224
/28240161614每 16 个地址一个
/29248886每 8 个地址一个
/30252442每 4 个地址一个

注意掩码字节的规律:128、192、224、240、248、252。每个都是前一个值加上剩余空间的一半,每走一步网络部分就多一位。记住这个数列,掩码就和前缀一样熟悉了。

按主机需求确定子网尺寸

从需求倒推。先为网络地址和广播地址加上两个,再找出能覆盖总数的、最小的 2 的幂。

示例:为 100 台设备选尺寸

  1. 需要 100 台设备
  2. 加 2 个给网络地址与广播地址:102 个地址
  3. 不小于 102 的最小 2 的幂是 128
  4. 128 个地址意味着 7 个主机位,所以前缀是 32 − 7 = /25
  5. 结果: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 的那些位才必须匹配,这与掩码的约定正好相反。

接下来看什么

用 子网计算器 练手 —— 它在每个结果旁边都给出二进制推算,方便你对照自己手算的结果。CIDR 参考表覆盖 /0 到 /32 的每一个前缀,而 VLSM 设计指南接着本页往下讲:如何从一个地址块里划分出大小不一、互不重叠的子网。

速查

子网划分公式
量公式以 /27 为例
主机位32 − 前缀32 − 27 = 5
地址总数2^主机位2^5 = 32
可用主机2^主机位 − 232 − 2 = 30
块大小2^主机位32
子网掩码前 n 位为 1,其余为 0255.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 个。