什么是子网掩码?二进制原理、计算方法与对照表

子网掩码是一个 32 位的数字,用来把 IPv4 地址分成网络部分和主机部分。值为 1 的位表示网络,值为 0 的位表示主机。最常见的掩码 255.255.255.0 以 24 个 1 开头,因此也写作 /24,可提供 254 个可用主机地址。

免费试用:IPv4 子网计算器 免费使用,无需注册账号。

那么,子网掩码是什么、在实际中起什么作用?每台设备都会通过掩码把自己的地址与目标地址进行比较,判断目标是在本地网络中,还是需要经由路由器到达。本文介绍其背后的二进制原理、子网掩码的计算方法、一个子网划分示例、反掩码(通配符掩码)以及完整的对照表。阅读时如需验证任何示例,可以把它输入免费的 IPv4 子网计算器。

子网掩码的二进制形式是什么?

IPv4 地址由四个 8 位数字(八位组)组成,子网掩码也是如此。255.255.255.0 写成二进制是:

11111111.11111111.11111111.00000000

1 总是排在前面并且连续:有效的掩码是一串 1 后面跟一串 0,绝不会交错出现。因此,掩码可以用一个数字来描述,即 1 的个数。这种简写就是 CIDR 表示法中的前缀长度:192.168.1.10/24 表示地址 192.168.1.10,掩码为 255.255.255.0。想深入了解 CIDR 地址块,可以阅读如何计算 CIDR 地址块。

在有效掩码的一个八位组中,只可能出现以下八个值:

八位组中 1 的个数 1 2 3 4 5 6 7 8
八位组的值 128 192 224 240 248 252 254 255

全 0 的八位组(0)是第九种情况;出现其他任何数字(例如 255.255.255.100)都会使掩码无效。

掩码如何找出网络:按位与(AND)计算示例

设备把 IP 地址和掩码做按位与运算来得到网络地址:只有两个输入位都为 1 时,结果位才为 1。以 192.168.10.37/26 为例。/26 掩码有 26 个 1,即 255.255.255.192:

IP 地址      192.168.10.37    11000000.10101000.00001010.00100101
子网掩码     255.255.255.192  11111111.11111111.11111111.11000000
AND 结果     192.168.10.0     11000000.10101000.00001010.00000000

前三个八位组保持不变。在最后一个八位组中,37 是 00100101,掩码是 11000000,所以只保留最高的两位,而这两位都是 0。网络地址是 192.168.10.0。

广播地址就是把网络地址的所有主机位都置为 1:最后一个八位组为 00111111,即 63。完整结果如下:

项目 值
网络地址 192.168.10.0
第一个可用主机 192.168.10.1
最后一个可用主机 192.168.10.62
广播地址 192.168.10.63
地址总数 64
可用主机数 62

地址为 192.168.10.37/26 的设备会直接把流量发给 192.168.10.50,因为该地址位于同一个 /26 中。发往 192.168.10.70 的流量则交给默认网关,因为 .70 属于下一个地址块。

如何计算子网掩码

常见的出发点有两个:已知前缀长度,或者已知网络需要容纳多少台主机。

根据前缀长度计算

按前缀长度写出相应个数的 1,再用 0 补足 32 位,然后把每个八位组转换成十进制。以 /20 为例:

11111111.11111111.11110000.00000000  =  255.255.240.0

第三个八位组有四个 1,查上表可知四个 1 对应 240。一个捷径是:前缀长度除以 8 的商就是完整 255 八位组的个数(20 ÷ 8 = 2,余 4),余数决定下一个八位组的值。

根据所需主机数计算

每个子网都要占用两个地址,即网络地址和广播地址,因此规则是:

可用主机数 = 2^h − 2,其中 h 是主机位的个数(掩码中 0 的个数)。

找出使 2^h − 2 不小于所需主机数的最小 h,再计算前缀 = 32 − h。

