某单位申请到一个155.102.103.0/24的网络,需将其划分为不小于20,50,100的三个子网,请问每个子网的网络地址、子网掩码、起始IP地址、结束IP地址分别是什么?
将155.102.103.0/24网络划分为不小于20、50、100的三个子网:
划分20个子网,每个子网最少可容纳(2^5-2)=30台主机 网络地址:155.102.103.0 子网掩码:255.255.255.224 (前3个8位为1,第4个8位为0) 起始IP地址:155.102.103.1 结束IP地址:155.102.103.30
划分50个子网,每个子网最少可容纳(2^6-2)=62台主机 网络地址:155.102.103.0 子网掩码:255.255.255.192 (前3个8位为1,第4个8位为0) 起始IP地址:155.102.103.1 结束IP地址:155.102.103.62
划分100个子网,每个子网最少可容纳(2^7-2)=126台主机 网络地址:155.102.103.0 子网掩码:255.255.255.128 (前3个8位为1,第4个8位为0) 起始IP地址:155.102.103.1 结束IP地址:155.102.103.126
不知道你这个问题是否已经解决, 如果还没有解决的话:假如某子网有10台主机,那么对于这个子网需要的IP地址是: 10(主机ip) + 1(指这个网络连接时所需的网关地址) + 1(网络地址) + 1(广播地址) = 13。
由于13小于最近的2进制数为16(2^4),所以主机位为4位(即有4位0即可),所以子网掩码为255.255.255.240(256-16),子网掩码二进制为11111111 11111111 11111111 11110000。
注意:
如果一个子网有14台主机,不少人常犯的错误是:依然分配具有16个地址空间的子网,而忘记了给网关分配地址。这样就错误了,因为: 14+1+1+1=17 。17大于16,所以我们只能分配具有32个地址(32等于2的5次方)空间的子网。这时子网掩码为:255.255.255.224
根据参考资料中的知识点,可以得出以下解决方案:
1.先将155.102.103.0/24转换为二进制,得到:10011011.01100110.01100111.00000000 2.根据子网划分的规则,需要借用原网络地址中的若干位来表示子网的地址,需要找到最小的子网掩码能够划分出不少于20、50、100个子网,同时每个子网中能拥有的IP数最多。经过计算,可以用子网掩码255.255.255.128(即/25)来满足要求,可以将第三个位借给子网地址。 3.划分子网的过程: -对于20个子网,需要将第三个位借给子网地址,留下5位给主机地址,可以得到子网掩码为255.255.255.224。 -对于50个子网,需要将第四个位借给子网地址,留下4位给主机地址,可以得到子网掩码为255.255.255.192。 -对于100个子网,需要将第五个位借给子网地址,留下3位给主机地址,可以得到子网掩码为255.255.255.128。 4.计算每个子网的网络地址、子网掩码、起始IP地址和结束IP地址: -针对第一个子网,网络地址为155.102.103.0,子网掩码为255.255.255.224,起始IP地址为155.102.103.1,结束IP地址为155.102.103.30。 -针对第二个子网,网络地址为155.102.103.32,子网掩码为255.255.255.224,起始IP地址为155.102.103.33,结束IP地址为155.102.103.62。 -可以依次类推计算剩余子网的网络地址、子网掩码、起始IP地址和结束IP地址。
代码示例:
import ipaddress
net = ipaddress.IPv4Network('155.102.103.0/24')
# 划分20个子网
net_1 = net.subnets(prefixlen_diff=3)
subnet_masks_1 = ["255.255.255.224"] * 20
subnet_addrs_1 = [str(subnet.network_address) for subnet in net_1]
start_ips_1 = [str(subnet.network_address + 1) for subnet in net_1]
end_ips_1 = [str(subnet.broadcast_address - 1) for subnet in net_1]
# 划分50个子网
net_2 = net.subnets(prefixlen_diff=2)
subnet_masks_2 = ["255.255.255.192"] * 50
subnet_addrs_2 = [str(subnet.network_address) for subnet in net_2]
start_ips_2 = [str(subnet.network_address + 1) for subnet in net_2]
end_ips_2 = [str(subnet.broadcast_address - 1) for subnet in net_2]
# 划分100个子网
net_3 = net.subnets(prefixlen_diff=1)
subnet_masks_3 = ["255.255.255.128"] * 100
subnet_addrs_3 = [str(subnet.network_address) for subnet in net_3]
start_ips_3 = [str(subnet.network_address + 1) for subnet in net_3]
end_ips_3 = [str(subnet.broadcast_address - 1) for subnet in net_3]
其中net
表示原网络地址,net_1
表示划分成20个子网后的子网列表,subnet_masks_1
表示每个子网的子网掩码,subnet_addrs_1
表示每个子网的网络地址,start_ips_1
表示每个子网的起始IP地址,end_ips_1
表示每个子网的结束IP地址。net_2
、subnet_masks_2
、subnet_addrs_2
、start_ips_2
、end_ips_2
、net_3
、subnet_masks_3
、subnet_addrs_3
、start_ips_3
、end_ips_3
依次代表划分成50个子网和100个子网后的子网列表和相关信息。