什么是子网掩码?二进制原理、计算方法与对照表
子网掩码是一个 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。
- 50 台主机: 2^5 − 2 = 30 不够,2^6 − 2 = 62 足够。所以 h = 6,前缀为 /26,掩码为
255.255.255.192。 - 500 台主机: 2^8 − 2 = 254 不够,2^9 − 2 = 510 足够。所以 h = 9,前缀为 /23,掩码为
255.255.254.0。
规划时要为增长留出余量,因为日后重新编址比现在选一个稍大的地址块麻烦得多。你可以在子网掩码计算器中核对结果,例如输入 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 也没有广播地址,所以“减二”的规则并不适用。
子网掩码的常见错误
- 掩码不连续。
255.0.255.0或255.255.255.100都不是有效的子网掩码,因为 1 必须连成一串、中间不能断开。 - 忘记网络地址和广播地址。 一个 /24 有 256 个地址,但只有 254 个可用主机地址。在 /24 中把
.0或.255分配给设备会引发问题。 - 同一网络使用不同掩码。 如果同一网段中一台设备用 /24、另一台用 /25,它们对哪些地址属于本地的判断就会不一致,部分流量会被发往网关或直接丢失。
- 混淆子网掩码和反掩码。 在子网掩码字段中填
0.0.0.255,或在 ACL 中写255.255.255.0,结果会完全不同。
子网掩码对照表:/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),它会显示:
- 网络地址、子网掩码、二进制掩码、CIDR 表示法和反掩码;
- 网络大小(地址块中的全部地址,包括网络地址和广播地址);
- 第一个和最后一个可用地址,以及广播地址;
- 该地址在旧分类体系中的 IP 类别。
对于 /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 子网计算器 免费使用,无需注册账号。