查找带有子网掩码的 IP 地址块的第一个地址和最后一个地址

查找带有子网掩码的 IP 地址块的第一个地址和最后一个地址

我不确定这里是否是提出这个问题的正确地方,但我认为这是提出有关网络问题的最合适的 SE 网站之一。请将其移至其他更合适的网站。谢谢。

假设我有一组 IPv4 地址,其中一个主机地址是 182.44.82.16/26。我能否找到该地址块的第一个地址和最后一个地址?

我的想法是:

182.44.82.16182.44.82.(0001 0000)其中是(0001 0000)16 的二进制数。

因为面具是/26,我想我可以这样做:

IP:   182.44.82.(0001 0000)
Mask: 182.44.82.(1111 1000)

然后这意味着我只留下了 IP 地址的最后 3 位,这使得第一个地址将是 182.44.82.16,最后一个地址将是 182.44.82.23。但这看起来不太正确。我如何计算这块地址的第一个地址和最后一个地址?

答案1

/26 表示子网为 26 位。如果每字节为 8 位,则前三个字节为 24 位,最后一个字节为 2 位。这意味着最后一个字节的形式为 (nnhh hhhh),其中 n 是子网位,ha 是主机位。16 确实是 (0001 0000),因此您得到的是 (00xx xxxx)。

因此网络地址为 (00|00 0000) -> .0,广播为 (00|11 1111) -> .63,第一个和最后一个可用地址为 .1 和 .62。

答案2

IPv4 地址是 32 位无符号 INT。

由于地址和网络掩码都可以表示为 32 位无符号 INT,并且它们密切相关,因此这很容易:

first = (addr && netmask)
last = (addr && netmask) + !netmask

答案3

子网计算器可能会有用,http://www.subnet-calculator.com/假设网络类别为“B”类,则您将获得 182.44.82.0 - 182.44.82.63

答案4

如上所述 - 任何 IP 地址块都是 182.44.82.16/26,其中 /26 定义前缀,并且要查找第一个地址和最后一个地址,您应该知道以下公式:

第一个地址 = 任何 IP 地址和网络掩码

最后一个地址 = 任何 IP 地址或(!网络掩码)

查找网络掩码:- 因为您给出的前缀是 /26,这意味着那里有 26 个 1 网络掩码 = 11111111 11111111 1111111 11000000(255.255.255.192)

!网络掩码= 00000000 00000000 00000000 00111111

现在第一个地址- 182.44.82.16 和 255.255.255.192 你将得到第一个地址 = 182.44.82.0

并且最后一个地址- 182.44.82.16 或(!网络掩码)您将获得最后一个地址 = 182.44.82.63

(使用二进制计算得到这些答案)

相关内容