Skip to content

IP-адреса, маски и префиксы: как это работает ​

Уровень: с нуля, но с конца понятно всё про маршруты в нашей лабе.


1. IP-адрес — это 32 бита, просто записанные удобно ​

IPv4-адрес — это число из 32 двоичных разрядов (бит). Мы пишем его четырьмя десятичными числами через точку, где каждое число — это 8 бит (октет):

text
192.168.100.11  =  11000000 . 10101000 . 01100100 . 00001011
                     192         168        100         11

Каждое из четырёх чисел может быть 0–255 (потому что 8 бит = 2⁸ = 256 значений). Запомни: адрес — это одно 32-битное число, точки — только для читаемости.

2. Маска: где «улица», где «квартира» ​

Устройство в сети всегда смотрит на адрес пакета и решает: адресат рядом (в моей сети — иду напрямую) или далеко (иду через шлюз). Решает это маска подсети — тоже 32 бита, которая говорит: «левые N бит — это номер сети (общий для всех в нашем сегменте), правые (32−N) бит — номер устройства внутри».

Два способа записать одно и то же:

Запись с точкамиПрефиксСколько бит на сетьУстройств в сети
255.255.255.0/2424254
255.255.0.0/161665534
255.255.255.240/282814
0.0.0.0/00весь интернет

Префикс /N — просто короткая запись маски: сколько старших бит = единицы. 255.255.255.0 = 24 единицы подряд = /24.

3. Как устройство применяет маску: операция AND ​

Устройство кладёт адрес назначения «на маску» и сравнивает результат со своей сетью:

text
Мой адрес:   192.168.100.11
Маска:       255.255.255.0   (/24)

Моя сеть = 192.168.100.11 AND 255.255.255.0 = 192.168.100.0

Пакет к 192.168.100.1:
  192.168.100.1 AND маска = 192.168.100.0  → равно моей сети →
  «свой» → отправлю напрямую (по L2/MAC, без шлюза)

Пакет к 77.88.55.242:
  77.88.55.242 AND маска = 77.88.55.0 → НЕ моя сеть →
  «чужой» → отправлю шлюзу по умолчанию

AND по битам: 1 AND 1 = 1, всё остальное = 0. Проще говоря, там где в маске 255 — берём число из адреса, где 0 — подставляем ноль.

4. Префикс /0 — «маска, которая всё пропускает» ​

0.0.0.0/0: в маске ноль единичных бит → после AND остаётся 0.0.0.0 для любого адреса. То есть условие «назначение = 0.0.0.0/0» выполняется всегда. Поэтому маршрут с dst-address=0.0.0.0/0 называется маршрутом по умолчанию: «если не нашёл более точного маршрута — отправь сюда».

5. Как роутер выбирает маршрут: самый длинный префикс выигрывает ​

Таблица маршрутов — список условий. На пакет могут подходить несколько строк сразу. Роутер выбирает самый длинный префикс (longest prefix match) — самое точное совпадение:

text
Таблица нашего CHR после починки:

192.168.100.0/24  → ether2      (/24 — точный)
192.168.122.0/24  → ether1      (/24 — точный)
0.0.0.0/0         → 192.168.122.1   (/0 — общий)

Пакет к 192.168.100.50:  подходят /24 и /0 → выигрывает /24 → ether2
Пакет к 8.8.8.8:         подходит только /0 → шлюз 192.168.122.1

Порядок строк в таблице не важен — решает длина префикса. Если удалили строку /0 (как в заявке №1) — пакеты «в мир» вообще не находят маршрута → дроп с ICMP «network unreachable».

6. Адреса, которые надо знать наизусть ​

Адрес/диапазонЗначение
0.0.0.0/0«любой адрес» — маршрут по умолчанию
127.0.0.1 (вся сеть 127.0.0.0/8)loopback — «я сам». ping 127.0.0.1 проверяет стек TCP/IP устройства, не сеть
192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12«серые» (частные) адреса для LAN. Не маршрутизируются в интернете, живут за NAT
169.254.0.0/16link-local/APIPA: устройство не получило адрес по DHCP и выдумало себе случайный. Видишь 169.254.x.x — иди чинить DHCP/кабель
x.x.x.0 с /24адрес самой сети (нельзя давать устройству)
x.x.x.255 с /24широковещательный адрес сети — «всем в этом сегменте»

7. Считаем на пальцах: сколько адресов в подсети ​

Формула: устройств = 2^(32−N) − 2 (минус адрес сети и минус broadcast).

  • /24 → 2⁸ − 2 = 254 устройства (обычный офис/квартира)
  • /30 → 2² − 2 = 2 адреса (типично на линке между двумя роутерами)
  • /31 → ровно 2 (используется только для point-to-point линков)
  • /0 → 2³² (весь IPv4-интернет)

Практика: твой D-Link держит пул 192.168.1.200–250 — это 51 адрес внутри его /24-сети.

8. Проверка понимания (наши реальные адреса) ​

  1. Alpine1 = 192.168.100.11/24. С какими адресами он общается напрямую, не трогая шлюз? (Ответ: только с 192.168.100.x)
  2. Почему ping 192.168.100.1 в заявке №1 работал даже при сломанном маршруте по умолчанию? (Ответ: 100.1 в connected-сети — шлюз не нужен, маршрут 0.0.0.0/0 вообще не участвует)
  3. У CHR два адреса: 192.168.122.10/24 и 192.168.100.1/24. Куда CHR отправит пакет на 192.168.122.1? А на 1.1.1.1? (Ответ: 122.1 — connected в ether1, напрямую; 1.1.1.1 — только через маршрут по умолчанию, без него дроп)

Если ответил на все три без подглядывания — тема усвоена.


См. также: NETWORK_TERMS_BASICS.md (общая лексика), ROUTER_SETTINGS_GUIDE.md (применение в D-Link).