Задание №13 — Маски подсети
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Для узла с IP-адресом 123.244.113.28 адрес сети равен 123.244.0.0.
Для скольких различных значений маски это возможно?
В ответе запишите только число.
Правильный ответ
4
Пояснение
Решение:
Маска однозначно задаётся числом своих единиц: это единиц подряд, а затем нулей. Адрес сети получается из адреса узла обнулением всех битов правее -го, поэтому задача сводится к тому, чтобы найти все допустимые , и ответом будет их количество.
Переведём числа в двоичную систему:
адрес узла 123.244.113.28 — 01111011.11110100.01110001.00011100,
адрес сети 123.244.0.0 — 01111011.11110100.00000000.00000000.
Последняя единица адреса сети стоит на 14-й позиции (шестой бит второго байта: 244 = 11110100), и она должна остаться в сетевой части, поэтому . Дальше сравниваем третьи байты: у адреса сети там нули, а у адреса узла 113 = 01110001 — первый бит нулевой и потому совпадает, а на 18-й позиции у узла стоит единица, которую маска обязана обнулить, значит .
Подходят — маски 255.252.0.0, 255.254.0.0, 255.255.0.0 и 255.255.128.0. Всего 4 значения.
Проверка программой:
def to_bits(s):
return ''.join(format(int(x), '08b') for x in s.split('.'))
ip = to_bits('123.244.113.28')
net = to_bits('123.244.0.0')
ok = [k for k in range(33) if ip[:k] + '0' * (32 - k) == net]
print(ok, len(ok))
Ответ: 4