.04 Определение маски
Ошибка.
Попробуйте повторить позже
В терминологии сетей TCP/IP маска сети — это двоичное число, меньшее ; в маске сначала (в старших разрядах)
стоят единицы, а затем с некоторого места нули. Маска определяет, какая часть IP-адреса узла сети относится к адресу
сети, а какая -– к адресу самого узла в этой сети.
Обычно маска записывается по тем же правилам, что и IP-адрес — в виде четырёх байт, причём каждый байт записывается в виде десятичного числа. Адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу узла и маске.
Например, если IP-адрес узла равен 121.32.255.121, а маска равна 255.255.255.0, то адрес сети равен 121.32.255.0.
Для узла с IP-адресом 204.185.106.48 адрес сети равен 204.185.96.0. Найдите наименьшее возможное количество единиц в двоичной записи маски подсети.
Решение руками:
Перепишем IP-адрес узла и адрес сети в двоичной системе счисления:
IP | 11001100.10111001.01101010.00110000 |
Net | 11001100.10111001.01100000.00000000 |
Зная тот факт, что адрес подсети получается путём перемножения цифр двоичной записи маски и IP-адреса, можно точно определить некоторые цифры в маске подсети:
Mask | 11111111.11111111.111*0000.00000000 |
IP | 11001100.10111001.01101010.00110000 |
Net | 11001100.10111001.01100000.00000000 |
Так как по условию задачи нам необходимо найти наименьшее количество единиц, то на пустое место поставим ноль.
Получим маску подсети – 11111111.11111111.11100000.00000000. Количество единиц в ней равно 19.
Решение Python:
Чтобы найти наименьшее возможное количество единиц в двоичной записи маски подсети, необходимо перебрать
все возможные варианты длины маски от до
. Напомним, что адрес сети получается в результате поразрядной
конъюнкции (логического И) между IP-адресом и маской.
В Python это удобно реализовать с помощью функции ip_network() из модуля ipaddress. Она позволяет задать IP-адрес узла и длину маски. Параметр strict=0 используется для того, чтобы можно было передавать не сетевой адрес, а обычный адрес узла.
Далее для каждой маски вычисляем адрес сети и сравниваем его с заданным в условии (). Среди всех
подходящих вариантов выбираем тот, у которого количество единиц в маске минимально. Это значение и будет
ответом.
from ipaddress import ip_network # Импортируем модуль для работы с IP-адресами и масками # Перебираем все возможные длины маски от 0 до 32 for mask in range(33): # Создаём объект сети для IP-адреса 204.185.106.48 с текущей маской # Параметр strict=0 позволяет использовать произвольный адрес узла, а не только сетевой net = ip_network(f’204.185.106.48/{mask}’, 0) # Выводим адрес сети и маску, чтобы проверить совпадение с 204.185.96.0 print(net, net.netmask) # В результате находим строку с сетью 204.185.96.0 # Из всех таких масок выбираем ту, у которой количество единиц в двоичной записи минимально
Специальные программы

Программа
лояльности v2.0
Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!
Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное онлайн-обучение
Для школьников из приграничных территорий России, проживающих в ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Курской, Брянской областях и Крыму.

Налоговые вычеты
Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей
Бесплатный доступ к любому курсу подготовки к ЕГЭ, ОГЭ и олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ
Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!