CIDR 记法要写对:43.255.122.56/24 匹配的是一整段

配置防火墙、白名单、路由规则的时候,经常见到有人这样写:

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/3243.255.122.561
43.255.122.56/3143.255.122.56 – 572
43.255.122.56/3043.255.122.56 – 594
43.255.122.56/2943.255.122.56 – 638
43.255.122.56/2843.255.122.48 – 6316
43.255.122.56/2743.255.122.32 – 6332
43.255.122.56/2643.255.122.0 – 6364
43.255.122.56/2543.255.122.0 – 127128
43.255.122.56/2443.255.122.0 – 255256
43.255.122.56/1643.255.0.0 – 43.255.255.25565,536
43.255.122.56/843.0.0.0 – 43.255.255.25516M+
43.255.122.56/0整个 IPv4 空间全部

注意:CIDR 里”起点 IP”随便写,实际会向下对齐。43.255.122.56/2443.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 的编号”。