CIDR 网络地址速查表 - 子网掩码与 IP 地址大全

CIDR 运算的麻烦在于它错了不会报错。一个 /23 被当成 /24 写进防火墙规则,服务照常启动,只是多出来的地址悄悄对全网可达;反过来把 /8 缩成 /16,容量需求一个季度后才暴露。所以这张表的价值在于把心算过程摊开:主机位数等于 32 减前缀,可用地址是 2 的主机位次方减 2(网络地址和广播地址各占一个),点对点链路的 /31 是个例外,没有广播地址,四个地址全可用。表内按子网掩码对照表、常用子网规模、私有地址段、特殊用途地址、计算工具与示例分组。什么时候该翻它:分配 VPC 网段、核对 NAT 与安全组白名单、判断一台机器该配 /24 还是 /16,或者看到一个陌生网段要立刻知道它是不是私有地址。特别地址段是另一个判断依据:169.254 段出现说明 DHCP 或云元数据服务没通,127 段出现说明配置里把回环写进了对外地址。

参考手册·共 34 条命令·最后更新 2026-07-21
cidr网络ip子网

CIDR 表示法基础 5

192.168.1.0/24
标准 CIDR 写法(IP/前缀长度)
IP/前缀
前缀表示网络位的位数(0-32)
/24
前 24 位为网络位,后 8 位为主机位
主机位数 = 32 - 前缀
用于计算 IP 总数
子网掩码
由前缀位全 1 推导得出

子网掩码对照表 6

/32 = 255.255.255.255 = 1 个 IP
单个主机(主机路由)
/24 = 255.255.255.0 = 256 个 IP
标准 C 类子网
/23 = 255.255.254.0 = 512 个 IP
超网(合并两个 /24)
/16 = 255.255.0.0 = 65,536 个 IP
标准 B 类子网
/8 = 255.0.0.0 = 16,777,216 个 IP
标准 A 类子网
/0 = 0.0.0.0 = 全部 IP
默认路由(全网)

常用子网规模 7

/30 = 4 IP(2 可用)
点对点链路(最节省)
/29 = 8 IP(6 可用)
小型子网
/28 = 16 IP(14 可用)
VLAN 常用
/27 = 32 IP(30 可用)
中型子网
/26 = 64 IP(62 可用)
较大型子网
/25 = 128 IP(126 可用)
大型子网
/24 = 256 IP(254 可用)
最常见的局域网规模

私有 IP 地址范围 5

10.0.0.0/8
A 类私有地址(10.0.0.0 - 10.255.255.255)
172.16.0.0/12
B 类私有地址(172.16.0.0 - 172.31.255.255)
192.168.0.0/16
C 类私有地址(192.168.0.0 - 192.168.255.255)
100.64.0.0/10
运营商级 NAT(CGN)保留地址
169.254.0.0/16
链路本地地址(APIPA 自动配置)

特殊用途地址 5

0.0.0.0/0
默认路由(表示所有 IP)
127.0.0.0/8
本地回环地址(loopback)
224.0.0.0/4
组播地址(multicast)
240.0.0.0/4
保留地址(Class E,未分配)
255.255.255.255
有限广播地址(本网段所有主机)

计算工具与示例 6

ipcalc 192.168.1.0/24
Linux 下查看子网信息
sipcalc 10.0.0.0/16
更详细的 CIDR 计算工具
ipaddress.ip_network("192.168.1.0/28")
Python 标准库 ipaddress 处理 CIDR
网络地址 = IP & 子网掩码
按位与运算得到网络地址
广播地址 = 网络地址 | ~掩码
主机位全 1 即广播地址
可用 IP = 2^(32-前缀) - 2
减去网络地址和广播地址

命令示例

用 node 一行算出掩码、网络地址、广播地址与可用数

node -e " function calc(cidr) { const [ip, p] = cidr.split('/') const bits = p | 0 const ipn = ip.split('.').map(Number).reduce((a, b) => ((a << 8) + b) >>> 0, 0) const m = (0xFFFFFFFF << (32 - bits)) >>> 0 const net = ipn & m const bc = (net | (~m >>> 0)) >>> 0 const size = 2 ** (32 - bits) const f = (n) => [24, 16, 8, 0].map((s) => (n >>> s) & 255).join('.') console.log(cidr, 'mask', f(m), 'net', f(net), 'bcast', f(bc), 'total', size, 'usable', bits >= 31 ? size : size - 2) } ;['10.0.0.0/8', '172.16.0.0/12', '100.64.0.0/10', '0.0.0.0/0'].forEach(calc) "

