Задание №13 — Маски подсети
В терминологии сетей ТСР/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Сеть задана IP-адресом 252.63.194.3 и маской сети 255.255.А.0, где А — некоторое допустимое для записи маски число. Определите минимальное значение А, для которого для всех IP-адресов этой сети в двоичной записи IP-адреса суммарное количество единиц в левых двух байтах не менее суммарного количества единиц в правых двух байтах. В ответе укажите только число.
Правильный ответ
252
Пояснение
Решение:
Левые два байта у всех адресов сети одинаковы: даёт 6 единиц, даёт 6. Значит при любом адресе сети.
Маска 255.255..0 фиксирует старшие разряды третьего байта: если в ровно единиц, то в третьем байте свободны младших битов, а четвёртый байт свободен целиком. Наибольшее число единиц в правых двух байтах равно
где — число единиц в двоичной записи ; здесь . Условие «для всех адресов » означает .
Перебираем допустимые значения байта маски, начиная с меньших:
- (): , две единицы, — не подходит;
- (): , две единицы, — подходит.
ones = lambda x: bin(x).count('1')
for A in [0, 128, 192, 224, 240, 248, 252, 254, 255]:
free = 8 - ones(A)
if ones(252) + ones(63) >= ones(194 & A) + free + 8:
print(A) # 252
break
Ответ: 252