Задание №13 — Маски подсети
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Сеть задана IP-адресом 208.229.192.0 и маской сети 255.255.224.0.
Сколько в этой сети IP-адресов, двоичная запись которых оканчивается на две единицы?
В ответе укажите только число.
Правильный ответ
2048
Пояснение
Решение:
В маске 255.255.224.0 ровно единиц, и 192 & 224 = 192, поэтому адрес сети — 208.229.192.0. Свободных битов , то есть в сети адресов.
Два последних бита адреса относятся к номеру узла и потому меняются свободно. Условие «запись оканчивается на две единицы» жёстко фиксирует оба этих бита, а остальные битов остаются произвольными. Значит подходящих адресов — ровно четверть сети.
ip = [208, 229, 192, 0]
mask = [255, 255, 224, 0]
def to_int(a):
return (a[0] << 24) | (a[1] << 16) | (a[2] << 8) | a[3]
n, m = to_int(ip), to_int(mask)
base = n & m # адрес сети
host = 32 - bin(m).count('1') # число свободных битов
cnt = 0
for i in range(2 ** host):
s = bin(base + i)[2:].zfill(32)
if s.endswith('11'):
cnt += 1
print(cnt)Ответ: 2048