Как рассчитывается подсеть
IPv4-адрес — это 32 бита, записанные как четыре числа от 0 до 255 через точку, например 192.168.1.10. Маска подсети делит эти 32 бита на две части: подряд идущие единицы в начале — для сети, и нули в конце — для узла. Все адреса с одинаковыми битами сети относятся к одной подсети и связываются друг с другом напрямую, без маршрутизатора. Нотация CIDR записывает маску как символ «/» и число, например /24, вместо полной записи 255.255.255.0 — это число (длина префикса) и есть количество битов сети.
Калькулятор принимает адрес и префикс (или введённую маску) и вычисляет из них всё остальное: адрес сети, широковещательный адрес, диапазон адресов, доступных узлам, их количество, обратную маску и тип адреса — частный, публичный, петлевой и так далее. Все вычисления — это 32-битная арифметика, которая выполняется в браузере; ничего из введённого никуда не отправляется, никакой внешний сервис не опрашивается.
Два входных значения
Нужен IPv4-адрес и что-то, что задаёт длину префикса. Есть три способа указать префикс, и калькулятор проверяет их в таком порядке: префикс, дописанный прямо к адресу («192.168.1.10/24») — он важнее всего остального; маска, введённая в отдельное поле, например 255.255.255.0 — она учитывается, если в поле адреса нет косой черты; и, наконец, префикс, выбранный в списке (по умолчанию /24), который заодно служит справочной таблицей всех значений от /0 до /32 с соответствующей маской.
Введённая маска должна быть непрерывной — все единичные биты идут перед всеми нулевыми, как в 255.255.255.0 или 255.255.255.192. Запись вроде 255.255.0.255, где после нулевого бита снова идёт единичный, — не настоящая маска подсети, и калькулятор её отклоняет. Каждое из четырёх чисел адреса или маски должно быть от 0 до 255, а число с ведущим нулём (01, 010) не принимается вовсе: одни системы читают его как восьмеричное, другие — как десятичное, и один и тот же текст означал бы разные адреса.
Как считаются значения
Всё, что показывает калькулятор, получено побитовыми операциями над адресом и маской как 32-битными числами: адрес сети — это адрес И (AND) маска, все биты узла обнуляются; широковещательный адрес — это адрес сети ИЛИ (OR) обратная маска, все биты узла становятся единицами; обратная маска — это маска с инвертированными битами (для /24 это 0.0.0.255, её используют списки доступа Cisco и настройки OSPF вместо обычной маски).
Всего адресов в подсети — 2 в степени (32 − префикс); например, /24 даёт 2⁸ = 256 адресов. Обычно узлам доступно на два меньше, потому что адрес сети и широковещательный адрес занять нельзя: первый доступный адрес — это адрес сети плюс один, последний — широковещательный адрес минус один.
Пример 1: 192.168.1.10/24
/24 значит 24 бита сети, поэтому маска — 255.255.255.0. Обнулив 8 бит узла, получаем адрес сети 192.168.1.0; установив их в единицу — широковещательный адрес 192.168.1.255.
Узлам доступны адреса с 192.168.1.1 по 192.168.1.254 — это 2⁸ − 2 = 254 адреса из 256 всего. Обратная маска — 0.0.0.255, тип адреса — частный (RFC 1918).
Пример 2 и 3: /30 и /28
У /30 остаётся всего 2 бита узла, значит 2² = 4 адреса всего, маска 255.255.255.252. Для 172.16.4.2/30 адрес сети — 172.16.4.0, широковещательный — 172.16.4.3, а узлам доступны 172.16.4.1 и 172.16.4.2 — 4 − 2 = 2 узла. Это типичный размер подсети для канала «точка — точка» между двумя маршрутизаторами, по одному адресу с каждой стороны.
У /28 остаётся 4 бита узла — 2⁴ = 16 адресов всего и 14 доступных узлам. Маска — 255.255.255.240. Для 203.0.113.8/28 адрес сети — 203.0.113.0, широковещательный — 203.0.113.15, узлы — с 203.0.113.1 по 203.0.113.14. Весь блок 203.0.113.0/24 по RFC 5737 зарезервирован для документации и примеров вроде этого и никогда не выдаётся в реальной сети.
Исключения /31 и /32
Правило «минус два» для доступных узлов имеет два исключения, и калькулятор их учитывает, а не выдаёт неверный ответ. /31: RFC 3021 разрешает такую подсеть на каналах «точка — точка», где отдельный адрес сети и широковещательный адрес не нужны — оба адреса доступны, поэтому в таблице результата для широковещательного адреса будет «Нет», а число доступных узлов — 2, а не 0. /32: это маршрут к одному хосту — единственный адрес, который одновременно является и сетью, и широковещательным адресом, и единственным доступным узлом.
Вне этих двух случаев, если введённый адрес совпадает с адресом сети или широковещательным адресом своей подсети, калькулятор выводит отдельную заметку об этом — такой адрес описывает саму подсеть и не может быть назначен устройству.
Как читать результат
Заголовок над таблицей показывает адрес сети вместе с префиксом, например 192.168.1.0/24, а ниже для справки — введённые адрес и маску. Таблица «Параметры подсети» перечисляет адрес сети, широковещательный адрес, первый и последний доступный адрес узла, число доступных узлов, общее число адресов, маску подсети, обратную маску, запись CIDR, тип адреса и устаревший класс (A, B или C — схема из эпохи до CIDR, оставленная только как справка, поскольку сегодня размер подсети определяет именно маска).
Ниже, таблица «В двоичном виде» показывает адрес, маску и результат их побитового И — так граница между битами сети и узла видна напрямую, а не только в виде десятичных чисел.
Частые ошибки
Считать, что любой префикс отнимает ровно 2 узла — это верно для /0–/30, но /31 сохраняет оба адреса, а /32 — это вообще один адрес; см. исключения выше.
Вводить непрерывную не по порядку маску, например 255.255.0.255, где нулевой и единичный биты перемешаны, — это не настоящая маска подсети, и калькулятор откажет с пояснением, а не молча выдаст число.
Считать широковещательный адрес пригодным для узла — он обозначает сразу все узлы подсети; отправка обычного пакета на него или назначение его устройству — ошибка настройки.
Путать маску подсети с обратной маской — это побитовые противоположности друг друга. Настройка маршрутизаторов и файрволов, где требуется wildcard-маска (списки доступа Cisco, объявления сетей OSPF), ожидает именно инвертированное значение, а не саму маску.
Частные и специальные адреса
Частные диапазоны RFC 1918 — 10.0.0.0/8, 172.16.0.0/12 и 192.168.0.0/16 — используются внутри локальных сетей. 127.0.0.0/8 — петлевые адреса, 169.254.0.0/16 — локальные для канала (link-local), 100.64.0.0/10 — общее пространство провайдеров для CGN, а 224.0.0.0/4 — групповая рассылка (multicast). Калькулятор определяет, к какому из этих диапазонов относится адрес, опираясь на реестр IANA для специальных адресов IPv4.
Раньше размер сети определялся первым октетом (класс A, B, C), но с переходом на CIDR в 1993 году классы утратили практическое значение — размер сети задаёт длина префикса. Класс в результатах показан только для справки, потому что его всё ещё спрашивают на курсах по сетям.
Чего калькулятор не делает
Он считает одну подсеть по одному адресу и одному префиксу — не делит блок на несколько меньших подсетей, не работает с IPv6 и не проверяет, доступен ли адрес на самом деле или используется ли он где-то. Тип адреса (частный, петлевой, для документации и так далее) определяется по реестру специальных адресов IANA, по диапазону, без обращения к какому-либо серверу.