Маска подсети делит адресное пространство на фиксированные блоки, где первый адрес закрепляется за сетью, последний отводится под широковещательную рассылку, а промежуточные значения назначаются устройствам. Арифметический расчёт по размеру блока даёт те же результаты, что побитовые операции, но требует меньше времени при настройке маршрутизаторов и диагностике связности.
Чтобы понять зачем, нужно сначала понять как работает обычная сеть без деления. Когда компьютер хочет передать данные другому устройству, он должен сначала узнать его физический адрес — MAC-адрес сетевой карты. Для этого он отправляет специальный запрос по протоколу ARP (Address Resolution Protocol): «кто имеет IP-адрес такой-то, ответьте мне». Этот запрос получают все устройства в сети без исключения — это называется широковещательная передача, или broadcast. Каждое устройство смотрит на запрос, понимает что он не к нему, и отбрасывает пакет. Всё это происходит на аппаратном уровне и занимает доли миллисекунды — но происходит на каждом устройстве, при каждом таком запросе.
Когда устройств немного — это незаметно. Когда их несколько сотен, и каждое периодически что-то ищет, анонсирует, запрашивает — фоновый широковещательный трафик становится постоянным. Коммутаторы вынуждены рассылать его на все порты, устройства вынуждены его обрабатывать. На слабом оборудовании это начинает ощущаться. Всю совокупность устройств, которые получают broadcast друг от друга, называют широковещательным доменом.
Подсети решают это разделением сети на изолированные сегменты. Устройства из одного сегмента не получают широковещательный трафик другого. Для передачи данных между сегментами нужен маршрутизатор — устройство, которое работает на сетевом уровне и принимает решение, куда направить пакет дальше. Маршрутизатор не пропускает broadcast между сегментами — это принципиальное свойство, не настройка.
Вторая причина деления — безопасность. Когда гостевая сеть отделена от корпоративной на уровне маршрутизатора, любое взаимодействие между ними требует явного разрешения в правилах. Без этого разрешения трафик не пройдёт, даже если устройства физически подключены к одному коммутатору.
Что такое IP-адрес на уровне битов
IPv4-адрес — это 32 бита. Запись вида 192.168.10.64 — это удобная форма для человека, не более. Внутри это четыре байта, каждый по 8 бит, записанных через точку в десятичной форме.
Переведём каждый октет в двоичный вид:
192 = 11000000
168 = 10101000
10 = 00001010
64 = 01000000
Полный адрес в двоичном виде: 11000000.10101000.00001010.01000000
Это и есть настоящий адрес, с которым работает оборудование. Десятичная запись — только для удобства чтения. Маска подсети работает именно с этими битами, и без понимания двоичного представления дальнейшее будет выглядеть произвольным.
Чтобы перевести байт из двоичного в десятичный, достаточно знать веса позиций. Каждый бит слева направо имеет вес: 128, 64, 32, 16, 8, 4, 2, 1. Байт 11110000 — это 128+64+32+16 = 240. Байт 11111111 — сумма всех весов — 255.
Что такое маска подсети
Маска — тоже 32 бита, но устроена особым образом: сначала идут единицы, потом нули. Всегда. Смешанных чередований не бывает — это часть спецификации протокола.
Маска делит адрес на две части. Биты под единицами в маске — это сетевая часть адреса, общая для всех устройств в подсети. Биты под нулями — хостовая часть, уникальная для каждого устройства внутри подсети.
Есть два способа записать маску. Традиционный — те же четыре октета через точку, например 255.255.255.0. Современный — нотация CIDR (Classless Inter-Domain Routing): после адреса через слэш пишется количество единичных бит, например /24. Оба варианта описывают одно и то же.
Разберём /24:
11111111.11111111.11111111.00000000
Три полных байта единиц — каждый равен 255. Последний байт нули — 0. Итого 255.255.255.0. 24 единичных бита означают, что первые три октета адреса — сетевая часть, последний октет — хостовая.
Разберём /28:
11111111.11111111.11111111.11110000
Последний байт 11110000 — это 128+64+32+16 = 240. Итого 255.255.255.240. Здесь граница проходит внутри последнего октета: четыре старших бита — сеть, четыре младших — хосты.
Вот самые частые значения, которые стоит держать в голове:
| CIDR | Маска (последний октет) | Размер блока | Доступные хосты |
|---|---|---|---|
| /24 | 0 | 256 | 254 |
| /25 | 128 | 128 | 126 |
| /26 | 192 | 64 | 62 |
| /27 | 224 | 32 | 30 |
| /28 | 240 | 16 | 14 |
| /29 | 248 | 8 | 6 |
| /30 | 252 | 4 | 2 |
Размер блока и количество доступных хостов — откуда они берутся, разберём дальше.
Как маска работает: побитовое И (AND)
Когда устройство проверяет, находится ли другой адрес в той же подсети, оно применяет маску через операцию побитового И — логическое AND. Правило: 1 AND 1 = 1, всё остальное даёт 0.
Применим маску /28 к адресу 192.168.10.70:
Адрес: 11000000.10101000.00001010.01000110 (192.168.10.70)
Маска: 11111111.11111111.11111111.11110000 (255.255.255.240)
AND: 11000000.10101000.00001010.01000000 (192.168.10.64)
Результат — 192.168.10.64. Это адрес сети для данной подсети. Маска обнулила хостовую часть, оставив только сетевую.
Именно это делает каждое устройство при проверке принадлежности: применяет маску к обоим адресам, сравнивает результаты. Совпали — одна подсеть, можно передавать напрямую. Не совпали — нужен маршрутизатор.

