6 мин чтения

Как решать задание 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 (префикс).

Популярные маски:

ПрефиксМаска в десятичномЕдиницАдресов в сетиХостов
/8255.0.0.082^24 = 16 777 21616 777 214
/16255.255.0.0162^16 = 65 53665 534
/20255.255.240.0202^12 = 4 0964 094
/24255.255.255.0242^8 = 256254
/25255.255.255.128252^7 = 128126
/26255.255.255.192262^6 = 6462
/28255.255.255.240282^4 = 1614
/29255.255.255.248292^3 = 86
/30255.255.255.252302^2 = 42

Последний столбец — количество доступных хостов (минус 2 от общего числа адресов: сетевой и широковещательный зарезервированы).

Октеты маски по битам

Таблица соответствия «количество единиц слева в октете → десятичное значение» — её стоит знать наизусть:

Единиц в октетеДвоичноеДесятичное
0000000000
110000000128
211000000192
311100000224
411110000240
511111000248
611111100252
711111110254
811111111255

Пример: префикс /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 — потому что один адрес уходит на сеть (все биты хоста нули), другой — на широковещание (все биты хоста единицы).

Пошаговый алгоритм

  1. Выпиши IP и маску в двоичном виде пооктетно. Если маска задана префиксом — сам построй маску по таблице единиц.
  2. Выдели границу: после какого бита в маске начинаются нули.
  3. Определи, что спрашивают:
    • сетевой адрес → применяй AND,
    • адрес хоста → применяй AND с инвертированной маской,
    • количество хостов → формула 2^(32-p) - 2,
    • одна ли подсеть → сравни сетевые адреса двух IP.
  4. Считай только «смешанный» октет — тот, где у маски и единицы, и нули. Остальные октеты тривиальны.
  5. Переведи ответ обратно в десятичную запись и проверь, что все октеты в диапазоне 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)Маска
128000 или 1
64000 или 1
32111 (сохраняет бит)
16100 (обнуляет бит)
8100
4100
2100
1000 или 1

Маска обязана быть в формате «единицы слева, нули справа». Значит, после первого встреченного 0 в маске дальше идут только нули. Самая правая единица, которую можно уверенно утвердить — в позиции 32 (бит 3 слева в октете). Значит, в последнем октете три единицы: 11100000 = 224.

Итого маска: 255.255.255.22427 единиц.

Ответ: 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.

Как тренироваться

  1. Выучи таблицу октетов маски (0, 128, 192, 224, 240, 248, 252, 254, 255) — это фундамент. Без неё каждая задача становится в 2 раза длиннее.
  2. Запомни соответствие префикс ↔ маска для /8, /16, /24, /25, /26, /27, /28, /30. На экзамене эти значения встречаются в 80% задач.
  3. Натренируй AND на смешанном октете. 50 задач, где нужно вычислить сетевой адрес или хостовую часть — за месяц ты научишься делать это за 30 секунд.
  4. Добавь задачи на разбиение подсетей. Типичный сюжет: «разбить /24 так, чтобы в каждой было не менее N хостов». Минут 7-8, но дают 1 уверенный балл.
  5. Прогоняй Python-шаблон — если в задаче подозрительно много арифметики, проверь ответ через ipaddress. Экономит минуты и страхует от тупых ошибок.

Если общий план подготовки ещё не сверстан, начни с плана на 3 месяца, плана на 6 месяцев или с нуля. А перед экзаменом не забудь про чек-лист того, что взять. В TuteMe есть банк задач отдельно на задание 13 — с пошаговым разбором AND и автоматической проверкой.

Попробовать бесплатно →

Частые вопросы

Сколько бит в IP-адресе

IPv4-адрес состоит из 32 бит, разбитых на 4 октета по 8 бит. Каждый октет записывается десятичным числом от 0 до 255 и разделяется точкой: 192.168.10.42. В ЕГЭ используется только IPv4 — IPv6 в задачах не встречается.

Что такое префикс /24

Префикс — короткая форма записи маски. /24 означает, что первые 24 бита маски — единицы, остальные — нули. В десятичном виде это 255.255.255.0. Префикс /16 = 255.255.0.0, /8 = 255.0.0.0, /25 = 255.255.255.128. На экзамене чаще всего встречаются /20, /24, /26, /28.

Как найти сетевой адрес

Применить побитовое AND между IP-адресом и маской. Там, где в маске единица — бит IP сохраняется, там, где ноль — обнуляется. Пример: IP 192.168.5.130, маска 255.255.255.192. Последний октет: 130 AND 192 = 128. Сетевой адрес: 192.168.5.128.

Почему -2 при подсчёте хостов

Из 2^(32-префикс) адресов два зарезервированы: первый (все биты хоста нули) — сам сетевой адрес, последний (все биты хоста единицы) — широковещательный адрес. Они не могут быть назначены компьютерам. Поэтому количество доступных хостов: 2^(32-префикс) - 2.

Как понять что два IP в одной подсети

Применить маску (AND) к обоим IP. Если сетевые адреса совпадают — IP в одной подсети, если различаются — в разных. Это самый быстрый способ проверки, не требующий переводить в десятичное.

Чем отличается маска от префикса

Это одно и то же в разных формах записи. Маска — полный вид (например, 255.255.255.240), префикс — длина последовательности единиц в маске (/28). Между ними однозначное соответствие: префикс N ↔ маска с N единицами слева и (32-N) нулями справа. На экзамене встречаются обе формы, нужно уметь переводить.

Можно ли использовать Python для задания 13

Да, и это сильно облегчает жизнь. Модуль ipaddress из стандартной библиотеки умеет разбирать адреса, считать сетевые адреса, количество хостов и проверять принадлежность подсети. На КЕГЭ Python разрешён, так что ipaddress.ip_network() и ipaddress.ip_address() — твои друзья.

Сколько времени тратить на задание 13

Ориентир — 5-8 минут. Задание 1 балл, базового уровня. Если за 8 минут не дошёл до ответа — лучше пропусти и вернись в конце. В КЕГЭ всего 235 минут на 27 заданий, так что на одну сетевую задачу больше 10 минут тратить нерационально.

Готов применять на практике?

В тренажёре TuteMe — 2000+ заданий ЕГЭ по информатике с автоматической проверкой и подробным разбором. AI-помощник подсказывает, где ты ошибаешься, и подбирает задания под твой уровень.

Начать бесплатно →