16

比如说,我有一个 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 启动下一个网络。

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

4

3 回答 3

42

网络掩码是一系列 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 00010001 01)。

如果您将 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)

于 2012-10-16T18:45:29.800 回答
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
于 2017-07-30T02:31:19.997 回答
0

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

你已经知道只有最后一个数字会改变,但是这个方法可以以稍微不同的方式用于其他情况,我稍后会展示。

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 中的一位(即最后 5 位)的每一位设置为一位;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

于 2017-07-30T07:32:20.340 回答