https://seberd.ru/tools/cidr-to-ips
Как определить границы подсети арифметически
Побитовые операции дают точный результат, но неудобны для быстрого расчёта в голове. Арифметический метод основан на том же принципе, но работает с десятичными числами напрямую.
Ключевое наблюдение: подсети идут ровными блоками одинакового размера, и каждый блок начинается с адреса, кратного этому размеру. Для /28 с размером блока 16 — это 0, 16, 32, 48, 64, 80, 96 и так далее. Никаких других вариантов начала блока нет.
Откуда берётся размер блока. Вычти значение маски из 32 — получишь количество бит под хостовую часть. Для /28: 32 - 28 = 4. Два в степени четыре — 16. Это и есть размер блока: сколько адресов всего в подсети, включая служебные.
Теперь пример: адрес 192.168.10.70/28.
Начало блока. Делю последний октет на размер блока: 70 / 16 = 4 с остатком 6. Беру только целую часть и умножаю обратно: 4 × 16 = 64. Начало подсети — 192.168.10.64. Это адрес сети — он идентифицирует подсеть в таблицах маршрутизации и не может быть назначен устройству.
Широковещательный адрес. Последний адрес в блоке: 64 + 16 - 1 = 79, то есть 192.168.10.79. Широковещательный адрес — на него отправляются пакеты, предназначенные всем устройствам сегмента одновременно. Назначать его устройству нельзя по той же причине: он зарезервирован протоколом.
Диапазон хостов. Всё между адресом сети и широковещательным адресом: 192.168.10.65 — 192.168.10.78, всего 14 адресов. Адрес 70 попадает в диапазон — его можно назначить устройству.
Отсюда и берётся «минус два» в таблице: из каждого блока два адреса всегда зарезервированы — первый под идентификатор сети, последний под широковещательный.
Что если адрес не кратен размеру блока. Адрес 192.168.10.85/28: 85 / 16 = 5 с остатком 5, 5 × 16 = 80. Начало подсети — 192.168.10.80, широковещательный — 192.168.10.95, хосты — 81–94.
Проверка принадлежности к одной подсети: делю последний октет каждого адреса на размер блока и сравниваю целые части. 70 / 16 = 4, 85 / 16 = 5 — разные результаты, разные подсети. Без маршрутизатора эти адреса не увидят друг друга, даже подключённые к одному физическому коммутатору.