脚本把本表两条公式直接编码:掩码 = 前缀位全 1(0xFFFFFFFF 左移),网络地址 = IP 与掩码按位与,广播地址 = 网络地址或上掩码按位非,可用数 = 2 的主机位次方减 2,并且对 /31 及以上特判不减 2。/0 的 total 是 4294967296,掩码显示为 255.255.255.255 只是掩码取反位运算的直接结果,不要当成写错。

输出

10.0.0.0/8 mask 255.0.0.0 net 10.0.0.0 bcast 10.255.255.255 total 16777216 usable 16777214
172.16.0.0/12 mask 255.240.0.0 net 172.16.0.0 bcast 172.31.255.255 total 1048576 usable 1048574
100.64.0.0/10 mask 255.192.0.0 net 100.64.0.0 bcast 100.127.255.255 total 4194304 usable 4194302
0.0.0.0/0 mask 255.255.255.255 net 0.0.0.0 bcast 0.0.0.0 total 4294967296 usable 4294967294

用 Python 标准库一次取出 /28 的网络地址、掩码、广播与可用数

python -c " from ipaddress import ip_network n = ip_network('192.168.1.0/28') print(n.network_address, n.netmask, n.broadcast_address, n.num_addresses, n.num_addresses - 2) "

本表把 /28 标为 VLAN 常用规模,16 个地址、14 个可用。写校验脚本时用 ip_network 代替手算,可以同时拿到网络地址(分配时必须跳过)、广播地址(不能配给主机)和可用数三组值,避免只算出总数就把 16 个地址全部分下去。传 strict=False 还能容忍你手上拿着的是网段里的某个主机地址而非网络地址。

输出

192.168.1.0 255.255.255.240 192.168.1.15 16 14

对比 /31 与 /30 的 hosts 列表,看点对点链路的例外

python -c " from ipaddress import ip_network print(list(ip_network('10.0.0.0/31').hosts())) print(list(ip_network('10.0.0.0/30').hosts())) "

/31 的两个地址都被列为 host,因为点对点链路没有广播地址这个概念;/30 则按传统规则丢掉网络地址与广播地址,只剩中间两个。审查别人提交的网段规划时,把 /31 误套 -2 公式算成 0 个可用地址是最常见的评审错误,用这个对照一眼就能看出来。

输出

[IPv4Address('10.0.0.0'), IPv4Address('10.0.0.1')]
[IPv4Address('10.0.0.1'), IPv4Address('10.0.0.2')]

批量判定一组地址里哪些落在私有段

python -c " from ipaddress import ip_address for s in ['10.1.2.3', '172.32.0.1', '192.168.5.5', '100.64.0.1', '169.254.1.1', '127.0.0.1']: a = ip_address(s) print(s, a.is_private) "

两个 False 最值得看:172.32.0.1 刚过 172.16.0.0/12 的上界,100.64.0.1 属于运营商级 NAT 段 100.64.0.0/10,标准库都不把它们算作 RFC1918 私有地址,但云上环境常常仍按内网路由,判断可达性时要单独看。169.254 与 127 被判为 True 是因为它们确实不来自公网,但这两个 True 出现在对外配置里同样是配置错误。

输出

10.1.2.3 True
172.32.0.1 False
192.168.5.5 True
100.64.0.1 False
169.254.1.1 True
127.0.0.1 True

常见坑与注意事项

  • CIDR 写错不会报错。/23 被当成 /24 填进防火墙规则时服务照常启动,多出的地址静默对网内可达,只能靠逐条核对前缀与地址数发现。
  • 172.16.0.0/12 的上界是 172.31.255.255,172.32.0.0 已经在私有段之外。凭「172 开头就是内网」的印象放行会把公网地址暴露出去。
  • 100.64.0.0/10 是运营商级 NAT 段,标准库不判为私有地址但在云上常按内网路由,公网服务直接写这段地址通常连不通。
  • 可用 IP = 2^(32-前缀) - 2 只在 /30 到 /24 一类常规规模成立。/31 没有广播地址,套减 2 会算出 0 个可用地址。
  • 240.0.0.0/4 是 Class E 保留段、0.0.0.0/0 是默认路由、127.0.0.0/8 是回环、169.254.0.0/16 是链路本地,这些出现在对外地址或安全组白名单里基本都是配错,不要作为特例直接放行。

