Networking 从子网掩码计算IP的范围

Networking 从子网掩码计算IP的范围,networking,tcp,ip,subnet,Networking,Tcp,Ip,Subnet,比如说,我有一个子网255.255.255.242,并且我在该子网中有一个已知的IP,比如说192.168.1.101 现在我计算IP范围的方法是: 在子网掩码中,找到不是255的第一个八位字节。在我的例子中,它是第四个八位组,第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

比如说,我有一个子网255.255.255.242,并且我在该子网中有一个已知的IP,比如说192.168.1.101

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

在子网掩码中,找到不是255的第一个八位字节。在我的例子中,它是第四个八位组,第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启动下一个网络


我想确认一下,这样做是否正确,是否最简单。

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

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

如果您使用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
掩码的补码(按位非)提供范围的大小:

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)

多亏了你们两位,乔和迪格123,但是,乔的答案可以用/28子网来澄清,而不是说/27女巫更接近他的例子,介于92-112之间

所以,乔,如果我理解你的意思,你是说你取了子网八位组;确定增量位值并将其添加到SN八位字节中的子网值中,这应给出范围并提供网络、第一台主机、最后一台主机和广播地址的值。对吗?i、 在我的例子中,第四个八位字节是240,增量是16。由于第四个八位字节中的值是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

为Joe的答案添加一些东西:如果您希望以更编程的方式执行操作(假设您了解按位运算符)

您已经知道,只有最后一个数字会发生变化,但是这个方法可以以稍微不同的方式用于其他情况,如我稍后所示

Number from mask: 224
Number from IP:   101
使用python或您喜爱的计算器程序:

  • 起始地址字节:224&101=96
  • 结束地址字节:(~224&255)| 96=127
(~224&255)
只需将244位中没有的每一位(即最后5位)设置为1;或者用
96
复制结果,只需从第一个地址复制前3位

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


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

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

同样,只有一个数字需要处理,现在是第二位的数字:168

  • 起始地址字节:224&168=160
  • 结束地址字节:(~224&255)| 160=191
现在,左边的数字(第一个位置)保持不变(192),右边的其余数字的范围是0到255(取决于他们的要求,也可能是1到254)


因此,解决方案是:192。160.0-192。191.255.255

255.255.255.242不是有效的子网掩码。位子上不能有空隙。好的,你能帮我计算一下细节吗?非常感谢。但我想知道是否有错误。如果我没有弄错的话,96到.127是32个元素。那么是.127还是.126?你是对的,因为基于0的数学。该范围内有32个有效地址,但0是其中之一,因此上限为(n+31)。“…您使用子网八位组…”否。八位组与子网无关。带点的十进制表示法只是为了让人们更容易阅读。IPv4地址只是32位整数。你真的需要在二进制中做子网,然后一切都是有意义的,很容易看到。当涉及到子网时,忘记八位组,否则你将自己设置为失败。