正在加载,请稍候…

CIDR 与子网掩码详解:/24 到底是什么意思

用通俗语言解释 CIDR 表示法和子网掩码——/24、/16、/8 的含义,如何计算可用主机数,以及如何在不使用计算器的情况下划分子网。

CIDR 与子网掩码详解:/24 到底是什么意思

/24 到底是什么意思?

如果你见过像 192.168.1.0/2410.0.0.0/8 这样的地址,并想知道斜杠后面的数字是什么意思,这里有一个简短的回答:它表示用于网络部分的位数。剩余的位用于标识该网络上的各个主机。

/24 表示 24 位是网络地址,剩下 8 位给主机——这提供了 256 个地址(254 个可用,因为第一个和最后一个被保留)。

CIDR 与子网掩码详解:/24 到底是什么意思 插图

IP 地址只是 32 位数字

192.168.1.100 这样的 IPv4 地址由四组 8 位(八位组)组成。二进制表示:

192  = 11000000
168  = 10101000
1    = 00000001
100  = 01100100

192.168.1.100 = 11000000.10101000.00000001.01100100

子网掩码标记这个 32 位数字中哪部分是网络,哪部分是主机。掩码是一串 1 后跟一串 0:

/24 掩码 = 11111111.11111111.11111111.00000000
         = 255.255.255.0

网络位(由 1 覆盖):192.168.1 主机位(由 0 覆盖):100

CIDR 前缀与子网掩码对照表

CIDR 子网掩码 主机数 典型用途
/8 255.0.0.0 16,777,214 大型企业,A 类
/16 255.255.0.0 65,534 中型企业,B 类
/24 255.255.255.0 254 小型办公室,家庭网络
/25 255.255.255.128 126 半个 /24
/26 255.255.255.192 62 部门子网
/27 255.255.255.224 30 小团队
/28 255.255.255.240 14 服务器集群
/29 255.255.255.248 6 点对点 + 服务器
/30 255.255.255.252 2 点对点链路
/32 255.255.255.255 1 单主机路由

可用主机数公式:2^(32 - 前缀) - 2。减去 2 是因为网络地址(所有主机位为 0)和广播地址(所有主机位为 1)。

CIDR 与子网掩码详解:/24 到底是什么意思 插图

分解 /24 网络

192.168.10.0/24 为例:

  • 网络地址: 192.168.10.0(主机位全零——不可分配)
  • 第一个可用主机: 192.168.10.1
  • 最后一个可用主机: 192.168.10.254
  • 广播地址: 192.168.10.255(主机位全一——不可分配)
  • 总可用主机数: 254

如何将 /24 划分为更小的子网

你可以通过从主机部分借位来将 /24 划分为更小的子网。每多借一位,子网数量翻倍,每个子网的主机数减半。

将 192.168.10.0/24 划分为四个 /26 子网:

子网 范围 可用主机数
192.168.10.0/26 .0 – .63 .1 – .62(62 台主机)
192.168.10.64/26 .64 – .127 .65 – .126(62 台主机)
192.168.10.128/26 .128 – .191 .129 – .190(62 台主机)
192.168.10.192/26 .192 – .255 .193 – .254(62 台主机)

每个 /26 有 62 个可用主机。四个子网 × 62 台主机 + 8 个保留地址 = 256 个。数学总是成立的。

CIDR 与子网掩码详解:/24 到底是什么意思 插图

私有地址范围

有三个范围保留给私有网络(RFC 1918),不能在公共互联网上路由:

范围 CIDR 地址数
10.0.0.0 – 10.255.255.255 10.0.0.0/8 1670 万
172.16.0.0 – 172.31.255.255 172.16.0.0/12 100 万
192.168.0.0 – 192.168.255.255 192.168.0.0/16 65,536

家庭路由器使用 192.168.x.x。AWS VPC 默认使用 10.0.0.0/16。Docker 默认使用 172.17.0.0/16

阅读云网络配置

当你在 AWS、GCP 或 Azure 中创建 VPC 或虚拟网络时,CIDR 表示法定义了其大小:

AWS VPC:          10.0.0.0/16    → 65,534 个地址
  子网 A:         10.0.1.0/24   → 251 个可用(AWS 每个子网保留 5 个)
  子网 B:         10.0.2.0/24   → 251 个可用
  子网 C:         10.0.3.0/24   → 251 个可用

Docker 默认:      172.17.0.0/16
  容器范围:       172.17.0.2 – 172.17.255.254

AWS 每个子网保留 5 个地址(前 4 个 + 最后 1 个),因此 AWS 中的 /24 提供 251 个可用地址,而不是 254 个。

检查 IP 是否在子网内

import ipaddress

network = ipaddress.ip_network('192.168.10.0/24')
ip = ipaddress.ip_address('192.168.10.42')

print(ip in network)           # True
print(network.num_addresses)   # 256
print(list(network.hosts())[:3])  # [192.168.10.1, .2, .3]
// 没有内置函数,但很容易实现
function ipToInt(ip) {
  return ip.split('.').reduce((acc, octet) => (acc << 8) | parseInt(octet), 0) >>> 0;
}

function isInSubnet(ip, cidr) {
  const [net, bits] = cidr.split('/');
  const mask = ~(0xFFFFFFFF >>> parseInt(bits)) >>> 0;
  return (ipToInt(ip) & mask) === (ipToInt(net) & mask);
}

console.log(isInSubnet('192.168.10.42', '192.168.10.0/24')); // true

→ 使用 IPv4 子网计算器 立即分解任何 CIDR 块——显示网络地址、广播地址、主机范围以及所有子网。