Задание №13 — Маски подсети
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Для узла с IP-адресом 183.168.13.168 адрес сети равен 183.168.12.0.
Для скольких различных значений маски это возможно?
В ответе запишите только число.
Правильный ответ
2
Пояснение
Решение:
Маска — это единиц подряд, а затем нулей. На первых битах адрес сети повторяет адрес узла, а все биты правее должны быть нулевыми. Первые два байта у узла и у сети совпадают, различие только в третьем и четвёртом:
узел: 13 = 00001101, 168 = 10101000
сеть: 12 = 00001100, 0 = 00000000
Первое расхождение — в восьмом бите третьего байта (24-й бит адреса), поэтому он уже обязан лежать в нулевой части маски и . С другой стороны, последняя единица адреса сети стоит в 22-м бите (третий байт 00001100), и она должна попасть в единичную часть маски, значит . Подходят ровно два значения — и , то есть маски 255.255.252.0 и 255.255.254.0.
def ip(a, b, c, d):
return ((a * 256 + b) * 256 + c) * 256 + d
node = ip(183, 168, 13, 168)
net = ip(183, 168, 12, 0)
good = []
for k in range(33):
mask = 2 ** 32 - 2 ** (32 - k)
if (node & mask) == net:
good.append(k)
print(good, len(good)) # [22, 23] 2
Ответ: 2