Задание №13 — Маски подсети
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Для узла с IP-адресом 203.153.47.32 адрес сети равен 203.153.40.0.
Каково наибольшее возможное количество единиц в двоичной записи маски?
В ответе укажите только число.
Правильный ответ
21
Пояснение
Решение:
Маска — это единиц подряд, а затем нулей; конъюнкция с ней сохраняет первые битов адреса узла и обнуляет остальные. Поэтому адрес сети — начало адреса узла длиной битов, дополненное нулями, а искомое количество единиц маски и есть .
Переводим в двоичную систему:
адрес узла 203.153.47.32 — 11001011.10011001.00101111.00100000,
адрес сети 203.153.40.0 — 11001011.10011001.00101000.00000000.
Сравниваем побитово: третьи байты 00101111 и 00101000 совпадают в первых пяти разрядах и расходятся в шестом. Все биты левее 22-й позиции у адреса узла и адреса сети одинаковы, а на 22-й позиции у узла единица, у сети — ноль, значит этот бит обязан попасть в узловую часть и .
Больше 21 единицы в маске быть не может, а маска с 21 единицей (255.255.248.0) условию удовлетворяет: она оставляет ровно 11001011.10011001.00101 и обнуляет хвост, давая нужный адрес сети. Наибольшее количество единиц — 21.
Проверка программой:
def to_bits(s):
return ''.join(format(int(x), '08b') for x in s.split('.'))
ip = to_bits('203.153.47.32')
net = to_bits('203.153.40.0')
ok = [k for k in range(33) if ip[:k] + '0' * (32 - k) == net]
print(ok, max(ok))
Ответ: 21