Загрузка

Основы IP-сетей и адресации 

Разберёмся, что такое маска подсети, почему она устроена именно так, как её читать и как с ней считать — шаг за шагом, с понятными приёмами и примерами, которые можно применять в повседневной практике.


Кратко: три ключевые вещи

  1. IP-адрес (IPv4) — 32 бита, записывается как четыре октета: A.B.C.D.
  2. Маска подсети — тоже 32 бита, показывает, какая часть IP — сеть (единицы), а какая — хосты (нули). Пример: 255.255.255.0 = /24.
  3. По маске вычисляем: адрес сети, широковещательный адрес (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:

  1. Переводим каждый октет в двоичный вид:
    • 255 = 11111111 (8 единиц)

    • 255 = 11111111 (8)

    • 255 = 11111111 (8)

    • 224 = 11100000 (3 единицы, затем 5 нулей)

  2. Считаем единицы: 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 (мы уже посчитали)

  1. Инкремент = 256 − 224 = 32.
  2. Берём последний октет IP = 44. Делим на 32 в целых:
    • 32 × 1 = 32

    • 32 × 2 = 64 (больше 44), значит целая часть = 1.

    • Значит сеть начинается с 32 в последнем октете.

  3. Network = 91.203.60.32. (потому что 1×32 = 32)
  4. Broadcast = network + increment − 1 = 32 + 32 − 1 = 6391.203.60.63.
    • Делаем арифметику: 32 + 32 = 64; 64 − 1 = 63.

  5. Диапазон хостов (обычно usable): от network + 1 до broadcast − 1:
    • 91.203.60.3391.203.60.62.

  6. Всего адресов в подсети: 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 и маску)

  1. Перевести маску в /N (считать единицы).
  2. Найти инкремент: 256 − last_mask_octet (если маска не /8, /16, /24).
  3. Вычислить network: floor(last_octet / increment) * increment.
  4. Broadcast = network + increment − 1.
  5. Usable hosts = network+1 … broadcast−1.
  6. Подсчитать общее количество адресов: 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 бит, другая арифметика, но принцип «префикс = биты сети» тот же.


Практическое упражнение (сделай сам)

  1. Взять 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.177172.16.5.190. Всего 16 адресов, usable = 14.

(Пройдёшь это вручную пару раз — навык закрепится.)