前言最近在学习《网络协议分析》时遇到了一道比较典型的 IP 子网规划问题某公司有 400 台主机希望平均分布在两层楼进行管理每层楼约 200 台并且要求这 400 台主机全部属于同一个子网。已知给出的 IP 地址为192.128.0.3应该如何规划 IP 地址子网掩码应该是多少两层楼分别使用什么 IP 地址范围网关又应该如何设置刚看到这道题时我们的第一反应是既然题目说的是 C 类 IP 地址那么是不是直接使用默认子网掩码255.255.255.0就可以了真正计算后才发现事情没有这么简单。一个/24网络最多只有 254 个可用主机地址而现在有 400 台主机还需要给网关预留地址因此/24根本不够。这篇博客记录一下完整的分析和计算过程同时总结几个在做这道题时比较容易弄混的地方。一、先明确问题到底需要多少个 IP 地址公司的基本需求是主机数量400 台楼层数量2 层每层约 200 台所有主机必须属于同一个子网还需要设置默认网关因此不能简单地把两层楼分别划成两个独立子网。我们的目标应该是先创建一个足够大的子网使它能够容纳全部 400 台主机然后再在这个子网内部按照楼层划分地址范围。另外除了 400 台主机之外还至少需要给网关预留一个 IP 地址。所以至少需要400 1 401 个可用 IP 地址二、为什么默认的 /24 不够C 类地址常见的默认子网掩码为255.255.255.0也就是/24IPv4 地址总共有 32 位。如果网络位占 24 位那么剩下32 - 24 8 位作为主机位。具有 n 位主机位时可用主机地址数量通常计算为2^n - 2之所以减 2是因为有两个特殊地址不能分配给普通主机主机位全 0 → 网络地址 主机位全 1 → 广播地址因此/24网络可以提供2^8 - 2 256 - 2 254也就是说/24 → 254 个可用主机地址而我们至少需要 401 个。显然254 401所以/24无法满足要求。三、到底需要多少位主机位接下来不再根据“A 类、B 类、C 类”直接套默认掩码而是从实际主机数量反推。设主机位数量为n需要满足2^n - 2 ≥ 401先尝试n 82^8 - 2 254不够。继续尝试n 92^9 - 2 510此时510 ≥ 401满足要求。所以至少需要9 位主机位IPv4 地址总共 32 位因此网络位数量为32 - 9 23所以最终应该使用/23四、/23 对应什么子网掩码/23的含义是IPv4 地址前 23 位属于网络位剩余 9 位属于主机位。因此将子网掩码写成二进制11111111.11111111.11111110.00000000每 8 位转换成十进制11111111 → 255 11111111 → 255 11111110 → 254 00000000 → 0因此/23对应的子网掩码为255.255.254.0最终得到CIDR/23 子网掩码 255.255.254.0五、为什么 /23 可以同时包含 192.128.0.x 和 192.128.1.x这是我在做这道题时比较容易产生疑问的地方。一开始看到192.128.0.x和192.128.1.x很容易下意识认为第三个数字都不一样了这不是两个不同的网段吗但实际上不能只通过十进制 IP 地址的外观判断两台主机是否属于同一个子网。关键要看子网掩码。我们的掩码是255.255.254.0转换成二进制11111111.11111111.11111110.00000000注意第三个八位组11111110这里并不是 8 位全部属于网络位。第三个八位组的最后 1 位已经属于主机位。所以在这个/23网络中192.128.0.x和192.128.1.x可以属于同一个子网。对于本题192.128.0.0/23覆盖的完整地址空间为192.128.0.0 ~ 192.128.1.255也就是说它实际上把这一整段地址作为一个逻辑网络进行管理。六、计算网络地址、广播地址和可用地址对于192.128.0.0/23主机位全部为 0 时得到网络地址192.128.0.0主机位全部为 1 时得到广播地址192.128.1.255因此网络地址 192.128.0.0 广播地址 192.128.1.255这两个地址不能分配给普通设备。所以真正可以使用的主机地址范围为192.128.0.1 ~ 192.128.1.254总共有2^9 - 2 510个可用地址。七、给两层楼分配 IP 地址接下来需要给两层楼分别分配 200 个地址。这里要注意楼层之间只是为了方便管理而划分不同的地址范围并不是把它们划成两个独立子网。所有主机仍然统一使用255.255.254.0也就是/23。1. 一层楼给一层楼分配前 200 个地址192.128.0.1 ~ 192.128.0.200刚好 200 个。2. 二层楼二层楼继续从192.128.0.201开始。分配到192.128.1.144因此二层楼地址范围为192.128.0.201 ~ 192.128.1.144这里有一个非常容易出错的地方在/23网络中192.128.0.255并不是广播地址。同样192.128.1.0也不是这个/23网络的网络地址。它们都处于192.128.0.0/23的可用主机地址空间之中。所以地址可以连续经过192.128.0.254 192.128.0.255 192.128.1.0 192.128.1.1 ...真正的广播地址是192.128.1.255这也是这道题特别值得注意的一点。八、网关应该设置成什么最开始很容易想到192.128.0.1因为实际网络中经常能看到.1被设置成默认网关。但是这里存在一个问题。我们已经给一层楼分配192.128.0.1 ~ 192.128.0.200如果又把192.128.0.1设置成网关那么这个 IP 地址就同时分配给了网关 一层楼某台主机会发生 IP 地址冲突。所以需要重新选择。这里将最后一个可用主机地址192.128.1.254设置为默认网关。因此默认网关192.128.1.254这样就不会和前面的 400 台主机发生冲突。九、最终 IP 地址规划方案最终得到如下方案项目地址网络地址192.128.0.0CIDR 前缀/23子网掩码255.255.254.0广播地址192.128.1.255可用地址范围192.128.0.1 ~ 192.128.1.254一层楼192.128.0.1 ~ 192.128.0.200二层楼192.128.0.201 ~ 192.128.1.144默认网关192.128.1.254扩展备用192.128.1.145 ~ 192.128.1.253最大可用主机数510十、怎么证明两层楼确实属于同一个子网不能只说“因为我使用的是 /23所以它们属于同一个子网。”最好真正验证一次。判断两个 IP 是否属于同一子网可以分别计算IP 地址 AND 子网掩码也就是进行按位与运算。例如从一层楼选择192.128.0.199从二层楼选择192.128.1.100统一使用子网掩码255.255.254.0分别进行按位与运算。最终192.128.0.199 AND 255.255.254.0 → 192.128.0.0另外一个192.128.1.100 AND 255.255.254.0 → 192.128.0.0两个 IP 最终计算出的网络地址都是192.128.0.0所以可以确定192.128.0.199 和 192.128.1.100 属于同一个 /23 子网。十一、容量是否足够最后还要检查地址容量。/23有 9 位主机位2^9 512减去网络地址和广播地址512 - 2 510所以共有510 个可用地址当前需要400 台主机 1 个网关 401 个地址因此剩余510 - 401 109个可用地址。容量足够。十二、这次实验中踩过的几个坑1. 一看到 C 类地址就直接使用 /24这是我一开始最容易犯的错误。以前学习时会记C 类地址 → 255.255.255.0所以看到题目以后很容易直接套/24。但是实际网络规划更重要的是先看需要多少台主机再决定需要多少主机位。本题需要 400 台主机/24只有 254 个可用地址所以必须扩大地址空间。2. 误以为 192.128.0.x 和 192.128.1.x 一定属于不同子网以前看到第三个八位组不同很容易直接判断它们属于不同网络。但这其实取决于子网掩码。在/24下它们确实通常是不同网络。但在/23下192.128.0.x和192.128.1.x可以属于同一个网络。所以判断是否同网段不能只看 IP 地址本身。3. 把 192.128.0.255 当成广播地址这是一个很典型的惯性思维。在192.128.0.0/24中192.128.0.255的确是广播地址。但是本题使用192.128.0.0/23此时真正的广播地址已经变成192.128.1.255因此192.128.0.255在这个/23网络中可以作为普通主机地址使用。这也让我更加理解了网络地址和广播地址并不是只看 IP 最后一位是不是 0 或 255而必须结合子网掩码判断。4. 网关地址不能和普通主机冲突开始时想把192.128.0.1设置为网关。但一层楼的主机也从这个地址开始分配。因此最终改成192.128.1.254这个过程让我意识到一个网络规划方案不能只保证“地址数量够”还需要检查网络地址 广播地址 普通主机地址 网关地址 预留地址之间有没有冲突。最终结论对于 400 台主机全部处于同一个子网的需求可以采用网络192.128.0.0/23 子网掩码 255.255.254.0 网络地址 192.128.0.0 广播地址 192.128.1.255 可用地址 192.128.0.1 ~ 192.128.1.254 一层楼 192.128.0.1 ~ 192.128.0.200 二层楼 192.128.0.201 ~ 192.128.1.144 默认网关 192.128.1.254 扩展备用 192.128.1.145 ~ 192.128.1.253通过/23可以提供510 个可用主机地址因此能够满足 400 台主机以及网关的地址需求并且两层楼的所有设备仍然属于同一个逻辑子网。