CIDR в диапазон адресов
Превратите блок CIDR в диапазон адресов — или диапазон в минимальный набор блоков, точно его покрывающих.
Префикс — это сколько битов закреплено. Все биты после него меняются.
Охватывает
10.0.0.0 – 10.0.3.255
Всего адресов: 1 024.
Первый адрес
10.0.0.0
Последний адрес
10.0.3.255
Всего адресов
1 024
Маска подсети
255.255.252.0
Пригодно для узлов
1 022
Первый и последний — это адрес сети и широковещательный адрес.
Следующий блок начинается с
10.0.4.0
Пригодится, когда большой блок нарезают на идущие подряд выделения.
Правило выравнивания, из которого следует всё остальное
CIDR подчиняется одному ограничению: блок из 2ⁿ адресов обязан начинаться с числа, кратного 2ⁿ. /24 покрывает 256 адресов, поэтому может начинаться только там, где последний октет равен 0. /26 покрывает 64 и потому начинается лишь с .0, .64, .128 или .192.
Это не бюрократия. Именно это делает маршрутизацию быстрой: маршрутизатор решает, куда отправить пакет, наложив маску на адрес назначения и сравнив — пара инструкций. Произвольные диапазоны потребовали бы сравнивать каждый адрес с нижней и верхней границей, и так на каждом пакете.
Практическое следствие — как раз то, ради чего существует этот инструмент. Человеческие диапазоны не считаются с границами степеней двойки, поэтому перевод одного из них в CIDR обычно даёт несколько блоков: маленькие по неровным краям и крупные в выровненной середине.
Разобранный пример
От 192.168.1.10 до 192.168.1.20 — одиннадцать адресов. Одиннадцать не степень двойки, значит одним блоком не обойтись. Жадное покрытие идёт вперёд от .10:
| Блок | Покрывает | Почему такой размер |
|---|---|---|
192.168.1.10/31 | .10 – .11 | .10 чётный, поэтому блок из 2 адресов начинается здесь; из 4 — уже нет. |
192.168.1.12/30 | .12 – .15 | .12 кратно 4. |
192.168.1.16/30 | .16 – .19 | .16 кратно 16, но осталось всего 5 адресов, так что 4 — наибольшее, что помещается. |
192.168.1.20/32 | .20 | Остался один адрес. |
Четыре блока на одиннадцать адресов. Каждый блок целиком внутри диапазона, и ничего снаружи в него не попало.
Где это встречается
- Правила межсетевых экранов и группы безопасности. AWS, Azure и GCP выражают диапазоны источников в CIDR, поэтому список доступа, переданный вам как «с 10.20.30.40 по 10.20.31.200», приходится преобразовать, прежде чем вводить.
- Записи маршрутизации. Статическому маршруту нужен префикс, а не диапазон.
- Чтение блока, который вам назвали. Хостер сообщает, что ваше выделение —
203.0.113.64/29; первое направление этого инструмента скажет, что это .64 – .71, из которых назначить можно .65 – .70. - Проверка, пересекаются ли два блока. Переведите оба в диапазоны и сравните числа — куда проще, чем рассуждать о префиксах.
Запись, в которой стоит быть точным
10.0.0.5/24 и 10.0.0.0/24 оба корректны и означают разное. Второе называет сеть. Первое называет узел внутри этой сети и является тем, как пишут конфигурацию интерфейса: одна строка несёт и адрес, и блок, которому он принадлежит. Если вставить первое туда, где ждут сеть, большинство инструментов молча замаскируют его до 10.0.0.0/24 — обычно это и требовалось, но не всегда.
0.0.0.0/0 — это весь интернет. Так правильно записывать маршрут по умолчанию, и это очень серьёзная вещь, чтобы оставлять её во входящем правиле межсетевого экрана.
Смежное
За полным разбором одного блока — сеть, широковещательный адрес, диапазон узлов, двоичный вид — обращайтесь к калькулятору подсетей. А для перевода между /24 и 255.255.255.0 есть отдельный конвертер с полной таблицей.
Вопросы про CIDR
Почему мой диапазон требует нескольких блоков CIDR вместо одного?
Потому что блоки CIDR должны быть выровнены: блок из 2ⁿ адресов обязан начинаться с числа, кратного 2ⁿ. Диапазон от 192.168.1.10 до 192.168.4.200 — это 959 адресов, но он начинается с .10, а не на границе степени двойки, и заканчивается в середине блока, поэтому его приходится покрывать всё более крупными блоками, двигаясь внутрь с обоих концов. Наименьший одиночный блок, вмещающий весь диапазон, — это /21 на 2 048 адресов, из которых 1 089 вы не запрашивали.
А нельзя просто округлить до одного блока побольше?
Так аккуратнее, и обычно это неверно. Диапазон переводят в CIDR почти всегда затем, чтобы написать правило межсетевого экрана, группу безопасности или маршрут, — а округление вверх молча открывает доступ к адресам, которых никто не имел в виду. Этот инструмент даёт точное покрытие: каждый адрес в результате лежит внутри вашего диапазона, и каждый адрес диапазона попадает в результат.
Что означает число после косой черты?
Сколько битов слева зафиксировано. /24 фиксирует двадцать четыре бита из тридцати двух и оставляет свободными восемь, то есть 256 адресов. Каждая следующая единица вдвое уменьшает блок: /25 — это 128 адресов, /26 — 64. В обратную сторону: вычтите префикс из 32 и возведите 2 в полученную степень.
Является ли 10.0.0.5/24 корректным блоком CIDR?
Запись корректна и встречается постоянно, но описывает она не блок, начинающийся с .5, — она описывает узел 10.0.0.5 внутри блока 10.0.0.0/24. Конфигурации интерфейсов пишут именно так намеренно: одна строка сразу несёт и адрес, и сеть, которой он принадлежит. Если вы имели в виду блок, адресной частью должен быть адрес сети.
Насколько велик /0?
Это всё адресное пространство IPv4, все 4 294 967 296 адресов. Он не фиксирует ни одного бита. Вы встретите его как маршрут по умолчанию: 0.0.0.0/0 означает «всё», и именно поэтому он стоит последней записью в таблице маршрутизации и поэтому же его случайный ввод в правило межсетевого экрана так опасен.
Последняя проверка . Заметили, что что-то устарело? Напишите нам.
