В терминологии сетей TCP/IP маской сети называется двоичное число, определяющее, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу самого узла в этой сети. При этом в маске сначала (в старших разрядах) стоят единицы, а затем с некоторого места — нули. Обычно маска записывается по тем же правилам, что и IP-адрес — в виде четырёх байтов, причём каждый байт записывается в виде десятичного числа. Адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу узла и маске.
Например, если IP-адрес узла равен 231.32.255.131, а маска равна 255.255.240.0, то адрес сети равен 231.32.240.0.
Узлы с IP-адресами 98.162.78.139 и 98.162.78.154 находятся в одной сети. Чему равно наибольшее количество возможных единиц в маске этой сети?
Запишем четвёртый байт IP-адресов:
13910 = 1000 10112.
15410 = 1001 10102.
Заметим, что 3 первых слева бита IP-адресов совпадают. Значит, в четвёртом байте маски единичными могут быть только 3 первых бита. Следовательно, наибольшее количество возможных единиц в этой маске равняется 24 + 3 = 27
Ответ: 27.
Приведём решение Бориса Савельева на языке Python.
from ipaddress import ip_network
ip1 = '98.162.78.139'
ip2 = '98.162.78.154'
for mask_len in range(32, -1, -1):
net1 = ip_network(f"{ip1}/{mask_len}", strict=False)
net2 = ip_network(f"{ip2}/{mask_len}", strict=False)
if net1 == net2:
print(mask_len)
break

