Задание 10 ЕГЭ по информатике 2027 — маска подсети, адрес сети и сумма октетов
Разбор задания 10 ЕГЭ по информатике 2027: маска подсети, адрес сети через поразрядное AND, сумма октетов из демоверсии (ответ 516), число узлов и восстановление маски. Код на Python.
С 2027 года задание 10 ЕГЭ по информатике проверяет работу с маской подсети: по адресу узла и маске найти адрес сети, число узлов или восстановить байт маски. В демоверсии 2027 дан адрес 192.168.159.86 и маска 255.255.252.0, а в ответ просят сумму октетов адреса сети — 516. Тема переехала с номера 13, где была до 2027 года; поиск в текстовом процессоре, который раньше шёл под номером 10, из экзамена убран.
Ниже — условие демо, минимум теории, разбор по октетам, код на Python и вариации вопроса из сборников и прежних демоверсий, где тема шла под номером 13. Подробная теория про IP-адреса и побитовые операции с таблицами на все случаи — в статье о задании 13 2026 года; здесь она сжата до того, что нужно для решения за три минуты.
Условие демоверсии 2027
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и его маске.
Даны адрес узла 192.168.159.86 и маска 255.255.252.0. Найдите адрес сети. В ответе укажите сумму числовых значений октетов найденного IP-адреса. Например, если бы найденный адрес был равен 100.20.3.4, в ответе следовало бы записать 127.
Ответ ФИПИ: 516.
Минимум теории
IP-адрес — 32 бита, записанные четырьмя числами от 0 до 255 через точку. Каждое число — октет, восемь бит. Маска — тоже 32 бита, но устроена строго: сначала подряд единицы, потом подряд нули. Единицы отмечают часть адреса, общую для всей сети, нули — часть, уникальную для узла.
Из-за правила «единицы слева, нули справа» октет маски может принимать только девять значений:
| Единиц в октете | Двоичная запись | Октет маски |
|---|---|---|
| 0 | 00000000 | 0 |
| 1 | 10000000 | 128 |
| 2 | 11000000 | 192 |
| 3 | 11100000 | 224 |
| 4 | 11110000 | 240 |
| 5 | 11111000 | 248 |
| 6 | 11111100 | 252 |
| 7 | 11111110 | 254 |
| 8 | 11111111 | 255 |
Адрес сети — это адрес узла AND маска: по каждому биту 1 AND 1 = 1, остальное 0. Удобнее считать по октетам: там, где октет маски 255, октет адреса остаётся как есть; где 0 — становится нулём; и только один «смешанный» октет приходится считать по битам.
Разбор демо по октетам
Маска 255.255.252.0: первые два октета полные, третий смешанный (252 — шесть единиц и два нуля), четвёртый нулевой.
| Октет | Адрес узла | Маска | AND | Октет сети |
|---|---|---|---|---|
| 1 | 192 | 255 | берём как есть | 192 |
| 2 | 168 | 255 | берём как есть | 168 |
| 3 | 159 = 10011111 | 252 = 11111100 | 10011100 | 156 |
| 4 | 86 | 0 | обнуляем | 0 |
Третий октет: 159 в двоичной записи 10011111, маска 11111100 оставляет шесть старших битов и обнуляет два младших — получается 10011100 = 128 + 16 + 8 + 4 = 156. Адрес сети 192.168.156.0, сумма октетов 192 + 168 + 156 + 0 = 516.
Проверка по смыслу: адрес сети всегда «не больше» адреса узла в каждом октете и заканчивается нулями там, где маска нулевая. 156 ≤ 159, последний октет 0 — сходится.
Решение на Python
def octets(text):
return [int(part) for part in text.split(".")]
def net(address, mask):
a = octets(address)
m = octets(mask)
return [a[i] & m[i] for i in range(4)]
address = "192.168.159.86"
mask = "255.255.252.0"
network = net(address, mask)
print(".".join(str(v) for v in network)) # 192.168.156.0
print(sum(network)) # 516
Оператор & — поразрядная конъюнкция целых чисел, он делает ровно то, что требует условие. Разбиение по точкам даёт четыре октета, zip или индекс — их попарное AND. Для задания из демо код печатает 192.168.156.0 и 516.
Вариации вопроса
В сборниках и демоверсиях прошлых лет (там тема шла под номером 13) спрашивали не сумму октетов, а одно из следующего:
| Вопрос | Как считать |
|---|---|
| Число узлов в сети | 2^k − 2, где k — число нулей в маске |
| Наименьший (наибольший) байт маски по адресу узла и адресу сети | перебор девяти допустимых байтов |
| В одной ли подсети два узла | сравнить адреса сетей обоих узлов при одной маске |
| Наибольший адрес, который можно назначить компьютеру (демо 2026) | широковещательный адрес минус один; в ответ — без точек |
| Сколько адресов сети с условием на двоичную запись (демо 2024–2025) | перебрать все адреса сети и проверить условие |
Число узлов. В маске 255.255.252.0 единиц 8 + 8 + 6 = 22, нулей 10. Адресов в сети 2^10 = 1024, из них два заняты — адрес сети и широковещательный, — остаётся 1022 узла.
ones = sum(bin(value).count("1") for value in octets(mask))
print(2 ** (32 - ones) - 2) # 1022
Восстановить байт маски. Пусть известны адрес узла 192.168.159.86 и адрес сети 192.168.156.0, а спрашивают наименьшее значение третьего байта маски. Перебираем допустимые байты от меньшего к большему и берём первый, при котором AND даёт нужный адрес:
MASKS = [0, 128, 192, 224, 240, 248, 252, 254, 255]
network = octets("192.168.156.0")
for byte in MASKS:
if net(address, "255.255." + str(byte) + ".0") == network:
print(byte) # 252
break
Здесь break уместен: перебор идёт по возрастанию байта, и первый подошедший — наименьший. Если спрашивают наибольший байт, перебирают список в обратном порядке.
Одна ли подсеть. Два узла в одной сети, если их адреса сетей при данной маске совпадают: net(a, mask) == net(b, mask).
Ещё один пример: три вопроса к одной маске
Узел 10.8.247.102, маска 255.255.248.0. Смешанный октет — третий: 248 = 11111000, пять единиц и три нуля.
| Вопрос | Расчёт | Ответ |
|---|---|---|
| Адрес сети | 247 = 11110111, AND 11111000 = 11110000 = 240 | 10.8.240.0 |
| Сумма октетов адреса сети | 10 + 8 + 240 + 0 | 258 |
| Число узлов | нулей в маске 8 + 3 = 11, 2^11 − 2 | 2046 |
| В одной ли сети с 10.8.250.17 | 250 AND 248 = 248, адрес сети 10.8.248.0 | нет |
Код из раздела выше с этими адресом и маской печатает 10.8.240.0, 258 и 2046; для второго узла функция net возвращает [10, 8, 248, 0], и сравнение списков даёт False. Три вопроса — один и тот же расчёт AND по октетам, меняется только последняя строка.
Типичные ошибки
AND посчитан не по битам
159 AND 252 — это не «меньшее из двух» и не остаток от деления. Переведи оба числа в двоичную запись и сравни по разрядам; на Python просто 159 & 252.
Байт маски вне девяти допустимых
Если при восстановлении маски получился байт вроде 250 или 200 — в маске оказались единицы после нулей. Такого не бывает: сверься с таблицей девяти значений.
Забытые два адреса
Число узлов — 2^k − 2, а не 2^k. Адрес сети и широковещательный адрес узлам не выдаются.
В ответе адрес вместо суммы
Демоверсия просит сумму октетов, и 192.168.156.0 в поле ответа — потерянный балл. Перечитай последнюю фразу условия: что именно записать.
Перепутан порядок октетов
Первый октет — самый левый, старший. Маска 255.255.252.0 относится к третьему октету, а не ко второму. При ручном счёте выписывай адрес и маску столбиком друг под другом.
Подборка ошибок по всем номерам — в статье Типичные ошибки на ЕГЭ по информатике.
Тайминг на экзамене
| Этап | Время |
|---|---|
| Прочитать условие и выписать адрес с маской | 30 сек |
| Найти смешанный октет и посчитать AND | 1 мин |
| Собрать ответ в нужной форме | 30 сек |
| Итого | 2–3 мин |
Спецификация отводит три минуты. Python здесь не обязателен — ручной счёт одного октета укладывается в минуту, — но с готовой функцией net ошибиться труднее.
Как тренироваться
- Реши 10 задач на адрес сети с разными смешанными октетами, пока перевод в двоичную запись и обратно не станет автоматическим. Переводы разобраны в статье о задании 14.
- Отдельно — по пять задач на число узлов и на восстановление байта маски: это самые частые вопросы в сборниках.
- Выучи девять байтов маски наизусть — они же проверяют ответ на правдоподобие.
- Перепроверяй форму ответа: число, адрес, сумма октетов — в разных заданиях разное.
Как изменились остальные номера — в обзоре ЕГЭ по информатике 2027: что изменилось; демозадание в контексте всего варианта — в разборе демоверсии 2027. Соседнее базовое задание на единицы измерения и степени двойки — задание 7. Старый разбор поиска в текстовом процессоре оставлен в блоге как история: этой темы в экзамене 2027 нет.
Короткий итог
Задание 10 в 2027 году — маска подсети: адрес сети считается поразрядным AND по октетам, и в демоверсии в ответ идёт сумма его октетов — 516. Октет маски принимает одно из девяти значений, число узлов — 2^k − 2, байт маски восстанавливают перебором девяти вариантов. Три минуты по спецификации, один балл, базовый уровень.
Задания на маску подсети с автопроверкой есть в TuteMe — под номером 10, в форме демоверсии 2027: адрес сети и сумма его октетов.