Модуль 03 — IPv4 и подсети

Посчитать сеть на бумаге и проверить командой

Прогресс курса Модуль 3 из 9

Что вы освоите в этом модуле

01

Адрес из 32 бит

IPv4-адрес — 32-битное число. Для людей его пишут четырьмя десятичными числами — октетами — по 8 бит, от 0 до 255: 192.168.10.37. Чтобы считать подсети, нужен двоичный вид октета. Веса битов слева направо:

вес бита:  128  64  32  16   8   4   2   1
     37  =   0   0   1   0   0   1   0   1    → 32 + 4 + 1
    192  =   1   1   0   0   0   0   0   0    → 128 + 64
    255  =   1   1   1   1   1   1   1   1    → сумма всех

Перевод в двоичную запись: из числа по очереди вычитаются веса слева направо; если вес помещается — бит 1. Для 37: 128 — нет, 64 — нет, 32 — да (остаток 5), 16 — нет, 8 — нет, 4 — да (остаток 1), 2 — нет, 1 — да. Получаем 00100101.

02

Маска и префикс

Адрес состоит из двух частей: номер сети (старшие биты) и номер узла (младшие). Где граница, говорит маска: единицы — сетевая часть, нули — узловая. Число единиц называется префиксом и пишется после косой черты.

ПрефиксМаскаАдресовУзлов
/24255.255.255.0256254
/25255.255.255.128128126
/26255.255.255.1926462
/27255.255.255.2243230
/28255.255.255.2401614
/29255.255.255.24886
/30255.255.255.25242
/16255.255.0.065 53665 534
/8255.0.0.016 777 21616 777 214

Адресов в подсети — 2(32 − префикс). Узлам из них достаются все, кроме двух: первого — адреса сети (все узловые биты 0) и последнего — широковещательного (все 1). Отсюда формула числа узлов: 2n − 2, где n — число узловых битов.

03

Расчёт подсети

Задача: узел 192.168.10.37/26. В какой он сети, какие адреса в ней доступны?

Быстрый способ — через размер блока

  • Префикс /26 — граница в четвёртом октете, маска там 192. Размер блока = 256 − 192 = 64.
  • Сети идут с шагом 64: .0, .64, .128, .192. Адрес .37 попадает в блок, который начинается с .0.
  • Сеть — 192.168.10.0, следующая начинается с .64, значит, широковещательный — .63.
  • Узлы — от .1 до .62, их 62.

Проверка утилитой ipcalc (пакет ipcalc) — она показывает и двоичную запись с границей сети:

$ ipcalc 192.168.10.37/26
Address:   192.168.10.37        11000000.10101000.00001010.00 100101
Netmask:   255.255.255.192 = 26 11111111.11111111.11111111.11 000000
Wildcard:  0.0.0.63             00000000.00000000.00000000.00 111111
=>
Network:   192.168.10.0/26      11000000.10101000.00001010.00 000000
HostMin:   192.168.10.1         11000000.10101000.00001010.00 000001
HostMax:   192.168.10.62        11000000.10101000.00001010.00 111110
Broadcast: 192.168.10.63        11000000.10101000.00001010.00 111111
Hosts/Net: 62                    Class C, Private Internet

Пробел в двоичной записи — граница префикса. Адрес сети получается логическим «И» адреса и маски: где в маске 0, бит обнуляется. Тот же способ работает, когда граница в третьем октете:

$ ipcalc 172.16.5.4/20
Address:   172.16.5.4           10101100.00010000.0000 0101.00000100
Netmask:   255.255.240.0 = 20   11111111.11111111.1111 0000.00000000
=>
Network:   172.16.0.0/20        10101100.00010000.0000 0000.00000000
HostMin:   172.16.0.1           10101100.00010000.0000 0000.00000001
HostMax:   172.16.15.254        10101100.00010000.0000 1111.11111110
Broadcast: 172.16.15.255        10101100.00010000.0000 1111.11111111
Hosts/Net: 4094                  Class B, Private Internet

Блок в третьем октете — 256 − 240 = 16: сети 172.16.0.0, 172.16.16.0, 172.16.32.0… Адрес 172.16.5.4 — в первой, последний адрес — 172.16.15.255.

В одной ли подсети два адреса? Найдите сеть каждого при своём префиксе. Совпали — узлы общаются напрямую, через ARP. Нет — только через маршрутизатор. Частая ошибка в офисе: у одного компьютера маска /24, у другого /25, и связь работает только в одну сторону.
04

Деление на подсети

Офису выдана сеть 192.168.10.0/24. Нужно четыре одинаковые подсети — для четырёх отделов. Четыре = 22, значит, у узловой части забираем 2 бита: префикс /24 + 2 = /26, по 62 узла в каждой.

