Маска подсети и CIDR
Маска подсети делит IP-адрес на номер сети и номер хоста, а CIDR записывает её коротким префиксом вида /24.
Что такое Маска подсети и CIDR
Маска подсети — 32-битное число, которое показывает, какая часть IP-адреса обозначает сеть, а какая — конкретный хост в ней. Подсеть (subnet) — сам этот диапазон адресов с общим началом. «Маска сети» и «маска подсети» — одно и то же.
CIDR (Classless Inter-Domain Routing) — способ записать ту же маску коротко: числом единичных битов после слэша. 255.255.255.0 и /24 — одно и то же, просто вторая форма короче и её понимают все современные утилиты.
Зачем это нужно: получив пакет, узел сравнивает адрес назначения со своей подсетью. Совпало — отправляет напрямую в локальный сегмент. Не совпало — отдаёт шлюзу. Маска и есть правило, по которому принимается это решение.
Как маска делит адрес
IP: 192.168. 1. 10 → 11000000 10101000 00000001 00001010
Маска: 255.255.255. 0 → 11111111 11111111 11111111 00000000
└────── сеть (24 бита) ─────┘└ хост ┘
Адрес сети: 192.168.1.0
Broadcast: 192.168.1.255
Хосты: 192.168.1.1 – 192.168.1.254
Единицы в маске всегда идут подряд слева — «дырявых» масок не бывает. Отсюда и работает CIDR-запись: достаточно назвать их количество.
Таблица префиксов
| CIDR | Маска | Всего адресов | Полезных хостов |
|---|---|---|---|
| /16 | 255.255.0.0 | 65 536 | 65 534 |
| /20 | 255.255.240.0 | 4096 | 4094 |
| /24 | 255.255.255.0 | 256 | 254 |
| /25 | 255.255.255.128 | 128 | 126 |
| /26 | 255.255.255.192 | 64 | 62 |
| /28 | 255.255.255.240 | 16 | 14 |
| /30 | 255.255.255.252 | 4 | 2 |
| /32 | 255.255.255.255 | 1 | 1 (один хост) |
Два адреса всегда «съедаются»: первый — адрес самой сети, последний — broadcast. Поэтому в /24 не 256 хостов, а 254. Исключения — /31 для линков точка-точка (RFC 3021) и /32 для одиночного адреса в правилах файрвола и маршрутах.
Число адресов считается как 2^(32 − префикс). Каждый лишний бит в маске делит сеть пополам: /24 — это две /25, четыре /26 и так далее.
Практика
$ ip addr show eth0
inet 10.0.1.15/24 brd 10.0.1.255 scope global eth0
$ ipcalc 10.0.1.15/24
Address: 10.0.1.15
Network: 10.0.1.0/24
HostMin: 10.0.1.1
HostMax: 10.0.1.254
Broadcast: 10.0.1.255
Hosts/Net: 254
$ ip route
default via 10.0.1.1 dev eth0
10.0.1.0/24 dev eth0 proto kernel scope link src 10.0.1.15
Маршрут default — куда слать всё, что не попало в известные подсети. Вторая строка — та самая локальная подсеть, внутрь которой пакеты идут напрямую.
Префиксы встречаются везде, где нужно задать диапазон: в правилах iptables/UFW, в security groups, в allow/deny nginx. 0.0.0.0/0 означает «любой адрес» — маска нулевой длины совпадает с чем угодно.
Приватные диапазоны и планирование сети
RFC 1918 закрепил три блока, которые не маршрутизируются в интернете и предназначены для внутренних сетей:
10.0.0.0/8— 16,7 млн адресов, обычная основа для облачной VPC172.16.0.0/12— 1 млн адресов, диапазон по умолчанию у Docker192.168.0.0/16— 65 тысяч, домашние и офисные сети
Наружу такие адреса выходят через NAT. При проектировании VPC берите с запасом (10.0.0.0/16) и режьте на подсети по зонам и ролям: 10.0.1.0/24 — публичные веб-серверы, 10.0.2.0/24 — база, 10.0.3.0/24 — GPU-узлы. Расширить сеть позже почти всегда больно, а пересечение диапазонов с офисом сделает VPN-связность невозможной — маршрутизатор просто не поймёт, куда слать пакет.
Связанные термины
- IP-адрес — то, что маска делит на сеть и хост
- IPv4 и IPv6 — в IPv6 стандартный префикс подсети
/64 - NAT — выпускает приватные подсети в интернет
- VPC — облачная сеть, которую вы режете на подсети
- DHCP — раздаёт адреса внутри подсети
- iptables / UFW — правила пишутся в CIDR-нотации
Готовы запустить GPU-задачу?
Запустить GPU-сервер