Задание №13 — Маски подсети
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Для узла с IP-адресом 185.128.219.219 адрес сети равен 185.128.219.192.
Каково наибольшее возможное количество нулей в двоичной записи маски?
В ответе укажите только число.
Правильный ответ
6
Пояснение
Решение:
В маске сначала идут единиц, потом нулей, поэтому нулей в ней , и чтобы нулей было как можно больше, надо взять наименьшее допустимое . Адрес сети получается из адреса узла обнулением всех битов правее -го.
Двоичные записи:
адрес узла 185.128.219.219 — 10111001.10000000.11011011.11011011,
адрес сети 185.128.219.192 — 10111001.10000000.11011011.11000000.
Последняя единица адреса сети стоит на 26-й позиции (второй бит последнего байта: 192 = 11000000). Она обязана оказаться в сетевой части, иначе маска обнулила бы её, поэтому . С другой стороны, последние байты 11011011 и 11000000 совпадают только в первых трёх разрядах, значит различающийся бит должен попасть в узловую часть и .
Наименьшее подходящее значение (маска 255.255.255.192), и нулей в ней .
Проверка программой:
def to_bits(s):
return ''.join(format(int(x), '08b') for x in s.split('.'))
ip = to_bits('185.128.219.219')
net = to_bits('185.128.219.192')
ok = [k for k in range(33) if ip[:k] + '0' * (32 - k) == net]
print(ok, max(32 - k for k in ok))
Ответ: 6