CIDR计算器

网络地址 = IP AND 掩码,广播地址 = IP OR 掩码取反;可用主机数按 2^(32−前缀)−2,/31 与 /32 走 RFC 特例。

单行输入按回车即算;下方对照表默认 12 行,点「加载更多」每次再加 12 行。

网络地址—
子网掩码—
广播地址—
可用主机范围—
地址总数—
可用主机数—
通配符掩码—
32 位整数—
十六进制—
子网拆分对照表(当前 192.168.10.37/24 拆成 /26)
CIDR网络地址子网掩码广播地址可用主机数属性

使用方法

  1. 在「IP 地址或 CIDR」填完整写法,示例 192.168.10.37/24。只写 IP 不带斜杠时,用下面「默认前缀长度」的值,本页默认 24。
  2. 「子网拆分」填比原前缀更长的值,本页默认 26——把 /24 拆成 4 个 /26。填 32 表示不拆分,对照表就退化成单行。
  3. 点「计算」或直接在输入框按回车。上方六个格子立刻给出网络地址、掩码、广播地址、可用范围、地址总数与可用主机数。
  4. 要看多段网段,右侧批量框已预填 10 行,点「批量计算这 10 行」或在框内按 Ctrl / Cmd + Enter。
  5. 对照表默认只渲染 12 行防止卡顿,点「加载更多」每次加 12 行;需要留档就点「导出对照表 CSV」(带 BOM,Excel 打开不乱码)。

CIDR计算器能解决什么问题

拿到一段 IP 就能立刻知道它覆盖多大范围、能不能再塞下几台机器,这是配网、扩容和安全审计三件事的共同起点。运维给一段 10.20.30.0/22 说「这里划给你」,你得马上知道网络地址是不是真落在 10.20.30.0、广播在哪、还能不能从 /22 切出两个 /23 分给两个部门——这些全是 CIDR计算器一次按位运算的输出。

第二个场景是排查「IP 冲突」。同事说他这台机器 192.168.1.130 和你的 192.168.1.131 不通,实际情况往往是两人拿到的掩码不一样:/25 里 192.168.1.128 到 192.168.1.255 是一个广播域,129 和 130 在同一段但可能分属不同主机位范围。把两条配置各自算一遍,掩码不同就一眼看出来了。

第三个场景是安全审计里的私有网段识别。RFC 1918 规定了 10.0.0.0/8、172.16.0.0/12、192.168.0.0/16 三段私有地址,页面对每个结果都会打上「私有 / 公网 / 保留」标签,扫配置时能立刻区分哪些是内网段。本页只做 IPv4 的 CIDR 换算与拆分,不做 IPv6(那是另一套 128 位掩码体系)、不做 DNS 反查、也不做公网归属地查询——只查 MAC 厂商的话有专门的MAC地址查询页。

原理与规则:按位与、按位或与 2^(32−前缀) 的来历

网络地址的算法只有一行:网络地址 = IP AND 掩码。子网掩码是 1 个 1 加一串 0 的连续位串,前缀长度 24 就意味着前 24 位是 1、后 8 位是 0,即 255.255.255.0。按位与把 IP 的前 24 位原样保留、后 8 位清零,于是 192.168.10.37 变成 192.168.10.0。本页用 JavaScript 的 & 运算符配合 >>> 0 无符号右移来做这一步,中间量是 32 位无符号整数:192.168.10.37 的整数形式是 3232238117(十六进制 0xc0a80a25),掩码 255.255.255.0 是 4294967040(0xffffff00),两者相与得 3232238080,还原成点分十进制就是 192.168.10.0。

广播地址是 IP OR (NOT 掩码),等价写法是 网络地址 OR (~掩码)。掩码取反后主机位全变 1(255.255.255.0 取反是 0.0.0.255),与 IP 相或就把主机位全部置 1,得到 192.168.10.255。通配符掩码(也叫反掩码)就是取反的同一个值,ACL 里写规则用的就是它,不是子网掩码——这是新手最常抄错的一个字段。

地址总数是 2^(32 − 前缀长度):32 位地址里前缀之外剩下的每一位都能独立取 0 或 1,主机位有 (32−p) 个,所以是 2 的 (32−p) 次方。/24 剩 8 位,即 256;/22 剩 10 位,即 1024;/8 剩 24 位,即 16,777,216。

可用主机数是 2^(32−前缀) − 2,减的两个地址是网络地址(全 0 主机位)和广播地址(全 1 主机位)。但这个公式有适用范围,/31 和 /32 是 RFC 特例:

· /32 按 RFC 1122 是单主机路由,1 个地址全部可用(0.8.8.8/32 的可用主机数是 1,不是 2−2=0)。

· /31 按 RFC 3021 明确定义为点到点链路,两个地址都是可用的(10.1.2.4/31 是 2,不是 0)。RFC 3021 是 2001 年发布的,早于此的 RFC 1878 曾经建议 /31 不可用,这个历史差异是很多老文档说法不一致的原因。