https://seberd.ru/tools/cidr-calc
Почему нельзя назначить адрес сети или широковещательный адрес устройству
Адрес сети — 192.168.10.64 в нашем примере — используется маршрутизаторами как идентификатор сегмента в таблице маршрутизации. Таблица маршрутизации — это список правил вида «трафик для сети X отправляй через интерфейс Y». Если устройство получит этот адрес, возникнет конфликт: тот же адрес обозначает и конкретный хост, и целую сеть. Поведение маршрутизаторов в этом случае непредсказуемо.
Широковещательный адрес — 192.168.10.79 — по определению предназначен для всех устройств сегмента одновременно. Протоколы вроде ARP отправляют запросы именно на этот адрес, рассчитывая получить ответ от нужного хоста. Устройство с таким адресом будет получать весь этот поток и обрабатывать его как обычный unicast-трафик, что нарушает логику работы протоколов.
Современные операционные системы откажутся применить такую конфигурацию и вернут ошибку. Но понимать причину важно — иначе неясно, с чем именно связана ошибка.
Когда граница маски проходит не в последнем октете
До сих пор примеры были с масками /24 и меньше, где граница проходит внутри четвёртого октета. Но маска может делить адрес и в других местах.
Маска /16 — граница после второго октета. Подсеть 10.10.0.0/16 включает адреса 10.10.0.0 — 10.10.255.255, всего 65536 адресов. Третий и четвёртый октеты полностью доступны для адресации устройств.
Маска /20 — граница внутри третьего октета. Размер блока: 32 - 20 = 12 бит, 2^12 = 4096 адресов. В третьем октете размер шага равен 4096 / 256 = 16. Для адреса 172.16.35.0/20: делю третий октет — 35 / 16 = 2 (целая часть), 2 × 16 = 32. Подсеть начинается с 172.16.32.0, заканчивается 172.16.47.255. Диапазон хостов: 172.16.32.1 — 172.16.47.254.
Принцип тот же — нужно определить, в каком октете находится граница маски, и работать с ним.