规划时要为增长留出余量,因为日后重新编址比现在选一个稍大的地址块麻烦得多。你可以在子网掩码计算器中核对结果,例如输入 10.0.0.0/23,查看第一个和最后一个地址。

什么是子网划分?把一个 /24 划分成四个 /26

子网划分就是把网络位和主机位之间的分界线向右移动,把一个网络分成若干个更小的网络。每从主机部分借用一位,子网数量就翻一倍,每个子网的大小减半。

假设你有 192.168.10.0/24(256 个地址),需要四个独立的网络,例如分别给员工、访客、服务器和摄像头使用。四个子网需要借用 2 位(2^2 = 4),因此前缀从 /24 变为 /26,掩码变为 255.255.255.192。每个子网有 2^6 = 64 个地址,其中 62 个可用:

子网 网络地址 可用主机范围 广播地址
1 192.168.10.0/26 192.168.10.1 – 192.168.10.62 192.168.10.63
2 192.168.10.64/26 192.168.10.65 – 192.168.10.126 192.168.10.127
3 192.168.10.128/26 192.168.10.129 – 192.168.10.190 192.168.10.191
4 192.168.10.192/26 192.168.10.193 – 192.168.10.254 192.168.10.255

各网络地址以 64 为步长递增,64 就是地址块大小。快速求块大小的方法是用 256 减去掩码中起作用的那个八位组:256 − 192 = 64。四个子网合计提供 248 个可用主机地址,而不是 254 个,因为每个子网都要占用自己的网络地址和广播地址。

反掩码:子网掩码的取反

反掩码(通配符掩码,wildcard mask)把子网掩码的每一位取反:0 表示必须匹配的位,1 表示可以变化的位。计算方法是用 255 减去每个八位组,所以 255.255.255.192 变为 0.0.0.63。

思科路由器在访问控制列表(ACL)和 OSPF 的 network 命令中使用反掩码:

access-list 10 permit 192.168.10.0 0.0.0.63
router ospf 1
 network 192.168.10.0 0.0.0.63 area 0

这两行指的都是示例中的同一个 /26。与子网掩码不同,ACL 中的反掩码不要求连续,但对普通子网来说,它就是子网掩码的取反。

有类网络与默认子网掩码

1993 年以前,IPv4 使用固定的地址类别,地址的第一个八位组决定其掩码:

类别 第一个八位组 默认掩码 前缀
A 1–126 255.0.0.0 /8
B 128–191 255.255.0.0 /16
C 192–223 255.255.255.0 /24

D 类(224–239)保留给组播,E 类(240–255)保留用于实验,127 则留作环回地址。由于机构只能获得 256、65,536 或 16,777,216 个地址的地址块,这种方式浪费了大量地址。无类别域间路由(CIDR)用任意长度的前缀取代了它,其现行规范是 RFC 4632。如今地址类别已没有技术意义,不过旧的默认掩码仍会在许多设置界面中作为建议值出现。

私有地址范围及其掩码

RFC 1918 为私有网络保留了三个地址块,它们不会在公共互联网上路由:

私有地址范围 前缀 子网掩码 地址总数
10.0.0.0 – 10.255.255.255 10.0.0.0/8 255.0.0.0 16,777,216
172.16.0.0 – 172.31.255.255 172.16.0.0/12 255.240.0.0 1,048,576
192.168.0.0 – 192.168.255.255 192.168.0.0/16 255.255.0.0 65,536

很少有人把整个地址块当作一个网络使用。例如,典型的家用路由器只会划出一个 192.168.1.0/24 或 192.168.0.0/24,并使用 255.255.255.0 子网掩码。

IPv6 中的子网掩码

IPv6 没有点分形式的子网掩码。网络只用前缀长度表示,例如 2001:db8:1234:5678::/64。/64 是单个局域网网段的标准大小,因为无状态地址自动配置(SLAAC)需要 64 位的接口标识符。IPv6 也没有广播地址,所以“减二”的规则并不适用。

子网掩码的常见错误

