ЕГЭ по информатике · задание 13

IP-адреса и маски сети

Нужно по IP-адресу и маске найти адрес сети и допустимые адреса компьютеров, посчитать адреса с условием или восстановить маску по двум адресам.

Что нужно знать

  • Маска — сначала единицы, затем нули; 255.255.240.0 = 20 единиц.
  • Адрес сети = адрес узла AND маска.
  • Широковещательный: узловые биты — все единицы. В сети 2k адресов, где k — число нулей маски.

Байты маски

  • Возможные значения байта: 0, 128, 192, 224, 240, 248, 252, 254, 255.
  • Работать удобно только с тем байтом, где маска «переламывается».

Python

  • ip_network('10.1.2.3/255.255.0.0', strict=False) — сеть по адресу узла.
  • .network_address, .broadcast_address, .netmask, перебор for a in net.

Разобранные варианты

Сначала реши сам, потом открой разбор. В разборах — двоичные записи и программы с модулем ipaddress.

Вариант 1

наибольший адрес компьютера

В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и его маске. Широковещательным адресом называется специализированный адрес, в котором на месте нулей в маске стоят единицы. Адрес сети и широковещательный адрес не могут быть использованы для адресации сетевых устройств.

Сеть задана IP-адресом одного из входящих в неё узлов 137.36.78.105 и сетевой маской 255.224.0.0. Найдите в данной сети наибольший IP-адрес, который может быть назначен компьютеру. В ответе укажите найденный IP-адрес без разделителей. Например, если бы найденный адрес был равен 111.22.3.44, то в ответе следовало бы записать: 11122344.

Разбор

Шаг 1. Маска. 255.224.0.0 — это 11 единиц и 21 нулей. Узловая часть адреса — последние 21 бит.

1 байт2 байт3 байт4 байтДесятичная
Адрес узла10001001001001000100111001101001137.36.78.105
Маска11111111111000000000000000000000255.224.0.0
Адрес сети10001001001000000000000000000000137.32.0.0
Широковещательный10001001001111111111111111111111137.63.255.255

Шаг 2. Адрес сети — узловые биты равны 0: 137.32.0.0; широковещательный — узловые биты равны 1: 137.63.255.255. Оба нельзя назначить компьютеру.

Шаг 3. Наибольший адрес компьютера — на 1 меньше широковещательного: 137.63.255.254.

Ответ: 13763255254

Решение на Python.

from ipaddress import ip_network

net = ip_network('137.36.78.105/255.224.0.0', strict=False)
addr = net.broadcast_address - 1
print(str(addr).replace('.', ''))

Вариант 2

адреса с условием

В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и его маске. Широковещательным адресом называется специализированный адрес, в котором на месте нулей в маске стоят единицы. Адрес сети и широковещательный адрес не могут быть использованы для адресации сетевых устройств.

Сеть задана IP-адресом 190.224.190.128 и маской сети 255.255.255.128. Сколько в этой сети IP-адресов, для которых в двоичной записи IP-адреса единиц больше, чем нулей? В ответе укажите только число.

Разбор

Шаг 1. Маска 255.255.255.128 — 25 единиц, в сети 27 = 128 адресов (адрес сети и широковещательный тоже считаются — вопрос про все IP-адреса сети).

Шаг 2. Первые 25 бит у всех адресов одинаковые, в них 16 единиц. Остальные 7 бит — любые. Нужно посчитать, сколько вариантов последних 7 бит дают нужное условие: удобно перебором программой или через число сочетаний C(n, k).

Ответ: 127

Решение на Python.

from ipaddress import ip_network

net = ip_network('190.224.190.128/255.255.255.128')
count = 0
for a in net:              # все адреса сети, включая адрес сети и широковещательный
    if bin(int(a)).count('1') > 16:
        count += 1
print(count)

Вариант 3

число возможных масок

В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и его маске. Широковещательным адресом называется специализированный адрес, в котором на месте нулей в маске стоят единицы. Адрес сети и широковещательный адрес не могут быть использованы для адресации сетевых устройств.

Два узла, находящиеся в одной сети, имеют IP-адреса 24.111.200.223 и 24.111.200.220. Сколько существует различных возможных значений маски?

Разбор

Шаг 1. Двоичные записи.

24.111.200.223 = 00011000 01101111 11001000 11011111
24.111.200.220 = 00011000 01101111 11001000 11011100

