IP地址子网掩码子网主机容量的计算

536 阅读3分钟

这是我参与11月更文挑战的第4天,活动详情查看:2021最后一次更文挑战
IP基础知识:

IP是Internet Protocol的简称,即网络互联协议。IP地址用二进制来表示,每个IP地址长32bit,比特换算成字节,就是4个字节,但是二进制是计算机的数据处理模式,不符合人们的日常使用习惯,因此IP地址经常被写成十进制的形式,中间使用符号“.”分开不同的字节. 例如:192.168.1.1

IP地址有IPv4和IPv6两种,不过目前广泛使用的还是IPv4地址。

IPv4地址地址根据用途和安全性可以分为两类:

1、公网地址:公网ip地址是可以在公网(外网)中使用的,使用公用地址的计算机可以通过Internet彼此访问。

2、私网地址:私网地址只能够用在内网中,使用私有地址的计算机不能通过internet访问。

我们可以把公用ip地址比喻成11位的普通手机号码;而私有ip地址可以比喻成校园网的短号,例如520、521等。普通的11位手机号码彼此之间可以通话,但是校园网的520号码不能够和校园网以外的号码通话,只能够呼叫该校园网中的521等短号,要和其它号码通信只能够使用520对应的那个11位的手机号码.

准确描述一个子网的规模的两个条件:

  1. 子网地址
  2. 子网掩码

问题:
假设一个子网中一个主机的地址是203.123.1.135, 子网掩码是255.255.255.192,那么该子网的网络地址是多少?该子网IP地址总数是多少?该子网可分配ip地址数是多少?可分配的IP地址范围是?

求网络地址方法:主机地址与子网掩码做按位与运算

host = '203.123.1.135'.split('.')
mask = '255.255.255.192'.split('.')

# 网络地址
sub_network = []

for index, num in enumerate(host):
    sub_network.append(str(int(host[index]) & int(mask[index])))

sub_network = '.'.join(sub_network)
# 203.123.1.128

该子网IP地址总数: 因为子网掩码的前面26位为1,所以只剩下32-26=6位作为主机ip地址,即2的6次方,即64。

该子网可分配ip地址数是:因为子网网络地址和广播地址占用了2个ip,所以可分配地址为64-2=62

可分配的IP地址范围是:203.123.1.129 ~ 203.123.1.190

另外一种子网ip地址表示方法:203.1.1.0/24 表示32位的ip地址的前面24位为网络地址,剩下的8位为主机地址。

分类地址:
设计了3种长度的前缀,分别为8位,16位,32位,对应的是A类、B类和C类地址。
A类地址有2的7次方个A类网络,每个A类网络可以有2的24次方个ip地址总数; B类地址有2的14次方个A类网络,每个B类网络可以有2的16次方个ip地址总数; C类地址有2的21次方个A类网络,每个C类网络可以有2的8次方个ip地址总数.

D类地址为组播地址,E类地址为保留地址。