Погодин Евгений — ИТ Заметки
🔌Сеть Обновлено 27.10.2026

Сети с нуля 04. Подсети и CIDR: считаем без калькулятора

Note

Материал сверен с первоисточниками (RFC и официальная документация Microsoft, Wireshark и др.; ссылки — в конце статьи). Примеры вывода — иллюстрации: на вашей системе значения и формат могут отличаться.

Когда офис вырастает, одной плоской сети становится мало: хочется отделить гостей от рабочих компьютеров, серверы от принтеров, а управление оборудованием от всех остальных. Для этого одну большую сеть делят на подсети. Здесь нужна арифметика, но не сложная: достаточно степеней двойки и одного приёма, «шага» маски. Его мы и разберём.

В статье вы научитесь:

  • читать запись 192.168.10.0/24 и понимать, сколько в ней адресов и узлов;
  • находить адрес сети и широковещательный адрес (broadcast) для любого адреса и любой маски без калькулятора;
  • делить сеть на равные подсети и на подсети разного размера (VLSM);
  • объединять несколько сетей в одну запись (суммирование маршрутов);
  • замечать типичные ошибки: пересечения, «лишние» адреса, неверные границы блоков.

Что такое адрес, маска, подсеть, адрес сети и broadcast, мы здесь не повторяем: это есть в статье 03. Сквозной пример тот же: сеть 192.168.10.0/24.

Tip

Если вы только знакомитесь с сетями, прочитайте статью до раздела «Деление сети /24 на равные подсети» включительно и решите упражнения 1–3. VLSM и суммирование оставьте на второй проход: для статей 05–12 они не нужны.

Что нужно знать заранее

От классов к CIDR

Деление сети на подсети придумали давно: RFC 950 (1985; RFC, Request for Comments, — серия документов-стандартов интернета) разрешил отдавать под номер подсети любое число бит из узловой части адреса. Но тогда действовали классы адресов (RFC 791): у класса A старший бит равен 0 (первый октет 0–127), у класса B старшие биты 10 (128–191), у класса C 110 (192–223). Класс сам определял границу между сетью и узлом, то есть маску /8, /16 или /24.

Деление на классы оказалось неудобным: сеть класса C слишком мала для многих организаций, а класса B слишком велика. В 1993 году RFC 1519 назвал причинами исчерпание адресов класса B и быстрый рост таблиц маршрутизации и предложил CIDR (Classless Inter-Domain Routing, «бесклассовая адресация»). Современное описание — RFC 4632 (2006) — заменило RFC 1519 и объявило систему классов A/B/C устаревшей. Суть CIDR в том, что граница между сетью и узлом может проходить где угодно, а не только после 8, 16 или 24 бит, и всегда записывается явно.

Блок адресов с общим началом называется префиксом. Его пишут как адрес сети, косую черту и длину префикса: 192.168.10.0/24. Длина префикса — число единиц в маске, то есть число бит, общих для всего блока (от 0 до 32). Это и есть «маска в коротком виде». Отсюда два правила:

  • Маска или префикс должны быть известны всегда. По одному адресу вроде 192.168.10.101 границу не определить, а слово «класс» для расчётов не нужно.
  • Маска должна быть непрерывной: единицы слева, нули справа, без «дыр».

Note

В старых источниках можно встретить рекомендацию не использовать подсеть из одних нулей и подсеть из одних единиц (она была в RFC 950 и повторена в RFC 1122). Сейчас она устарела: RFC 1812 называет такое ограничение бессмысленным в бесклассовой адресации, а RFC 1878 включает все подсети в свои таблицы. Современное оборудование, как правило, использует все подсети, но в очень старой технике и документации ограничение ещё встречается.

Размер блока и число узлов

Длина префикса n показывает, сколько бит отдано под сеть. Остальные 32 − n бит принадлежат узлам. Отсюда:

  • размер блока (число адресов) равен 2^(32 − n);
  • число узлов равно размеру блока минус 2, потому что адрес сети (все нули в узловой части) и широковещательный адрес (все единицы) узлам не назначаются.

