# IPv4-адресация и CIDR _Сеть: L2 / L3 · LinuxLab Knowledge Base_ **TL;DR:** IP-адрес = 32 бита, обычно как `a.b.c.d`. **/N** в конце - длина префикса сети: `/24` = первые 24 бита фиксированы, последние 8 - host'ы (256 адресов). ## Структура адреса IPv4-адрес - это 32-битное число, которое для удобства записывают как четыре десятичных байта через точку: `192.168.1.10`. Это просто `0xC0A8010A` или `11000000.10101000.00000001.00001010` в бинарном виде. Префикс сети (CIDR) - сколько **левых битов** считаются «сетевой частью»: `192.168.1.0/24` означает что первые 24 бита (`192.168.1`) фиксированы для всех адресов в этой сети, последние 8 - диапазон host'ов. ## Сколько хостов в /N | префикс | сетевая маска | host-диапазон | примеры | |---|---|---|---| | /8 | 255.0.0.0 | 16 777 214 | `10.0.0.0/8` (RFC1918) | | /16 | 255.255.0.0 | 65 534 | `172.16.0.0/16` | | /24 | 255.255.255.0 | 254 | `192.168.1.0/24` (домашняя сеть) | | /29 | 255.255.255.248 | 6 | мини-точка-точка для 4-х устройств | | /30 | 255.255.255.252 | 2 | классика для p2p-link'ов | | /31 | 255.255.255.254 | 2 (RFC 3021) | оптимизированный p2p, без зарезервированных | | /32 | 255.255.255.255 | 1 | один конкретный адрес (loopback, host route) | «-2» в N-2 - потому что network-address (всё нули в host-части) и broadcast (все единицы) обычно зарезервированы. ## Зарезервированные диапазоны (RFC 1918 + others) | диапазон | для чего | |---|---| | `10.0.0.0/8` | приватные сети (большие) | | `172.16.0.0/12` | приватные (Docker дефолт) | | `192.168.0.0/16` | приватные (домашние роутеры) | | `127.0.0.0/8` | loopback (локальные интерфейсы) | | `169.254.0.0/16` | link-local (когда DHCP не отдал IP) | | `224.0.0.0/4` | multicast | | `0.0.0.0/0` | «любой адрес» - используется как default route | Адреса из приватных диапазонов **не маршрутизируются** в интернет - поэтому для выхода наружу требуется [nat](/kb/nat.md). ## Где увидеть на машине ```bash ip -4 addr # все IPv4-адреса всех интерфейсов ip -4 -br addr # компактно: имя/state/IP/24 hostname -I # все IP-адреса хоста (без mask'и) ``` Адрес может быть: - **scope global** - публично (или приватно через NAT) видим - **scope host** - только loopback (например 127.0.0.1) - **scope link** - только в пределах одного broadcast-домена ## Команды ```bash ip -4 addr show ``` Все IPv4-адреса интерфейсов с указанием prefix-length ```bash ipcalc 192.168.1.10/24 ``` Утилита для расчёта network/broadcast/host range (если установлен `ipcalc`) ```bash sudo ip addr add 10.0.0.5/24 dev eth0 ``` Добавить IP к интерфейсу - потребует NET_ADMIN-cap ```bash sudo ip addr del 10.0.0.5/24 dev eth0 ``` Снять IP с интерфейса ```bash ip route get 8.8.8.8 ``` Какой source-IP/интерфейс будет использован для пакета на 8.8.8.8 (видно auto-выбор source) ## См. также - [Subnetting и CIDR](/kb/subnetting-cidr.md) - [IPv6 - адресация и базовые концепции](/kb/ipv6-basics.md) - [Routing table](/kb/routing-table.md) - [ARP - Address Resolution Protocol](/kb/arp.md) - [DHCP - Dynamic Host Configuration Protocol](/kb/dhcp-protocol.md)