以编程方式在网络掩码中查找主机数
时间: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,一个是广播地址,另一个是网关地址