Задание №13 — Маски подсети
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Сеть задана IP-адресом 174.170.15.240 и маской сети 255.255.255.240.
Определите максимальное количество нулей в двоичной записи IP-адреса в этой сети.
В ответе укажите только число.
Правильный ответ
15
Пояснение
Решение:
В маске 255.255.255.240 = 11111111.11111111.11111111.11110000 двадцать восемь единиц, значит первые 28 битов адреса задают сеть и одинаковы у всех её узлов, а последние 4 бита — узловые и принимают любые значения, что даёт адресов.
Адрес сети: 240 & 240 = 11110000 & 11110000 = 11110000, то есть сеть 174.170.15.240, а её фиксированная часть в двоичном виде — 10101110.10101010.00001111.1111.
Нули в неизменяемой части: в 174 = 10101110 их 3, в 170 = 10101010 — 4, в 15 = 00001111 — 4, а в старших битах 1111 нулей нет; итого 11. Больше этого числа зафиксировано быть не может, а вот свободные 4 бита выгодно сделать нулями — тогда нулей будет . Максимум достигается на самом адресе сети 174.170.15.240.
Проверка программой:
from itertools import product
def to_bits(s):
return ''.join(format(int(x), '08b') for x in s.split('.'))
ip = to_bits('174.170.15.240')
mask = to_bits('255.255.255.240')
k = mask.count('1')
head = ip[:k]
addrs = [head + ''.join(t) for t in product('01', repeat=32 - k)]
print(max(a.count('0') for a in addrs))
Ответ: 15