Основы 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.
-
(Пройдёшь это вручную пару раз — навык закрепится.)