子网掩码对照表:/8 到 /32

下表列出了 /8 到 /32 的每个前缀。可用主机数为 2^(32 − 前缀) − 2,但有两个例外:/31 在点对点链路上有 2 个可用地址(RFC 3021),/32 表示单个主机。

前缀 子网掩码 反掩码 地址总数 可用主机数
/8 255.0.0.0 0.255.255.255 16,777,216 16,777,214
/9 255.128.0.0 0.127.255.255 8,388,608 8,388,606
/10 255.192.0.0 0.63.255.255 4,194,304 4,194,302
/11 255.224.0.0 0.31.255.255 2,097,152 2,097,150
/12 255.240.0.0 0.15.255.255 1,048,576 1,048,574
/13 255.248.0.0 0.7.255.255 524,288 524,286
/14 255.252.0.0 0.3.255.255 262,144 262,142
/15 255.254.0.0 0.1.255.255 131,072 131,070
/16 255.255.0.0 0.0.255.255 65,536 65,534
/17 255.255.128.0 0.0.127.255 32,768 32,766
/18 255.255.192.0 0.0.63.255 16,384 16,382
/19 255.255.224.0 0.0.31.255 8,192 8,190
/20 255.255.240.0 0.0.15.255 4,096 4,094
/21 255.255.248.0 0.0.7.255 2,048 2,046
/22 255.255.252.0 0.0.3.255 1,024 1,022
/23 255.255.254.0 0.0.1.255 512 510
/24 255.255.255.0 0.0.0.255 256 254
/25 255.255.255.128 0.0.0.127 128 126
/26 255.255.255.192 0.0.0.63 64 62
/27 255.255.255.224 0.0.0.31 32 30
/28 255.255.255.240 0.0.0.15 16 14
/29 255.255.255.248 0.0.0.7 8 6
/30 255.255.255.252 0.0.0.3 4 2
/31 255.255.255.254 0.0.0.1 2 2 (点对点)
/32 255.255.255.255 0.0.0.0 1 1 (单个主机)

用子网计算器核对结果

免费的 IPv4 子网计算器完全在浏览器中运行。输入带前缀的地址(例如 192.168.10.37/26),或在斜杠后写点分掩码(例如 10.0.0.0/255.255.0.0),它会显示:

对于 /31,它会把两个地址都显示为可用,并且没有广播地址;不带掩码的地址会被视为单个主机(/32)。“上一个区块”和“下一个区块”按钮可以跳转到相邻的同样大小的子网,便于逐个查看上面的四个 /26 网络。该工具只支持 IPv4,会拒绝不连续的掩码,不接受用空格分隔的掩码,也不能根据主机数推算前缀;这一步请使用上面的公式。

常见问题

子网掩码 255.255.255.0 是什么意思?

这是 /24 掩码:前三个八位组标识网络,最后一个八位组标识主机。一个 /24 网络有 256 个地址,其中 254 个可以分配给设备,例如 192.168.1.0/24 中的 192.168.1.1 到 192.168.1.254。

如何查看电脑的子网掩码?

在 Windows 上运行 ipconfig,查看“子网掩码”一行。在 Linux 上,ip addr 会显示带前缀的地址,例如 192.168.1.20/24。在 macOS 上,ipconfig getoption en0 subnet_mask 会输出接口 en0 的掩码,网络设置中也能看到。

为什么 /31 有两个可用地址?

扣除网络地址和广播地址后,一个只有两个地址的地址块就没有可用主机了。RFC 3021 允许在点对点链路上使用 /31 网络,这类链路不需要广播,因此链路两端可以分别使用这两个地址。

子网掩码和默认网关是一回事吗?

不是。子网掩码决定哪些地址位于本地网络,而默认网关是负责转发其余流量的路由器的地址。设备先用掩码判断目标是否在本地,只有不在本地时才把流量发给网关。

免费试用:IPv4 子网计算器 免费使用,无需注册账号。