Разбор 13.PNG

№ 10581 (Уровень: Средний)

**(Л. Шастин)** В терминологии сетей TCP/IP маска сети – это двоичное число, меньшее 232; в маске сначала (в старших разрядах) стоят единицы, а затем с некоторого места нули.

Маска определяет, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу самого узла в этой сети.

Обычно маска записывается по тем же правилам, что и IP-адрес – в виде четырёх байт, причём каждый байт записывается в виде десятичного числа.

Адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу узла и маске.

Для узла c IP-адресом 175.122.80.13 адрес подсети равен 175.122.80.0.

Сколько существует различных возможных значений маски, если известно, что в этой сети не менее 28 узлов?

Ответ запишите в виде десятичного числа.

Untitled

Комментарии к коду решения:

  1. from ipaddress import * - импортирует все объекты из модуля ipaddress. Модуль ipaddress предоставляет возможности для работы с IPv4/IPv6 адресами и сетями.
  2. for mask in range(32+1): - цикл for проходит по диапазону чисел от 0 до 32 включительно. Каждое число в этом диапазоне сохраняется в переменной mask.
  3. net = ip_network(f'175.122.80.13/{mask}', 0) - функция ip_network принимает строковое представление IP-адреса и маски подсети и возвращает объект IPv4Network или IPv6Network, который представляет сеть, определенную этим адресом и маской. В данном случае передается адрес 175.122.80.13 и маска подсети, которая определяется в ходе цикла. Второй параметр функции ip_network обозначает строгую ли будет проверка на валидность сети, в данном случае проверка отключена (0).
  4. print(net) - вывод на экран результата работы функции ip_network, то есть IP-адреса и маски подсети.

Таким образом, код осуществляет вывод на экран всех возможных сетей, которые могут быть получены с помощью IP-адреса 175.122.80.13 и масок подсети в диапазоне от 0 до 32 включительно.

# Количество единиц в маске подсети указывает, сколько битов адреса IP отведено для сети,
# а оставшиеся биты - для узлов.
# Для вычисления количества возможных значений маски подсети можно использовать следующую формулу: 2**n - 2

from ipaddress import *
for mask in range(32+1):
    net = ip_network(f'175.122.80.13/{mask}', 0)  # IP-адрес узла & mask = адрес сети (подсети)
    print(net)

    # Формула поиска узлов для подсети: 2**n - 2, где n - кол-во битов для узлов
    # 175.122.80.0/20  32 - 20 = 12 (битов для узлов)  2**12 - 2 = 4094 - подходит
    # 175.122.80.0/21
    # 175.122.80.0/22
    # 175.122.80.0/23
    # 175.122.80.0/24
    # 175.122.80.0/25
    # 175.122.80.0/26
    # 175.122.80.0/27  32 - 27 = 5 (битов для узлов)   2**5 - 2 = 30 - подходит
    # 175.122.80.0/28  32 - 28 = 4 (битов для узлов)   2** 4 - 2 = 14  - не подходит, так как узлов менее 28

# Ответ: 8

Ответ:

**Присоединяйтесь и готовьтесь с нами: t.me/informatika_kege_itpy**

Untitled