以编程方式在网络掩码中查找主机数

时间:2020-03-06 14:24:24  来源:igfitidea点击:

我们如何以编程方式找到网络掩码支持的主机数。

例如,如果我们有一个/ 30,如何在不使用查找表的情况下查找其中有多少个IP?

最好能够使用" /"表示法,而不是255.xxx.xxx.xxx表示法。

解决方案

http://www.unixwiz.net/techtips/netmask-ref.html

这将为我们提供确定所需要做的所有逻辑。

计算公式如下:2 ^(32 netmask)2其中netmask是一个位数,如我们在上面的Cisco表示法中所示。因此,带有/ 30掩码的网络具有2个可用地址。

最低的网络号始终代表该网段本身,而最高的网络号始终代表广播……这导致公式末尾的-2.

对于标准符号,请将aaa.bbb.ccc.ddd网络掩码转换为无符号的4字节整数(许多网络库都具有此功能),然后从2 ^ 32中减去2.

其中n是'/'之后的数字

>>> def number_of_hosts(n):
...     return 2 ** (32 - n)
... 
>>> number_of_hosts(32)
1
>>> number_of_hosts(30)
4

2 ^(32-n)2,其中n是数字,在这种情况下为30。数字n为我们提供地址范围内覆盖的位数,这为网络保留了32-n位。因此,总共有2 ^(32-n)个可能的地址。我们减去网络和广播地址的2即可得到答案。

使用/ 30,我们只有4个主机。

32-30 = 2

2 ^ 2 = 4

使用/ 24,我们可以有256个主机
32-24 = 8

8 ^ 2 = 256

使用/ 23,我们可以有512个主机
32-23 = 9

9 ^ 2 = 512

这是因为子网掩码的位表示形式

255.255.255.252转换为

11111111.11111111.11111111.11111100

请注意,最后2个字节= 0。
这与32 30 = 2中的2相同

另外,我们在每个子网中丢失2个ip,一个是广播地址,另一个是网关地址