你真的理解子网吗

2026-03-04 pv

最近跟同事聊天,聊到如何判定两台机器在同一个网络中。

答案很清楚,根据两个 IP 地址,叠加子网掩码(Subnet Mask),看计算出的网络地址是否相同。

计算很简单,网络上一堆工具。

但是:会算子网 ≠ 理解子网

子网的出现有其历史背景,虽然看上去只是一个概念,却不啻于一次网络架构的系统升级

接下来我们将追根溯源,尝试讲清楚,一些复杂的网络问题,如何在“子网”的框架下被解决。

1. 历史背景

在互联网发展早期(1980s),采用分类网络(Classful Networking),IP 地址(v4)被分为 A、B、C、D、E 五类。

其中 D 和 E 有特殊用法,平时在用的只有 A、B、C 三类。

其分别意味着,32 位 IP 地址,网络地址位数为 8、16 和 24。

IP 地址 = 网络部分(network) + 主机部分(host),网络部分越多,留给主机的位置越少。

可见,A 类地址的主机容量达到 16,777,214,而 C 类只有区区 254。

这带来两个问题:被分配 A 类地址的机构,大量主机位置被浪费;而分配 C 类的则不够用。

因此,在分类网络这种架构模式下,资源浪费和资源紧张并存。

为了解决这些问题,无类别域间路由(Classless Inter-Domain Routing,CIDR)被提出。

在 CIDR 中,一个 IP 地址同样包含两部分:标识网络的前缀和在这个网络内的主机地址。与分类网络不同,它基于可变长子网掩码(VLSM),可进行任意长度的前缀分配。

例如:192.168.0.0/18,这意味着前 18 位是网络位。相比分类网络,这种划分边界的方式更加灵活。

有了 CIDR,A 类地址可以被进一步切分(Subnetting),C 类地址可以被聚合(Supernetting)

皆大欢喜。

2. 子网

连接起分类网络和 CIDR 背后的神秘力量,就是子网。

子网,指的是从分类网络中划分出来的一部分,是网络内部的网络。

有了子网,IP 地址被分为三部分:网络部分,子网部分和主机部分

子网的计算,使用子网掩码。形式与 IP 地址相同,一共有 32 位,高位部分的每一位都被设为二进制的 1,其余部分被设为 0。IP 地址与子网掩码求交,便可得出结果。

对于分类网络,IP 地址是 192.168.1.1,掩码可以是 255.255.255.0

而 CIDR 中,只需要写 192.168.1.1/24

都可以拿到 192.168.1.0 这个网络地址,但 CIDR 表示法更加简洁。

3. 解决的问题

子网的出现,是用来解决问题的。

解决的第一个问题,便是减少 IP 地址的浪费

如果没有子网,你申请到一个 B 类地址,这意味着你将拥有 65,534 个可用 IP。

如果公司只有 534 人,那么剩余 65,000 个地址便会闲置,无法被外部使用。

有了子网划分,你可以将该 B 类地址切分为多个小块,自己只利用其中一块,其余的分给其他组织或机构。

第二个解决的问题,是网络性能优化

首先,同一个子网内的机器可以不经过路由器直接通信,减少不必要的数据转发,效率更高。

其次,路由器在转发数据包时,遵循“最长前缀匹配(Longest Prefix Match)”原则,减少路由表的同时,加速数据包传递。

最后,对于需要“广播”的数据包,子网将该广播限制在给定范围,不会跨越路由器,更不会扩散到更大的网络地址空间。

关于最后一个问题,在软件工程领域,隔离(Isolation)带来安全

不同子网相互独立,低耦合,即便遇到网络攻击,只影响当前子网,其他子网不会一起沦陷。

4. 总结

子网是一次对 IP 地址 = 网络部分 + 主机部分 的巧妙优化,仅增加一个间接层,原有设计里几个固有问题便被妥善地解决。

子网掩码是其计算方式,CIDR 优化了该过程。

可见,面对一个复杂问题,第一步要做的,是拆解:将大问题拆分为几个小问题,分而治之,逐一破解。

(完)

参考

  1. 分类网络 - 维基百科,自由的百科全书🔗
  2. 无类别域间路由 - 维基百科,自由的百科全书🔗
  3. 子网 - 维基百科,自由的百科全书🔗
  4. 什么是子网?| 子网划分的工作原理 | Cloudflare🔗
  5. 最长前缀匹配 - 维基百科,自由的百科全书🔗
在 GitHub 上编辑本页面

最后更新于: 2026-03-04T02:07:50+08:00