VLSM: переменная длина маски
Когда разные сегменты сети требуют разного количества адресов, использование одной маски для всех приводит к потерям. Сегмент на 50 устройств с маской /26 (62 доступных адреса) займёт блок из 64 адресов, из которых 12 будут неиспользуемы — и их нельзя отдать другому сегменту.
VLSM (Variable Length Subnet Masking, маска подсети переменной длины) позволяет использовать разные маски для разных сегментов внутри одного адресного пространства.
Пример: адресное пространство 10.0.0.0/24 — 256 адресов. Нужно разместить три сегмента: 50 устройств, 20 устройств, и линк между двумя маршрутизаторами.
Правило: начинай с самого большого сегмента, иначе оставшееся пространство может не подойти под нужный размер блока.
- 50 устройств — нужен
/26(62 доступных адреса). Берём10.0.0.0/26, адреса 0–63, хосты 1–62. - 20 устройств — нужен
/27(30 доступных адресов). Следующий свободный адрес — 64, это кратное 32, подходит для начала/27. Берём10.0.0.64/27, адреса 64–95, хосты 65–94. - Линк между маршрутизаторами — нужен
/30(2 доступных адреса). Берём10.0.0.96/30, адреса 96–99, хосты 97–98.
На практике при планировании оставляют запас на рост — берут маску на ступень шире, чем нужно сейчас. Сегмент из 50 устройств через год может вырасти, и переадресация работающей сети дороже, чем зарезервированные впрок адреса.
Агрегация маршрутов: обратная задача
Если VLSM — это нарезка одного блока на части, то агрегация — объединение нескольких смежных подсетей в один маршрут для анонсирования. Это важно для протоколов динамической маршрутизации — BGP, OSPF — где количество записей в таблице маршрутизации влияет на производительность оборудования.
Четыре смежные подсети:
192.168.0.0/24192.168.1.0/24192.168.2.0/24192.168.3.0/24
Можно анонсировать одним маршрутом: 192.168.0.0/22. Размер блока /22: 2^10 = 1024 адресов — ровно четыре блока по 256.
Условие корректной агрегации: начало объединённого блока должно быть кратно его размеру. Блок /22 в третьем октете имеет шаг 4. Значение 0 кратно 4 — агрегация корректна.
Попытка объединить 192.168.1.0/24 и 192.168.2.0/24 в один /23 не даст корректного результата. Блок /23 шагает по третьему октету с шагом 2 — корректные начала: 0, 2, 4, 6… Блок 192.168.0.0/23 покрывает октеты 0 и 1, блок 192.168.2.0/23 покрывает октеты 2 и 3. Адреса из октетов 1 и 2 принадлежат разным /23-блокам и не агрегируются в один маршрут.
/31 и /32 — особые случаи
/30 — стандарт для соединений точка-точка между маршрутизаторами. Блок из 4 адресов, два из которых служебные, два назначаются интерфейсам. Поддерживается любым оборудованием без оговорок.
/31 — определён в RFC 3021 специально для соединений точка-точка. Стандарт разрешает использовать оба адреса блока без выделения адреса сети и широковещательного адреса, потому что в соединении точка-точка широковещательная передача физически невозможна — получатель всегда один. Экономия два адреса на каждый линк, при сотнях линков в крупной сети это заметно. Проблема: часть оборудования — особенно маршрутизаторы на старых версиях IOS — не поддерживает этот стандарт. При настройке /31 такое устройство пытается зарезервировать широковещательный адрес по старым правилам и блокирует один из интерфейсов без внятного сообщения об ошибке. Перед применением /31 нужно проверять документацию конкретного устройства и версию прошивки.
/32 — адрес единственного хоста, без сетевой и широковещательной части. Используется для loopback-интерфейсов маршрутизаторов: это виртуальный интерфейс, который всегда активен пока маршрутизатор работает, вне зависимости от состояния физических портов. Протоколы динамической маршрутизации OSPF и BGP используют адрес loopback как стабильный идентификатор устройства. Также /32 используется в статических маршрутах до конкретного хоста и в правилах файервола для точечной фильтрации трафика.
Несовпадение масок на концах одного линка
Если на двух концах одного соединения настроены разные маски — каждое устройство строит разную картину того, какие адреса находятся в его сегменте.
Маршрутизатор A: 10.0.0.1/24. Маршрутизатор B: 10.0.0.2/28.
С точки зрения A весь диапазон 10.0.0.0–10.0.0.255 находится в одном сегменте — ARP-запросы ко всем адресам этого диапазона он отправляет напрямую, без маршрутизатора.
С точки зрения B его сегмент — 10.0.0.0–10.0.0.15. Адрес 10.0.0.1 попадает в этот диапазон, поэтому прямое соединение между ними работает. Но адрес 10.0.0.20 B считает адресом из другой сети — для него нужен маршрутизатор.
Маршрутизатор A при этом считает 10.0.0.20 своим соседом по сегменту и пытается достучаться до него по ARP, не используя маршрутизацию. Результат — асимметричное поведение: часть трафика проходит, часть теряется, и без анализа конфигурации обоих концов причина неочевидна.
Диагностика: show ip interface brief на Cisco покажет адрес и маску каждого интерфейса. На Linux — ip addr show. Сравниваешь маски на обоих концах.
Частные адресные пространства
RFC 1918 определяет три диапазона, зарезервированных для использования внутри организаций. Маршрутизаторы в интернете не передают трафик с этими адресами — они существуют только внутри локальных сетей:
10.0.0.0/8— 16 миллионов адресов. Используется в крупных корпоративных сетях с VLSM.172.16.0.0/12— диапазон от172.16.0.0до172.31.255.255. Часто встречается у провайдеров для внутренней инфраструктуры.192.168.0.0/16— 65536 адресов. Стандартный выбор домашних маршрутизаторов и небольших офисов.
Практическая проблема при развёртывании корпоративного VPN: если внутренняя сеть организации использует 192.168.1.0/24, а сотрудник подключается из дома, где маршрутизатор по умолчанию настроен на ту же подсеть — возникает конфликт маршрутов.
Операционная система на компьютере сотрудника видит два пути к адресам 192.168.1.x: один через VPN-туннель, другой — локальный, через домашний маршрутизатор. Локальный маршрут, как правило, имеет меньшую метрику — и трафик, предназначенный для корпоративного сервера, уходит в домашнюю сеть. VPN активен, но нужные ресурсы недоступны.
Решение — использовать для корпоративной инфраструктуры диапазоны с низкой вероятностью пересечения с домашними сетями. Например, 10.42.0.0/16 — домашние маршрутизаторы такие адреса не используют.
Когда считать вручную, а когда использовать инструменты
Ручной расчёт нужен в ситуациях, когда инструменты недоступны — консольное подключение без интернета, полевая диагностика. Также он нужен для проверки результатов автоматики: ошибки в конфигурации чаще вносят люди, которые вводят данные в инструменты, а не сами инструменты.
Для регулярной работы есть утилита ipcalc в Linux — показывает все границы подсети по адресу и маске. Библиотека ipaddress в Python позволяет генерировать списки подсетей, проверять вхождение адресов и итерировать по хостам в коде. Системы управления конфигурациями — Ansible, Terraform — умеют работать с адресным пространством при автоматическом развёртывании инфраструктуры.