【计算机网络 | 网络层4:子网掩码与 CIDR:如何判断网络号和主机号?】

上一篇介绍 IPv4 地址时提到:一段地址中有网络部分和主机部分,但仅看 192.168.1.10 这四段数字,并不能知道边界到底在哪里。它可以属于 192.168.1.0/24,也可能处于更大的 192.168.0.0/16 网络中。要做出准确判断,还需要子网掩码或 CIDR 前缀长度。

这一篇继续位于 TCP/IP 五层模型的网络层。我们重点解决几个最实用的问题:掩码中的 1 和 0 各代表什么;怎样从 IP 地址算出网络地址;两台主机怎样判断能否直接通信;CIDR 为什么取代了 A、B、C 类的固定边界。下一篇再在此基础上进行更系统的子网划分练习。

一、为什么光有 IP 地址还不够?

IPv4 地址有 32 位。网络层必须知道其中哪些位表示网络前缀,哪些位表示主机部分,才能回答:

  • 这台主机属于哪个网络?
  • 目标地址是否就在本地网络?
  • 应该直接 ARP 并发给目标,还是交给默认网关?
  • 路由表中的一条网络前缀能覆盖哪些目的地址?

早期分类编址用 A、B、C 类的固定规则划分边界,但这种方式不够灵活。现代网络把"边界在哪里"作为与地址配套的独立信息给出,这就是子网掩码CIDR 前缀长度

text 复制代码
IPv4 地址:192.168.1.10
仅有地址:不知道网络部分到哪里结束

IPv4 地址:192.168.1.10/24
补充前缀:前 24 位是网络前缀,后 8 位是主机部分

因此,讨论"一个 IP 属于哪个网段"时,地址和掩码必须一起出现。

二、子网掩码:用连续的 1 标出网络部分

子网掩码也是一个 32 位数。它的规则很简单:

  • 从左到右连续的 1 对应网络前缀;
  • 后面连续的 0 对应主机部分。

例如:

text 复制代码
子网掩码:255.255.255.0
二进制:  11111111.11111111.11111111.00000000
含义:    前 24 位是网络前缀,后 8 位是主机部分

掩码中的 1 必须从左侧连续出现,不能写成中间夹杂 0 和 1 的任意形状。255.255.255.0 是合法掩码;255.0.255.0 则不是正常的 IPv4 子网掩码。

点分掩码与斜线记法

同一个前缀可以用两种常见写法表达:

点分十进制掩码 CIDR 前缀长度
255.0.0.0 /8
255.255.0.0 /16
255.255.255.0 /24
255.255.255.128 /25
255.255.255.192 /26

/24 的含义不是"地址有 24 位",而是"32 位 IPv4 地址中,左起前 24 位属于网络前缀"。剩余主机位数量就是:

text 复制代码
主机位数 = 32 - 前缀长度

CIDR 记法简洁、明确,所以在路由表、云网络配置和现代网络文档中更常见。

三、按位与:如何由 IP 和掩码得到网络地址?

要提取网络前缀,可以把 IP 地址与子网掩码进行按位与运算。规则是:

text 复制代码
任意位 AND 1,结果保留原来的值
任意位 AND 0,结果变为 0

由于掩码在网络部分是 1、主机部分是 0,所以运算结果会保留网络位,并把主机位全部清零。得到的就是网络地址。

例如,计算 192.168.1.10/24 所在网络:

text 复制代码
IP 地址:  192.168.1.10
子网掩码:255.255.255.0
按位与后:192.168.1.0

因此,192.168.1.0 是该 /24 网络的网络地址。

再看一个边界不落在字节末尾的例子:

text 复制代码
IP 地址:  172.16.35.200
子网掩码:255.255.240.0
前缀长度:/20
按位与后:172.16.32.0

这里第三个字节的掩码是 240,也就是二进制的 11110000。它保留第三个字节的前 4 位网络信息,并清零后 4 位主机信息,所以网络地址是 172.16.32.0,而不是仅凭外观猜成 172.16.35.0

四、网络地址、广播地址与可用主机地址

已知一个 IPv4 地址和前缀后,就能确定这个网络范围的两端:

  • 网络地址:主机位全部为 0,是这个子网本身的标识;
  • 广播地址:主机位全部为 1,是向该子网内所有主机广播的地址;
  • 可用主机地址:在传统 IPv4 广播子网中,位于两者之间的地址。

例如,192.168.1.0/24

项目 地址
网络地址 192.168.1.0
广播地址 192.168.1.255
常见可用主机范围 192.168.1.1192.168.1.254
地址块总数 256 个

这里的地址块总数由主机位数决定:若有 h 位主机位,块内地址总数为 2 的 h 次方。在把地址块直接作为普通 IPv4 广播子网使用时,通常要扣除网络地址和广播地址,常见可用主机数为"总数减 2"。

但要避免一个机械误区:地址能否分配取决于真实前缀,而不取决于它是否以 .0.255 结束。

192.168.4.0/22 为例,范围覆盖 192.168.4.0192.168.7.255。在这个 /22 子网中,192.168.5.0 的主机位既不是全 0 也不是全 1,因此可以作为普通接口地址;而 192.168.4.0192.168.7.255 才分别是网络地址与广播地址。

五、怎样判断两台主机是否属于同一子网?

方法只有一句话:分别把两台主机的 IP 地址与同一个子网掩码按位与,比较得到的网络地址。

  • 结果相同:两台主机处于同一子网,通常可以在二层直接通信;
  • 结果不同:它们处于不同子网,需要把数据报交给路由器或默认网关转发。

例如,掩码均为 /24