Для /24 узловых бит 8, адресов 2⁸ = 256, узлов 254. Для /26 узловых бит 6, адресов 64, узлов 62. Каждый дополнительный бит префикса вдвое уменьшает блок.

Два особых случая

  • /31 — два адреса. По обычному правилу узлов было бы 0, но RFC 3021 разрешает использовать /31 на двухточечных (point-to-point) каналах, то есть на линиях, соединяющих ровно два устройства: оба адреса в такой сети считаются адресами узлов, а направленного broadcast на канале нет. Оборудование на обоих концах должно поддерживать такой режим, проверяйте это до использования.
  • /32 — один адрес, то есть один конкретный узел. Такую запись используют, когда нужно указать именно этот узел, например в маршруте к одному узлу.

Шпаргалка /24–/30

Эти префиксы встречаются в офисных сетях чаще всего. В колонке «Шаг» стоит число, на которое «прыгает» адрес сети в последнем октете (о нём — в следующем разделе).

Префикс Маска Адресов Узлов Шаг в последнем октете
/24 255.255.255.0 256 254 256 (весь октет)
/25 255.255.255.128 128 126 128
/26 255.255.255.192 64 62 64
/27 255.255.255.224 32 30 32
/28 255.255.255.240 16 14 16
/29 255.255.255.248 8 6 8
/30 255.255.255.252 4 2 4

Полная таблица для всех префиксов от /0 до /32 есть на странице Таблица масок подсети. В её колонке «Инверсия» стоит инверсная (wildcard) маска: её используют в классических списках доступа Cisco (ACL, Access Control List — правила разрешения и запрета трафика; Cisco с нуля 08: Списки доступа (ACL)). Учтите, что для /31 в колонке «Используется» там указан 0 по классическому правилу, а на двухточечных каналах оба адреса используются.

Быстрый метод: «шаг» маски

Расчёты в двоичной системе точны, но медленны. На практике все делают так.

Шаг 1. Найдите границу. Если длина префикса кратна 8 (/8, /16, /24), граница проходит между октетами и «интересного» октета нет: адрес сети — октеты слева от границы, остальные равны нулю; broadcast — те же октеты слева и 255 справа. Например, для 192.168.10.101/24 это 192.168.10.0 и 192.168.10.255, для 172.16.45.9/16 — 172.16.0.0 и 172.16.255.255.

Для остальных префиксов граница лежит внутри одного октета, его мы и называем «интересным». В маске это октет со значением не 255 и не 0. Его номер равен длине префикса, поделённой на 8 с округлением вверх: для /26 четвёртый, для /22 и /20 третий.

Шаг 2. Вычислите шаг: 256 − значение октета маски. Для 255.255.255.192 шаг равен 256 − 192 = 64, для 255.255.252.0 шаг равен 256 − 252 = 4. Шаг — это размер блока в «интересном» октете: адреса сетей идут в нём с таким интервалом.

Шаг 3. Адрес сети: возьмите самое большое число, кратное шагу и не превышающее значение этого октета в адресе. Октеты правее обнуляются, левее остаются как в адресе.

Шаг 4. Широковещательный адрес: прибавьте к найденному числу шаг и вычтите 1. Октеты правее заполняются 255. Узлы лежат между адресом сети и broadcast.

Чтобы не вспоминать значение маски по числу бит, запомните таблицу:

Бит сети в «интересном» октете 1 2 3 4 5 6 7
Значение маски 128 192 224 240 248 252 254
Шаг 128 64 32 16 8 4 2

Если заняты все 8 бит октета, это октет 255: граница проходит между октетами (случай /8, /16, /24). Например, /26: 26 = 3 × 8 + 2, три октета по 255 и два бита в четвёртом, значит маска 255.255.255.192, шаг 64.

Пример 1: 192.168.10.101/26

