В терминологии сетей TCP/IP маской сети называется двоичное число, определяющее, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу самого узла в этой сети. При этом в маске сначала (в старших разрядах) стоят единицы, а затем с некоторого места — нули. Обычно маска записывается по тем же правилам, что и IP-адрес, — в виде четырёх байтов, причём каждый байт записывается в виде десятичного числа. Адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу узла и маске.
Например, если IP-адрес узла равен 231.32.255.131, а маска равна 255.255.240.0, то адрес сети равен 231.32.240.0.
Для узла с IP-адресом 98.162.71.94 адрес сети равен 98.162.71.64. Чему равно наименьшее количество возможных адресов в этой сети?
Примечание. Адрес сети и широковещательный адрес необходимо учитывать при подсчёте.
Запишем четвёртый байт IP-адреса и адреса сети в двоичной системе счисления:
9410 = 0101 11102,
6410 = 0100 00002.
Заметим, что
Следовательно, наименьшее количество возможных адресов в этой сети равняется 25 = 32.
Ответ: 32.
Приведём решение Ильи Андрианова на языке Python.
from ipaddress import *
for mask in range(32+1):
net = ip_network(f'98.162.71.94/{mask}', 0)
print(net, net.num_addresses)#Для адреса сети 98.162.71.94 подходят значения 32 и 64, по условию задачи требуется наименьшее. т.е. 32
Приведём решение Данила Шарлова на языке Python.
from ipaddress import ip_network, ip_address
ip = '98.162.71.94'
ip_net = '98.162.71.64'
for mask in range(32, -1, -1):
net = ip_network(f'{ip}/{mask}',0)
if ip_address(ip_net) == net.network_address:
print(net.num_addresses)
break

