Задание №13 — Маски подсети
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Для узла с IP-адресом 134.53.205.102 адрес сети равен 134.53.192.0.
Для скольких различных значений маски это возможно?
В ответе запишите только число.
Правильный ответ
3
Пояснение
Решение:
Маска — это число, у которого сначала идут единиц, а затем нули. Запишем в двоичном виде адрес узла и адрес сети:
узел 134.53.205.102 — 10000110 00110101 11001101 01100110
сеть 134.53.192.0 — 10000110 00110101 11000000 00000000
Поразрядная конъюнкция оставляет первые битов узла и обнуляет остальные, поэтому нужны два условия. Во-первых, все биты адреса сети правее -го обязаны быть нулевыми: последняя единица в адресе сети стоит на 18-й позиции, значит . Во-вторых, первые битов адреса узла должны совпадать с адресом сети: они совпадают по 20-ю позицию включительно, а на 21-й расходятся (у узла 1, у сети 0), значит .
Подходят , то есть маски 255.255.192.0, 255.255.224.0 и 255.255.240.0 — всего три значения.
ip = 134 * 256**3 + 53 * 256**2 + 205 * 256 + 102
net = 134 * 256**3 + 53 * 256**2 + 192 * 256
count = 0
for k in range(33):
mask = (2**k - 1) * 2**(32 - k)
if ip & mask == net:
count += 1
print(count) # 3
Ответ: 3