Это наш PC1, но с маской /26. Шаг 64, значит сети начинаются с 0, 64, 128, 192. Число 101 лежит между 64 и 128, поэтому адрес сети 192.168.10.64, broadcast 192.168.10.127 (64 + 64 − 1 = 127), узлы 192.168.10.65–192.168.10.126, всего 62.

Проверка в двоичной системе: 101 = 01100101. Две единицы маски оставляют 01, остальные 6 бит обнуляются, получается 01000000 = 64. Если их заполнить единицами, получится 01111111 = 127. Результаты совпали.

Пример 2: 192.168.37.5/22

Маска 255.255.252.0, «интересный» октет третий, шаг 256 − 252 = 4. Число 37 лежит между 36 и 40, значит адрес сети 192.168.36.0. Broadcast: третий октет 36 + 4 − 1 = 39, четвёртый 255, итого 192.168.39.255. Узлы: 192.168.36.1–192.168.39.254, их 2¹⁰ − 2 = 1022. Обратите внимание: в такой сети адрес 192.168.37.0 не является адресом сети, это обычный адрес узла.

Пример 3: 10.77.130.9/20

Маска 255.255.240.0 (20 = 2 × 8 + 4 бита), «интересный» октет третий, шаг 256 − 240 = 16. Число 130 лежит между 128 и 144, значит адрес сети 10.77.128.0, broadcast 10.77.143.255 (128 + 16 − 1 = 143).

Деление сети /24 на равные подсети

Каждый дополнительный бит префикса удваивает число подсетей и вдвое уменьшает размер каждой:

Новый префикс Подсетей из /24 Адресов в подсети Узлов
/25 2 128 126
/26 4 64 62
/27 8 32 30
/28 16 16 14

Поделим 192.168.10.0/24 на четыре подсети /26. Шаг 64, поэтому сети начинаются с .0, .64, .128, .192:

Подсеть Диапазон узлов Broadcast
192.168.10.0/26 .1 – .62 192.168.10.63
192.168.10.64/26 .65 – .126 192.168.10.127
192.168.10.128/26 .129 – .190 192.168.10.191
192.168.10.192/26 .193 – .254 192.168.10.255

В восемь подсетей /27 (шаг 32) сеть делится так: .0, .32, .64, .96, .128, .160, .192, .224, в каждой по 30 узлов.

VLSM: подсети разного размера

Равное деление удобно, но расточительно. Серверам нужно 20 адресов, а канал между двумя маршрутизаторами обойдётся двумя. Если резать всё на блоки по 64 адреса, на канал уйдёт целая подсеть /26. VLSM (Variable Length Subnet Mask, маски переменной длины) позволяет брать из одного блока подсети разных размеров. CIDR это допускает: префикс записывается явно для каждой подсети.

Порядок разбиения:

  1. Выпишите участки сети (подразделения, группы устройств) и число нужных узлов в каждом. Считайте с запасом на рост и включайте в число адрес шлюза.
  2. Для каждого подберите наименьший блок, где 2^(32 − n) − 2 не меньше нужного числа.
  3. Отсортируйте участки по убыванию размера.
  4. Размещайте блоки подряд, начиная с начала адресного блока. Адрес сети каждого блока должен быть кратен его размеру.
  5. Оставшееся пространство сохраните как резерв.

Note

Дальше в серии мы работаем с одной сетью 192.168.10.0/24. Разбиение ниже — отдельный учебный план: так можно было бы поделить тот же блок, если бы офису потребовалось несколько участков.

Допустим, нужны (числа уже с адресом шлюза): офис — 100 узлов, гости — 28, серверы — 20, управление оборудованием — 10 и два двухточечных канала между маршрутизаторами (по 2 узла). Подбираем блоки: 100 → /25 (126 узлов), 28 → /27 (30), 20 → /27 (30), 10 → /28 (14), 2 → /30 (2).

