Как решать задание 13 ЕГЭ по информатике — IP-адреса и маски подсети
Разбор задания 13 ЕГЭ: IP-адрес, маска подсети, сетевой адрес, количество хостов. Побитовые операции AND и NOT, формулы, Python-помощник и разборы задач.
О чём задание
Задание 13 — про IP-адреса, маски подсети и определение сетевых параметров. Нужно уметь:
- переводить IP-адреса и маски между десятичной и двоичной формой,
- применять побитовое AND для вычисления сетевого адреса,
- считать количество хостов в подсети,
- определять, находятся ли два IP в одной подсети.
Задание базового уровня, 1 первичный балл. Всего в КЕГЭ 27 заданий на 235 минут, 29 первичных баллов (задания 1-25 — по 1 баллу, 26-27 — по 2 балла). Подробности про формат экзамена — в обзоре изменений 2026.
Теория в двух экранах
Структура IP-адреса
IPv4-адрес — это 32 бита, разделённых на 4 октета по 8 бит. Записывается как 4 десятичных числа через точку:
192.168.10.42
В двоичном виде каждый октет — 8 бит:
192 = 11000000
168 = 10101000
10 = 00001010
42 = 00101010
Полностью адрес: 11000000.10101000.00001010.00101010.
Диапазон значений каждого октета — 0..255 (2^8 = 256 комбинаций). Если в условии увидел число больше 255 — ты где-то ошибся в переводе.
Маска подсети
Маска — это тоже 32 бита, но устроены они по строгому правилу: сначала идут единицы, потом нули. Единицы отвечают за «сетевую часть» адреса, нули — за «хостовую» (адрес компьютера внутри сети).
Пример: 255.255.255.192 в двоичном виде:
11111111.11111111.11111111.11000000
Здесь 26 единиц и 6 нулей. Короткая форма записи: /26 (префикс).
Популярные маски:
| Префикс | Маска в десятичном | Единиц | Адресов в сети | Хостов |
|---|---|---|---|---|
| /8 | 255.0.0.0 | 8 | 2^24 = 16 777 216 | 16 777 214 |
| /16 | 255.255.0.0 | 16 | 2^16 = 65 536 | 65 534 |
| /20 | 255.255.240.0 | 20 | 2^12 = 4 096 | 4 094 |
| /24 | 255.255.255.0 | 24 | 2^8 = 256 | 254 |
| /25 | 255.255.255.128 | 25 | 2^7 = 128 | 126 |
| /26 | 255.255.255.192 | 26 | 2^6 = 64 | 62 |
| /28 | 255.255.255.240 | 28 | 2^4 = 16 | 14 |
| /29 | 255.255.255.248 | 29 | 2^3 = 8 | 6 |
| /30 | 255.255.255.252 | 30 | 2^2 = 4 | 2 |
Последний столбец — количество доступных хостов (минус 2 от общего числа адресов: сетевой и широковещательный зарезервированы).
Октеты маски по битам
Таблица соответствия «количество единиц слева в октете → десятичное значение» — её стоит знать наизусть:
| Единиц в октете | Двоичное | Десятичное |
|---|---|---|
| 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 |
Пример: префикс /22 — это 16 единиц (два полных октета: 255.255) + ещё 6 единиц в третьем октете (= 252) + 0 в четвёртом. Итог: 255.255.252.0.
Три ключевые операции
Сетевой адрес: IP AND Маска
Побитовое AND: 1 AND 1 = 1, в остальных случаях — 0. Суть: там, где в маске единица — бит IP сохраняется, там, где ноль — зануляется.
$$\text{Сетевой адрес} = \text{IP} \text{ AND } \text{Маска}$$
Для десятичной записи удобно работать пооктетно: только последний «смешанный» октет действительно считать, остальные либо берутся как в IP (если маска = 255), либо обнуляются (если маска = 0).
Адрес компьютера (хоста) в подсети: IP AND NOT Маска
Инвертируешь маску (NOT: 1 становится 0, 0 становится 1) и применяешь AND. Это хостовая часть адреса — то, что уникально для каждого компьютера внутри одной сети.
$$\text{Адрес хоста} = \text{IP} \text{ AND } (\text{NOT Маска})$$
Количество хостов
$$H = 2^{32 - p} - 2$$
где p — префикс. Минус 2 — потому что один адрес уходит на сеть (все биты хоста нули), другой — на широковещание (все биты хоста единицы).
Пошаговый алгоритм
- Выпиши IP и маску в двоичном виде пооктетно. Если маска задана префиксом — сам построй маску по таблице единиц.
- Выдели границу: после какого бита в маске начинаются нули.
- Определи, что спрашивают:
- сетевой адрес → применяй AND,
- адрес хоста → применяй AND с инвертированной маской,
- количество хостов → формула 2^(32-p) - 2,
- одна ли подсеть → сравни сетевые адреса двух IP.
- Считай только «смешанный» октет — тот, где у маски и единицы, и нули. Остальные октеты тривиальны.
- Переведи ответ обратно в десятичную запись и проверь, что все октеты в диапазоне 0..255.
Пример 1: сетевой адрес и маска восстановлены из IP
Для узла с IP-адресом
192.168.120.58адрес сети равен192.168.120.32. Сколько единиц в двоичной записи маски подсети?
Решение
Из условия получаем, что IP AND Маска = 192.168.120.32. Первые три октета совпадают в IP и в сетевом адресе (192.168.120), значит, маска в этих октетах — все 8 единиц (то есть префикс не меньше 24).
Остаётся разобрать последний октет. IP: 58, сетевой: 32.
58 = 00111010
32 = 00100000
AND должен дать 32. Какие биты маски могут быть единицами? Те, где в IP стоит бит, совпадающий с битом сетевого адреса (там, где в сетевом 0 — бит маски тоже должен обнулять IP).
Сравниваем побитово:
| Позиция (бит) | IP (58) | Сеть (32) | Маска |
|---|---|---|---|
| 128 | 0 | 0 | 0 или 1 |
| 64 | 0 | 0 | 0 или 1 |
| 32 | 1 | 1 | 1 (сохраняет бит) |
| 16 | 1 | 0 | 0 (обнуляет бит) |
| 8 | 1 | 0 | 0 |
| 4 | 1 | 0 | 0 |
| 2 | 1 | 0 | 0 |
| 1 | 0 | 0 | 0 или 1 |
Маска обязана быть в формате «единицы слева, нули справа». Значит, после первого встреченного 0 в маске дальше идут только нули. Самая правая единица, которую можно уверенно утвердить — в позиции 32 (бит 3 слева в октете). Значит, в последнем октете три единицы: 11100000 = 224.
Итого маска: 255.255.255.224 — 27 единиц.
Ответ: 27.
Проверка: 192.168.120.58 AND 255.255.255.224 → последний октет 58 AND 224 = 32. Совпало.
Пример 2: в одной ли подсети два компьютера
Компьютер A имеет IP
172.16.45.130, компьютер B —172.16.45.200. Маска подсети —255.255.255.192. Находятся ли A и B в одной подсети?
Решение
Первые три октета у IP и маски совпадают — значит, разница может быть только в последнем октете.
Последний октет маски: 192 = 11000000. Префикс /26, значит, в последнем октете 2 бита — сетевая часть, 6 битов — хостовая.
Последний октет IP:
- A: 130 =
10000010 - B: 200 =
11001000
Берём первые два бита (маска = 11):
- A:
10→ значение 128 - B:
11→ значение 192
Сетевые адреса:
- A:
172.16.45.128 - B:
172.16.45.192
Они различаются, значит, компьютеры находятся в разных подсетях.
Ответ: нет.
Чуть быстрее тот же приём: 130 AND 192 = 128, 200 AND 192 = 192. Не равны → разные подсети.
Пример 3: сколько хостов
В подсети с маской
255.255.255.240необходимо разместить рабочие станции. Сколько компьютеров можно подключить, если в каждой подсети резервируются сетевой и широковещательный адреса?
Решение
Маска 255.255.255.240 → префикс /28 (24 + 4 = 28 единиц). Количество бит на хостовую часть: 32 - 28 = 4.
Количество адресов в сети: 2^4 = 16. Из них 2 зарезервированы (сеть и бродкаст).
$$H = 16 - 2 = 14$$
Ответ: 14.
Пример 4: разбиение на подсети
Сеть
10.0.0.0/24нужно разбить на подсети так, чтобы в каждой было не менее 30 рабочих станций. Какова минимальная длина префикса новой маски, которая обеспечит это, и сколько таких подсетей получится внутри исходной?
Решение
Шаг 1. Минимальное число бит для хостовой части. Нужно не меньше 30 хостов + 2 резерв = 32 адреса в подсети. 2^5 = 32, значит, на хостовую часть нужно минимум 5 бит. Префикс: 32 - 5 = /27.
Проверка: 2^5 - 2 = 30 хостов — ровно впритык. Подходит.
Шаг 2. Сколько подсетей внутри /24. Исходный префикс /24 имеет 8 бит на хостовую часть. Новые подсети используют 5 бит под хост и 3 бита под подсеть (8 - 5 = 3). Количество подсетей: 2^3 = 8.
Ответ: префикс /27, 8 подсетей.
Каждая из 8 подсетей: 10.0.0.0/27, 10.0.0.32/27, 10.0.0.64/27, ..., 10.0.0.224/27.
Python-помощник
На КЕГЭ доступна стандартная библиотека Python, в том числе модуль ipaddress. Он сильно экономит время.
import ipaddress
# Пример 1: восстановить маску
ip = ipaddress.ip_address('192.168.120.58')
net = ipaddress.ip_address('192.168.120.32')
# Прямо: перебором префиксов ищем тот, при котором IP AND Маска даёт net
for prefix in range(33):
net_guess = ipaddress.ip_network(f'192.168.120.58/{prefix}', strict=False)
if net_guess.network_address == net:
print(prefix) # 27 (и все меньшие, где тоже совпадает — но нужна максимальная)
# Пример 2: одна ли подсеть
a = ipaddress.ip_interface('172.16.45.130/26').network
b = ipaddress.ip_interface('172.16.45.200/26').network
print(a == b) # False
# Пример 3: хосты в подсети
n = ipaddress.ip_network('10.0.0.0/28')
print(n.num_addresses - 2) # 14
# Пример 4: разбиение на подсети
big = ipaddress.ip_network('10.0.0.0/24')
subs = list(big.subnets(new_prefix=27))
print(len(subs)) # 8
for s in subs[:3]:
print(s, 'хостов:', s.num_addresses - 2)
Главное — понимать что именно ты вычисляешь. Модуль не заменит понимание, но уберёт ручные ошибки с AND. Подробнее про полезные трюки Python — в статье Python-идиомы для ЕГЭ.
Без модуля, на битах
Если хочешь без ipaddress (или нужно показать «в лоб», как работает AND):
def to_int(ip: str) -> int:
a, b, c, d = map(int, ip.split('.'))
return (a << 24) | (b << 16) | (c << 8) | d
def to_ip(x: int) -> str:
return '.'.join(str((x >> (8 * i)) & 0xff) for i in (3, 2, 1, 0))
def mask_from_prefix(p: int) -> int:
return ((1 << p) - 1) << (32 - p) if p else 0
ip = to_int('172.16.45.130')
mask = mask_from_prefix(26)
net = ip & mask
host = ip & ~mask & 0xffffffff
print(to_ip(net)) # 172.16.45.128
print(to_ip(host)) # 0.0.0.2
Типичные ошибки
Ошибка 1: забыл -2 при подсчёте хостов. 2^(32-p) — это общее число адресов, а не доступных хостов. Минус 2 — всегда. Исключение: в условии прямо сказано «общее число адресов» — тогда не вычитай.
Ошибка 2: перепутал маску и префикс. /24 = 255.255.255.0, а не 255.255.255.24 и не 24.0.0.0. Если сомневаешься — построй маску как «первые p бит — единицы, остальные — нули» и переведи пооктетно по таблице.
Ошибка 3: неверный AND в «смешанном» октете. Первые и последние октеты часто тривиальны (255 → IP как есть, 0 → 0). Все ошибки — в «граничном» октете. Всегда раскладывай его в двоичную запись и считай побитово.
Ошибка 4: забыл про формат маски. Маска — это всегда «единицы слева, потом нули». 255.255.128.255 — невалидная маска, даже если она дала бы правильный AND для конкретной пары (такого в задачах ЕГЭ не бывает, но в чужих решениях иногда ошибаются).
Ошибка 5: спутал сетевой и широковещательный адрес. Сетевой — все биты хоста нули, широковещательный — все единицы. Если спрашивают сетевой, а ты дал последний адрес диапазона — потерял балл.
Больше типовых промахов — в разборе 5 ошибок на ЕГЭ.
Тайминг
Задание 13 — 5-8 минут на стандартный вариант. Базовый уровень, 1 балл. Рекомендация: решай в первой половине экзамена, после простых 1-6, но до трудоёмких 24-27.
Если застрял на двоичной арифметике больше 8-10 минут — отметь и вернись. В КЕГЭ всего 235 минут на 27 заданий, приоритет — набрать баллы на простых и не потерять 4-балльное задание 27.
Как тренироваться
- Выучи таблицу октетов маски (0, 128, 192, 224, 240, 248, 252, 254, 255) — это фундамент. Без неё каждая задача становится в 2 раза длиннее.
- Запомни соответствие префикс ↔ маска для /8, /16, /24, /25, /26, /27, /28, /30. На экзамене эти значения встречаются в 80% задач.
- Натренируй AND на смешанном октете. 50 задач, где нужно вычислить сетевой адрес или хостовую часть — за месяц ты научишься делать это за 30 секунд.
- Добавь задачи на разбиение подсетей. Типичный сюжет: «разбить /24 так, чтобы в каждой было не менее N хостов». Минут 7-8, но дают 1 уверенный балл.
- Прогоняй Python-шаблон — если в задаче подозрительно много арифметики, проверь ответ через
ipaddress. Экономит минуты и страхует от тупых ошибок.
Если общий план подготовки ещё не сверстан, начни с плана на 3 месяца, плана на 6 месяцев или с нуля. А перед экзаменом не забудь про чек-лист того, что взять. В TuteMe есть банк задач отдельно на задание 13 — с пошаговым разбором AND и автоматической проверкой.