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