Назначение Нужно Блок Узлы Broadcast
Офис 100 192.168.10.0/25 .1 – .126 .127
Гости 28 192.168.10.128/27 .129 – .158 .159
Серверы 20 192.168.10.160/27 .161 – .190 .191
Управление 10 192.168.10.192/28 .193 – .206 .207
Канал 1 2 192.168.10.208/30 .209 – .210 .211
Канал 2 2 192.168.10.212/30 .213 – .214 .215

Карта адресного пространства:

.0   - .127   офис          192.168.10.0/25
.128 - .159   гости          192.168.10.128/27
.160 - .191   серверы        192.168.10.160/27
.192 - .207   управление     192.168.10.192/28
.208 - .211   канал 1        192.168.10.208/30
.212 - .215   канал 2        192.168.10.212/30
.216 - .255   резерв         192.168.10.216/29 и 192.168.10.224/27

Свободными остались 40 адресов (.216–.255), и они укладываются в два выровненных блока: 192.168.10.216/29 (адреса .216–.223) и 192.168.10.224/27 (адреса .224–.255).

Почему сначала большие блоки? Блок обязан начинаться с адреса, кратного его размеру. Если поставить канал /30 в начало (.0–.3), офис /25 уже не сможет занять .0–.127 и ему придётся начинаться с .128. Место между .4 и .127 разобьётся на мелкие остатки. Для двухточечных каналов можно взять и /31: тогда на канал уйдёт два адреса вместо четырёх, но нужна поддержка на обоих концах.

Участки обычно выносят в отдельные VLAN (виртуальные локальные сети), а между ними настраивают маршрутизацию. На оборудовании Cisco это разобрано в статьях Cisco с нуля 04: VLAN, access- и trunk-порты и Cisco с нуля 05: Маршрутизация между VLAN.

Суммирование (агрегация) сетей

Обратная задача: у вас несколько соседних сетей, и их нужно записать одним префиксом. Это нужно, например, чтобы в таблице маршрутов была одна строка вместо четырёх: так провайдер объявляет один агрегированный маршрут для крупного блока. Работу таблицы маршрутов мы разберём в статье 05.

Сети можно объединить в один префикс, если выполнены три условия:

  1. они идут подряд без пропусков;
  2. их число — степень двойки (2, 4, 8…);
  3. адрес первой сети кратен размеру всего блока. Для сетей /24, как в примерах ниже, это значит: третий октет первой сети делится на число объединяемых сетей.

Пример: 192.168.20.0/24, 192.168.21.0/24, 192.168.22.0/24, 192.168.23.0/24. Их четыре, 20 делится на 4. Смотрим на третий октет в двоичной записи:

20 = 00010100
21 = 00010101
22 = 00010110
23 = 00010111
     ------
     общие 6 бит: 000101

Общих бит в третьем октете 6, значит длина префикса 16 + 6 = 22. Результат: 192.168.20.0/22 (адреса 192.168.20.0–192.168.23.255). Проверка по шагу: 256 − 252 = 4, а 20 кратно 4.

Не всегда получится так же. Сети 192.168.21.0/24–192.168.24.0/24 идут подряд, их четыре, но 21 не делится на 4: единым префиксом без лишнего их не описать. Минимальный набор: 192.168.21.0/24, 192.168.22.0/23 и 192.168.24.0/24. Самый длинный единый префикс, который накроет все четыре, — 192.168.16.0/20 (адреса 192.168.16.0–192.168.31.255), но в него попадут ещё 12 чужих сетей /24. Агрегат должен покрывать только ваши сети, иначе маршрут «заберёт» трафик, предназначенный другим.

Практика

Решите, а потом сверьтесь с ответами.

Упражнение 1. Для адреса 192.168.10.77/27 найдите адрес сети, broadcast, диапазон узлов и число узлов.

Ответ: шаг 32; 77 лежит между 64 и 96; сеть 192.168.10.64/27; broadcast 192.168.10.95; узлы .65–.94; их 30.

Упражнение 2. В одной ли подсети 192.168.10.100/26 и 192.168.10.130/26?