标准演进也值得说清:RFC 950(1981)定义的是「有类网络」,A/B/C 类固定对应 /8、/16、/24,掩码必须连续且不能跨类;RFC 1519(1993)首次提出 CIDR,允许 13 到 30 的任意前缀;RFC 4632(2006)取代 RFC 1519,把前缀范围扩到 0 到 32 全部合法,掩码不再要求按类对齐。今天说「CIDR」默认按 RFC 4632 口径,而「A 类 B 类 C 类」这套 RFC 950 术语只在读老教材时才会遇到。

完整示例(数值仅作演示)

输入 192.168.10.37/24,子网拆分填 26,得到:

拆成 /26 时,每块 2^6 = 64 个地址、可用 62 个,四个子网依次是 192.168.10.0/26(广播 .63)、192.168.10.64/26(广播 .127)、192.168.10.128/26(广播 .191)、192.168.10.192/26(广播 .255)。四个子网各 62 个可用地址,合计 248,正好等于 /24 的 254 减去原来的网络地址与广播地址两个——这个校验和是判断拆分有没有算错最快的方法。

输入范围与对照表

前缀长度的合法区间是 0 到 32(含两端)。0 是默认路由(0.0.0.0/0,覆盖全部 4,294,967,296 个地址),32 是单主机。中间每一档的掩码、总数和可用数如下表,注意 /31 和 /32 两行的可用数跳出了「减 2」的规律:

前缀子网掩码地址总数可用主机数备注
/00.0.0.04,294,967,2964,294,967,294默认路由
/8255.0.0.016,777,21616,777,214RFC 1918 私有 A
/12255.240.0.01,048,5761,048,574RFC 1918 私有 B(注意掩码不是 255.255.0.0)
/16255.255.0.065,53665,534RFC 1918 私有 C
/22255.255.252.01,0241,022常见部门网段
/24255.255.255.0256254经典家用/办公网段
/26255.255.255.1926462点对点与小型 VLAN
/30255.255.255.25242路由器互联常用
/31255.255.255.25422RFC 3021 点对点,不减 2
/32255.255.255.25511RFC 1122 单主机,不减 2

IP 地址本身的写法要求是四段点分十进制,每段 0 到 255。带前导零的写法(192.168.01.1)要小心:按十进制解析第 2 段是 1,但有些网络设备的解析器会当成八进制,行为不一致,最好不要用。纯数字无点的写法(3232235777)其实是 192.168.1.1 的 32 位整数形式,不是 CIDR 记法,CIDR计算器会明确拒绝而不是猜。

属性标签的判定覆盖了三类:RFC 1918 私有段(10/8、172.16/12、192.168/16)标「私有」,组播 224/4 与保留 240/4 标「保留」,其余标「公网」。另外 RFC 6598 的 100.64.0.0/10 是运营商级 NAT 段,RFC 3927 的 169.254.0.0/16 是链路本地(云主机里最常见的「169.254 开头」就是它),这两个在实际排障里出现频率很高。

输入范围、边界与精度说明

为什么必须用 >>> 0 而不是 >> 0:IPv4 的最大值 255.255.255.255 对应整数 4294967295,在 JavaScript 里超过 2^31−1 会变成有符号负数。用有符号右移会把 4294967295 变成 −1,点分十进制就变成 255.255.255.255 之外的乱值。用无符号右移则始终保持正数。拼字节时写 (a << 8 >>> 0) + Number(octet),每拼一段就转一次无符号,可以避免中间溢出——这段在第 3 段是 128 以上的地址上最容易出错(1.2.3.128 会被算成负数)。JS 的安全整数上限是 2^53−1 即 9007199254740991,远大于 2^32,所以 32 位地址用 Number 存不存在精度损失,本页所有按位运算都是精确的。

为什么填 192.168.10.37/26 算出的网络地址不是报错:主机位非零是允许的,表示「这台机器在 192.168.10.0/26 这个网段里的第 38 个地址」。直接把主机位清零得到网络地址,正是本页要做的事。但如果你期待「填了主机位就会提示不合法」,那是把它当成了严格的配置文件校验——两者用途不同。

常见误读一:把广播地址当可用地址。「地址总数 256」不等于「能装 256 台机器」。同一网段内第一台和最后一台都不能分配给普通主机,所以是 254。

常见误读二:以为 /30 能装 4 台。/30 总共 4 个地址,网络号和广播各占一个,剩 2 个可分配。路由器互联链路正好需要两端各一个,所以 /30 是点到点互联的标准选择;再往下的 /31 把两端都用上了,没有地址再分给第三跳。

常见误读三:把 172.16.0.0/12 当成 172.16.0.0 – 172.16.255.255。这是最典型的算错。/12 的掩码是 255.240.0.0,范围实际是 172.16.0.0 到 172.31.255.255,覆盖 16 个 /16(1,048,576 个地址),比按 B 类推算的 65,536 大了 16 倍。RFC 1918 之所以选 12 而不是 16,就是为了在 172.16 到 172.31 之间完整框住又不浪费一整段 B 类地址。

