Задание №13 — Маски подсети
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Для узла с IP-адресом 127.118.135.252 адрес сети равен 127.118.134.0.
Каково наименьшее возможное количество единиц в двоичной записи маски?
В ответе укажите только число.
Правильный ответ
23
Пояснение
Решение:
Маска — это несколько единиц подряд, а затем нули. Там, где в маске стоит единица, бит адреса сети совпадает с битом адреса узла; там, где ноль, бит адреса сети обязан быть нулевым. Запишем оба адреса в двоичном виде:
узел: 01111111.01110110.10000111.11111100
сеть: 01111111.01110110.10000110.00000000
Первое расхождение — в восьмом бите третьего байта (24-й бит адреса): у узла там 1, у сети 0. Этот бит уже должен попасть в нулевую часть маски, поэтому единиц в маске не больше 23. С другой стороны, последняя единица адреса сети стоит в 23-м бите, и она обязана попасть в единичную часть маски, значит единиц не меньше 23. Остаётся единственная возможность — 23 единицы (маска 255.255.254.0).
def ip(a, b, c, d):
return ((a * 256 + b) * 256 + c) * 256 + d
node = ip(127, 118, 135, 252)
net = ip(127, 118, 134, 0)
for k in range(33): # k — число единиц в маске
mask = 2 ** 32 - 2 ** (32 - k)
if (node & mask) == net:
print(k) # 23
Ответ: 23