CIDR / IP 子网计算器
转换使用 BigInt 计算 IPv4/IPv6 CIDR 块的网络地址、广播地址、掩码、主机范围与类别。
- 网络地址
- 子网掩码
- 通配符
- 广播地址
- 首个主机
- 末个主机
- 总地址数
- 可用主机数
- IP 类别
- IP 版本
- 范围
本页内容
什么是 CIDR?#
CIDR 全称 无类别域间路由(Classless Inter-Domain Routing),就是 a.b.c.d/n 这种用来描述”一段 IP 地址块”的写法。斜杠后面的数字是前缀长度——它告诉你前多少位是固定不变的,剩下的位才用来区分这个块里的每一台主机。192.168.1.0/24 把前 24 位(也就是 192.168.1 这部分)锁死,最后一个字节随意,于是正好是 256 个地址——你家路由器最常用的那个段。
CIDR 出现的原因,是更早的”A类 / B类 / C类”体系只发放三种死板大小的地址块,浪费极其严重。CIDR 让你能把一段地址空间切成任意 2 的幂次大小(/23、/27、/29 都行),地址利用率因此高得多。同样的写法也是你写防火墙白名单、路由表条目、云平台安全组、DNS ACL 时通用的语言。
本页解析一个 CIDR(或一个裸 IP 地址),把子网的全部细节摊给你看:网络地址、广播地址、子网掩码、通配符掩码、第一个/最后一个可用主机、地址总数、可用主机数、传统 IP 类别、IP 版本,以及这个地址是不是落在私有段(RFC 1918 / ULA)里。IPv4 和 IPv6 都支持,并用 BigInt 保留完整的 128 位精度——普通 JavaScript 的 Number 超过 2^53 就会悄悄算错 IPv6。
怎么使用#
- 在 输入 框里填一个 CIDR 或地址。页面默认填的是
192.168.1.130/24,直接改成你自己的就行。只填一个裸地址时,IPv4 默认按/32、IPv6 默认按/128处理。 - 结果面板会随着你的输入实时刷新。各字段含义:网络地址(子网的起始地址,主机位全部清零)、子网掩码(前缀对应的掩码)、通配符掩码(仅 IPv4,是掩码按位取反,思科风格 ACL 里用)、广播地址(仅 IPv4,IPv6 没有)、首个/末个主机(可分配的范围)、总数、可用数、类别(传统的 A/B/C/D/E)、版本、范围(Private 私有 / Public 公网)。
- 点 示例 重新载入默认例子,点 清空 清空输入。
主要特性#
- IPv6 全精度。 所有运算都在 BigInt 里做,所以哪怕是
/48、/64这种地址数动辄上百万亿的 IPv6 块,结果也是精确的,而不是浮点近似。 - 边界前缀的主机数也算得对。
/31按 RFC 3021 点对点链路处理(2 个可用,不预留广播);/32是单主机;/30正确给出 2 个可用。本页不会无脑地对每个前缀套2^(32-p) - 2。 - 识别 RFC 1918 与 ULA。 私有段(IPv4 的
10/8、172.16/12、192.168/16;IPv6 的fc00::/7、fe80::/10、::1)会在”范围”字段里标出来,一眼就能判断这段地址能不能在公网路由。 - 通配符掩码。 写
permit ip any 192.168.1.0 0.0.0.255这类规则时很顺手——它的掩码正好和子网掩码反过来。 - IPv6 按 RFC 5952 压缩。 输出地址会把最长的一段 0 折叠成
::、小写、不带前导零——防火墙和路由器认的标准形式。 - 支持 IPv4 映射的 IPv6。 像
::ffff:192.168.1.1这种写法能正确解析并归一化。
实例演示#
用默认的 192.168.1.130/24:
网络地址: 192.168.1.0
子网掩码: 255.255.255.0
通配符掩码: 0.0.0.255
广播地址: 192.168.1.255
首个主机: 192.168.1.1
末个主机: 192.168.1.254
总数: 256
可用数: 254
类别: C
版本: IPv4
范围: Private(私有)
注意:你填进去的 192.168.1.130 是这个块里面的一台主机,并不是网络地址。网络地址是把主机位掩掉之后的结果。可用数 254 = 总数 256 − 网络地址 1 − 广播地址 1——这就是为什么大家口头常把 /24 叫做”254 个可用主机”。
换成点对点链路就用 /31:
输入: 10.0.0.0/31
可用数: 2 (RFC 3021:两个地址都可用,不预留广播)
首个主机: 10.0.0.0
末个主机: 10.0.0.1
IPv6 可以试 2001:db8::/64——局域网子网的标准大小:
网络地址: 2001:db8::
总数: 18446744073709551616 (2^64——块内每个地址都可用,IPv6 没有广播)
范围: Public(公网)
常见问题#
为什么 /24 是 254 个可用主机,不是 256?#
每个 IPv4 子网(/31 和 /32 除外)都有两个地址被预留:网络地址(主机位全 0)代表子网本身,广播地址(主机位全 1)用来一次性发给本子网所有主机。所以 /24 一共有 2^8 = 256 个地址,但你能分配给网卡的只有 256 − 2 = 254 个。
/31 是干什么的?看起来一个可用主机都没有。#
按老规则 /31 会算出 2 − 2 = 0 个可用主机,等于没用。RFC 3021 重新定义了 /31,专门用于点对点链路(就是两台路由器直连那种):两个地址都可用,不再预留广播。本页遵循 RFC 3021,所以 /31 显示 2 个可用。如果你用的设备是 2000 年以前的老古董,它可能还认老规则。
支持 IPv6 吗?#
完全支持。IPv6 前缀最大到 /128(单个地址),地址运算跑在 BigInt 上,所以哪怕是 /48、/32 这种运营商级别的块也是精确的。注意 IPv6 没有广播地址,也没有传统类别——块里每个地址都可用,所以”可用数”等于”总数”。“范围”字段仍会把 ULA(fc00::/7)和链路本地(fe80::/10)标为私有。
为什么工具显示的网络地址跟我填的 IP 不一样?#
因为你填的 IP 是这个块里面的一台主机,不是块的起始地址。网络地址 = 你的 IP AND 子网掩码,这一步会把主机位清零。你填 192.168.1.130/24,描述的是”192.168.1.0/24 这个块里的 .130 主机”——/24 块本身从 .0 开始。如果你其实想表达一个从 .128 开始的块,那就写 192.168.1.128/25。
为什么我的地址被标成了”私有”?#
因为它落在了保留给内部使用、不在公网路由的范围内:IPv4 的 10.0.0.0/8、172.16.0.0/12、192.168.0.0/16,或者 IPv6 的 fc00::/7(唯一本地)和 fe80::/10(链路本地)。这些段里的流量不上 NAT 或不打隧道就到不了公网。如果你在配云平台安全组或对外服务,绝大多数情况下你要的是一个公网地址。