批量上限:本页批量模式最多接受 20 行,逐行独立计算并逐行报错——第 3 行前缀写错时,1、2 行结果照常显示,不会因为一行错就整体清空。单段 CIDR 展开成完整地址列表的上限是 65536 个,超过这个规模本页只给汇总数字(总数、可用数),不逐条列地址,避免生成几十万行的 DOM 把标签页拖死。

IPv6 不适用:地址是 128 位,前缀到 /128,掩码用十六进制写法,2 的 (128−p) 次方在 p 小的时候会超出双精度可表示范围。本页所有算式按 32 位写死,填入含冒号的 IPv6 会直接报错而不是给出错误结果。

常见问题

为什么 /31 的可用主机数是 2 不是 0?

因为「减 2」这条规则来自 IPv4 早期对网络号和广播地址的保留约定,而点到点链路两端各需一个地址、没有被「浪费」。RFC 3021 在 2001 年正式把 /31 定义为两点互连用途,明确两个地址都可分配。更早的 RFC 1878 曾经说 /31 不可用,所以老文档里会看到相反的说法——这是标准演进的历史包袱,不是算错。本页对 /31 返回 2、对 /32 返回 1(RFC 1122 单主机路由),其余前缀一律用 2^(32−p)−2。

网络地址能不能当主机用?

理论上能,工程上强烈不建议。网络地址(主机位全 0)在很多协议栈里被用作子网标识、部分 DHCP 实现会跳过地址池首尾,传统上 ARP 探测时也不响应。192.168.1.0/24 里把 .1 给网关、.0 留空就是这个约定。IPv6 里更严格,RFC 4291 明确把全 0 接口标识作为未指定地址。

掩码和通配符掩码有什么区别,能互相替代吗?

不能,但两者互为按位取反。子网掩码是连续 1 加连续 0,网络地址 = IP AND 掩码;通配符掩码是 0 加 1,匹配地址 = IP AND 通配符 == 参考地址。华为设备的 ACL、Haproxy 的后端健康检查都写通配符形式,Windows 防火墙的 IP 范围也用这种写法。把 255.255.255.0 当通配符用,会匹配到所有第二三段都相同的主机,跟预期完全不符——这是照抄配置时最常见的事故。

填 172.16.0.0/12 为什么广播地址是 172.31.255.255?

因为 /12 的掩码是 255.240.0.0,二进制是 11111111 11110000 00000000 00000000,只有前 12 位是 1。IP 的前 12 位是 172.16,主机位还有 20 个,取反后全 1,相或得到第 3 段全 255、第 4 段全 255,也就是 172.31.255.255。总共 20 个主机位即 2^20 = 1,048,576 个地址,可用 1,048,574 个。想验证的话,把 /12 拆成 16 个 /16 会看到 172.16.0.0/16 到 172.31.0.0/16,正好首尾相接覆盖上面这个范围。

IP 后面不写斜杠会怎样?

用「默认前缀长度」那个输入框的值,本页默认 24。所以填 192.168.10.37 得到的结果和 192.168.10.37/24 完全一样。这个设计是为了应对两种输入习惯:配置里常见裸 IP,而规划文档里常见完整 CIDR。如果你要算的段其实是 /8 却忘了改默认值,得到的网络地址和可用主机数会差 65536 倍,所以批量模式下每行都强制要求写完整 CIDR,不使用默认值——这是刻意的严格处理,避免默认值被误用到多行上。

为什么 255.255.255.0 之外的掩码看起来「不整齐」?

因为 RFC 4632 允许任意长度前缀,掩码不要求按类边界对齐。172.16.0.0/12 的 255.240.0.0 是 1111 1111 1111 0000 0000 0000 0000,看起来"错位"是对的;这正是 CIDR 相对于 RFC 950 有类网络的核心改进——老体系里 172 类只能是 /16(255.255.0.0),浪费了 15 个 /16 段,CIDR 把它压成 /12 一次到位。判断掩码是否合法只有一个标准:必须是连续 1 后接连续 0,中间不能有 1 夹着 0。

可用主机数会算出负数吗?

不会,本页对 /31 和 /32 分别按 RFC 3021 和 RFC 1122 特判返回 2 和 1,不套用减 2 公式。如果看到 −1 或 0,那是公式被用在了不适用它的前缀上——本质是「减 2」这个约定不适用于单主机和点到点两种场景,不是算错了。反过来说,/30 及更长的所有前缀都老老实实减 2:/30 得 2,/29 得 6,/28 得 14,/27 得 30,/26 得 62。

和单独的 IP 子网计算页有什么区别?

那一页是「给定一个 IP 和一个掩码求单个网段信息」,偏向解释这一个网段的含义。本页多了三层:子网拆分(把一段再切成 N 个更小的段并逐段列出,且带合计校验)、批量模式(20 行一次算完、逐行独立报错)、以及把结果导成 CSV 留档。日常只查「这段网有多少机器」用哪页都行,要做网段规划、批量核对多段配置、或需要导出清单,就用本页。IPv4 与 IPv6 的转换属于另一件事,走专门的 IPv4转IPv6 页。

相关工具