使用方法
- 在「IPv4 地址」填 192.168.10.37(示例值)。必须是四段点分十进制,每段 0~255,不写前导零,也不带端口。
- 在「前缀长度」填 26(示例值)。这是 CIDR 斜杠后面的数字,允许 0~32 的整数,写成 26 或 /26 都可以。
- 「子网掩码」默认留空,表示以前缀长度为准。如果只有设备配置里的
255.255.255.192,把它填进来,工具会反推出 /26 并用它覆盖前缀长度一栏。 - 结果区立刻列出网络地址 192.168.10.0、广播地址 192.168.10.63、可用主机数 62、子网掩码与通配符掩码,并给出首个与末个可用地址。
- 下方对照表默认显示 12 行,点「加载更多」按每批 12 行补全到 /0;「复制对照表」把当前表格以 TSV 送进剪贴板,「导出 CSV」生成带 BOM 的表格文件,用 Excel 打开不乱码。
IP子网计算器能解决什么问题
一是划分网段前的容量核对。要把一个 /24 切成四个部门段,查 /26 这一行就够了:每段 64 个地址、62 个可分配、掩码 255.255.255.192,四段的起始地址依次是 .0、.64、.128、.192,正好铺满 256 个地址不重叠。
二是判断两台设备到底在不在同一个子网。同一网段的判据是「双方 IP 与自己的掩码做按位与之后相等」。10.1.1.200/25 与 10.1.1.130/25 的网络地址都是 10.1.1.128,属于同一段;如果两边的掩码都是 /26,200 落在 192~255、130 落在 128~191,网络地址分别是 10.1.1.192 与 10.1.1.128,就不通了。ping 不通时先算这一项,比反复重启设备有效得多。
三是从掩码反推前缀长度。很多交换机、防火墙的界面上只写「子网掩码 255.255.255.240」,不写 /28。把掩码粘进掩码栏,工具立刻给出前缀长度,再对着同一行的可用主机数 14 判断这个网段到底能挂几台机器。
四是写 ACL 与防火墙规则时的通配符掩码。Cisco 风格的 ACL 用通配符(掩码取反)而不是掩码:/26 的掩码 255.255.255.192 对应通配符 0.0.0.63。结果区把两个值并排给出,省去手写二进制再取反的步骤。
本页不做这些事:不算 IPv6 前缀(/64 有 264 个地址,完全超出本页的 32 位范围,需要 IPv6 请用页面底部的「IPv4转IPv6转换器」);不做路由汇总(把连续多个 /24 合并成一个 /22 这类超网运算);不扫描网段里哪些地址在线;不查 IP 归属地与 AS 号;不对回环、链路本地、组播等特殊段做语义过滤,只按位算。
计算原理:掩码位、主机位与 RFC 3021 特例
IPv4 地址在机器里就是一个 32 位无符号整数,192.168.10.37 等于 3232238117。前缀长度 p 对应的子网掩码是「高位连续 p 个 1、其余为 0」的 32 位数;p=26 时二进制是 11111111.11111111.11111111.11000000,写成点分十进制就是 255.255.255.192。剩下的 32 − p = 6 位叫主机位 h,一个子网能容纳 2h 个地址,本页共 26 = 64 个。
三个关键量都是位运算:网络地址 = IP 按位与(AND) 掩码,把主机位全部清零;通配符掩码 = 掩码按位取反,本页为 0.0.0.63;广播地址 = 网络地址按位或(OR) 通配符,把主机位全部置一,得到 192.168.10.63。可用主机数之所以是 2h − 2 而不是 2h,是因为主机位全 0 的那个地址(192.168.10.0)是网段标识、主机位全 1 的那个地址(192.168.10.63)是广播地址,两者都不能分配给主机。RFC 950 定下这条子网划分规则,所以 /26 是 64 − 2 = 62。
/31 和 /32 是两个必须单说的特例。按 2h − 2 套下去,/31 只剩 2 − 2 = 0 个可用地址,/32 只剩 1 − 2 = −1,看着像是没法用。RFC 3021《Using 31-Bit Prefixes on IPv4 Point-to-Point Links》专门规定:/31 用于点对点链路时,两个地址分别给链路两端,都能用,可用主机数为 2;/32 表示单主机路由,只有一个地址,可用主机数为 1。所以本页在 /31 与 /32 两行取的是 2 和 1,其余各档才是 2h − 2。如果你的设备不支持 RFC 3021,仍应避开 /31,改用 /30 的 2 个可用地址。
实现上最容易翻车的两处,本页都做了处理。第一处是 JavaScript 的位移次数按 32 取模:0xffffffff << (32 - p) 在 p=0 时变成 << 32,引擎按 << 0 处理,结果是 4294967295,也就是把 /0 的掩码算成 255.255.255.255;本页对 p=0 直接返回 0。第二处是位运算结果是有符号 32 位:0xffffffff 在 JS 里读出来是 −1,取反后的通配符也会是负数,不补 >>> 0 转无符号,广播地址就会打印成负数。拼接 IP 整数时用累加 n * 256 + 段值 而不是 (a<<24)|(b<<16)|…,是因为首段大于 127 时 a<<24 会溢出到符号位。
标准依据:无类别编址与前缀记法见 RFC 4632(CIDR),私网地址段见 RFC 1918,点对点 /31 特例见 RFC 3021,子网划分保留网络号与广播号的规则见 RFC 950。数值上限方面,IPv4 全部地址是 232 = 4294967296,小于 JavaScript 的安全整数上限 9007199254740991,所以整段算术用普通 Number 也不会丢精度,不需要 BigInt。
完整示例:192.168.10.37/26
IP子网计算器打开时的默认值就是这一组:IP 填 192.168.10.37、前缀长度填 26、掩码栏留空。逐步演算如下:
- IP 转整数:192×2563 + 168×2562 + 10×256 + 37 = 3232238117;
- 掩码 /26 =
11111111.11111111.11111111.11000000,点分十进制 255.255.255.192,最后一段 11000000₂ = 192; - IP 与掩码按位与:
11000000.10101000.00001010.00000000→ 网络地址 192.168.10.0,整数 3232238080; - 掩码取反得通配符 0.0.0.63,与网络地址按位或 → 广播地址 192.168.10.63;
- 可用地址区间是网络地址加一到广播地址减一:192.168.10.1 ~ 192.168.10.62;
- 主机位 h = 32 − 26 = 6,地址总数 26 = 64,可用主机数 64 − 2 = 62。
为什么 .37 落在 .0 这一段?因为 /26 的块大小是 64,地址按 0~63、64~127、128~191、192~255 四块划分,37 落在第一块里。把 IP 换成 192.168.10.70,网络地址就变成 192.168.10.64;换成 192.168.10.200,网络地址是 192.168.10.192。同一台机器的网关只要写错成 192.168.10.1 之外的另一块,就会出现「能 ping 通同段设备、出不了外网」的典型症状。
| 项目 | 192.168.10.37/26 的结果 | 怎么来的 |
|---|---|---|
| 网络地址 | 192.168.10.0 | IP AND 掩码,主机位清零 |
| 广播地址 | 192.168.10.63 | 网络地址 OR 通配符,主机位置一 |
| 可用主机数 | 62 | 26 − 2,去掉网络地址与广播地址 |
| 子网掩码 | 255.255.255.192 | 前 26 位为 1 |
| 通配符掩码 | 0.0.0.63 | 掩码按位取反,ACL 用 |
| 地址总数 | 64 | 232−26 |
| 块大小 | 64 | 同一 /26 内第四段的变化步长 |
前缀长度、掩码与可用主机数对照表
下面这张表覆盖 /32 到 /0 全部 33 档,页面上默认展开 12 行。第四段为 0 的前缀,通配符直接就是第四段的全 1;跨到第三段以后(/23 及更短),通配符会逐段向左扩展,这也是判断「一个 /22 到底覆盖几个 /24」的捷径——通配符第三段是 3,说明它覆盖 4 个 /24。
| 前缀 | 子网掩码 | 地址总数 | 可用主机数 | 典型用途 |
|---|---|---|---|---|
| /32 | 255.255.255.255 | 1 | 1 | 单主机路由(RFC 3021) |
| /31 | 255.255.255.254 | 2 | 2 | 点对点链路(RFC 3021) |
| /30 | 255.255.255.252 | 4 | 2 | 路由器互联、不支持 /31 时的点对点 |
| /29 | 255.255.255.248 | 8 | 6 | 小型设备网段 |
| /28 | 255.255.255.240 | 16 | 14 | 服务器带外管理口 |
| /27 | 255.255.255.224 | 32 | 30 | 小型办公区 |
| /26 | 255.255.255.192 | 64 | 62 | 部门网段(本页示例) |
| /25 | 255.255.255.128 | 128 | 126 | 一个 /24 对半分 |
| /24 | 255.255.255.0 | 256 | 254 | 最常见的园区网段 |
| /22 | 255.255.252.0 | 1024 | 1022 | 4 个 /24 汇总 |
| /16 | 255.255.0.0 | 65536 | 65534 | 192.168.0.0/16 私网 |
| /8 | 255.0.0.0 | 16777216 | 16777214 | 10.0.0.0/8 私网 |
| /0 | 0.0.0.0 | 4294967296 | 4294967294 | 默认路由,掩码必须是全 0 |
三个 RFC 1918 私网段单独列一次,方便直接对号入座:
| 私网段 | 网络地址 | 广播地址 | 地址总数 | 可用主机数 | 掩码 |
|---|---|---|---|---|---|
| 10.0.0.0/8 | 10.0.0.0 | 10.255.255.255 | 16777216 | 16777214 | 255.0.0.0 |
| 172.16.0.0/12 | 172.16.0.0 | 172.31.255.255 | 1048576 | 1048574 | 255.240.0.0 |
| 192.168.0.0/16 | 192.168.0.0 | 192.168.255.255 | 65536 | 65534 | 255.255.0.0 |
输入范围、边界与取整规则
- IP 必须是四段、每段 0~255 的十进制整数。段数不对(如 192.168.1)、带端口(192.168.1.1:80)、超出 255(第四段 999)都会被拒绝,报错会指出是第几段出的问题。
- 拒绝前导零。
192.168.010.1这类写法会被 C 的inet_aton当成八进制解析成 192.168.8.1(010₈ = 8),而 JavaScript 的Number('010')是十进制 10,同一个字符串在不同软件里含义不同,所以本页直接报错而不猜。 - 前缀长度 0~32 的整数。小数、负数、空值、33 及以上都会被拒绝。掩码栏填了非连续掩码(例如 255.0.255.0)也会报错——那种值在 CIDR 里没有对应的前缀长度,通常是把两段掩码抄串了。
- 全程整数运算,不存在四舍五入。网络地址、广播地址、可用主机数都是位运算或 2 的整数次幂的结果,不会有浮点误差。唯一的数量级上限是 /0 时的 232 = 4294967296,仍在安全整数范围内。
- /31 与 /32 的可用主机数按 RFC 3021 取 2 和 1,不是 2h − 2 算出来的 0 与 −1;对照表里这两行带了文字标注,避免和其他工具给出 0 的结果对不上时误判成 bug。
- 这个 IP子网计算器不做特殊网段的语义过滤。填 127.0.0.1/8 会照常算出 127.0.0.0 与 127.255.255.255,填 169.254.x.x/16、224.0.0.0/4 也一样——环回、链路本地、组播这些含义需要你自己判断,工具只保证位运算正确。
- 私有地址判定不在结果里。本页给出网络地址与掩码,不标注「这是私网地址」。要判断可以对照上面那张 RFC 1918 表:10/8、172.16/12、192.168/16 三段之内才是私网。
常见问题
为什么可用主机数是 2h − 2,而不是 2h?
因为主机位全 0 的那个地址是网段本身的标识(192.168.10.0),主机位全 1 的那个地址是广播地址(192.168.10.63),两者都不能分配给设备。RFC 950 定义的子网划分规则保留这两个地址,所以 /26 的 64 个地址里真正能用的只有 62 个。这也是 /30 只能接两台设备的点对点链路的原因。
/31 和 /32 为什么要单独处理?
按 2h − 2 算,/31 只有 0 个可用地址、/32 会算出 −1,看着都没法用。RFC 3021 规定:/31 用在点对点链路上时,两个地址分别给链路两端,可用数为 2;/32 表示单主机路由,可用数为 1。IP子网计算器对这两档取 2 和 1,并在对照表里标注了出处。
我在别处算 /31 得到 0 个可用地址,哪个对?
两种口径都存在,取决于链路是否支持 RFC 3021。/31 的省地址做法要求两端设备都支持点对点 /31,老式设备可能不支持,此时仍要用 /30(4 个地址、2 个可用)。算出来 0 的工具是按 2h − 2 的老口径,本页按 RFC 3021 的新口径。选网段时按你设备的支持情况定。
为什么掩码栏填 255.0.255.0 会报错?
因为子网掩码必须是「高位连续 1」,255.0.255.0 的二进制是 11111111.00000000.11111111.00000000,中间断开了,无法对应任何一个前缀长度。这种情况通常是从两个不同设备上各抄了一段掩码拼在一起,或者把反掩码(通配符)当掩码填了。通配符 0.255.0.255 的对应掩码才是 255.0.255.0。
192.168.10.37/26 的网关能写 192.168.10.63 吗?
不能。192.168.10.63 是这个 /26 的广播地址,主机位全 1;同理 192.168.10.0 是网段标识,也不能配给设备。可用的网关只能从 192.168.10.1 到 192.168.10.62 里选,工程上习惯取 .1 或 .254 这类看起来好记的地址。
为什么 192.168.10.70/26 的网络地址不是 192.168.10.0?
因为 /26 把第四段的 256 个地址按每块 64 个切开:0~63、64~127、128~191、192~255。70 落在 64~127 这一块,所以网络地址是 192.168.10.64、广播地址是 192.168.10.127。判断落在哪一块,用段值除以块大小取整再乘回去即可,这也是「配错掩码导致同楼不同网段」的常见原因。
一张设备界面只写 255.255.255.240,是 /几?
是 /28。把 255.255.255.240 填进掩码栏,工具会反推出 28,同时给出该子网 16 个地址、14 个可用主机数。快速换算的办法是看最后一段里有几个 1:240 = 11110000₂,4 个 1,24 + 4 = 28。
结果里的「通配符掩码」是什么?什么时候用?
通配符掩码(wildcard mask)就是子网掩码按位取反,/26 对应 0.0.0.63,Cisco 风格 ACL 用它表示「哪些位不参与比较」。注意它和反掩码在概念上等价但用法相反:ACL 里写 permit 192.168.10.0 0.0.0.63 表示匹配整个 /26,写成 255.255.255.192 反而会错得离谱。
相关工具
- IPv4转IPv6转换器:把 IPv4 地址映射成 IPv6 写法,本页只管 32 位 IPv4,跨版本换算走它。
- IP转二进制转换器:把地址逐段展开成 32 位二进制串,想手工验证本页的掩码按位与结果可以对照。
- 数字转比特转换器:把十进制掩码值转成比特串,适合核对 /0 与 /32 这类极端档位。
- 比特转数字转换器:反向把 32 位比特串还原成点分十进制的原始数值。
- 十六进制查看器:看抓包或配置导出的二进制内容时,用来核对地址字节序。
- MAC地址查询:从网卡物理地址的 OUI 前缀查厂商,排查二层问题时和本页配合使用。
- chmod权限计算器Unix权限:同样是按位组合的权限位计算,理解掩码与位运算可以互相印证。
- 开发者工具:查看全部开发者工具。