IP — адреса и доставка между сетями
Протокол, который дал интернету вторую половину названия TCP/IP. Его задача — довести пакет до нужного устройства на другом конце планеты.
- как устроены адреса IPv4 и IPv6 и что такое маска;
- как пакет находит дорогу и зачем нужен NAT;
- что такое ICMP и как работают ping и traceroute.
3.1Что делает IP — и чего не обещает
IP (Internet Protocol) решает две задачи: даёт каждому устройству адрес и определяет, как пакет передаётся от сети к сети, пока не дойдёт до получателя. Устройства, которые пересылают пакеты между сетями, называются маршрутизаторами (роутерами).
При этом IP работает по принципу «сделаю, что смогу» (best effort) и ничего не гарантирует:
- пакет может потеряться — например, если маршрутизатор перегружен;
- пакеты могут прийти не в том порядке, в каком были отправлены;
- пакет может прийти дважды или с опозданием.
Это не недостаток, а осознанное решение: сеть остаётся простой и быстрой, а надёжность при необходимости добавляет уровень выше — протокол TCP.
Вы бросаете открытку в ящик и надеетесь, что она дойдёт. Уведомления о вручении нет, и если вы отправили десять открыток, прийти они могут в любом порядке. Обычно всё доходит — но гарантий никто не давал.
3.2Адрес IPv4, маска и особые диапазоны
Адрес IPv4 — это 32 бита, которые записывают четырьмя числами от 0 до 255 через точку:
192.168.1.25. Всего таких адресов около 4,3 миллиарда — меньше, чем устройств в мире, и к этой проблеме мы ещё вернёмся.
Адрес состоит из двух частей: номера сети и номера устройства в ней. Где проходит граница, показывает маска. Чаще её записывают коротко, через косую черту (запись CIDR): 192.168.1.25/24 означает, что первые 24 бита — это сеть, а оставшиеся 8 — устройство.
| Запись | Маска | Адресов в сети | Где встречается |
|---|---|---|---|
/8 |
255.0.0.0 | около 16,7 млн | Очень крупные сети |
/16 |
255.255.0.0 | 65 536 | Сеть большой организации |
/24 |
255.255.255.0 | 256 | Типичная домашняя или офисная сеть |
/32 |
255.255.255.255 | 1 | Один конкретный адрес |
По маске устройство решает простой вопрос: получатель в моей сети (тогда отправляю ему напрямую) или в чужой (тогда отдаю роутеру).
Адреса с особым смыслом
| Диапазон | Назначение |
|---|---|
10.0.0.0/8 |
Частные адреса. Используются внутри домашних и рабочих сетей. В |
172.16.0.0/12 |
интернете не маршрутизируются, поэтому одни и те же адреса есть в |
192.168.0.0/16 |
миллионах сетей одновременно. |
127.0.0.0/8 |
Локальная петля (localhost). Адрес 127.0.0.1 всегда означает «этот самый компьютер». |
169.254.0.0/16 |
Автоматический адрес. Устройство назначает его себе само, если не смогло получить настройки от сети. Обычно это признак неполадки. |
100.64.0.0/10 |
Адреса операторского NAT. Провайдеры выдают их абонентам, когда на всех не хватает публичных адресов. |
3.3Что лежит в заголовке IPv4
Заголовок IPv4 занимает от 20 байт. Знать его наизусть не нужно, но несколько полей объясняют почти всё поведение протокола:
| Поле | Зачем нужно |
|---|---|
| Адрес отправителя | Откуда и куда идёт пакет. По адресу получателя маршрутизаторы выбирают |
| Адрес получателя | направление, по адресу отправителя возвращается ответ. |
| TTL (время жизни) | Счётчик, который каждый маршрутизатор уменьшает на единицу. Дошёл до нуля — пакет уничтожается. Это защита от бесконечного блуждания по кругу. |
| Протокол | Что лежит внутри: 6 — TCP, 17 — UDP, 1 — ICMP. По этому числу получатель понимает, кому передать содержимое. |
| Поле | Зачем нужно |
| Общая длина | Размер пакета вместе с заголовком, максимум 65 535 байт. |
| Идентификатор, флаги, | Позволяют разрезать слишком большой пакет на фрагменты и собрать |
| смещение фрагмента | обратно. Флаг DF («не фрагментировать») запрещает разрезание. |
| Контрольная сумма | Проверка, что сам заголовок не исказился в пути. Данные она не защищает. |
| DSCP / ECN | Пометки приоритета трафика и сигнал о перегрузке сети. |
3.4Маршрутизация: как пакет находит дорогу
Ни один маршрутизатор не знает весь путь целиком. Каждый знает только одно: в какую сторону передать пакет дальше. Для этого у него есть таблица маршрутов — список вида «пакеты для такой- то сети отправляй туда-то». Если подходящей строки нет, пакет уходит на маршрут по умолчанию.
Каждая передача от одного маршрутизатора к другому называется хопом (hop — «прыжок»). До сервера в соседнем городе обычно 5–10 хопов, до другого континента — 15–25.
Откуда маршрутизаторы знают, где какая сеть? Крупные сети — провайдеры, дата-центры, большие компании — называются автономными системами. Они сообщают друг другу, какие адреса через них доступны, по протоколу BGP. Из этих объявлений и складывается карта всего интернета.
На перекрёстке нет карты всей страны — только указатель «Казань→ направо». Вы едете от
перекрёстка к перекрёстку, и на каждом вам подсказывают лишь следующий поворот. Так же и пакет: его путь никто не планирует заранее, он складывается из локальных решений.
3.5NAT: один адрес на всю квартиру
Адресов IPv4 на всех не хватает, поэтому дома у вас один публичный адрес от провайдера, а у всех устройств —частные (вида 192.168.x.x). Подменой занимается роутер, и называется это NAT (Network Address Translation).
1.Ноутбук отправляет пакет с частного адреса 192.168.1.25, порт 51000.
2.Роутер заменяет адрес отправителя на свой публичный, например 198.51.100.7, порт 40001, и
запоминает это соответствие в таблице.
3.Сервер отвечает на 198.51.100.7:40001.
4.Роутер находит запись в таблице и пересылает ответ ноутбуку.
Плюс: снаружи нельзя просто так подключиться к устройству в домашней сети — в таблице роутера нет записи для такого соединения. Минус: по той же причине трудно принимать входящие подключения (свой сервер, некоторые игры, звонки). Для этого на роутере настраивают «проброс портов» или используют серверы-посредники.
3.6IPv6: адресов хватит всем
Свободные адреса IPv4 закончились ещё в 2010-х. Настоящее решение проблемы —IPv6 с адресами
длиной 128 бит. Их настолько много, что уникальный адрес можно выдать каждому устройству на планете, и NAT становится не нужен.
Адрес IPv6 записывают восемью группами шестнадцатеричных цифр через двоеточие:
2001:0db8:0000:0000:0000:0000:0000:0001. Ведущие нули в группе можно опускать, а одну последовательность нулевых групп — заменять на::, так что тот же адрес выглядит как
2001:db8::1.
| Что сравниваем | IPv4 | IPv6 |
|---|---|---|
| Длина адреса | 32 бита, около 4,3 млрд адресов | 128 бит, практически неисчерпаемо |
| Заголовок | От 20 байт, переменной длины | Ровно 40 байт, проще для обработки |
| Настройка адреса | Вручную или через DHCP | Устройство может составить адрес само (SLAAC) или получить через DHCPv6 |
| Фрагментация | Может делать любой | Только сам отправитель маршрутизатор |
| Поиск соседей | ARP | NDP (работает поверх ICMPv6) |
| Локальная петля | 127.0.0.1 |
::1 |
IPv4 и IPv6 несовместимы напрямую, поэтому сейчас они работают параллельно: это называют двойным стеком (dual stack). У устройства есть оба адреса, и оно выбирает тот протокол, по которому сайт отвечает быстрее.
3.7ICMP: служба сообщений о неполадках
Раз IP ничего не гарантирует, нужен способ хотя бы сообщить отправителю, что что-то пошло не так. Для этого есть ICMP (Internet Control Message Protocol) — служебный протокол, который работает рядом с IP.
| Сообщение | Что означает |
|---|---|
| Эхо-запрос и эхо-ответ | «Ты на связи?» — «Да». На этой паре построена команда ping. |
| Адресат недостижим | Пакет некуда доставить: нет маршрута, закрыт порт или сеть запрещает доступ. |
| Время жизни истекло | TTL дошёл до нуля, и пакет уничтожен. |
| Требуется фрагментация | Пакет слишком велик для следующего участка, а разрезать его запрещено. По этому сообщению отправитель подбирает подходящий размер. |
Команда ping измеряет, отвечает ли узел и сколько миллисекунд идёт ответ. Команда traceroute (в Windows — tracert) показывает весь путь: она отправляет пакеты с TTL 1, 2, 3 и так далее, и каждый следующий маршрутизатор, уничтожив пакет, выдаёт себя сообщением «время жизни истекло».
- IP отвечает только за адреса и за путь от сети к сети. Он не знает о программах, не следит за порядком и не исправляет потери. Всё это — работа следующего уровня.