Задание 13 ЕГЭ по информатике: маска подсети
Задание 13 ЕГЭ по информатике (КЕГЭ) — это маска подсети и IP-адрес: по проверяемому элементу содержания 1.2 оно проверяет умение понимать принципы адресации в сети и работать с поразрядной конъюнкцией. Задание повышенного уровня сложности, за него дают 1 первичный балл, и оно, как и все 27 заданий КЕГЭ, оценивается автоматически по краткому ответу — файла к нему не прилагается. Ответ — либо число, либо IP-адрес без разделителей (без точек). В статье — вся теория по IPv4 и маскам, приём «переводим только тот байт, который меняется», рабочий Python-код и три разбора реальных заданий из открытого банка ФИПИ с проверенными ответами. Потренироваться можно на реальных заданиях 13 ЕГЭ по информатике онлайн — с мгновенной проверкой ответа.
Что проверяет задание 13 ЕГЭ по информатике
Раздел кодификатора — «Цифровая грамотность», проверяемый элемент содержания 1.2 — принципы адресации в сети, устройство IP-адреса и маски подсети. Само задание построено вокруг одной операции — поразрядной конъюнкции адреса узла и маски сети.
Проверяемые умения (КЭС 1.2):
- понимать структуру IPv4-адреса: четыре байта, десятичная запись через точки, диапазон значений каждого байта 0–255;
- понимать смысл маски подсети — числа, где слева стоят единицы, а справа нули, и уметь находить адрес сети через поразрядную конъюнкцию адреса узла и маски;
- считать количество узлов и количество адресов в подсети по числу нулей (единиц) в маске;
- по адресу узла и маске находить адрес сети, а по адресу узла и адресу сети — восстанавливать возможные маски;
- выполнять операции с двоичной записью байта: считать единицы и нули, находить подряд идущие серии битов.
| Параметр | Значение |
|---|---|
| Максимальный балл | 1 первичный (частичного зачёта нет: ответ либо полностью совпал с эталоном, либо 0) |
| Уровень сложности | Повышенный (П) — одно из 11 заданий этого уровня в работе |
| Формат ответа | Краткий: число либо IP-адрес без разделителей (без точек) |
| Раздел кодификатора | 1. Цифровая грамотность; КЭС 1.2 |
| Нужен ли файл / спец. ПО | Нет — файл к заданию не прилагается, специализированное ПО не требуется, решение удобно набросать на черновике |
| Примерное время выполнения | 3 минуты (по спецификации ФИПИ) |
| Связанные задания | Задание 22 (многопроцессорные системы, тоже раздел «Цифровая грамотность»), задание 4 (кодирование, работа с двоичной записью) |
Тренируйтесь на реальных заданиях
Задания 13 ЕГЭ по информатике из открытого банка ФИПИ с мгновенной проверкой ответа. Решаем, ошибаемся, разбираем — бесплатно.
Как выглядит формулировка
Условие задания 13 почти всегда начинается с одного и того же определяющего абзаца — он не меняется от варианта к варианту и задаёт всю терминологию:
«В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети».
А дальше идёт один из двух подтипов вопроса. В банке заданий этой линии их ровно два:
Подтип 1 — дана сеть (IP-адрес + маска), нужно посчитать количество адресов с каким-то свойством:
- «Сеть задана IP-адресом 122.159.136.144 и маской сети 255.255.255.248. Сколько в этой сети IP-адресов, для которых количество единиц в двоичной записи IP-адреса не кратно 4? В ответе укажите только число.»
- «Сеть задана IP-адресом 208.95.48.0 и маской сети 255.255.240.0. Определите максимальное количество нулей в двоичной записи IP-адреса в этой сети. В ответе укажите только число.»
Подтип 2 — дан IP-адрес узла и адрес сети, нужно найти, скольким маскам это соответствует:
- «Для узла с IP-адресом 153.172.3.8 адрес сети равен 153.172.3.0. Для скольких различных значений маски это возможно? В ответе запишите только число.»
Встречаются и вариации, где ответом служит сам IP-адрес (например, адрес сети или конкретный узел, удовлетворяющий условию), а не число. Для таких формулировок ФИПИ прямо оговаривает форму записи — «в ответе укажите найденный IP-адрес без разделителей». Это значит: четыре числа от 0 до 255 пишутся подряд, без точек и без пробелов — например, адрес 192.168.1.1 нужно записать как 19216811. Если же ответ — количество адресов или количество масок, в ответ идёт обычное натуральное число, тоже без пробелов и лишних символов.
Теория: всё, что нужно для задания 13
Структура IPv4-адреса
IPv4-адрес — это 4 байта (32 бита), каждый из которых записывается десятичным числом от 0 до 255 и отделяется от соседних точкой:
Каждый байт — это 8 бит, поэтому весь адрес — это бита. Диапазон 0–255 получается из того, что 8 бит дают различных значений: от 00000000 (0) до 11111111 (255). Перевод байта в двоичную запись — базовая операция всего задания, поэтому иметь под рукой таблицу степеней двойки (128, 64, 32, 16, 8, 4, 2, 1) обязательно.
Пример: . Раскладываем по степеням двойки: , значит в разрядах 128 и 16 стоят единицы, в остальных — нули: 10010000.
Маска подсети и поразрядная конъюнкция
Маска подсети — это тоже 32-битное число, но устроенное жёстко: слева стоят подряд идущие единицы, справа — подряд идущие нули, и нигде между ними единица не чередуется с нулём. Единицы маски отмечают биты адреса сети, нули — биты адреса узла внутри сети. Поэтому маску однозначно задаёт одно число — количество единиц в ней.
Типичные маски и их байтовая запись:
| Единиц всего | Маска (десятично) | Байт с «обрывом» |
|---|---|---|
| 24 | 255.255.255.0 | 00000000 |
| 26 | 255.255.255.192 | 11000000 |
| 28 | 255.255.255.240 | 11110000 |
| 29 | 255.255.255.248 | 11111000 |
Как найти адрес сети: поразрядная конъюнкция
Адрес сети = адрес узла И (поразрядно) маска. Правило конъюнкции по каждому биту: 1 и 1 дают 1, а если хотя бы один бит — 0, результат 0. На практике это означает: там, где в маске единица, бит адреса сохраняется; там, где в маске ноль, бит адреса обнуляется.
Пример: узел 144 = 10010000, маска 248 = 11111000. Первые пять битов совпадают с маской (единицы) и сохраняются, последние три бита обнуляются: 10010000 & 11111000 = 10010000 — в данном случае байт не изменился, потому что три младших бита узла и так были нулями.
Сколько адресов и узлов в подсети
Если в маске единиц, значит нулей — . Эти свободных битов и определяют, сколько разных адресов помещается в подсеть:
Но назначить узлам можно не все эти адреса. Два адреса в любой подсети зарезервированы: адрес, где все свободные биты — нули (это адрес самой сети), и адрес, где все свободные биты — единицы (это широковещательный адрес, broadcast). Реальным узлам достаются только адреса между ними:
Это различие критично для формулировок. Если вопрос звучит как «сколько IP-адресов в этой сети» или «сколько адресов удовлетворяют условию» — считаем все значений, включая адрес сети и broadcast. А если вопрос звучит как «сколько узлов можно подключить к сети» — нужно вычесть эти два служебных адреса.
Таблица: число нулей → шаг подсети → число адресов
| Нулей в маске | Адресов | Узлов | Шаг между сетями |
|---|---|---|---|
| 1 | 2 | 0 | 2 |
| 2 | 4 | 2 | 4 |
| 3 | 8 | 6 | 8 |
| 4 | 16 | 14 | 16 |
| 5 | 32 | 30 | 32 |
| 8 | 256 | 254 | 256 |
| 12 | 4096 | 4094 | 4096 |
«Шаг между сетями» — это разница между началом соседних подсетей одного размера: если подсеть начинается с адреса, кратного , следующая начнётся ровно через адресов. Это удобно для проверки: у сети 122.159.136.144/29 (29 единиц, 3 нуля) шаг равен 8, и правда, 144 кратно 8.
Главный приём: переводите только тот байт, который меняется
Маска почти никогда не «режет» адрес посередине байта на всех четырёх байтах сразу — она задаёт границу ровно в одном байте (том, что соответствует остатку от деления числа единиц на 8), а все байты левее полностью фиксированы (255), все байты правее — полностью свободны (0). Значит, переводить в двоичный вид нужно только один байт — тот, где проходит граница маски. Остальные три байта одинаковы у всех адресов подсети, и их можно вообще не трогать.
Пример: маска 255.255.255.248. Первые три байта маски — 11111111, значит первые три байта адреса фиксированы такими, какие они в исходном IP. Только четвёртый байт маски — 11111000 — содержит границу: 5 единиц и 3 нуля. Значит, свободны ровно 3 младших бита последнего байта, а первые три байта адреса для всех адресов подсети одинаковы и участвуют в подсчёте «как есть», без перевода в двоичный вид — если только вопрос не спрашивает именно про них.
Отсюда практика: если условие спрашивает «сколько единиц/нулей в адресе», для трёх фиксированных байтов количество единиц считается один раз и прибавляется как константа ко всем 8 (или сколько там) вариантам четвёртого байта. Пересчитывать три фиксированных байта заново для каждого из вариантов — пустая трата времени.
Python: побитовые операции и перебор масок
Все вычисления задания 13 сводятся к трём операциям Python: собрать 32-битное число из четырёх байтов, применить & (побитовое И) и построить маску сдвигом <<. Вот рабочий шаблон для подтипа «дана сеть — считаем адреса по условию»:
def ip_to_int(a, b, c, d):
return (a << 24) | (b << 16) | (c << 8) | d
ip = ip_to_int(122, 159, 136, 144)
mask = ip_to_int(255, 255, 255, 248)
net = ip & mask
host_bits = 32 - bin(mask).count("1")
count = 0
for k in range(2 ** host_bits):
addr = net + k
ones = bin(addr).count("1")
if ones % 4 != 0:
count += 1
print(count)Идея: net + k перебирает все адреса подсети (от адреса сети до адреса сети плюс ), а bin(addr).count("1") считает единицы в двоичной записи. Функция bin() в Python сама убирает ведущие нули, но на подсчёт количества единиц это не влияет.
Для подтипа «по узлу и адресу сети найти число масок» перебор идёт не по адресам, а по длине маски — от 0 до 32:
ip = ip_to_int(153, 172, 3, 8)
net = ip_to_int(153, 172, 3, 0)
count = 0
for k in range(33):
mask = ((1 << k) - 1) << (32 - k) if k > 0 else 0
if ip & mask == net:
count += 1
print(count)Здесь (1 << k) - 1 даёт число из единиц (например, при получаем 111 = 7), а сдвиг << (32 - k) отодвигает эти единицы в старшие разряды — получается маска с единицами слева и нулями справа, как и положено настоящей маске подсети. Условие ip & mask == net проверяет ровно то определение, что дано в условии задачи.
Алгоритм решения задания 13
- Определите подтип вопроса. Если дана сеть (IP-адрес + маска) и спрашивают про адреса или узлы — это первый подтип. Если дан узел и адрес сети, а спрашивают про число масок — второй.
- Найдите байт, где проходит граница маски.Переведите маску в двоичный вид по байтам и найдите тот, в котором единицы сменяются нулями (255 = все единицы, 0 = все нули, полностью его не переводите).
- Посчитайте число свободных битов , где — число единиц в маске. Число адресов в подсети — , число узлов — .
- Переведите в двоичный вид только меняющийся байт исходного IP-адреса — остальные три байта одинаковы для всех адресов подсети, их переводите один раз как константу.
- Переберите все варианты свободных битов (от 0 до ) и для каждого проверьте условие задачи: количество единиц/нулей, наличие подряд идущих битов и так далее.
- Для подтипа «сколько масок» переберите длину маски от 0 до 32, постройте маску сдвигом и сравните с данным адресом сети.
- Запишите ответ в нужной форме. Число — просто цифрами. IP-адрес — без точек и пробелов, подряд все четыре десятичных значения.
Закрепите приём на практике
Прорешайте подряд десяток заданий на маску подсети — и перевод байта в двоичный вид займёт секунды. Задания ЕГЭ по информатике из банка ФИПИ с проверкой ответа — на Repet.ai.
Примеры с разбором
Пример 1. Считаем адреса по свойству числа единиц
Условие (реальное задание из открытого банка ФИПИ):
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Сеть задана IP-адресом 122.159.136.144 и маской сети 255.255.255.248. Сколько в этой сети IP-адресов, для которых количество единиц в двоичной записи IP-адреса не кратно 4? В ответе укажите только число.
Решение:
Шаг 1. Маска 255.255.255.248 — последний байт : 5 единиц, 3 нуля. Значит, под номер узла отведены 3 младших бита, и в сети адресов. Первые три байта маски — 255, они не меняются.
Шаг 2. Адрес сети: , последние три бита уже нулевые, поэтому конъюнкция с маской ничего не меняет — адрес сети 122.159.136.144. Все 8 адресов подсети — от .144 до .151.
Шаг 3. Переводим только меняющийся (последний) байт. Первые три байта — 122, 159, 136 — одинаковы у всех 8 адресов, посчитаем в них единицы один раз:
122 = 01111010 -> 5 единиц
159 = 10011111 -> 6 единиц
136 = 10001000 -> 2 единицы
итого в первых трёх байтах: 5 + 6 + 2 = 13 единицВ последнем байте старшие 5 бит фиксированы — 10010 — это ещё 2 единицы. Итого «база» — 15 единиц, к ней прибавляются единицы из 3 свободных младших бит (от 000 до 111):
| Последний байт | Младшие 3 бита | Всего единиц | Кратно 4? |
|---|---|---|---|
| 144 | 000 | 15 | нет |
| 145 | 001 | 16 | да |
| 146 | 010 | 16 | да |
| 147 | 011 | 17 | нет |
| 148 | 100 | 16 | да |
| 149 | 101 | 17 | нет |
| 150 | 110 | 17 | нет |
| 151 | 111 | 18 | нет |
Кратно 4 — у трёх адресов (145, 146, 148), значит не кратно — у .
Ответ: 5. Проверка здравым смыслом: ответ не может быть больше общего числа адресов в подсети (8) — 5 меньше 8, значит порядок величины верный.
Пример 2. Ищем возможные маски по адресу узла и адресу сети
Условие (реальное задание из открытого банка ФИПИ):
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Для узла с IP-адресом 153.172.3.8 адрес сети равен 153.172.3.0. Для скольких различных значений маски это возможно? В ответе запишите только число.
Решение:
Здесь неизвестна не подсеть, а маска — задание переворачивает логику первого подтипа. Маска — это единиц, за которыми идут нули. Выписываем оба адреса в двоичном виде побайтно:
узел 153.172.3.8 -> 10011001 10101100 00000011 00001000
сеть 153.172.3.0 -> 10011001 10101100 00000011 00000000Первые два байта (153, 172) и старшая часть третьего байта (3 = 00000011) у узла и у сети совпадают — их вообще не нужно трогать. Всё различие — в последнем байте: у узла 00001000 (8), у сети 00000000 (0).
Конъюнкция с маской из единиц оставляет первые бит узла как есть и обнуляет остальные. Чтобы результат совпал с адресом сети, нужны два условия:
- все единицы адреса сети должны попасть в первые бит — последняя единица адреса сети стоит на 24-й позиции (это младший бит третьего байта: ), значит ;
- все биты, где узел и сеть расходятся, должны попасть в обнуляемую часть — первое расхождение между узлом и сетью на 29-й позиции (бит со значением 8 в последнем байте), значит .
Подходят — ровно пять значений. В десятичной записи это маски 255.255.255.0, 255.255.255.128, 255.255.255.192, 255.255.255.224 и 255.255.255.240.
Ответ: 5. Проверка: при маска обнуляет весь последний байт — 8 обнулится до 0, совпадёт с сетью; при маска уже сохранила бы бит со значением 8, и результат отличался бы от 0 — значит, 29 не подходит, что и даёт верхнюю границу 28.
Пример 3. Ищем экстремум — максимум нулей в адресе
Условие (реальное задание из открытого банка ФИПИ):
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Сеть задана IP-адресом 208.95.48.0 и маской сети 255.255.240.0. Определите максимальное количество нулей в двоичной записи IP-адреса в этой сети. В ответе укажите только число.
Решение:
Шаг 1. Маска 255.255.240.0: первые два байта — 255 (все единицы), третий байт (4 единицы, 4 нуля), четвёртый байт — 0 (все нули). Всего единиц: , свободных бит — .
Шаг 2. Фиксированная часть адреса (первые 20 бит) — это первые два байта 208.95 плюс старшие 4 бита третьего байта:
208 = 11010000 -> 5 нулей (из 8 бит)
95 = 01011111 -> 2 нуля
48 = 00110000, старшие 4 бита: 0011 -> 2 нуляВ фиксированной части нулей. Свободны последние 12 бит (младшие 4 бита третьего байта плюс весь четвёртый байт).
Шаг 3. Нулей будет максимум, если и все 12 свободных бит тоже сделать нулями — то есть взять сам адрес сети 208.95.48.0 (свободная часть — 000000000000, это ровно 12 нулей). Другие адреса подсети содержат хотя бы одну единицу в свободной части, а значит нулей там меньше.
Ответ: 21. Проверка: всего в адресе 32 бита, значит из них 21 ноль и единиц — и это как раз количество единиц в самом адресе сети 208.95.48.0 (в двоичной записи 11010000 01011111 00110000 00000000, единиц действительно 11).
Типичные ошибки
Перевод в двоичный вид всего адреса целиком. Три из четырёх байтов не меняются внутри подсети — переводить их заново для каждого варианта не нужно и только повышает шанс арифметической ошибки. Переводите один раз только тот байт, где проходит граница маски.
Путаница «адреса в подсети» и «узлы в подсети». Число адресов — , число узлов, которые реально можно назначить, — (без адреса сети и широковещательного адреса). Если вопрос про «сколько IP-адресов удовлетворяют условию» — вычитать 2 не нужно; если про «сколько узлов можно подключить» — нужно.
Ошибка в направлении конъюнкции. Единица в маске сохраняет бит адреса, ноль в маске обнуляет его. Перепутать легко: помните, что единицы маски — это «часть, отвечающая за сеть», и именно она копируется без изменений.
Забыли, что маска должна быть «единицы слева, нули справа» без чередования. В задачах на подсчёт числа масок перебирать нужно только длину префикса от 0 до 32 — никаких других двоичных чисел маской быть не может.
Разделители в ответе-адресе. Если ответ — IP-адрес, в бланк идёт запись без точек и без пробелов (192.168.1.1 → 19216811). Оставленная точка или пробел — это несовпадение с эталоном и 0 баллов, даже если число верное.
Ошибка в границах при поиске числа масок. Нижнюю границу задаёт позиция последней единицы в адресе сети, верхнюю — позиция первого расхождения между узлом и сетью. Перепутать местами эти два условия — частая причина неверного ответа.
Арифметика степеней двойки в уме без проверки. , , — эти степени встречаются в задании постоянно. Ошибка на одном порядке (спутать и ) обнуляет весь верный ход решения.
Как задание 13 связано с остальным экзаменом
Задание 13 стоит особняком — оно единственное на КЕГЭ, где вопрос посвящён именно сетевой адресации. Но приёмы работы с двоичной записью, которые оно тренирует, пригодятся и в других заданиях:
- Задание 4 — тоже требует уверенного перевода чисел в двоичную запись, только в контексте кодирования и условия Фано.
- Задание 14 — позиционные системы счисления, следующая по порядку линия повышенного уровня, тоже про перевод чисел между основаниями.
- Задание 22 — многопроцессорные системы, тот же раздел кодификатора «Цифровая грамотность».
Полезные ссылки по теме:
План подготовки
Неделя 1: база
Выучите таблицу степеней двойки от до . Потренируйтесь переводить отдельные байты (0–255) в двоичный вид без калькулятора — 15–20 чисел в день. Разберите операцию поразрядной конъюнкции на 5–7 маленьких примерах (можно на 4-битных числах, чтобы не отвлекаться на длину записи).
Неделя 2: подтип «дана сеть»
Решите 10–15 заданий подтипа «сколько адресов удовлетворяют условию». На каждом сначала найдите байт с границей маски и зафиксируйте, сколько битов свободно, и только потом считайте условие. Обязательно проверяйте себя: пишите к каждому заданию маленькую Python-программу с перебором и сверяйте с ручным счётом.
Неделя 3: подтип «сколько масок»
Разберите 8–10 заданий на поиск числа возможных масок по узлу и адресу сети. Отработайте нахождение нижней границы (по последней единице адреса сети) и верхней границы (по первому расхождению узла и сети) как отдельный, самостоятельный навык.
Неделя 4: смешанная практика и скорость
Пройдите пробный экзамен КЕГЭ целиком, засекая время на задание 13 отдельно. Цель — укладываться в 3 минуты на задание (это и есть примерное время выполнения задания по спецификации ФИПИ), включая проверку ответа и запись в нужном формате (число или IP-адрес без разделителей).
Проверьте себя прямо сейчас
Решите подборку заданий 13 из открытого банка ФИПИ и сразу узнайте, где ошиблись.
Часто задаваемые вопросы
Маска подсети — это 32-битное число, в котором слева стоят подряд идущие единицы, а справа — подряд идущие нули. Единицы показывают, какая часть IP-адреса относится к адресу сети, а нули — какая часть отведена под номер узла внутри этой сети. Например, маска 255.255.255.0 в двоичном виде — 24 единицы и 8 нулей: первые три байта задают сеть, последний байт — номер узла.
Нужно применить поразрядную конъюнкцию (побитовое И) к адресу узла и маске: там, где в маске стоит единица, бит адреса сохраняется без изменений, а там, где в маске ноль, бит адреса обнуляется. Проще всего перевести в двоичный вид только тот байт, где маска меняется с единиц на нули, — остальные байты либо полностью сохраняются (маска 255), либо полностью обнуляются (маска 0).
Если в маске k нулей, то всего в подсети 2^k адресов, но реально назначить узлам можно только 2^k − 2, потому что два адреса зарезервированы: адрес со всеми нулями в свободной части — это адрес самой сети, а адрес со всеми единицами — широковещательный (broadcast) адрес. Если вопрос задания спрашивает про количество IP-адресов, а не про количество узлов, вычитать 2 не нужно.
Если ответ — число (количество адресов, узлов, масок), его пишут обычными цифрами без пробелов. Если ответ — сам IP-адрес, по инструкции ФИПИ его нужно записать без разделителей, то есть без точек: например, адрес 192.168.1.1 записывается как 19216811 — четыре десятичных значения подряд.
В первом подтипе дана готовая сеть — IP-адрес и маска, — и нужно посчитать, сколько адресов подсети удовлетворяют какому-то условию (например, чётности суммы единиц или наличию трёх единиц подряд). Во втором подтипе, наоборот, дан адрес узла и адрес сети, а найти нужно, скольким различным маскам такое соответствие возможно.
Маска задаёт границу ровно в одном байте — байты левее этой границы всегда состоят из одних единиц маски и полностью сохраняются, байты правее состоят из одних нулей маски и полностью обнуляются. Значит, у всех адресов одной подсети три из четырёх байтов одинаковы, и переводить их в двоичный вид заново для каждого варианта не нужно — это только увеличивает риск арифметической ошибки.
Да, экзамен сдаётся за компьютером, и в числе доступных сред — Python. Но задание 13 не требует прикреплённого файла и обычно решается быстрее вручную, если владеть приёмом «переводим только меняющийся байт». Python удобно использовать для самопроверки при подготовке — написать перебор и сверить с результатом, полученным на бумаге.
Задание 13 относится к разделу «Цифровая грамотность», проверяемый элемент содержания — 1.2, посвящённый принципам адресации в сети и работе с IP-адресами и масками подсети. Уровень сложности — повышенный, за верный ответ дают 1 первичный балл.