Шаг 2. Адреса совпадают в первых 30 битах, поэтому единиц в маске не больше 30: иначе адреса сети получатся разными.

Шаг 3. Кроме того, узловая часть каждого адреса не должна состоять только из нулей или только из единиц (это адрес сети и широковещательный). Проверяем каждое число единиц в маске: подходят 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26.

Ответ: 26

Решение на Python.

from ipaddress import ip_network, ip_address

a, b = ip_address('24.111.200.223'), ip_address('24.111.200.220')
good = []
for p in range(1, 31):                     # число единиц в маске
    na = ip_network(f'{a}/{p}', strict=False)
    nb = ip_network(f'{b}/{p}', strict=False)
    if na == nb and a not in (na.network_address, na.broadcast_address) \
            and b not in (na.network_address, na.broadcast_address):
        good.append(p)
print(len(good))

Вариант 4

третьего байт маски

В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и его маске. Широковещательным адресом называется специализированный адрес, в котором на месте нулей в маске стоят единицы. Адрес сети и широковещательный адрес не могут быть использованы для адресации сетевых устройств.

Для узла с IP-адресом 130.225.154.221 адрес сети равен 130.225.128.0. Чему равно наибольшее возможное значение третьего слева байта маски? Ответ запишите в виде десятичного числа.

Разбор

Шаг 1. Сравниваем третьего байт адреса узла и адреса сети в двоичной записи: 10011010 и 10000000.

Шаг 2. Маска — сначала единицы, потом нули. Там, где в адресе узла 1, а в адресе сети 0, в маске обязательно 0. А до последней единицы адреса сети в маске должны стоять единицы — иначе эта единица обнулилась бы.

Шаг 3. Подходящие маски содержат 17, 18, 19 единиц; значения третьего байта: 128, 192, 224. Наибольшее — 224.

Ответ: 224

Решение на Python.

from ipaddress import ip_network

res = []
for p in range(0, 33):
    net = ip_network('130.225.154.221/' + str(p), strict=False)
    if str(net.network_address) == '130.225.128.0':
        res.append(int(str(net.netmask).split('.')[2]))
print(max(res))

Вариант 5

наименьший адрес компьютера

В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и его маске. Широковещательным адресом называется специализированный адрес, в котором на месте нулей в маске стоят единицы. Адрес сети и широковещательный адрес не могут быть использованы для адресации сетевых устройств.

Сеть задана IP-адресом одного из входящих в неё узлов 211.93.83.102 и сетевой маской 255.255.252.0. Найдите в данной сети наименьший IP-адрес, который может быть назначен компьютеру. В ответе укажите найденный IP-адрес без разделителей. Например, если бы найденный адрес был равен 111.22.3.44, то в ответе следовало бы записать: 11122344.

Разбор

Шаг 1. Маска. 255.255.252.0 — это 22 единиц и 10 нулей. Узловая часть адреса — последние 10 бит.

1 байт2 байт3 байт4 байтДесятичная
Адрес узла11010011010111010101001101100110211.93.83.102
Маска11111111111111111111110000000000255.255.252.0
Адрес сети11010011010111010101000000000000211.93.80.0
Широковещательный11010011010111010101001111111111211.93.83.255

Шаг 2. Адрес сети — узловые биты равны 0: 211.93.80.0; широковещательный — узловые биты равны 1: 211.93.83.255. Оба нельзя назначить компьютеру.

Шаг 3. Наименьший адрес компьютера — на 1 больше адреса сети: 211.93.80.1.

Ответ: 21193801

Решение на Python.

from ipaddress import ip_network

net = ip_network('211.93.83.102/255.255.252.0', strict=False)
addr = net.network_address + 1
print(str(addr).replace('.', ''))

Вариант 6

адрес сети

В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и его маске. Широковещательным адресом называется специализированный адрес, в котором на месте нулей в маске стоят единицы. Адрес сети и широковещательный адрес не могут быть использованы для адресации сетевых устройств.

Узел с IP-адресом 190.53.229.29 находится в сети с маской 255.255.255.224. Найдите адрес сети и запишите его в ответе без разделителей. Например, если бы адрес сети был равен 111.22.3.0, в ответе следовало бы записать 1112230.

Разбор

Решение. Поразрядная конъюнкция адреса и маски: там, где в маске 1, бит адреса сохраняется, где 0 — становится 0. Байты маски 255 копируют байт адреса, 0 — дают 0; разбираться нужно только с байтом маски, отличным от 0 и 255.

