Задание №13 — Маски подсети
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Сеть задана IP-адресом 186.105.80.0 и маской сети 255.255.255.192.
Определите максимальную сумму единиц в двоичной записи IP-адреса в этой сети.
В ответе укажите только число.
Правильный ответ
17
Пояснение
Решение:
Маска 255.255.255.192 состоит из 26 единиц и 6 нулей, поэтому первые 26 битов адреса одинаковы у всех узлов сети и берутся из адреса 186.105.80.0, а последние 6 битов можно выбирать как угодно.
Число единиц в адресе складывается из единиц фиксированной части и единиц изменяемой части. В фиксированной части: 186 = 10111010 — 5 единиц, 105 = 01101001 — 4 единицы, 80 = 01010000 — 2 единицы, а два старших бита последнего байта равны 00 и единиц не добавляют. Итого единиц, изменить их нельзя. Максимум достигается, когда все 6 свободных битов равны единице, то есть на адресе 186.105.80.63: получаем .
def ip(a, b, c, d):
return ((a * 256 + b) * 256 + c) * 256 + d
base = ip(186, 105, 80, 0)
print(max(format(base + i, '032b').count('1') for i in range(2 ** 6))) # 17
Ответ: 17