Задание №13 — Маски подсети
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Для узла с IP-адресом 153.172.3.8 адрес сети равен 153.172.3.0.
Для скольких различных значений маски это возможно?
В ответе запишите только число.
Правильный ответ
5
Пояснение
Решение:
Маска состоит из единиц, за которыми идут нули. Выпишем двоичные записи:
узел 153.172.3.8 — 10011001 10101100 00000011 00001000
сеть 153.172.3.0 — 10011001 10101100 00000011 00000000
При поразрядной конъюнкции сохраняются первые битов узла, а остальные обнуляются. Отсюда, во-первых, все единицы адреса сети должны попасть в первые разрядов: последняя единица стоит на 24-й позиции, поэтому . Во-вторых, обнулиться должны только те биты узла, которые отличаются от адреса сети: первое расхождение — на 29-й позиции (у узла 1, у сети 0), поэтому .
Подходят : маски 255.255.255.0, 255.255.255.128, 255.255.255.192, 255.255.255.224 и 255.255.255.240 — всего пять значений.
ip = 153 * 256**3 + 172 * 256**2 + 3 * 256 + 8
net = 153 * 256**3 + 172 * 256**2 + 3 * 256
count = 0
for k in range(33):
mask = (2**k - 1) * 2**(32 - k)
if ip & mask == net:
count += 1
print(count) # 5
Ответ: 5