1 байт2 байт3 байт4 байтДесятичная
Адрес узла10111110001101011110010100011101190.53.229.29
Маска11111111111111111111111111100000255.255.255.224
Адрес сети10111110001101011110010100000000190.53.229.0
Широковещательный10111110001101011110010100011111190.53.229.31

Адрес сети: 190.53.229.0.

Ответ: 190532290

Решение на Python.

ip = [int(x) for x in '190.53.229.29'.split('.')]
mask = [int(x) for x in '255.255.255.224'.split('.')]
net = [a & m for a, m in zip(ip, mask)]
print(''.join(map(str, net)))

Вариант 7

наибольшая маска

В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и его маске. Широковещательным адресом называется специализированный адрес, в котором на месте нулей в маске стоят единицы. Адрес сети и широковещательный адрес не могут быть использованы для адресации сетевых устройств.

Два узла, находящиеся в одной сети, имеют IP-адреса 195.24.88.77 и 195.24.93.14. Какое наибольшее количество единиц может быть в маске?

Разбор

Шаг 1. Двоичные записи.

195.24.88.77 = 11000011 00011000 01011000 01001101
195.24.93.14 = 11000011 00011000 01011101 00001110

Шаг 2. Адреса совпадают в первых 21 битах, поэтому единиц в маске не больше 21: иначе адреса сети получатся разными.

Шаг 3. Кроме того, узловая часть каждого адреса не должна состоять только из нулей или только из единиц (это адрес сети и широковещательный). Проверяем каждое число единиц в маске: подходят 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21.

Ответ: 21

Решение на Python.

from ipaddress import ip_network, ip_address

a, b = ip_address('195.24.88.77'), ip_address('195.24.93.14')
good = []
for p in range(1, 31):                     # число единиц в маске
    na = ip_network(f'{a}/{p}', strict=False)
    nb = ip_network(f'{b}/{p}', strict=False)
    if na == nb and a not in (na.network_address, na.broadcast_address) \
            and b not in (na.network_address, na.broadcast_address):
        good.append(p)
print(max(good))

Вариант 8

адреса с условием

В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и его маске. Широковещательным адресом называется специализированный адрес, в котором на месте нулей в маске стоят единицы. Адрес сети и широковещательный адрес не могут быть использованы для адресации сетевых устройств.

Сеть задана IP-адресом 189.29.130.128 и маской сети 255.255.255.128. Сколько в этой сети IP-адресов, для которых количество единиц в двоичной записи IP-адреса кратно 5? В ответе укажите только число.

Разбор

Шаг 1. Маска 255.255.255.128 — 25 единиц, в сети 27 = 128 адресов (адрес сети и широковещательный тоже считаются — вопрос про все IP-адреса сети).

Шаг 2. Первые 25 бит у всех адресов одинаковые, в них 13 единиц. Остальные 7 бит — любые. Нужно посчитать, сколько вариантов последних 7 бит дают нужное условие: удобно перебором программой или через число сочетаний C(n, k).

Ответ: 22

Решение на Python.

from ipaddress import ip_network

net = ip_network('189.29.130.128/255.255.255.128')
count = 0
for a in net:              # все адреса сети, включая адрес сети и широковещательный
    if bin(int(a)).count('1') % 5 == 0:
        count += 1
print(count)

Вариант 9

наибольший адрес компьютера

В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и его маске. Широковещательным адресом называется специализированный адрес, в котором на месте нулей в маске стоят единицы. Адрес сети и широковещательный адрес не могут быть использованы для адресации сетевых устройств.

Сеть задана IP-адресом одного из входящих в неё узлов 16.154.123.149 и сетевой маской 255.255.224.0. Найдите в данной сети наибольший IP-адрес, который может быть назначен компьютеру. В ответе укажите найденный IP-адрес без разделителей. Например, если бы найденный адрес был равен 111.22.3.44, то в ответе следовало бы записать: 11122344.

Разбор

Шаг 1. Маска. 255.255.224.0 — это 19 единиц и 13 нулей. Узловая часть адреса — последние 13 бит.

1 байт2 байт3 байт4 байтДесятичная
Адрес узла0001000010011010011110111001010116.154.123.149
Маска11111111111111111110000000000000255.255.224.0
Адрес сети0001000010011010011000000000000016.154.96.0
Широковещательный0001000010011010011111111111111116.154.127.255

