我不确定这里是否是提出这个问题的正确地方,但我认为这是提出有关网络问题的最合适的 SE 网站之一。请将其移至其他更合适的网站。谢谢。
假设我有一组 IPv4 地址,其中一个主机地址是 182.44.82.16/26。我能否找到该地址块的第一个地址和最后一个地址?
我的想法是:
182.44.82.16
182.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
(使用二进制计算得到这些答案)