Subnet Mask 是什么?子网掩码白话教程

2026/04/27

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,设备就无法判断:

  1. 目标 IP 是否在同一个局域网内(应该直接送达)
  2. 目标 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.100192.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.100192.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 MaskCIDR网络位数主机位数可用主机数常见用途
255.0.0.0/882416,777,214大型企业、ISP
255.255.0.0/16161665,534中型企业、校园网络
255.255.255.0/24248254家用/小型办公室(最常见)
255.255.255.128/25257126较小的办公室网络
255.255.255.192/2626662小型部门网络
255.255.255.224/2727530极小型网络
255.255.255.240/2828414小型服务器集群
255.255.255.252/303022点对点连接(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 类/816,777,214太多,中小型组织根本用不完
B 类/1665,534对大多数企业还是太多
C 类/24254对许多用途又太少

这种固定分类造成大量 IP 地址浪费。CIDR 允许任意长度的网络前缀(如 /22/26),可以精确分配所需的 IP 地址数量,大幅提升 IPv4 的使用效率。


子网划分(Subnetting)入门

为什么要做子网划分?

子网划分(Subnetting)是把一个大的网络切割成多个小的子网的技术,主要有以下优点:

  1. 减少广播流量:广播数据包只会在同一个网段内传播,网段越小,广播范围越小,网络性能越好。
  2. 提升安全性:不同部门(例如财务部和工程部)可以放在不同的子网段,彼此之间需要通过路由器(可设置防火墙规则)才能通信。
  3. 更有效管理 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.1192.168.1.254)。

Q3: 公司网络的 Subnet Mask 和家用有什么不同?

家用网络通常使用 /24255.255.255.0),最多容纳 254 台设备,对家庭使用绰绰有余。公司或企业环境视规模而定:

  • 小型办公室:/24/25(126 台)
  • 中型企业:/22(1022 台)或 /20(4094 台)
  • 大型企业/校园:/16(65534 台)或更大

此外,企业环境通常会按部门或功能把网络细分为多个子网段(例如 192.168.10.0/24 给工程部,192.168.20.0/24 给财务部),通过路由器的 ACL(访问控制列表)管理部门间的访问权限,提升安全性。