Задание №13 — Маски подсети
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Сеть задана IP-адресом 192.47.41.188 и маской сети 255.255.255.252.
Определите минимальное количество нулей в двоичной записи IP-адреса в этой сети.
В ответе укажите только число.
Правильный ответ
15
Пояснение
Решение:
Маска 255.255.255.252 содержит 30 единиц и 2 нуля, поэтому свободны только два младших бита адреса, а в сети всего адреса. Адрес сети находим поразрядной конъюнкцией: 188 = 10111100 и 252 = 11111100 дают 10111100, то есть сеть 192.47.41.188.
Нули фиксированных 30 битов останутся при любом узле, поэтому минимум нулей получится, когда оба свободных бита равны единице. Считаем нули фиксированной части: 192 = 11000000 — 6 нулей, 47 = 00101111 — 3 нуля, 41 = 00101001 — 5 нулей, а от байта 188 = 10111100 берутся первые 6 битов 101111 — ещё 1 ноль. Итого нулей; они и составляют ответ (адрес 192.47.41.191).
def ip(a, b, c, d):
return ((a * 256 + b) * 256 + c) * 256 + d
base = ip(192, 47, 41, 188) # 188 = 10111100 уже совпадает с адресом сети
print(min(format(base + i, '032b').count('0') for i in range(2 ** 2))) # 15
Ответ: 15