上午卷里大多数题靠“见过、记住、认出”,少数几道能算,算对了分就是稳的。子网划分属于后者:丢分通常不是因为没背到名词,而是因为算错。这类题只出两种问法,先把两道题放在这里,你可以先自己算一遍再往下看。

题一: 主机地址 192.168.1.100,子网掩码 255.255.255.224。这个地址所在子网的网络地址、广播地址分别是什么?该子网最多能接多少台主机?

题二: 拿到一个 172.16.0.0/16 的地址块,要划分成不少于 20 个子网,每个子网至少容纳 1500 台主机。新的子网掩码应该是多少?

掩码在说什么

IP 地址是三十二位二进制数,分成四段,每段八位(取值 0–255)。子网掩码也是三十二位,作用是 告诉设备:这 32 位里前多少位表示“哪个网络”,后面剩下的位表示“网络中的哪台主机”。

掩码写成一串 1 后面跟一串 0,1 的个数就是前缀长度。255.255.255.224 的前三段是 255,各八个 1;最后一段 224 = 11100000,有三个 1。所以一共 27 个 1,记作 /27。

由此确定两个地址:

  • 网络号:主机位全部置 0 的那个地址,用来指代整个子网,不能分给主机。
  • 广播地址:主机位全部置 1 的那个地址,用来一次发给子网内所有主机,同样不能分配。

中间那些才是可分配地址,这就是所有“减 2”的来源。

题一:给出地址和掩码,往下算

第一步,把掩码换成前缀。 255.255.255.224 → /27。

第二步,找出关键段。 前三段是 255,说明前三段全是网络位,子网只可能在最后一段内切分。最后一段是关键段。

第三步,算块大小。 224 的二进制是 11100000,低五位是 0,也就是这一段里只有五位能变。25=322^5 = 32,每个子网在最后一段占 32 个地址。用减法更快:256−224=32256 - 224 = 32。

第四步,看给定地址落在哪一块。 100 除以 32 得 3 余 4,子网起点依次是 0、32、64、96、128……所以这块从 96 开始。

结论:网络地址 192.168.1.96,广播地址 192.168.1.127(96 + 32 − 1),可用主机范围 192.168.1.97 到 192.168.1.126,共 32−2=3032 - 2 = 30 台。

验算一:按位与。 网络地址的定义是“地址与掩码按位与”,这是最不容易错的核对方式。最后一段:100 = 01100100,224 = 11100000,按位与得 01100000,就是 96。前三段掩码为 255,结果照抄原地址;掩码某段为 0,那一段结果就是 0。所以所谓速算,其实是“255 的段照抄,0 的段写 0,只有关键段要算”。

验算二:块的两端。 网络地址一定能被块大小整除(96 ÷ 32 = 3),广播地址一定等于下一个子网起点减一(128 − 1 = 127)。两个条件都成立,答案就锁定了。

这一步也是这类题最常错的地方:把 224 当成“/224”去算,或者拿 100 减 96 得出“可用地址 4 个”。减 2 减的是两个特殊地址,不是减掩码。

题二:给出需求,反过来定掩码

这类题有两个约束,必须 分别算出各自要多少位,再取更严的那个。

先满足子网数。 要 20 个以上子网,就得从原来主机位里借出 nn 位当子网位,能切出的子网数是 2n2^n。24=162^4 = 16 不够,25=322^5 = 32 够用,所以借 5 位。

这里有个常见错误:看到“20 个子网”就借 20 位,看到“5 个子网”就直接借 5 位。借位数指二进制位数,切出的块数只能是 2、4、8、16、32 这样的 2 的幂。要 5 个子网,22=42^2 = 4 不够,得借 3 位切出 8 个,其中 3 个用不上。

再满足每子网主机数。 每子网要 1500 台主机,主机位剩 mm 位时可用地址是 2m−22^m - 2。210−2=10222^{10} - 2 = 1022 不够,211−2=20462^{11} - 2 = 2046 够用,所以主机位要留 11 位。

最后看装不装得下。 原地址 172.16.0.0/16 的主机位共 16 位。借 5 位加留 11 位正好 16 位,没有浪费也没有超额,方案可行。新前缀是 16+5=2116 + 5 = 21。

掩码写回点分十进制:/21 就是前 21 位为 1。前两段全 1,是 255.255;第三段有 5 个 1,即 11111000 = 248;第四段 0。掩码为 255.255.248.0。

验算一:块大小。 第三段 248 是关键段,256−248=8256 - 248 = 8,第三段以 8 为步长:172.16.0.0、172.16.8.0、172.16.16.0……直到 172.16.248.0,共 256÷8=32256 \div 8 = 32 个子网,多于需要的 20 个。

验算二:每子网地址总数。 第三段低 3 位可变,第四段整段 256 个地址都属于同一子网,所以每块共 8×256=20488 \times 256 = 2048 个地址,去掉网络地址和广播地址剩 2046 个可用地址,超过 1500 的要求。

两个约束都对上,答案确定。

把条件改一下,看法怎么变

假如要求变成“每个子网至少 3000 台主机”,子网数那条不变,主机位却要更大:212−2=40942^{12} - 2 = 4094 才够 3000,必须留 12 位。这样只剩 16−12=416 - 12 = 4 位给子网,最多 24=162^4 = 16 个子网,达不到 20 个。

这正是这类题最该留神的地方:两个约束互相抢位数,总数固定,一个变大另一个就变小。 装不下说明题目条件本身矛盾;真实规划里要换更大的地址块(比如改用 172.16.0.0/15,主机位 17 位,借 5 留 12 刚好),卷面上这通常就是命题人想让你发现的那个矛盾。

收成一套能带走的步骤

正向题(给地址和掩码):

  1. 掩码换成前缀长度,确认哪一段是关键段。
  2. 块大小 = 256 − 关键段的值,也等于该段主机位的 2 的幂。
  3. 给定地址的关键段值除以块大小,向下取整再乘回去,得到子网起点。
  4. 广播地址 = 下一子网起点 − 1;可用主机数 = 块大小 − 2(跨段时块大小要乘以整段的 256)。

反向题(给需求):

  1. 子网数决定借位数,2n2^n 只能取够用的最小 2 的幂。
  2. 每子网主机数决定主机位,先加 2 再取整。
  3. 两数相加不得超过原主机位,超出就是条件矛盾。
  4. 新前缀 = 原前缀 + 借位数,写回点分掩码,再用块大小和 2m−22^m - 2 各验一遍。

计算机网络技术、TCP/IP 协议本来就写在各科大纲的考试范围里 12,所以这类题在上午卷里常出现,不是超纲的偏题。

最后交代一处边界:上面的“减 2”是从“网络地址和广播地址不能分给主机”推出来的,也是软考教材和真题一直沿用的算法。真实网络里点对点链路会用 /31 让两个地址都能用,这类细节不落在卷面上,答题按教材算。另外,题目里的“主机数”一律指可分配给主机的地址数,不是地址总数,看清这两个词,比多刷十道题管用。