首页/网络/IP 与子网速查/借位算法:子网数与主机数公式
子网划分方法与例题40 条

借位算法:子网数与主机数公式

从原前缀借 n 位作子网位:子网数 = 2^n,每个子网主机数 = 2^(32-原前缀-n) - 2;反向由子网数也可反推掩码。

IP 与子网速查网络更新于 2026-10-13

借位算法

从原前缀借 n 位当子网位,结果是:子网数变成 2^n,新前缀是原前缀加 n,每个子网的主机位变成 32 减新前缀,可用主机是 2 的主机位次方再减 2。这条链是子网划分的核心换算,题目的需求无论是「要几个子网」还是「每网要多少台」,都能在这条链上双向推导。

两个方向的推导

正向:已知要划 m 个子网,取最小的 n 使 2^n ≥ m,新前缀就是原前缀加 n;例如 /24 要 6 个子网,n=3(得到 8 个),新前缀 /27,每网 30 台。反向:已知每网要 H 台,取最小的 k 使 2^k-2 ≥ H,新前缀等于 32 减 k;例如要 50 台,k=6,新前缀 /26。

特例与边界

借位有两个特例需要单独处理:借到 /31 时按 RFC 3021 两个地址都可用,不再减 2;借满变成 /32 时只有一个地址,用于主机路由。另外借位不能跨出原网段边界,切出的每一块起点都必须落在原网段内并按新块大小对齐,否则会与相邻网段冲突。

基本信息

借 n 位子网数 2^n,新前缀 = 原前缀 + n
主机位32 - 新前缀
可用主机2^主机位 - 2(/31、/32 例外)
例/24 借 3 位 → 8 个 /27,每段 30 台
对齐要求每块起点必须是新块大小的整数倍

典型使用场景

  • 按部门数量规划子网:5 个部门借 3 位得到 8 块
  • 为未来扩展预留:需求 6 块时按 8 块规划
  • 考试题中由需求反推掩码与每段主机数
  • 把已有 /24 重新切分,配合 DHCP 与网关改造
  • 为容器或监控等专用网络单独切块

借位对照(从 /24 出发)

借位对照(从 /24 出发)
借 1 位 → 2 个 /25,每网 126 台
借 2 位 → 4 个 /26,每网 62 台
借 3 位 → 8 个 /27,每网 30 台
借 4 位 → 16 个 /28,每网 14 台
借 5 位 → 32 个 /29,每网 6 台
借 6 位 → 64 个 /30,每网 2 台(点对点)

Python 枚举验证

Python 枚举验证
python -c "import ipaddress as ip; n=ip.ip_network('192.168.1.0/24'); print(len(list(n.subnets(new_prefix=27)))); print([str(x) for x in list(n.subnets(new_prefix=27))[:4]])"
# 8
# ['192.168.1.0/27', '192.168.1.32/27', '192.168.1.64/27', '192.168.1.96/27']

需求到借位数

需要子网数借位 n实得子网数新前缀(原 /24)每网可用
212/25126
3–424/2662
5–838/2730
9–16416/2814
17–32532/296
借位与聚合互逆:借位把一条前缀拆成 2^n 条更长的前缀,聚合把连续前缀合成一条更短的前缀。规划时先想清楚最终要对外通告哪一条汇总路由,再决定借多少位,能省掉不少返工。
借位后仍按 2^主机位 计算可用地址是常见错误:每个子网都要扣掉网络地址与广播地址。例如 /30 只有 2 个可用,而不是 4 个;/31 才是唯一不减 2 的例外。

易错点

  • 借位后按 2^h 而忘减 2:/30 被当成 4 台可用,实际只有 2 台
  • 需求子网数不向上取 2 的幂:6 个子网只借 2 位,后两个部门无网可用
  • 借位数与主机位数记反:借得越多每网主机越少,方向容易混淆
  • 借满主机位仍套减 2 公式:/31、/32 必须按特例处理
  • 切出的块未按新块大小对齐:与相邻网段冲突或出现空洞

数据来源与参考

  • RFC 950(子网划分)
  • RFC 1878(可用前缀实践)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