根据子网掩码计算IP范围

问题描述 投票:0回答:4

假设我有一个子网 255.255.255.242,并且该子网内有一个已知 IP,例如 192.168.1.101。

现在我计算IP范围的方法是这样的:

在子网掩码中,找到第一个不是 255 的八位字节。在我的示例中,它是第 4 个八位字节,它是 242。所以取 256 并减去 242,得到 14。所以我们现在知道这些网络, 192.168.1.x 网络,范围均为 14。因此,开始列出它们...

192.168.1.0
192.168.1.14
192.168.1.28
....42
....56
....70
....84
....98
....112

到这里我们就可以停下来了。我的地址 192.168.1.101 属于 .98 网络。 .98 包含从 192.168.1.98 到 192.168.1.111 的所有 IP 地址,因为我们知道 192.168.1.112 开始下一个网络。

我想确认一下,这是否是正确且最简单的过程。

network-programming tcp ip subnet
4个回答
43
投票

网络掩码是一系列 1 位。 这些位必须是连续的,没有 0 间隙。 任何使用 1 位的内容都是网络的一部分,其余的任何内容对于该网络内的主机分配都是有效的。 255.255.255.224 有 27 个“1”位,这意味着它是 /27 网络。

要计算此权利,您需要将 IP 转换为数字表示形式。 例如,255.255.255.224 为 11111111 11111111 11111111 11100000,即 4294967264。192.168.1.101 为 3232235877 (11000000 10101000 00000001 01100101)。

如果您将 IP 与网络掩码按位“与”,就会得到网络地址。 这是该范围的底端:

11111111 11111111 11111111 11100000  (mask)
11000000 10101000 00000001 01100101  (ip)
-----------------------------------
11000000 10101000 00000001 01100000  = 192.168.1.96  (network address)

掩码的补码(按位非)给出了范围的大小:

00000000 00000000 00000000 00011111  = 31

因此,该 IP 的范围在 192.168.1.96 - 192.168.1.127 之间。 (127 = 96 + 31)


0
投票

感谢 Joe 和 dig_123,但是,Joe 的答案可以用 /28 子网来澄清,而不是所述的 /27 女巫会更接近他的示例并落在 92-112 之间。

所以,乔,如果我理解你的观点,你是说你采用了子网八位字节;确定增量位值并将其添加到 SN 八位字节中的子网值,这应该给出范围并提供网络、第一个主机、最后一个主机和广播地址的值。这是正确的吗?即在我的示例中,第 4 个八位字节为 240,增量为 16。由于第 4 个八位字节中的值为 96,因此它落在 16 位增量的计算范围内,实际上它落在 96 和 112 之间,即16 位范围之一,因此我们可以得出结论,本示例的网络地址是:

0-15
15-31
32-47
48-63
64-79
80-95
96-111
112-127
128
NW 192.168.1.96 /28
1st 192.168.1.97 /28
Last 192.168.1.110 /28
Bcast 192.168.1.111 /28

0
投票

在 Joe 的答案中添加一些内容:如果您想以更多编程方式进行操作(假设了解按位运算符)。

您已经知道只有最后一个数字会改变,但对于其他情况,此方法的使用方式可能略有不同,如我稍后所示。

Number from mask: 224
Number from IP:   101

使用例如python 或您最喜欢的计算器程序:

  • Start address byte:         224 & 101 = 96
  • End address byte:   (~224 & 255) | 96 = 127

(~224 & 255)
只是将 244 中不是 1 的每一位(即最后 5 位)设置为 1;将结果与
96
进行或运算只会复制第一个地址的前 3 位。

因此,结果是预期的:192.168.1.96 - 192.168.1.127.


如果掩码在最后一个数字之前结束,则有一个非常相似的过程;让我们举个例子:

让我们使用 255.224.0.0 作为掩码,以及相同的 IP 地址 (192.168.1.101)。

再次只有一个数字需要处理,即现在第二位的数字:168。

  • Start address byte:         224 & 168 = 160
  • End address byte:  (~224 & 255) | 160 = 191

现在,左边(第一个位置)的数字保持不变(192),右边其余的数字范围从0到255(根据他们的要求,也可能是从1到254)。

所以解决方案是:192.160.0.0 - 192.191.255.255


0
投票

了解多个子网的范围就这么简单:

您从一个八位字节中借用的位数,假设您借用了 3 位:它将像这样:2 Exp3 = 8 8 – 2= 6 子网数量。

在这种情况下,切碎的八位字节(剩余的 ceros)中的剩余位是其中的 5 个,对吗? 那么 2 Exp5= 32 32 - 2= 30 上面得到的 6 个子网中每个子网的主机数量。

© www.soinside.com 2019 - 2024. All rights reserved.