IP 子网计算器:CIDR、子网掩码和主机范围
根据 IP 地址和 CIDR 前缀计算 IPv4 子网详情:网络地址和广播地址、可用主机范围、子网掩码及通配掩码。
IP Subnet Calculator
Results
Subnet Mask in Binary
Results follow RFC 791 (IPv4 addressing), RFC 4632 (CIDR notation), RFC 950 with RFC 919 and RFC 922 (network and broadcast reservation), and RFC 3021 (/31 point-to-point links).
文档
IP 子网计算器
IP 子网计算器可根据一个 IPv4 地址和前缀长度计算其背后的网络详细信息。根据这两个输入,它可以找出网络地址、广播地址、可用主机地址范围、子网掩码和通配符掩码。
计算器的功能
该工具接受以四个点分隔数字表示的 IPv4 地址,例如 192.168.1.10,以及从 0 到 32 的前缀长度。也可以将二者写成 CIDR 形式,例如 192.168.1.10/24:/24 部分会自动移入前缀字段。
计算器会返回:
- CIDR 表示法:以地址/前缀形式表示的网络,例如 192.168.1.0/24。
- 网络地址:地址块中的第一个地址,表示网络本身。
- 广播地址:地址块中的最后一个地址。发送到该地址的消息会到达子网中的每台主机。
- 可用主机范围:设备实际可以使用的第一个和最后一个地址。
- 可用主机数和地址总数:地址块包含多少个地址,以及其中有多少个可供设备使用。
- 子网掩码和通配符掩码:点分形式的掩码,例如 255.255.255.0,以及它的反掩码 0.0.0.255。
- 逐位展开的子网掩码,每个八位组包含八个位。
结果遵循 RFC 791(IPv4 编址)、RFC 4632(CIDR 表示法)、RFC 950 以及 RFC 919 和 RFC 922(网络地址和广播地址的保留规则),还有 RFC 3021(/31 点到点链路)。
子网划分的工作原理
一个 IPv4 地址是一个 32 位数。人们将其写成四个八位组,每个八位组包含 8 位,取值范围为 0 到 255。前缀长度将这 32 位分成两部分。前缀长度所指定数量的前几位表示网络,其余位表示该网络中的主机。
/24 网络将 24 位用于网络部分,留下 8 位用于主机。八个主机位可提供 2⁸ = 256 个地址。/26 网络只留下 6 个主机位,因此包含 2⁶ = 64 个地址。
子网掩码以地址形式表示同样的划分:每个网络位对应一个 1 位,每个主机位对应一个 0 位。对于 /24,结果是 255.255.255.0。通配符掩码会翻转子网掩码的每一位。路由器访问控制列表(尤其是思科设备上的访问控制列表)使用通配符掩码匹配地址,因此该工具会同时显示两者。
子网公式
对于介于 0 和 30 之间的前缀长度 p,计算器应用以下由 RFC 950 和 RFC 4632 定义的规则:
- 子网掩码 = 将 32 位字的前 p 位设为 1。
- 网络地址 = IP 地址 AND 子网掩码(按位 AND 只在两个输入都为 1 的位置保留该位)。
- 广播地址 = 网络地址 OR 通配符掩码(将所有主机位设为 1)。
- 地址总数 = 2⁽³²⁻ᵖ⁾。
- 可用主机数 = 2⁽³²⁻ᵖ⁾ − 2。减去的两个地址是网络地址和广播地址,RFC 950 与 RFC 919 将它们保留。
- 第一个可用主机地址 = 网络地址 + 1。最后一个可用主机地址 = 广播地址 − 1。
两种前缀长度遵循不同的规则。/31 恰好包含 2 个地址,RFC 3021 规定在点到点链路上这两个地址都可作为主机使用,且完全没有广播地址。/32 表示单个地址:地址总数为 1,可用数为 1,没有广播地址。对于这两种情况,该工具将第一个地址标记为“前缀基地址”,而不是“网络地址”,因为这两个地址块都不保留地址来表示网络。
每个结果都来自对一个 32 位数进行的算术运算。该工具从不逐个列出地址,因此覆盖全部 4,294,967,296 个 IPv4 地址的 /0,计算速度与 /32 一样快。
算例
对于地址 10.128.7.33,前缀长度为 /26:
- 子网掩码:26 个一位后跟 6 个零位,即 11111111.11111111.11111111.11000000,写成十进制为 255.255.255.192。
- 网络地址:将地址与掩码进行 AND 运算。前面三个八位组保持不变。在最后一个八位组中,33 的二进制形式是 00100001;与 11000000 进行 AND 运算得到 00000000,即 0。网络地址为 10.128.7.0,因此 CIDR 表示法为 10.128.7.0/26。
- 广播地址:将所有 6 个主机位置为 1。最后一个八位组变为 00111111,即 63。广播地址为 10.128.7.63。
- 计数:2⁶ = 64 个地址总数,64 − 2 = 62 个可用主机地址。
- 主机范围:从 10.128.7.1 到 10.128.7.62。
- 通配符掩码:子网掩码的反掩码,即 0.0.0.63。
使用工具默认输入 192.168.1.10/24 的第二个示例:网络为 192.168.1.0,广播为 192.168.1.255,主机范围为 192.168.1.1 到 192.168.1.254,可用主机数为 254,地址总数为 256,子网掩码为 255.255.255.0,通配符掩码为 0.0.0.255。
工具遵循的约定
拒绝以零填充的八位组。 该工具拒绝 010.1.1.1,而不会将其读取为 10.1.1.1。这是有意为之。POSIX inet_aton 函数被 ping、curl 以及大多数操作系统解析器使用,它会将以零开头的八位组视为八进制数,因此对这些程序而言,010.1.1.1 表示 8.1.1.1。十进制或八进制的猜测不可能与每种读取方式一致,因此该工具两者都不接受。出于同样原因,/08 形式的前缀也会被拒绝。
主机数减去两个。 有些计算器将地址块的原始大小报告为主机数。该工具遵循 RFC 950:在任何 /0 到 /30 的地址块中,全零主机部分表示网络,全一主机部分表示广播,因此两者都被排除;/24 有 254 个可用主机,而不是 256 个。
/31 有两个可用主机。 早期文献在 RFC 3021(发表于 2000)之前撰写,将 /31 称为不可用,因为减去两个保留地址后可用数为零。RFC 3021 取消了点到点链路上的这两个保留规则,路由器也已支持该做法数十年,因此该工具报告 2 个可用主机,且没有广播地址。
接受从 /0 到 /32 的任何前缀。 /0 是覆盖整个 IPv4 地址空间的有效地址块,这与路由表中将 0.0.0.0/0 作为默认路由的用法一致。
仅支持 IPv4。 IPv6(RFC 4291)使用 128 位地址和不同的表示法,不在该工具的范围内。该工具也不会标记私有地址或回环地址等特殊用途地址范围(RFC 6890);它只报告地址算术结果。
常见问题
/24 有多少个可用主机? 254. /24 留下 8 个主机位,因此得到 2⁸ = 256 个地址。其中两个被保留:网络地址和广播地址。因此设备可使用 254 个地址。
什么是通配符掩码? 子网掩码的逐位反掩码。子网掩码为 1 的位置,通配符掩码为 0,反之亦然。对于掩码 255.255.255.0,通配符掩码为 0.0.0.255。许多路由器上的访问控制列表使用通配符掩码描述规则匹配哪些地址。
为什么 /31 不显示广播地址? /31 只包含两个地址。如果一个保留给网络、另一个保留给广播,就不会剩下可用地址,因此 RFC 3021 将 /31 定义为点到点链路,其中两个地址都作为主机使用,不存在广播地址。计算器报告 2 个可用主机,并将广播标记为不适用。
为什么拒绝 010.1.1.1,而不是将其读取为 10.1.1.1? 因为各操作系统对普通十进制读取的处理并不一致。POSIX inet_aton 会将以零开头的八位组读取为八进制数,因此在大多数系统中,010 表示 8。拒绝该输入是唯一不会悄悄偏离用户自己计算机处理方式的做法。
地址总数和可用主机数有什么区别? 地址总数是地址块的完整大小,即 2 的(32 减去前缀长度)次方。可用主机数是该数量减去两个保留地址,但 /31 例外(两个地址都可用),/32 也例外(单个地址就是主机)。
192.168.1.10/24 的网络地址表示什么? 它是 192.168.1.0,通过保留地址的前 24 位并将主机位设为零得到。它标识整个子网,不能分配给设备。
参考文献
- Postel,J.《RFC 791:互联网协议》。IETF,1981。
- Mogul,J. 和 J. Postel。《RFC 950:互联网标准子网划分规程》。IETF,1985。
- Mogul,J.《RFC 919:广播互联网数据报》。IETF,1984。
- Fuller,V. 和 T. Li。《RFC 4632:无类别域间路由(CIDR)》。IETF,2006。
- Retana,A. 等。《RFC 3021:在 IPv4 点到点链路上使用 31 位前缀》。IETF,2000。