Subnet Mask 是什么?子网掩码白话教程
Subnet Mask(子网掩码)是 IP 地址的好搭档,负责告诉设备「哪个部分是网络地址、哪个部分是主机地址」,让数据包知道目标是在同一个网段还是需要通过 Gateway 转发。本文用白话加上二进制示例,彻底说清楚子网掩码的原理、CIDR 表示法、以及子网划分的基础概念。
更多网络基础知识,请参考 IP、Subnet Mask、Gateway 完整教程。
什么是 Subnet Mask?
Subnet Mask 的定义
Subnet Mask(子网掩码)是一个 32 位的数值,和 IP 地址搭配使用,用来区分 IP 地址中哪些位属于「网络地址(Network Address)」,哪些位属于「主机地址(Host Address)」。
IP 地址本身只是一串数字,它没有办法自己说明「我属于哪个网络」,这个工作就交给 Subnet Mask 来完成。
用邮政编码来比喻
把 IP 地址想象成完整的地址,Subnet Mask 就是邮政编码的划分标准:
- 北京市朝阳区建国门外大街的邮编是
100020 - 北京市海淀区中关村南大街的邮编是
100081
虽然都在北京市,但因为邮政编码(相当于网络地址)不同,邮递员知道要送到不同的区域。Subnet Mask 做的就是这件事——帮你从一串 IP 数字中「切出」网络地址,判断两个 IP 是不是在同一个「邮政区域」内。
为什么需要 Subnet Mask?
如果没有 Subnet Mask,设备就无法判断:
- 目标 IP 是否在同一个局域网内(应该直接送达)
- 目标 IP 是否在不同的网络(应该送往 Gateway)
Subnet Mask 的 AND 运算提供了这个判断基准,是整个 IP 路由机制的基础。
Subnet Mask 如何运作
位 AND 运算
Subnet Mask 使用位 AND 运算来计算网络地址。AND 运算的规则非常简单:只有两个位都是 1,结果才是 1;其中一个是 0,结果就是 0。
以最常见的 Subnet Mask 255.255.255.0 为例,假设 IP 是 192.168.1.100:
IP 地址(十进制): 192 . 168 . 1 . 100
IP 地址(二进制): 11000000.10101000.00000001.01100100
Subnet Mask(十进制):255 . 255 . 255 . 0
Subnet Mask(二进制):11111111.11111111.11111111.00000000
AND 运算结果:
11000000.10101000.00000001.00000000
= 192.168.1.0 ← 这就是「网络地址」
关键观察:
- Subnet Mask 中,所有「1」的位置对应 IP 地址中的网络地址部分(保留下来)
- Subnet Mask 中,所有「0」的位置对应 IP 地址中的主机地址部分(掩码掉,变成 0)
如何用来判断是否同网段
判断两个 IP 是否在同一个网段,只需要让两个 IP 分别和相同的 Subnet Mask 做 AND 运算,再比较结果:
示例:IP 192.168.1.100 和 192.168.1.200 是否同网段(Subnet Mask 255.255.255.0)?
192.168.1.100 AND 255.255.255.0 = 192.168.1.0
192.168.1.200 AND 255.255.255.0 = 192.168.1.0
两个结果相同(192.168.1.0)→ 同一个网段 ✓
可以直接通信,不需要 Gateway
示例:IP 192.168.1.100 和 192.168.2.50 是否同网段?
192.168.1.100 AND 255.255.255.0 = 192.168.1.0
192.168.2.50 AND 255.255.255.0 = 192.168.2.0
两个结果不同 → 不同网段 ✗
数据包必须通过 Gateway 转发
常见 Subnet Mask 对照表
| Subnet Mask | CIDR | 网络位数 | 主机位数 | 可用主机数 | 常见用途 |
|---|---|---|---|---|---|
255.0.0.0 | /8 | 8 | 24 | 16,777,214 | 大型企业、ISP |
255.255.0.0 | /16 | 16 | 16 | 65,534 | 中型企业、校园网络 |
255.255.255.0 | /24 | 24 | 8 | 254 | 家用/小型办公室(最常见) |
255.255.255.128 | /25 | 25 | 7 | 126 | 较小的办公室网络 |
255.255.255.192 | /26 | 26 | 6 | 62 | 小型部门网络 |
255.255.255.224 | /27 | 27 | 5 | 30 | 极小型网络 |
255.255.255.240 | /28 | 28 | 4 | 14 | 小型服务器集群 |
255.255.255.252 | /30 | 30 | 2 | 2 | 点对点连接(P2P 链路) |
可用主机数的计算公式: 2^(主机位数) - 2
减去 2 是因为每个网段有两个保留地址:
- 网络地址(主机位全为 0):例如
192.168.1.0 - 广播地址(主机位全为 1):例如
192.168.1.255
CIDR 表示法
什么是 CIDR?
CIDR(Classless Inter-Domain Routing,无类别域间路由)是一种更简洁的网络地址表示方式,直接在 IP 地址后加上斜线和网络位数:
192.168.1.100/24
/24 的意思是:这个 IP 地址的前 24 个位是网络地址部分,等同于 Subnet Mask 255.255.255.0。
CIDR 和 Subnet Mask 的对应
为什么 /24 等于 255.255.255.0?计算过程如下:
/24 = 前 24 位都是 1,后 8 位都是 0
11111111.11111111.11111111.00000000
= 255.255.255.0
同理:
/16 = 11111111.11111111.00000000.00000000 = 255.255.0.0
/8 = 11111111.00000000.00000000.00000000 = 255.0.0.0
/25 = 11111111.11111111.11111111.10000000 = 255.255.255.128
为什么 CIDR 取代了传统的 A/B/C 类别?
早期 IPv4 使用固定的「分类(Classful)」系统:
| 类别 | 范围 | 可用主机数 | 问题 |
|---|---|---|---|
| A 类 | /8 | 16,777,214 | 太多,中小型组织根本用不完 |
| B 类 | /16 | 65,534 | 对大多数企业还是太多 |
| C 类 | /24 | 254 | 对许多用途又太少 |
这种固定分类造成大量 IP 地址浪费。CIDR 允许任意长度的网络前缀(如 /22、/26),可以精确分配所需的 IP 地址数量,大幅提升 IPv4 的使用效率。
子网划分(Subnetting)入门
为什么要做子网划分?
子网划分(Subnetting)是把一个大的网络切割成多个小的子网的技术,主要有以下优点:
- 减少广播流量:广播数据包只会在同一个网段内传播,网段越小,广播范围越小,网络性能越好。
- 提升安全性:不同部门(例如财务部和工程部)可以放在不同的子网段,彼此之间需要通过路由器(可设置防火墙规则)才能通信。
- 更有效管理 IP 地址:可以根据各部门实际需要的主机数量,精确分配合适大小的网段。
实际示例:把 /24 切成两个 /25
假设你有一个网段 192.168.1.0/24(可用 254 个主机),要把它切成两个等大小的子网段:
原始网段: 192.168.1.0/24
- 网络地址:
192.168.1.0 - 广播地址:
192.168.1.255 - Subnet Mask:
255.255.255.0
切割方式: 把主机位的第一个位借用来当网络位,/24 变成 /25
子网段 1(第一个位为 0):
网络地址: 192.168.1.0 (二进制最后一段:0_0000000)
广播地址: 192.168.1.127 (二进制最后一段:0_1111111)
可用范围: 192.168.1.1 ~ 192.168.1.126
可用主机数:126 台
Subnet Mask:255.255.255.128(/25)
子网段 2(第一个位为 1):
网络地址: 192.168.1.128 (二进制最后一段:1_0000000)
广播地址: 192.168.1.255 (二进制最后一段:1_1111111)
可用范围: 192.168.1.129 ~ 192.168.1.254
可用主机数:126 台
Subnet Mask:255.255.255.128(/25)
如此一来,一个 /24 网段就被切成了两个各有 126 台主机空间的 /25 网段,两者之间的通信需要通过路由器(Gateway)。
实际操作
查看当前的 IP 和 Subnet Mask
Linux(ip addr 命令):
ip addr show
# 输出示例
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 ...
inet 192.168.1.100/24 brd 192.168.1.255 scope global dynamic eth0
# ^^^^^^^^^^^^^^^^
# IP/CIDR 格式,/24 即 Subnet Mask 255.255.255.0
Linux/macOS(ifconfig 命令):
ifconfig
# macOS 输出示例
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 192.168.1.100 netmask 0xffffff00 broadcast 192.168.1.255
# ^^^^^^^^^^
# netmask 0xffffff00 = 255.255.255.0
# 0xffffff00 换算:
# ff = 11111111 = 255
# ff = 11111111 = 255
# ff = 11111111 = 255
# 00 = 00000000 = 0
Windows(ipconfig 命令):
ipconfig
# 输出示例
无线局域网适配器 WLAN:
IPv4 地址 . . . . . . . . . . : 192.168.1.100
子网掩码 . . . . . . . . . . : 255.255.255.0
默认网关 . . . . . . . . . . . : 192.168.1.1
设置静态 IP 和 Subnet Mask(Ubuntu Netplan)
# 编辑 Netplan 配置文件
sudo nano /etc/netplan/01-netcfg.yaml
network:
version: 2
ethernets:
eth0:
dhcp4: false
addresses:
- 192.168.1.100/24 # IP 地址/CIDR(等同于 255.255.255.0)
routes:
- to: default
via: 192.168.1.1 # Gateway
nameservers:
addresses:
- 8.8.8.8
# 应用设置
sudo netplan apply
# 验证(确认 IP 和 Subnet Mask 已应用)
ip addr show eth0
用命令计算网络信息
# 安装 ipcalc 工具(Ubuntu/Debian)
sudo apt install ipcalc
# 计算 192.168.1.100/24 的网络信息
ipcalc 192.168.1.100/24
# 输出示例
Address: 192.168.1.100 11000000.10101000.00000001. 01100100
Netmask: 255.255.255.0 = 24 11111111.11111111.11111111. 00000000
Wildcard: 0.0.0.255 00000000.00000000.00000000. 11111111
=>
Network: 192.168.1.0/24 11000000.10101000.00000001. 00000000
HostMin: 192.168.1.1 11000000.10101000.00000001. 00000001
HostMax: 192.168.1.254 11000000.10101000.00000001. 11111110
Broadcast: 192.168.1.255 11000000.10101000.00000001. 11111111
Hosts/Net: 254 Class C, Private Internet
Subnet Mask 判断后的跨网段通信由 Gateway 处理,详见 Gateway 是什么?。
常见问题(FAQ)
Q1: 255.255.255.0 和 /24 是同一件事吗?
是的,两种表示法完全等价。255.255.255.0 是传统的十进制表示法,/24 是 CIDR 表示法,/24 代表前 24 个位都是 1(也就是 11111111.11111111.11111111.00000000,换算成十进制就是 255.255.255.0)。现代的 Linux 命令(如 ip addr)普遍使用 CIDR 表示法,而 Windows 的 ipconfig 输出则仍然使用传统的十进制格式。两种方式在设置时都可以使用。
Q2: 为什么 /24 网段只有 254 个可用主机,而不是 256 个?
因为每个网段有两个保留地址不能分配给主机:
- 网络地址(主机位全为 0):以
192.168.1.0/24为例,192.168.1.0是网络地址,代表整个网段本身。 - 广播地址(主机位全为 1):
192.168.1.255是广播地址,发送到这个地址的数据包会被网段内所有设备收到。
因此 256(2^8)减去 2 等于 254 个可用主机地址(192.168.1.1 到 192.168.1.254)。
Q3: 公司网络的 Subnet Mask 和家用有什么不同?
家用网络通常使用 /24(255.255.255.0),最多容纳 254 台设备,对家庭使用绰绰有余。公司或企业环境视规模而定:
- 小型办公室:
/24或/25(126 台) - 中型企业:
/22(1022 台)或/20(4094 台) - 大型企业/校园:
/16(65534 台)或更大
此外,企业环境通常会按部门或功能把网络细分为多个子网段(例如 192.168.10.0/24 给工程部,192.168.20.0/24 给财务部),通过路由器的 ACL(访问控制列表)管理部门间的访问权限,提升安全性。