配置防火墙、白名单、路由规则的时候,经常见到有人这样写:
43.255.122.56/24
本意是想匹配单个 IP,结果匹配了 256 个。CIDR 的斜杠语法是”前面多少位固定”,不是”IP 加上标签”。
/24 到底表示什么
43.255.122.56/24 意思是:IP 的前 24 位固定。IPv4 一共 32 位,24 位固定就是前三段(43.255.122)不变,最后一段(.56)被忽略、整段 0-255 都算命中。
等价于:
43.255.122.0 – 43.255.122.255 (256 个地址)
所以:
43.255.122.0 ✅ 命中
43.255.122.56 ✅ 命中
43.255.122.100 ✅ 命中
43.255.122.255 ✅ 命中
43.255.123.56 ❌ 未命中
想匹配单个 IP:/32
要精确匹配一个 IP,写 /32——32 位全都固定,就是它自己:
43.255.122.56/32
如果配置格式不要求必须有 CIDR 后缀,直接写 IP 也行:
43.255.122.56
/32 是最严格的等价形式。
常见 CIDR 对照
| 写法 | 匹配范围 | 地址数 |
|---|---|---|
43.255.122.56/32 | 只 43.255.122.56 | 1 |
43.255.122.56/31 | 43.255.122.56 – 57 | 2 |
43.255.122.56/30 | 43.255.122.56 – 59 | 4 |
43.255.122.56/29 | 43.255.122.56 – 63 | 8 |
43.255.122.56/28 | 43.255.122.48 – 63 | 16 |
43.255.122.56/27 | 43.255.122.32 – 63 | 32 |
43.255.122.56/26 | 43.255.122.0 – 63 | 64 |
43.255.122.56/25 | 43.255.122.0 – 127 | 128 |
43.255.122.56/24 | 43.255.122.0 – 255 | 256 |
43.255.122.56/16 | 43.255.0.0 – 43.255.255.255 | 65,536 |
43.255.122.56/8 | 43.0.0.0 – 43.255.255.255 | 16M+ |
43.255.122.56/0 | 整个 IPv4 空间 | 全部 |
注意:CIDR 里”起点 IP”随便写,实际会向下对齐。43.255.122.56/24 和 43.255.122.99/24 等价,都指 43.255.122.0/24 这个网段。
计算方法
给一个 CIDR A.B.C.D/N,怎么算范围?
掩码位数 → 主机位数 = 32 - N
主机位数决定了段长:
- 主机位 = 0:1 个 IP(/32)
- 主机位 = 1:2 个(/31)
- 主机位 = 8:256 个(/24)
- 主机位 = 16:65536 个(/16)
- 主机位 = N:2^N 个
起点:把 A.B.C.D 的后 (32-N) 位置零。
例:10.0.5.37/28
- N=28,主机位=4
- 段长 = 2^4 = 16
- 后 4 位置零:37 二进制
00100101→ 后 4 位置零00100000= 32 - 范围:
10.0.5.32 – 10.0.5.47
Linux 命令算
ipcalc 是最快的:
$ ipcalc 43.255.122.56/24
Address: 43.255.122.56
Netmask: 255.255.255.0 = 24
Network: 43.255.122.0/24
HostMin: 43.255.122.1
HostMax: 43.255.122.254
Broadcast: 43.255.122.255
Hosts/Net: 254
或者 Python 一行:
import ipaddress
net = ipaddress.ip_network("43.255.122.56/24", strict=False)
print(net.network_address, net.broadcast_address, net.num_addresses)
常见误区
误区 1:以为 /24 加个数字更保险
不是。任何斜杠后缀都是”网段掩码”,你越加越大。
误区 2:/32 单独 IP 时可以省掉
大多数系统能省,但**某些严格配置格式(RBAC 白名单、AWS SG)**要求必须写 /32,别偷懒。
误区 3:以为 /0 是”无匹配”
反过来——0.0.0.0/0 匹配整个 IPv4 空间,路由表里就是默认路由。
IPv6 版
IPv6 也用 CIDR:
2001:db8::1/128 单个 IP
2001:db8::/32 一整段
::/0 整个 IPv6 空间
规则一样,只是位数从 32 变成 128。
一句话总结
IP 加 /N 是网段,前 N 位固定其余任意。单个 IP 要写 /32(IPv6 是 /128)。别偷懒不加 CIDR 后缀,也别把 /24 当成”某个 IP 的编号”。
