Задание №13 — Маски подсети
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Для узла с IP-адресом 112.139.197.2 адрес сети равен 112.139.196.0.
Каково наибольшее возможное количество единиц в двоичной записи маски?
В ответе укажите только число.
Правильный ответ
23
Пояснение
Решение:
Маска состоит из единиц подряд, а затем нулей: биты адреса под единицами сохраняются, под нулями обнуляются. Нужно наибольшее допустимое , то есть надо найти самый левый бит, который маска обязана обнулить.
Третьи байты: у адреса узла и у адреса сети. Они различаются только последним битом третьего байта — это 24-й бит адреса, и он обязан быть нулевым в маске, откуда .
Четвёртый байт тоже обнуляется, но его единственная единица стоит на 31-м бите адреса и даёт более слабое ограничение . Значит связывающим остаётся условие .
Проверим : маска 255.255.254.0, , четвёртый байт обнуляется целиком — всё сходится. Наибольшее количество единиц равно 23.
def to_int(s):
v = 0
for byte in s.split('.'):
v = v * 256 + int(byte)
return v
ip = to_int('112.139.197.2')
net = to_int('112.139.196.0')
ok = [k for k in range(33)
if ip & (((1 << k) - 1) << (32 - k)) == net]
print(ok, max(ok)) # [22, 23] -> 23Ответ: 23