text 复制代码
主机 A:192.168.10.20/24 -> 网络地址 192.168.10.0
主机 B:192.168.10.200/24 -> 网络地址 192.168.10.0
结果相同:同一子网

主机 C:192.168.11.20/24 -> 网络地址 192.168.11.0
结果不同:与 A、B 不同子网

主机 A 发给 B 时,会对 B 的 IP 地址进行 ARP,取得 B 的 MAC 地址后直接发帧;主机 A 发给 C 时,会对默认网关进行 ARP,把帧先交给路由器,IP 数据报的目的地址仍保持为 C。

这里还隐含一个实际前提:同一子网的接口需要使用一致的掩码或前缀理解。若设备配置了不一致的掩码,双方对"本地网络"的判断不同,可能导致看似奇怪的单向通信或无法通信。

六、CIDR:为什么不再依赖 A、B、C 类?

CIDR 是 Classless Inter-Domain Routing 的缩写,中文常译为无分类域间路由选择。它不再把地址块固定为 A 类 /8、B 类 /16、C 类 /24,而是允许网络前缀长度灵活取值。

这带来两个直接好处:

  1. **地址分配更贴合需求。**组织可以获得大小合适的地址块,而不必在固定类别间勉强选择。
  2. **路由聚合更容易。**多个连续小地址块可用一个更短的共同前缀表示,从而减少路由表项。

例如,203.0.113.0/24 表示一个前 24 位相同的地址块;203.0.112.0/23 则表示一个更大的连续块,可以覆盖两个相邻的 /24 块。前缀越短,覆盖范围越大;前缀越长,覆盖范围越小、规则越具体。

CIDR 没有在 32 位地址中专门保留"子网号"字段。它只区分网络前缀和主机部分。一个组织得到大块后,仍然可以使用更长的前缀把它分成许多更小网络;从大块借用主机位形成更长前缀的过程,就是下一篇要实践的子网划分。

CIDR 地址块是什么?

一个 CIDR 地址块是一组网络前缀相同且连续的 IPv4 地址。知道块中一个地址和前缀长度后,就可以推导:

  • 网络地址;
  • 广播地址(该块作为普通 IPv4 广播子网使用时);
  • 地址总数;
  • 地址掩码;
  • 常见可用主机范围。

例如,198.51.100.64/26 的主机位有 6 位,所以地址块总数是 64 个。它从 198.51.100.64 开始,到 198.51.100.127 结束;若直接作为子网使用,前者是网络地址,后者是广播地址。

路由聚合与最长前缀匹配

路由器可以用一条较短前缀的路由概括多个连续网络,这叫路由聚合或构造超网。它能减少路由表规模。

同时,路由表里可能既有大范围的聚合前缀,也有某个小网络的更精确前缀。一个目的地址同时匹配多条规则时,路由器选择前缀最长的那一条,因为它描述的范围最具体。这就是前文路由器文章中的最长前缀匹配。

七、容易混淆的点

常见说法 更准确的理解
255.255.255.0 是所有网络的掩码 它只是 /24 的一种常见掩码,现代网络可使用不同前缀长度
同网只要前三段相同 是否同网取决于按掩码计算出的网络地址
.0 一定不能配给主机 只有在当前前缀下主机位全 0 时才是网络地址
.255 一定是广播地址 只有在当前前缀下主机位全 1 时才是广播地址
CIDR 不再有子网 CIDR 不预留固定子网字段,但大地址块仍可继续划分为更长前缀的小网络
前缀越长,地址块越大 恰好相反:前缀越长,主机位越少,地址块越小
网络地址与广播地址永远不能出现 作为最终 IPv4 广播子网的接口地址时不能分配;作为更大地址池内部的边界,它们可成为更小子网的网络或广播地址

八、总结

子网掩码和 CIDR 前缀长度解决的是同一个问题:明确 IPv4 地址中网络前缀与主机部分的边界。通过 IP 地址与掩码按位与,可以得到网络地址;比较网络地址,就能判断两台主机是否属于同一子网。

CIDR 用灵活前缀替代了分类编址的固定边界,让地址分配更精细,也让路由聚合和最长前缀匹配成为可能。掌握网络地址、广播地址、地址范围和可用主机数的计算逻辑后,下一篇就可以进一步练习:如何按真实需求把一个地址块划分为多个子网。

如果这篇文章对你有帮助,欢迎点赞、评论、关注、收藏。你们的支持是我前进的动力!

相关推荐
MSTcheng.1 小时前
【Linux学习】Linux学习第二弹——Linux基本指令1
linux·运维·服务器·学习·指令
国科安芯1 小时前
ASL3159S:把精密信号的“破音“挡在切换之外的 0.9Ω 开关
服务器·网络·数据库·架构·状态模式·抗辐射加固
0566461 小时前
python高级——Python 类型提示与 Pydantic
网络·人工智能·windows·python·学习
M78佐菲1 小时前
Linux学习笔记:目录IO与帧缓冲
linux·笔记·学习·算法
天云数据1 小时前
从“LLM+工具”到Harness 工程:Lilian Weng新文的技术拆解,与一个生产级参考实现
java·前端·网络
喜欢吃燃面1 小时前
网络协议与通信原理深度解析
网络·网络协议
其实防守也摸鱼2 小时前
如何使用自动化教育SRC漏洞挖掘系统--AutoHunter
运维·网络·人工智能·学习·安全·web安全·自动化
天天爱吃肉82182 小时前
XCP协议 Part 1 概述 — 完整学习笔记(商用车主机厂工程师版)
大数据·笔记·python·学习·汽车
我的xiaodoujiao2 小时前
Django 基础知识详细图文教程 1-Django 介绍
后端·python·学习·测试工具·django