Задание №13 — Маски подсети
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Для узла с IP-адресом 246.229.134.241 адрес сети равен 246.229.128.0.
Каково наименьшее возможное количество нулей в двоичной записи маски?
В ответе укажите только число.
Правильный ответ
11
Пояснение
Решение:
Маска состоит из единиц и нулей, поэтому нулей в ней : чтобы нулей было как можно меньше, надо взять наибольшее допустимое . Ограничение на даёт правило «адрес сети = первые битов адреса узла, дополненные нулями».
Запишем адреса в двоичном виде:
адрес узла 246.229.134.241 — 11110110.11100101.10000110.11110001,
адрес сети 246.229.128.0 — 11110110.11100101.10000000.00000000.
Первые два байта совпадают, а третьи байты 10000110 и 10000000 одинаковы только в пяти старших разрядах: на 22-й позиции у узла единица, а у сети ноль. Этот бит маска обязана обнулить, поэтому он лежит в узловой части и .
Наибольшее подходящее равно 21 (маска 255.255.248.0), и нулей в ней .
Проверка программой:
def to_bits(s):
return ''.join(format(int(x), '08b') for x in s.split('.'))
ip = to_bits('246.229.134.241')
net = to_bits('246.229.128.0')
ok = [k for k in range(33) if ip[:k] + '0' * (32 - k) == net]
print(ok, min(32 - k for k in ok))
Ответ: 11