在我之前的博文中网络基础科普:IP地址是什么?MAC地址是什么?它们如何协同工作?,我们了解到,IP地址的编址方式经历了有类IP,子网划分,CIDR三个阶段。而对于其中的网掩码(Subnet Mask)与CIDR的地址掩码(Address Mask),有些人可能会感到困惑,两者到底有什么区别?
很多初学者会有这样的困惑:255.255.255.0 和/24 看起来就是一回事,那么"子网掩码"和"CIDR的地址掩码"到底有什么区别?
CIDR(无分类域间路由选择),我们通常说的无类域间路由,是目前互联网IP地址编址的基石。你现在见到的几乎所有IP编址方式,本质上都属于CIDR。
可以明确的一点是,在计算和使用方式上,两者确实完全等效。它们的核心区别,源于分类IP的"网络号"与CIDR的"网络前缀"这两个概念的根本不同。
核心区别:网络号 vs. 网络前缀
区别总结如下(个人总结,可能不完整):
-
有类vs无类:子网掩码是依附于分类IP地址(A、B、C类)的补充,它本身不改变IP的分类结构;而CIDR则彻底抛弃了A、B、C类的概念,是一种全新的、无类的编址方案。
-
地址结构不同 :子网掩码将分类IP的二级结构
网络号.主机号细化为三级结构网络号.子网号.主机号,增加了一定的灵活性,但仍有局限。CIDR则回归二级结构,但将其定义为(网络前缀.主机号),带来了极大的灵活性。 -
掩码长度的设定:在传统子网划分中,一个网络内所有子网的掩码长度通常是相同的(固定长度子网)。CIDR则支持变长子网掩码(VLSM),可以根据需要灵活使用不同长度的前缀。
-
路由寻址逻辑不同 :传统路由依赖
网络号进行查找,而CIDR路由则基于网络前缀,并采用最长前缀匹配原则,这使得路由聚合和精细控制成为可能。 -
特殊地址的使用:在早期有类子网划分中,为了避免歧义,子网号全0和全1的网段通常被保留不可用,这导致了IP地址的浪费。CIDR则允许使用全0和全1的子网(需谨慎,取决于具体实现),甚至可以使用32位掩码(如192.168.1.1/32)来表示一个特定主机地址。
-
表示法:CIDR使用斜杠(/)加前缀长度的表示法(如192.168.1.0/24),比点分十进制掩码更简洁、更直观。
-
路由聚合:CIDR的一个核心优势是支持路由聚合(也称超网),能将多个连续的小网段合并成一个大的路由条目,从而大幅缩小互联网的路由表。这是传统有类网络无法做到的。
简单来说:CIDR彻底抛弃了A、B、C的分类枷锁。你永远不需要再问"这是B类IP吗?",只需要问"这个IP的掩码/前缀是多少?"
透过现象看本质:两个例子让你彻底理解
示例1:路由聚合(超网)
假设你有一家公司,需要两个连续的C类地址(192.168.0.0 和 192.168.1.0)来容纳300台设备。
有类网络+子网掩码的视角:192.168.0.0 和 192.168.1.0 是两个独立的C类网络。在传统的网络观念里,它们天生就是隔离的,必须通过路由器三层设备才能互通。因此,你需要在外部的路由器上配置两条路由,分别指向这两个网络。
CIDR的视角:既然没有了网络号的限制,我们可以将这两个连续的网段看作一个整体。只需使用192.168.0.0/23(掩码为255.255.254.0)这个新网络,就能把两个C类地址无缝合并。对外部路由器来说,它只需要知道一条指向192.168.0.0/23的路由即可。如果你还用传统有类的眼光看255.255.254.0,会觉得它"不伦不类",但在CIDR的世界里,这是完全合法且高效的。
示例2:
使用有类子网掩码时,子网数是根据子网号subnet-id计算出来的。若subnet-id有n位,则共有2n种可能的排列。除去全0和全1这两种情况,就得出表中的子网数。
让我们以C类网络 192.168.1.0 为例,看看使用掩码 255.255.255.192(即借2位作为子网号)时,传统与现在的区别。
对于C类IP 192.168.1.0,它拥有1个网络号192.168.1.0和广播地址192.168.1.255。
使用传统子网掩码时
在早期的RFC标准中,为了避免歧义,规定子网号部分不能全为0或全为1。
无论使用任何掩码划分子网,所有子网,都共用这个C类IP的1个网络号和广播地址。
例如使用掩码255.255.255.192划分网络时,向网络号借了2位,即最后一段掩码是xx000000,这两位可以是00,01,10,11,即:
| 子网 | 借位 | IP范围 | 子网地址 | 子网广播地址 | 状态与原因 |
|---|---|---|---|---|---|
| 1 | 00 000000 |
0-63 | 192.168.1.0 | 192.168.1.63 | 不可用(与主网络号冲突) |
| 2 | 01 000000 |
64-127 | 192.168.1.64 | 192.168.1.127 | 可用 |
| 3 | 10 000000 |
128-191 | 192.168.1.128 | 192.168.1.191 | 可用 |
| 4 | 11 000000 |
192-255 | 192.168.1.192 | 192.168.1.255 | 不可用(子网与主网络广播地址冲突) |
正是因为这两个特殊子网(全0和全1)被禁用,虽然划分出了4个子网,但实际能用的只有中间的2个,浪费了一半的IP地址。在当时,这种"浪费"是为了避免路由歧义和广播泛滥,保证网络的稳定。
使用CIDR无类编址
在CIDR的世界里,192.168.1.0 这个C类网络的概念已经不存在了。我们面对的是一个可以自由切割的地址空间192.168.1.0/24。
当我们用/26掩码去划分它时,它被分成了4个独立的、地位平等的网络:
| 子网 | 网络前缀 | IP范围 | 网络地址 | 广播地址 | 状态 |
|---|---|---|---|---|---|
| 1 | 192.168.1.0/26 | 0-63 | 192.168.1.0 | 192.168.1.63 | 可用 |
| 2 | 192.168.1.64/26 | 64-127 | 192.168.1.64 | 192.168.1.127 | 可用 |
| 3 | 192.168.1.128/26 | 128-191 | 192.168.1.128 | 192.168.1.191 | 可用 |
| 4 | 192.168.1.192/26 | 192-255 | 192.168.1.192 | 192.168.1.255 | 可用 |
因为没有了那个唯一的"主网络号"和"主广播地址",这4个网段各自拥有独立的网络地址和广播地址,彼此之间泾渭分明,互不冲突。因此,在支持CIDR的现代网络中,全0和全1的子网都是可以正常使用的(通常需要通过命令如 ip subnet-zero 来启用,现代设备往往默认支持)。
通过这个对比,相信你能更清晰地看到:子网掩码是在有类框架下"打补丁",而CIDR则是从根本上重构了IP地址的哲学。
参考
计算机网络(第6版)》------谢希仁编著