Внешний вид
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 | /24 | 24 | 254 |
| 255.255.0.0 | /16 | 16 | 65534 |
| 255.255.255.240 | /28 | 28 | 14 |
| 0.0.0.0 | /0 | 0 | весь интернет |
Префикс /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/16 | link-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. Проверка понимания (наши реальные адреса)
- Alpine1 =
192.168.100.11/24. С какими адресами он общается напрямую, не трогая шлюз? (Ответ: только с 192.168.100.x) - Почему
ping 192.168.100.1в заявке №1 работал даже при сломанном маршруте по умолчанию? (Ответ: 100.1 в connected-сети — шлюз не нужен, маршрут 0.0.0.0/0 вообще не участвует) - У 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).