Задание №13 — Маски подсети
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Сеть задана IP-адресом 189.169.220.0 и маской сети 255.255.254.0.
Сколько в этой сети IP-адресов, двоичная запись которых оканчивается на две единицы?
В ответе укажите только число.
Правильный ответ
128
Пояснение
Решение:
Маска — это цепочка единиц, за которой идут нули. Маска 255.255.254.0 в двоичном виде равна 11111111.11111111.11111110.00000000, то есть содержит 23 единицы и 9 нулей. Единицам маски отвечает адрес сети: эти 23 бита у всех узлов одинаковы и совпадают с битами адреса 189.169.220.0. Нулям маски отвечает адрес узла: оставшиеся 9 битов пробегают все значения, поэтому в сети адресов.
Требование «двоичная запись оканчивается на две единицы» жёстко задаёт два последних бита адреса, а они целиком лежат в изменяемой части. Значит, из девяти свободных битов два зафиксированы, а остальные произвольны, что даёт подходящих адресов.
def ip(a, b, c, d):
return ((a * 256 + b) * 256 + c) * 256 + d
base = ip(189, 169, 220, 0) # адрес сети
count = 0
for i in range(2 ** 9): # 9 свободных битов узла
if format(base + i, '032b').endswith('11'):
count += 1
print(count) # 128
Ответ: 128