Задание №13 — Маски подсети
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Сеть задана IP-адресом 134.22.153.0 и маской сети 255.255.255.0.
Сколько в этой сети IP-адресов, в двоичной записи которых содержатся три подряд идущие единицы?
В ответе укажите только число.
Правильный ответ
131
Пояснение
Решение:
Маска 255.255.255.0 содержит 24 единицы, поэтому первые три байта адреса закреплены за сетью, а последний байт свободен: в сети адресов вида 134.22.153.x.
Двоичная запись фиксированной части такова: 134 = 10000110, 22 = 00010110, 153 = 10011001. В этой 24-битной цепочке трёх единиц подряд нет, и заканчивается она ровно одной единицей (…1001). Поэтому адрес подходит тогда и только тогда, когда три единицы подряд появляются в девятибитном «хвосте»: последняя единица третьего байта плюс восемь свободных битов. Перебор всех 256 значений последнего байта показывает, что без трёх единиц подряд обходятся 125 адресов, а подходящих .
def ip(a, b, c, d):
return ((a * 256 + b) * 256 + c) * 256 + d
base = ip(134, 22, 153, 0)
count = 0
for i in range(2 ** 8): # последний байт пробегает 0..255
if '111' in format(base + i, '032b'):
count += 1
print(count) # 131
Ответ: 131