如何彻底理解子网掩码与CIDR地址掩码的奥秘?

摘要:在我之前的博文中网络基础科普:IP地址是什么?MAC地址是什么?它们如何协同工作?,我们了解到,IP地址的编址方式经历了有类IP,子网划分,CIDR三个阶段。而对于其中的网掩码(Subnet Mask)与CIDR的地址掩码(Address
在我之前的博文中网络基础科普: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个网络号和广播地址。
阅读全文