Ответ: нет. Шаг 64: адрес .100 лежит в сети 192.168.10.64/26 (.64–.127), а .130 — в 192.168.10.128/26 (.128–.191). Для связи между ними нужен маршрутизатор.

Упражнение 3. Какой самый длинный префикс (то есть самая маленькая подсеть) подойдёт для сети: а) 50 компьютеров и 1 шлюз; б) 14 компьютеров и 1 шлюз?

Ответ: а) нужно 51 адрес; блок /26 даёт 62 узла, значит /26. б) нужно 15 адресов; /28 даёт только 14, значит /27 (30 узлов).

Упражнение 4. Разделите 192.168.10.0/24 для трёх подразделений и канала между маршрутизаторами: А — 60 узлов, Б — 28, В — 12, канал — 2 узла (шлюзы уже включены в числа).

Ответ: А — 192.168.10.0/26 (узлы .1–.62, broadcast .63); Б — 192.168.10.64/27 (.65–.94, broadcast .95); В — 192.168.10.96/28 (.97–.110, broadcast .111); канал — 192.168.10.112/30 (.113–.114, broadcast .115). Свободно с .116: 192.168.10.116/30, 192.168.10.120/29 и 192.168.10.128/25.

Упражнение 5. Объединяются ли в один префикс сети 192.168.4.0/24–192.168.7.0/24? А сети 192.168.6.0/24–192.168.9.0/24?

Ответ: первые четыре сети — да, 192.168.4.0/22 (4 делится на 4). Вторые четыре — нет, 6 не делится на 4. Их можно описать двумя префиксами: 192.168.6.0/23 и 192.168.8.0/23.

Типичные ошибки и недоразумения

  • Пересечение подсетей. Сети 192.168.10.0/25 (адреса .0–.127) и 192.168.10.64/26 (.64–.127) пересекаются: вторая целиком лежит в первой. Адрес 192.168.10.100 оказывается сразу «в двух сетях»: одни узлы будут искать его напрямую у себя, а маршрутизатор отправит пакеты на него в другую подсеть (он выбирает маршрут с более длинным префиксом, подробнее в статье 05). В итоге связь с этим адресом нестабильна или невозможна.
  • Адрес сети не выровнен. Запись 192.168.10.50/26 как адрес сети неверна: адрес сети /26 должен делиться на 64, то есть может быть .0, .64, .128 или .192. Запись 192.168.10.50/26 корректна только как адрес узла в сети 192.168.10.0/26.
  • Забытые «минус два» и отсутствие запаса. Для 62 компьютеров не хватит /26, если нужен ещё шлюз: узлов 62, и шлюз займёт один из них. Считайте шлюз и запас на рост: блок «впритык» придётся менять при первом росте сети, а перенумерация обходится дороже нескольких лишних адресов.
  • Использование /31 не на двухточечном канале. Режим предназначен только для линков из двух устройств.
  • Путаница масок и инверсных (wildcard) масок. Для /24 обычная маска 255.255.255.0, инверсная 0.0.0.255. В настройках адресов на компьютерах нужна обычная, а в классических списках доступа Cisco — инверсная.

Проверьте себя

  1. Сколько адресов и сколько узлов в сети /27? 32 адреса и 30 узлов (2⁵ = 32, минус адрес сети и broadcast).
  2. Чем особенна сеть /31? В ней два адреса, и на двухточечном канале оба считаются адресами узлов (направленного broadcast нет).
  3. Можно ли назначить компьютеру адрес 192.168.10.127 при маске 255.255.255.128? Нет: это broadcast-адрес сети 192.168.10.0/25 (диапазон .0–.127).
  4. Пересекаются ли сети 192.168.10.0/25 и 192.168.10.64/26? Да, вторая целиком входит в первую (.64–.127).
  5. Найдите адрес сети и broadcast для 10.20.99.200/21. Шаг 8 в третьем октете; 99 лежит между 96 и 104; сеть 10.20.96.0, broadcast 10.20.103.255.

Что дальше

Источники

Ещё по теме «Сеть»