Калькулятор работает с IPv4 — его используют Ethernet-модули и встроенные стеки TCP/IP микроконтроллеров. Адрес вводится в записи CIDR (192.168.1.10/24) или с маской через пробел (192.168.1.10 255.255.255.0). Расчёт — побитовые операции над 32-битным числом, проверенный на эталонных значениях модуля ipaddress из стандартной библиотеки Python.
Префикс, маска и адрес сети
Адрес IPv4 — 32 бита, записанные четырьмя десятичными октетами. Префикс длиной n (RFC 4632) говорит, что первые n битов — номер сети, остальные 32 − n — номер узла. Маска — те же n единиц и 32 − n нулей:
Пример для 192.168.1.10/24 в двоичном виде:
| Десятичная | Двоичная | |
|---|---|---|
| Адрес | 192.168.1.10 | 11000000.10101000.00000001.00001010 |
| Маска /24 | 255.255.255.0 | 11111111.11111111.11111111.00000000 |
| Сеть | 192.168.1.0 | 11000000.10101000.00000001.00000000 |
| Broadcast | 192.168.1.255 | 11000000.10101000.00000001.11111111 |
Маска всегда состоит из единиц подряд, а затем нулей: 255.255.0.255 маской не бывает, и калькулятор такую запись не примет. Обратная маска (wildcard) — инверсия маски, её используют в списках доступа маршрутизаторов. Побитовое И и ИЛИ удобно проверить в калькуляторе битовых масок, а перевести октеты в шестнадцатеричный вид — в конвертере систем счисления.
Сколько адресов получают узлы
Адрес, у которого все биты узла нули, — адрес самой сети, все единицы — широковещательный адрес подсети (directed broadcast). Узлам их не назначают, поэтому узлов на два меньше, чем адресов в блоке. Исключения — два самых длинных префикса:
- /31 — по RFC 3021 на канале точка-точка оба адреса считаются адресами узлов, а направленной широковещательной рассылки нет;
- /32 — один адрес, маршрут к отдельному узлу (RFC 4632).
| Префикс | Маска | Адресов | Узлов |
|---|---|---|---|
| /30 | 255.255.255.252 | 4 | 2 |
| /29 | 255.255.255.248 | 8 | 6 |
| /28 | 255.255.255.240 | 16 | 14 |
| /27 | 255.255.255.224 | 32 | 30 |
| /26 | 255.255.255.192 | 64 | 62 |
| /25 | 255.255.255.128 | 128 | 126 |
| /24 | 255.255.255.0 | 256 | 254 |
| /23 | 255.255.254.0 | 512 | 510 |
| /22 | 255.255.252.0 | 1024 | 1022 |
| /16 | 255.255.0.0 | 65 536 | 65 534 |
Поле «Сколько узлов нужно в подсети» подбирает самый длинный префикс, в котором поместятся нужные узлы плюс адрес сети и широковещательный: . Для 30 узлов это /27, для 31 — уже /26. Префиксы /31 и /32 калькулятор для сети Ethernet не предлагает.
Частные и особые адреса
Не все адреса одинаковы: реестр особых адресов IANA (RFC 6890) выделяет блоки, которые нельзя использовать как обычные публичные адреса. Калькулятор подписывает тип адреса по этому реестру:
| Блок | Назначение | Документ |
|---|---|---|
| 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 | частные сети: используются без регистрации, в интернет не маршрутизируются | RFC 1918 |
| 169.254.0.0/16 | локальные адреса канала, назначаются без DHCP | RFC 3927 |
| 127.0.0.0/8 | петлевой интерфейс устройства | RFC 1122 |
| 100.64.0.0/10 | общее адресное пространство операторов (CGN) | RFC 6598 |
| 192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/24 | адреса для документации и примеров | RFC 5737 |
| 192.88.99.0/24 | ретрансляторы 6to4 (anycast), назначение отменено | RFC 6890, RFC 7526 |
| 224.0.0.0/4 | групповая рассылка (multicast) | RFC 5771 |
| 255.255.255.255/32 | ограниченная широковещательная рассылка | RFC 919 |
Остальные блоки реестра — 0.0.0.0/8, 192.0.0.0/24, 198.18.0.0/15 и 240.0.0.0/4 — калькулятор тоже называет. Частный блок 172.16.0.0/12 — это 172.16.0.0–172.31.255.255; адреса 172.15.x.x и 172.32.x.x уже публичные, на этой границе ошибаются чаще всего. Адрес из 100.64.0.0/10 на WAN-порту роутера означает, что провайдер выдаёт адрес из своей частной сети: подключиться к устройству из интернета напрямую не получится.
Ethernet на микроконтроллере: где задаются адрес и маска
У микроконтроллера в сети те же три параметра, что у компьютера: собственный адрес, маска и шлюз. Как их задать, зависит от того, где работает стек TCP/IP — подробно варианты разобраны в статье про Ethernet для микроконтроллеров.
- W5500 держит стек TCP/IP в самой микросхеме. Адрес, маску и шлюз микроконтроллер записывает по SPI в общие регистры SIPR, SUBR и GAR — по 4 байта в порядке октетов: 192.168.0.1 в GAR — это 0xC0, 0xA8, 0x00, 0x01 по адресам 0x0001–0x0004. После сброса регистры нулевые, поэтому без записи адреса микросхема в сети не работает; DHCP в списке аппаратных протоколов W5500 нет (TCP, UDP, ICMP, IPv4, ARP, IGMP, PPPoE): клиент DHCP работает в программе микроконтроллера поверх UDP-сокета.
- ENC28J60 — только MAC и PHY. IP-адрес хранит и обрабатывает стек TCP/IP на микроконтроллере, например lwIP; там же задаются маска и шлюз.
- ESP32 с Ethernet или Wi-Fi работает через ESP-NETIF. На интерфейсе Ethernet и станции Wi-Fi клиент DHCP включён по умолчанию, и перед установкой статического адреса его нужно остановить, иначе
esp_netif_set_ip_info()вернётESP_ERR_ESP_NETIF_DHCP_NOT_STOPPED:
esp_netif_dhcpc_stop(netif);
esp_netif_ip_info_t info = { 0 };
esp_netif_set_ip4_addr(&info.ip, 192, 168, 1, 50);
esp_netif_set_ip4_addr(&info.netmask, 255, 255, 255, 0);
esp_netif_set_ip4_addr(&info.gw, 192, 168, 1, 1);
ESP_ERROR_CHECK(esp_netif_set_ip_info(netif, &info));
Адрес сервера DNS при статической настройке задаётся отдельно, функцией esp_netif_set_dns_info(). Пример protocols/static_ip в ESP-IDF показывает полный порядок действий.
Типичные схемы адресации
Ниже — примеры, а не правила: подсеть всегда берите из настроек своего роутера или у администратора сети.
- Домашняя сеть. Роутер раздаёт адреса по DHCP в своей подсети, часто это 192.168.0.0/24 или 192.168.1.0/24, сам роутер — шлюз. Устройству со статическим адресом выбирайте адрес из той же подсети, но вне пула DHCP роутера: иначе роутер рано или поздно выдаст этот адрес другому устройству.
- Прямое подключение к компьютеру. Без роутера и DHCP компьютер может назначить себе адрес 169.254.x.x по RFC 3927. Надёжнее задать обоим устройствам статические адреса из одной частной подсети, например 192.168.50.1/24 и 192.168.50.2/24; шлюз в такой сети не нужен.
- Промышленная сеть. Контроллеры, панели и модули ввода-вывода обычно получают статические адреса из отдельной частной подсети, выделенной под оборудование, а связь с офисной сетью идёт через маршрутизатор. Деление большой сети на подсети по участкам — поле «Разбить сеть на подсети»: 10.0.0.0/22, разбитая на /24, даёт четыре подсети по 254 узла.
Типичные ошибки
- Шлюз не из подсети устройства: например, адрес 192.168.1.50/24 и шлюз 192.168.0.1. Внутри подсети устройство работает, но ответить узлу из другой сети не может. Калькулятор проверяет это по второму адресу.
- Неверная маска: 255.255.0.0 вместо 255.255.255.0 делает «своими» адреса, которые на самом деле за роутером, и устройство пытается найти их через ARP в своём сегменте.
- Адрес сети или широковещательный адрес в качестве адреса узла: 192.168.1.0/24 или 192.168.1.255/24 — калькулятор предупредит.
- Один и тот же статический адрес на двух платах, прошитых одной прошивкой: адрес лучше брать из настроек или из MAC-адреса, а не из констант в коде.
Сколько данных пройдёт через интерфейс между микроконтроллером и Ethernet-модулем с учётом команд и пауз, можно оценить калькулятором полезной скорости в режиме SPI.
Частые вопросы
Сколько адресов в подсети /24 и какой у неё маска?
Маска /24 — 255.255.255.0: первые 24 бита адреса задают сеть, последние 8 — узел. В блоке 256 адресов, из них два служебных — адрес сети (все биты узла нули, например 192.168.1.0) и широковещательный (все единицы, 192.168.1.255). Узлам остаются 254 адреса, от .1 до .254. Каждый бит префикса делит блок пополам: /25 — 126 узлов, /26 — 62, /23 — 510.
Зачем нужна маска /31 и почему у неё два узла, а не ноль?
По общему правилу у /31 оба адреса служебные — адрес сети и широковещательный, — и узлам ничего не остаётся. RFC 3021 разрешает на каналах точка-точка считать оба адреса узловыми: широковещательная рассылка внутри такого канала не нужна. Это экономит адреса на соединениях между маршрутизаторами. В обычной сети Ethernet с несколькими устройствами /31 не используют — минимальная подсеть с адресом шлюза там /30.
Почему устройство с адресом 169.254.x.x не видно в сети?
Адреса 169.254.0.0/16 — локальные адреса канала по RFC 3927. Устройство или компьютер берёт такой адрес сам, когда не получил ответа от сервера DHCP, и с ним можно общаться только внутри одного сегмента: маршрутизатор такие пакеты не пересылает. Если плата с ESP32 или W5500 показывает 169.254.x.x, значит, DHCP не ответил — проверьте кабель и сервер DHCP или задайте статический адрес из подсети роутера.
Как проверить, правильно ли задан статический IP на микроконтроллере?
Адрес, маска и шлюз должны давать одну подсеть: шлюз — адрес из той же сети, что и устройство. Адрес не должен совпадать с адресом сети и широковещательным, с адресами других устройств и с пулом DHCP роутера, иначе два узла получат одинаковый адрес. Введите адрес устройства с маской и адрес шлюза — калькулятор покажет, в одной ли они подсети.
Источники
- IETF. RFC 4632: Classless Inter-domain Routing (CIDR): The Internet Address Assignment and Aggregation Plan, 2006 — разд. 3.1 — запись префикс/длина и таблица: адресов в блоке 2^(32−n), /31 — канал точка-точка, /32 — маршрут к узлу, /0 — маршрут по умолчанию
- IETF. RFC 3021: Using 31-Bit Prefixes on IPv4 Point-to-Point Links, 2000 — разд. 2.1 — на канале точка-точка с маской /31 оба адреса — адреса узлов; 2.2 — адрес сети и направленная широковещательная рассылка, на /31 направленной рассылки нет, используется ограниченная 255.255.255.255
- IETF. RFC 1918: Address Allocation for Private Internets, 1996 — разд. 3 — частные блоки 10/8, 172.16/12 и 192.168/16
- IETF. RFC 3927: Dynamic Configuration of IPv4 Link-Local Addresses, 2005 — префикс 169.254/16; адрес выбирается случайно от 169.254.1.0 до 169.254.254.255, первые и последние 256 адресов зарезервированы; такие адреса действуют только внутри канала
- IETF. RFC 6890: Special-Purpose IP Address Registries, 2013 — разд. 2.2.2, табл. 1–16 — блоки особого назначения IPv4: 0/8, 10/8, 100.64/10, 127/8, 169.254/16, 172.16/12, 192.0.0/24, 192.0.2/24, 192.168/16, 198.18/15, 198.51.100/24, 203.0.113/24, 240/4, 255.255.255.255/32
- IETF. RFC 6598 (общее адресное пространство 100.64/10, 2012), RFC 5737 (адреса для документации, 2010), RFC 5771 (групповые адреса 224/4, 2010), RFC 7526 (отмена префикса ретрансляторов 6to4 192.88.99.0/24, 2015) — блоки, которые калькулятор называет по типу; примеры адресов на странице взяты из 192.0.2.0/24, 198.51.100.0/24 и 203.0.113.0/24 там, где адрес публичный
- WIZnet. W5500 Datasheet v1.1.0, 2022 — разд. 4.1, общие регистры: GAR (0x0001–0x0004) — шлюз, SUBR (0x0005–0x0008) — маска, SIPR (0x000F–0x0012) — собственный адрес, октеты в порядке записи адреса (пример 192.168.0.1 — 0xC0, 0xA8, 0x00, 0x01)
- Espressif. ESP-IDF Programming Guide v6.1: ESP-NETIF — для статического адреса нужно остановить клиент DHCP (он включён по умолчанию у интерфейса Ethernet и станции Wi-Fi); esp_netif_set_ip_info() — адрес, маска и шлюз в esp_netif_ip_info_t, ошибка ESP_ERR_ESP_NETIF_DHCP_NOT_STOPPED, если DHCP ещё работает; esp_netif_set_ip4_addr()
Где пригодится
- Как подключить прибор Modbus RTU к сети Ethernet?Шлюз Modbus TCP — RTU: IP шлюза, порт 502, Unit ID = адрес на линии RS-485
- Почему прибор за шлюзом Modbus TCP не отвечает?Unit ID, настройки линии, таймауты, исключения 0A и 0B, доступ по IP
- Почему ESP32 со статическим IP не выходит в интернет?Шлюз не из подсети, неверная маска или нет DNS-сервера
- Как подключить плату с Ethernet к компьютеру без роутера?Статические адреса из одной подсети, шлюз не нужен; кабель — с учётом Auto-MDIX
- Что будет, если указать неправильную маску подсети?Широкая маска — нет связи с другими сетями, узкая — соседи через шлюз или нет шлюза
- Есть ли в W5500 клиент DHCP?Аппаратно нет: DHCP работает в программе поверх UDP-сокета, MAC и адреса пишет МК
Встроить калькулятор на свой сайт
Скопируйте код и вставьте его в HTML страницы, статьи или вики. Виджет бесплатный, без рекламы, счётчиков и cookie. Условие одно — ссылка на GAW под рамкой остаётся на месте. Подробнее о виджетах
<iframe src="https://gaw.ru/embed/ip-subnet/" title="Калькулятор подсетей IPv4" width="100%" height="640" style="border:1px solid #e3e5e9;border-radius:8px" loading="lazy" allow="clipboard-write"></iframe>
<p style="margin:6px 0 0;font-size:14px">Калькулятор: <a href="https://gaw.ru/tools/ip-subnet/">Калькулятор подсетей IPv4</a> — GAW.ru</p>Автоподстройка высоты рамки
Если сайт разрешает скрипты, добавьте этот код один раз в любом месте страницы: рамка будет менять высоту вместе с результатом расчёта.
<script>window.addEventListener("message",function(e){if(e.origin!=="https://gaw.ru"||!e.data||e.data.type!=="gaw:embed-height")return;var f=document.querySelectorAll('iframe[src^="https://gaw.ru/embed/"]');for(var i=0;i<f.length;i++)if(f[i].contentWindow===e.source)f[i].style.height=e.data.height+"px"})</script>Обновлено .
Нашли ошибку в расчёте?