Подсети без боли: CIDR, маски и подсчёт хостов
Как префикс CIDR превращается в маску, почему в /24 ровно 254 хоста и приём с размером блока, который заменяет таблицу масок.
Самая частая ошибка при работе с подсетями — вовсе не арифметика. Это уверенность, что сеть заканчивается там, где меняется третий октет.
Возьмём 10.0.5.200/23. Интуиция говорит: сеть — 10.0.5.0. Нет. Префикс /23 накрывает два значения третьего октета, поэтому сеть здесь 10.0.4.0, а широковещательный адрес — 10.0.5.255. Ошибётесь так в правиле файрвола, и либо откроете вдвое больший диапазон, чем собирались, либо закроете половину своих же хостов. Вставьте адрес в калькулятор подсетей — он покажет это одной строкой.
Куда девается два адреса
В /24 256 адресов, а рабочих — 254. Первый адрес обозначает саму сеть, последний нужен для широковещательной рассылки: пакет уходит сразу всем хостам сегмента. Ни тот, ни другой на интерфейс не назначают.
Вычитание работает от /0 до /30. В /30 всего четыре адреса, из них рабочих два, поэтому под соединение двух маршрутизаторов исторически отдают /30.
Приём с размером блока
Таблицу масок можно выучить, но она выветривается ровно к тому моменту, когда вопрос задают в два часа ночи. Приём, который держится: вычтите интересующий октет маски из 256.
Для /26 маска 255.255.255.192. 256 − 192 = 64, значит подсети начинаются с .0, .64, .128 и .192. Любой адрес от .64 до .127 относится к сети .64. Никакого перевода в двоичный код и загибания пальцев.
С /20 то же самое: маска 255.255.240.0, 256 − 240 = 16, границы по третьему октету идут через 0, 16, 32, 48. Адрес 172.16.37.9/20 попадает в сеть 172.16.32.0.
Два префикса, которые живут по своим правилам
/31 и /32 не подчиняются правилу «минус два».
RFC 3021 разрешил /31 на соединениях точка-точка в декабре 2000 года. Когда сторон ровно две, рассылать не́кому, поэтому оба адреса назначаются интерфейсам и на каждой линии экономится один адрес. На сети из нескольких сотен WAN-линков это уже заметно. Старое оборудование /31 может не принять — проверьте до того, как раскатывать конфиг.
/32 — маршрут до одного хоста. Один адрес, без адреса сети и без широковещательного. Такие префиксы встречаются на loopback-интерфейсах, в статических маршрутах и в анонсах отдельных адресов по BGP.
Смотрите не только на маску
Знать, что адрес — 169.254.14.203, важнее, чем знать его маску. Это APIPA, самоназначенный link-local адрес из 169.254.0.0/16, и он означает одно: хост запросил DHCP и ничего не получил. Когда «адрес есть, а сети нет», причина обычно именно эта.
Ещё несколько блоков, которые стоит узнавать сразу:
- 10.0.0.0/8, 172.16.0.0/12 и 192.168.0.0/16 — частные сети по RFC 1918, в публичном интернете не маршрутизируются;
- 100.64.0.0/10 — carrier-grade NAT: если внешний адрес отсюда, провайдер прячет вас за своим NAT и входящие соединения до вас не дойдут;
- 127.0.0.0/8 — локальная петля, причём под неё зарезервирован весь /8, а не только 127.0.0.1;
- 192.0.2.0/24, 198.51.100.0/24 и 203.0.113.0/24 существуют только для документации, поэтому и попадаются в примерах всех RFC.
Сама технология CIDR моложе, чем кажется: её описали в RFC 1519 в 1993 году, когда сети класса B выдавали так быстро, что реестр шёл к исчерпанию. Классовая адресация тратила адреса впустую — организации, которой нужно 300 адресов, доставался класс B с 65 534 адресами.
Введите адрес и префикс в калькулятор подсетей и скопируйте весь расчёт прямо в тикет.