ПодсетьСетьУзлыШироковещательный
1192.168.10.0/26.1 – .62.63
2192.168.10.64/26.65 – .126.127
3192.168.10.128/26.129 – .190.191
4192.168.10.192/26.193 – .254.255

На практике отделы разного размера, и одинаковые подсети расходуют адреса впустую. Подсети переменной длины (VLSM) режут блоки по потребности: сначала выделяют самую большую, затем следующие из оставшегося места. Для отделов на 50, 20 и 10 узлов:

$ ipcalc -s 50 20 10 192.168.10.0/24
...
1. Requested size: 50 hosts
Network:   192.168.10.0/26      ...
Hosts/Net: 62
2. Requested size: 20 hosts
Network:   192.168.10.64/27     ...
Hosts/Net: 30
3. Requested size: 10 hosts
Network:   192.168.10.96/28     ...
Hosts/Net: 14

Needed size:  112 addresses.
Used network: 192.168.10.0/25
Unused:
192.168.10.112/28
192.168.10.128/25

Каждая подсеть — наименьшая степень двойки, вмещающая нужное число узлов плюс 2 служебных адреса. Свободный остаток — резерв на рост и новые сети. Закладывайте запас: отдел на 30 человек через год станет отделом на 40, и /27 перестанет хватать.

05

Частные и особые адреса

Публичные адреса IPv4 давно закончились, поэтому внутри организаций используют частные диапазоны (RFC 1918). Они не маршрутизируются в интернете; выход наружу — через NAT (модуль 04).

ДиапазонНазначение
10.0.0.0/8Частные: крупные сети, облака
172.16.0.0/12Частные: 172.16.0.0 – 172.31.255.255; сети Docker по умолчанию
192.168.0.0/16Частные: дом, малый офис
127.0.0.0/8Петлевые: сама машина, обычно 127.0.0.1
169.254.0.0/16Самоназначенный адрес: узел не получил адрес по DHCP — признак проблемы
100.64.0.0/10Адреса провайдерского NAT (CGNAT): у вас не «белый» адрес
0.0.0.0«Любой адрес» в настройках служб; «маршрут по умолчанию» как 0.0.0.0/0
255.255.255.255Широковещательный в текущей сети
192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/24Для документации и примеров — их используем в лабораторных

Классы сетей A, B, C (их показывает ipcalc) — устаревшая схема, отменённая в 1993 году вместе с переходом на CIDR. В расчётах опирайтесь только на префикс.

Для связи двух маршрутизаторов нужны всего два адреса; раньше брали /30 (4 адреса, 2 узла), сейчас всё чаще /31 — по RFC 3021 у такой сети нет адреса сети и широковещательного, оба адреса — узлы. /32 — один адрес, так задают адреса на петлевых интерфейсах и в правилах межсетевых экранов.

06

Адрес в Linux

Адрес назначается интерфейсу с префиксом — по нему ядро само добавляет маршрут в свою сеть:

$ ip -br addr show ens18
ens18            UP             192.168.116.34/24 fe80::b641:8f47:5a50:a157/64
$ ip route | grep -v default
192.168.116.0/24 dev ens18 proto dhcp scope link src 192.168.116.34 metric 1002

Добавить адрес временно (до перезагрузки) — sudo ip addr add 192.168.116.50/24 dev ens18, удалить — ip addr del. Постоянная настройка в Debian — в /etc/network/interfaces:

auto ens18
iface ens18 inet static
    address 192.168.116.50/24
    gateway 192.168.116.1

Ошибка в префиксе — частая причина «странной» сети: с маской /16 вместо /24 компьютер будет искать по ARP соседей, которые на самом деле за маршрутизатором, и не дойдёт до них.

Ключевые выводы модуля

Запомните главное

  • Адрес — 32 бита; префикс /N — сколько старших бит занимает номер сети
  • Адресов в подсети 2(32−N), узлов на 2 меньше: адрес сети и широковещательный
  • Размер блока = 256 − значение маски в «рабочем» октете; сети идут с этим шагом
  • Два адреса в одной подсети, если совпадает адрес сети при их префиксе
  • VLSM: подсети по потребности, начиная с самой большой, с запасом на рост
  • Частные сети — 10/8, 172.16/12, 192.168/16; 169.254 — нет DHCP; 100.64/10 — провайдерский NAT
Практические задания — на учебном портале. Задания, критерии оценивания, сдача работ и оценки преподавателя — в курсе на portal.nevabit.ru. Учётную запись выдаёт преподаватель.
Модуль 02: Ethernet Все модули Модуль 04: Маршрутизация