Основы IP-сетей и адресации
Разберёмся, что такое маска подсети, почему она устроена именно так, как её читать и как с ней считать — шаг за шагом, с понятными приёмами и примерами, которые можно применять в повседневной практике.
Кратко: три ключевые вещи
- IP-адрес (IPv4) — 32 бита, записывается как четыре октета:
A.B.C.D. - Маска подсети — тоже 32 бита, показывает, какая часть IP — сеть (единицы), а какая — хосты (нули). Пример:
255.255.255.0=/24. - По маске вычисляем: адрес сети, широковещательный адрес (broadcast), диапазон хостов и сколько вообще адресов в подсети.
Что такое маска «вкратце»
Маска — это просто последовательность 1…10…0 (сначала единицы, потом нули). Все биты, где стоит 1, — это бит сети; где 0 — бит хоста.
Обозначение /N (CIDR) означает: в маске N единиц. Например /24 → 24 единицы → 255.255.255.0.
Форматы маски: три способа записи
-
Двоично:
11111111.11111111.11111111.00000000 -
Десятичный маск (dotted):
255.255.255.0 -
CIDR:
/24
Перевод: считаем число единиц в двоичном виде → это и есть CIDR.
Таблица соответствия — быстрый справочник (часто используемые)
| CIDR | Маска (dotted) | Всего адресов | Обычно используемых хостов |
|---|---|---|---|
| /8 | 255.0.0.0 | 2³²⁻⁸ = 16 777 216 | много (обычно не для LAN) |
| /16 | 255.255.0.0 | 2¹⁶ = 65 536 | 65 534 (-2) |
| /24 | 255.255.255.0 | 2⁸ = 256 | 254 (-2) |
| /25 | 255.255.255.128 | 2⁷ = 128 | 126 |
| /26 | 255.255.255.192 | 2⁶ = 64 | 62 |
| /27 | 255.255.255.224 | 2⁵ = 32 | 30 |
| /28 | 255.255.255.240 | 2⁴ = 16 | 14 |
| /29 | 255.255.255.248 | 2³ = 8 | 6 |
| /30 | 255.255.255.252 | 2² = 4 | 2 |
| /31 | 255.255.255.254 | 2¹ = 2 | 2 (RFC 3021 — для p2p) |
| /32 | 255.255.255.255 | 2⁰ = 1 | 1 (хост-маршрут) |
Примечание: классическое правило «-2» (отнять сеть и broadcast) применимо не к
/31и/32./31по RFC3021 разрешён для точка-точка (оба адреса — usable), а/32— это один адрес (например, loopback или конкретный маршрут).
Почему маска должна быть континуальной (все 1 слева, все 0 справа)
Двоичная маска должна выглядеть как 111..11000..00. Причины:
-
Такая маска обеспечивает непрерывную границу «сеть/хост» — это фундамент маршрутизации и суммаризации (aggegation).
-
Аппаратные/программные реализации (роутеры, ASIC) рассчитывают маски именно так.
-
Непрерывные маски упрощают сравнение префиксов: самый длинный префикс — лучший маршрут.
Пример неверной маски: 11111111.11111111.11111111.11101001 — здесь единицы разбросаны (есть 1 после 0) → это невалидная маска.
Как перевести маску в /N — пошагово
Возьмём 255.255.255.224 и сделаем /N:
- Переводим каждый октет в двоичный вид:
-
255 =
11111111(8 единиц) -
255 =
11111111(8) -
255 =
11111111(8) -
224 =
11100000(3 единицы, затем 5 нулей)
-
- Считаем единицы:
8 + 8 + 8 + 3 = 27→ значит/27.
Итого: 255.255.255.224 = /27.
Как по маске быстро узнать «шаг подсети» (network increment)
Если маска не кратна 8 (то есть меняется в середине октета), то в последнем значащем октете удобно пользоваться правилом:
инкремент = 256 − значение_маски_в_том_октете.
Пример: 255.255.255.224:
-
Последний значащий октет = 224
-
Инкремент = 256 − 224 = 32
Это значит: сети начинаются каждые 32 адреса:...0, ...32, ...64, ...96, ...128, ...160, ...192, ...224.
Как вычислить адрес сети, broadcast и диапазон хостов (шаги)
Покажем на реальном примере, который у тебя был раньше:
IP: 91.203.60.44
Маска: 255.255.255.224 → /27 (мы уже посчитали)
- Инкремент =
256 − 224 = 32. - Берём последний октет IP =
44. Делим на 32 в целых:-
32 × 1 = 32
-
32 × 2 = 64 (больше 44), значит целая часть = 1.
-
Значит сеть начинается с
32в последнем октете.
-
- Network =
91.203.60.32. (потому что 1×32 = 32) - Broadcast =
network + increment − 1 = 32 + 32 − 1 = 63→91.203.60.63.-
Делаем арифметику: 32 + 32 = 64; 64 − 1 = 63.
-
- Диапазон хостов (обычно usable): от
network + 1доbroadcast − 1:-
91.203.60.33…91.203.60.62.
-
- Всего адресов в подсети: 2^(32−27) = 2^5 = 32.
-
-
Вычисление 2^5: 2×2=4; 4×2=8; 8×2=16; 16×2=32.
-
Итого: на /27 — 32 адреса, 30 usable.
Как по маске быстро определить количество хостов
Формула:
-
host_bits = 32 − prefix -
total_addresses = 2^(host_bits) -
usable_hosts = total_addresses − 2(обычно), исключая/31и/32.
Пример: /29 → host_bits = 32−29 = 3 → 2^3 = 8 → usable = 8−2 = 6.
Примеры часто встречающихся случаев и лайфхаки
/30 — для точка-точка
-
/30→ 4 адреса: сеть, 2 хоста, broadcast. Используют для подключения двух роутеров. -
Если хочется экономить адреса и использовать
/31— RFC3021 разрешает /31 для p2p (оба адреса — usable, нет broadcast).
/32 — хост-маршрут
-
/32— указание именно одного адреса в таблице маршрутизации. Часто используют для loopback или чтобы «прицепить» конкретный хост.
Деление сети (subnetting)
Допустим, у тебя /24 и ты хочешь 8 подсетей одинакового размера → на сколько увеличить префикс?
-
/24→ 256 адресов. -
Нужно 8 подсетей → 2^3 = 8 → значит добавить 3 бита в маску →
/24 + 3 = /27. -
Проверка: /27 → 32 адреса; 8 × 32 = 256.
Общее правило: количество новых подсетей = 2^(newPrefix − oldPrefix).
Слияние (supernet/CIDR)
Можно объявить один маршрут для нескольких подсетей: например /24 + /24 → агрегировать до /23 если они смежны. Это облегчает таблицу маршрутизации.
Как проверить валидность маски (простой тест)
Переведи маску в двоичный вид и убедись, что она выглядит как 111...1100...00 (все единицы слева, все нули справа). Если встретишь 1 после 0 — маска некорректна.
Wildcard mask (для Cisco)
Инверсия маски: wildcard = 255.255.255.255 − netmask.
Пример: маска 255.255.255.224 → wildcard = 0.0.0.31. Полезно при настройке ACL на Cisco.
Короткий практический чек-лист (что делать, когда дали IP и маску)
- Перевести маску в
/N(считать единицы). - Найти инкремент:
256 − last_mask_octet(если маска не /8, /16, /24). - Вычислить network:
floor(last_octet / increment) * increment. - Broadcast = network + increment − 1.
- Usable hosts = network+1 … broadcast−1.
- Подсчитать общее количество адресов: 2^(32−N).
Короткая шпаргалка по маскам в десятичном виде
Один октет — возможные значения маски (количество единиц в октете и их десятичное представление):
-
0 →
00000000 -
128 →
10000000 -
192 →
11000000 -
224 →
11100000 -
240 →
11110000 -
248 →
11111000 -
252 →
11111100 -
254 →
11111110 -
255 →
11111111
То есть октет может принимать только эти значения (0,128,192,224,240,248,252,254,255) в корректной маске.
Короткое сравнение с IPv6 (чтобы не путать)
-
В IPv6 маски (префиксы) тоже есть, но обычно /64 — стандарт для LAN-сегмента.
-
В IPv6 нет broadcast, вместо него — multicast.
-
IPv6 адрес — 128 бит, другая арифметика, но принцип «префикс = биты сети» тот же.
Практическое упражнение (сделай сам)
- Взять IP
172.16.5.178и маску255.255.255.240.
-
-
Перевести маску →
/28(240 =11110000→ 4 единицы в последнем октете; итого 24+4 = 28). -
Инкремент = 256 − 240 = 16.
-
Последний октет IP = 178. Делим на 16: 16×11 = 176; 16×12 = 192 (>178). Значит сеть начинается с 176.
-
Network =
172.16.5.176, broadcast = 176 + 16 − 1 = 191. -
Хосты:
172.16.5.177…172.16.5.190. Всего 16 адресов, usable = 14.
-
(Пройдёшь это вручную пару раз — навык закрепится.)