Шаг 2. Адрес сети — узловые биты равны 0: 16.154.96.0; широковещательный — узловые биты равны 1: 16.154.127.255. Оба нельзя назначить компьютеру.

Шаг 3. Наибольший адрес компьютера — на 1 меньше широковещательного: 16.154.127.254.

Ответ: 16154127254

Решение на Python.

from ipaddress import ip_network

net = ip_network('16.154.123.149/255.255.224.0', strict=False)
addr = net.broadcast_address - 1
print(str(addr).replace('.', ''))

Вариант 10

четвёртого байт маски

В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и его маске. Широковещательным адресом называется специализированный адрес, в котором на месте нулей в маске стоят единицы. Адрес сети и широковещательный адрес не могут быть использованы для адресации сетевых устройств.

Для узла с IP-адресом 53.124.41.46 адрес сети равен 53.124.41.32. Чему равно наибольшее возможное значение четвёртого слева байта маски? Ответ запишите в виде десятичного числа.

Разбор

Шаг 1. Сравниваем четвёртого байт адреса узла и адреса сети в двоичной записи: 00101110 и 00100000.

Шаг 2. Маска — сначала единицы, потом нули. Там, где в адресе узла 1, а в адресе сети 0, в маске обязательно 0. А до последней единицы адреса сети в маске должны стоять единицы — иначе эта единица обнулилась бы.

Шаг 3. Подходящие маски содержат 27, 28 единиц; значения четвёртого байта: 224, 240. Наибольшее — 240.

Ответ: 240

Решение на Python.

from ipaddress import ip_network

res = []
for p in range(0, 33):
    net = ip_network('53.124.41.46/' + str(p), strict=False)
    if str(net.network_address) == '53.124.41.32':
        res.append(int(str(net.netmask).split('.')[3]))
print(max(res))

Для самостоятельного решения

Варианты 11–15 без разборов. Ответ можно проверить кнопкой.

Вариант 11

наибольшая маска

В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и его маске. Широковещательным адресом называется специализированный адрес, в котором на месте нулей в маске стоят единицы. Адрес сети и широковещательный адрес не могут быть использованы для адресации сетевых устройств.

Два узла, находящиеся в одной сети, имеют IP-адреса 184.10.65.136 и 184.14.113.153. Какое наибольшее количество единиц может быть в маске?

Вариант 12

адреса с условием

В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и его маске. Широковещательным адресом называется специализированный адрес, в котором на месте нулей в маске стоят единицы. Адрес сети и широковещательный адрес не могут быть использованы для адресации сетевых устройств.

Сеть задана IP-адресом 33.248.48.0 и маской сети 255.255.240.0. Сколько в этой сети IP-адресов, для которых в двоичной записи IP-адреса единиц больше, чем нулей? В ответе укажите только число.

Вариант 13

наименьший адрес компьютера

В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и его маске. Широковещательным адресом называется специализированный адрес, в котором на месте нулей в маске стоят единицы. Адрес сети и широковещательный адрес не могут быть использованы для адресации сетевых устройств.

Сеть задана IP-адресом одного из входящих в неё узлов 44.120.142.169 и сетевой маской 255.254.0.0. Найдите в данной сети наименьший IP-адрес, который может быть назначен компьютеру. В ответе укажите найденный IP-адрес без разделителей. Например, если бы найденный адрес был равен 111.22.3.44, то в ответе следовало бы записать: 11122344.

Вариант 14

число возможных масок

В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и его маске. Широковещательным адресом называется специализированный адрес, в котором на месте нулей в маске стоят единицы. Адрес сети и широковещательный адрес не могут быть использованы для адресации сетевых устройств.

Два узла, находящиеся в одной сети, имеют IP-адреса 161.171.128.29 и 161.170.83.80. Сколько существует различных возможных значений маски?

Вариант 15

третьего байт маски

В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и его маске. Широковещательным адресом называется специализированный адрес, в котором на месте нулей в маске стоят единицы. Адрес сети и широковещательный адрес не могут быть использованы для адресации сетевых устройств.

Для узла с IP-адресом 74.35.178.188 адрес сети равен 74.35.176.0. Чему равно наименьшее возможное значение третьего слева байта маски? Ответ запишите в виде десятичного числа.