提示

  • 可用 IP 数 = 2^(32-前缀) - 2(减去网络地址和广播地址)。
  • Docker 默认网桥使用 172.17.0.0/16,Kubernetes Pod 网段常用 10.244.0.0/16。
  • 子网划分时,/24 是最常用的,适合小型局域网。
  • ipcalc 或 sipcalc 命令行工具可以快速计算 CIDR 信息。
  • /31 子网(2 个 IP)专用于点对点链路(RFC 3021),不需要广播地址。
  • 100.64.0.0/10 是 CGNAT 段(运营商给家宽设备用),公网服务误用这段在云上会路由不通。
  • Python 里 ipaddress.ip_network("192.168.1.0/28") 可直接取网络/可用主机/广播,写校验脚本不必手算。
  • 240.0.0.0/4 保留段一旦出现在路由表里通常是配错而非特例,不要直接放行。

常见问题

看到 192.168.1.0/24,怎么立刻算出它有多少个可用地址?

两步:主机位数 = 32 - 24 = 8;地址总数 = 2^8 = 256,其中网络地址 192.168.1.0 与广播地址 192.168.1.255 各占一个,可用 254 个。写脚本时不要心算,用 Python 标准库的 ipaddress.ip_network("192.168.1.0/24"),取 num_addresses 得总数、取 num_addresses - 2 得可用数,两个数一起打印就不会把网络地址误分配出去。

/31 为什么可用地址不是 0 个?

因为 /31 是点对点链路的专用规模。全宽前缀下总共 2 个地址,传统规则会把它们当作网络地址与广播地址各占一个,可用数为 0;但 RFC 3021 明确规定 /31 不存在广播地址,两个地址都可用。所以本表的「可用 IP = 2^(32-前缀) - 2」在 /31 要特判,Python 的 ip_network("10.0.0.0/31").hosts() 会把 10.0.0.0 与 10.0.0.1 都列出来。对照 /30 就是常规形态:4 个地址、2 个可用。

一个陌生网段,怎么快速判断它是不是私有地址?

对照本表私有地址段三条:10.0.0.0/8 覆盖 10.0.0.0 到 10.255.255.255;172.16.0.0/12 覆盖 172.16.0.0 到 172.31.255.255,注意是 172.16 到 172.31,172.32 已经出了私有段;192.168.0.0/16 覆盖整个 192.168.x.x。另有 100.64.0.0/10 是运营商级 NAT 保留段,169.254.0.0/16 是链路本地段,二者都不是 RFC1918 私有段但在云上也常被当作内网处理。判定别靠肉眼,交给 ip_address(s).is_private 或直接做与运算比对网段。

子网掩码和前缀长度换算时,为什么掩码里 1 和 0 的排列不能自定义?

子网掩码由前缀位全 1 加主机位全 0 得到,顺序固定为网络位在前、主机位在后,这是 CIDR 与 IP 整数字面量的唯一约定。前缀 16 得到 255.255.0.0,前缀 12 得到 255.240.0.0——位数从高位往低位填满,填到 12 位就停手,所以 /12 的第三个字节是 11110000 即 240。掩码写成 0.0.255.255(主机位在前)虽然数值相同,但所有按位运算工具与路由协议都会得到相反的网络地址,配置一定错。

169.254 开头的地址和 127 开头的地址出现在配置里,通常说明什么?

两个都指向本机或链路,但成因不同。169.254.0.0/16 属于链路本地地址,通常是 DHCP 请求没得到响应、云上元数据服务(常见于 169.254.169.254)不通时的自我兜底,它本不该出现在配置的目标地址里。127.0.0.0/8 是回环地址,说明把本机地址误当成对外地址写进了白名单或监听配置,对外调用会直接打回自己。两者出现都不是特例用法,应当回到 DHCP 配置或地址填写处修正。

官方参考来源

下方为命令对应的官方权威文档,供你核对最新用法与深入查阅。

由 巧匠 维护

公开更新于 2026年7月21日,内容持续校对官方文档。

联系我们

命令或描述有误?提交反馈、商务合作或产品建议都可发送邮件给我们。

联系我们