Зачем подсети
В IPv4 32-битный адрес, в IPv6 - 128 бит. Сеть делится на блоки (подсети) чтобы:
- изолировать broadcast-домен (broadcast-domain)
- управлять маршрутизацией (агрегация маршрутов)
- применять security-политики (firewall на границе подсети)
- выделить адреса разным организациям/отделам
Биты и адреса
Адрес делится на две части: network prefix + host part.
Пример 192.168.1.42/24:
/24= первые 24 бита = network =192.168.1.0- оставшиеся 8 бит = host =
42
192.168.1.42 → 11000000.10101000.00000001.00101010
/24 mask 11111111.11111111.11111111.00000000
network 11000000.10101000.00000001.00000000 = 192.168.1.0
host 00101010 = 42
Типичные размеры
| CIDR | Маска | Адресов | Юзабельных | Применение |
|---|---|---|---|---|
| /8 | 255.0.0.0 | 16M | 16M-2 | большая корп., публичный блок |
| /16 | 255.255.0.0 | 65 536 | 65 534 | дата-центр, VPN |
| /24 | 255.255.255.0 | 256 | 254 | стандартная LAN |
| /29 | 255.255.255.248 | 8 | 6 | малый офис / пара серверов |
| /30 | 255.255.255.252 | 4 | 2 | point-to-point ссылки |
| /31 | 255.255.255.254 | 2 | 2 | p2p (RFC 3021, без брода) |
| /32 | 255.255.255.255 | 1 | 1 | host-route, loopback |
«-2» в столбце usable - один адрес уходит на network address (все host-биты в 0), один на broadcast (все в 1).
Зачем -2 (network + broadcast)
Network address (192.168.1.0) - идентификатор подсети, никому не
присваивается. Broadcast address (192.168.1.255) - адрес «всем
в подсети», тоже не присваивается.
Из 256 адресов в /24 у хостов 254 (.1 - .254). Обычно .1 = шлюз,
.255 = broadcast.
Один префикс - один L2-сегмент
Хосты с одним [[ipv4-addressing|IP-prefix'ом]] могут общаться на L2 напрямую (через [[arp|ARP]]). Хосты с разными префиксами обязаны идти через [[default-gateway|шлюз]] - даже если физически в одном кабеле.
Это часто источник «магических» багов: два хоста в 192.168.1.0/24 и
192.168.1.128/25 физически в одной сети, но хост .50 (в /24)
считает что .200 в той же подсети, а у .200 (в /25) другая
network-mask - не общаются.
VLSM - переменные подсети
Раньше (classful) сети были фиксированы: A=/8, B=/16, C=/24. VLSM (Variable Length Subnet Mask) и CIDR разрешают любую длину.
Пример: дали тебе 10.0.0.0/16 - 65 536 адресов. Делишь:
10.0.0.0/24- офис 1 (254 хоста)10.0.1.0/24- офис 210.0.10.0/24- DMZ10.0.20.0/24- VPN-pool10.0.100.0/30- p2p ссылка к провайдеру 110.0.100.4/30- p2p ссылка к провайдеру 2
Все эти подсети суммируются в 10.0.0.0/16 для внешнего объявления
(один маршрут вместо 6).
Как посчитать в голове
Маска /N означает что (32-N) хост-битов = 2^(32-N) адресов.
| /N | хост-битов | адресов | юзабельно |
|---|---|---|---|
| /30 | 2 | 4 | 2 |
| /29 | 3 | 8 | 6 |
| /28 | 4 | 16 | 14 |
| /27 | 5 | 32 | 30 |
| /26 | 6 | 64 | 62 |
| /25 | 7 | 128 | 126 |
| /24 | 8 | 256 | 254 |
Для /N где (32-N) % 8 != 0 (например /27) - последний октет шага
256 / 2^(32-N) = 256 / 32 = 8: подсети /27 идут шагами по 8:
.0, .32, .64, .96, .128, .160, .192, .224.
Особые блоки RFC 1918 (приватные)
10.0.0.0/8172.16.0.0/12(= 172.16.0.0 - 172.31.255.255)192.168.0.0/16
Эти не маршрутизируются в публичный интернет - используются за NAT.
Также:
127.0.0.0/8- loopback169.254.0.0/16- link-local (когда нет DHCP)224.0.0.0/4- multicast100.64.0.0/10- CGNAT (мобильные операторы)
IPv6 subnetting
Тот же принцип, только биты другие. Стандарт - /64 на LAN. Корпорации получают /48, провайдеры дают клиенту /56-/60. Подсети IPv6 не считают хостов - 2^64 заведомо хватит.
Когда что-то пошло не так
- Не пингуется хост в той же сети - проверь маски на обоих хостах, могут не совпадать
- «сеть переполнена» в /29 - всего 6 usable, выбери больше: /28 или /27
- Маршруты дублируются - посмотри агрегацию: можно объявить /16 вместо 256 /24
- DHCP-pool заканчивается - проверь размер подсети (
ipcalc), возможно /24 мал, нужен /23