В терминологии сетей 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.
Заметим, что
Следовательно, наибольшее количество возможных адресов в этой сети равняется 26 = 64.
Ответ: 64.
Приведём решение Ильи Андрианова на языке Python.
from ipaddress import *
maxi = 0
for mask in range(32+1):
net = ip_network(f'98.162.71.94/{mask}', 0)
if str(net) == f'98.162.71.64/{mask}':
maxi = max(maxi, net.num_addresses)
print(maxi)
Приведём решение Данила Шарлова на языке Python.
from ipaddress import ip_interface, ip_network
ip = ip_interface('98.162.71.94/32')
for mask in range(33):
net = ip_network((ip.ip, mask), 0)
if net.network_address == ip_network('98.162.71.64/32').network_address:
print(net.num_addresses)
break

