IP и маршрутизация

Предпосылки: Ethernet и коммутация (MAC-адрес, кадр, коммутатор).

Ethernet и коммутация | DHCP

Коммутатор связывает устройства внутри одной сети, используя MAC-адреса. Но MAC — это серийный номер, прошитый на заводе. По нему невозможно определить, в какой сети устройство находится. Коммутатор не может хранить адреса миллиардов устройств в мире. Нужна адресация, которая отражает структуру сети и позволяет иерархически искать путь к получателю.

IP-адрес: адрес, отражающий местоположение

IP (Internet Protocol — межсетевой протокол, от “inter” — между, “net” — сеть) решает именно эту задачу. IP-адрес версии 4 выглядит так: 192.168.1.25 — четыре числа от 0 до 255, разделённые точками. Каждое число — один байт. Итого 4 байта = 32 бита.

Ключевое отличие от MAC: MAC-адрес прошит в железо и не меняется, IP-адрес назначается и может меняться в зависимости от того, к какой сети подключено устройство. IP-адрес отражает, где устройство находится в структуре сетей, а не что это за устройство.

Сетевая и хостовая части

IP-адрес состоит из двух частей. Сетевая часть (network part) идентифицирует сеть. Хостовая часть (host part) идентифицирует устройство внутри этой сети. Хост (host — “узел”) — любое устройство с IP-адресом.

Для адреса 192.168.1.25 с маской /24: 192.168.1 — сетевая часть, 25 — хостовая.

Маска подсети

Маска подсети (subnet mask) определяет границу между сетевой и хостовой частями. Формат: 255.255.255.0 или /24. В битах 255.255.255.0 выглядит как 11111111.11111111.11111111.00000000 — где единицы, там сетевая часть, где нули — хостовая. Запись /24 означает “первые 24 бита — сетевая часть”.

Маска позволяет быстро определить, находится ли другой адрес в той же сети:

192.168.1.25/24  -->  192.168.1.100   Сеть совпадает: 192.168.1.x -- отправить напрямую
192.168.1.25/24  -->  192.168.2.50    Сеть не совпадает: 192.168.1.x vs 192.168.2.x -- нужен роутер

Роутер: мост между сетями

Роутер (router, от “route” — маршрут) — устройство, соединяющее разные сети. Он подключён к нескольким сетям одновременно: у него несколько сетевых интерфейсов, каждый с IP-адресом в своей сети. Например: интерфейс 1 — 192.168.1.1 (сеть A), интерфейс 2 — 192.168.2.1 (сеть B), интерфейс 3 — 10.0.0.1 (сеть C, интернет).

Когда роутер получает пакет, он смотрит на IP-адрес получателя и по таблице маршрутизации (routing table) решает, в какой интерфейс отправить дальше.

Коммутатор работает с MAC-адресами внутри одной сети. Роутер работает с IP-адресами между сетями.

Пакет

На уровне IP данные упаковываются в пакеты — структуру с IP-заголовком:

+-------------+------------+-------------+---------------+
| Заголовок   | IP-адрес   | IP-адрес    | Данные        |
| (версия,    | отправителя| получателя  | (payload)     |
| TTL, etc.)  | (4 байта)  | (4 байта)   |               |
+-------------+------------+-------------+---------------+

Инкапсуляция: два уровня адресации

IP-пакет помещается внутрь Ethernet-кадра как payload — это инкапсуляция (encapsulation):

Ethernet-кадр:
+-------------+-------------+-------------------------------+---------+
| MAC-адрес   | MAC-адрес   | IP-пакет                      | CRC     |
| получателя  | отправителя | (целиком, как данные кадра)   |         |
+-------------+-------------+-------------------------------+---------+

Два уровня адресов решают разные задачи. IP-адрес — куда данные должны попасть в конечном счёте. MAC-адрес — какому устройству передать прямо сейчас (следующий хоп).

Шлюз по умолчанию и ARP

Шлюз по умолчанию (default gateway) — IP-адрес роутера, которому отправляется всё, что не предназначено для локальной сети. “Gateway” — “ворота” из локальной сети во внешний мир.

Базовые сетевые настройки любого устройства: IP-адрес (например, 192.168.1.25), маска подсети (255.255.255.0) и шлюз по умолчанию (192.168.1.1).

Но чтобы отправить кадр роутеру, нужно знать его MAC-адрес. IP-адрес шлюза известен, а MAC — нет. Эту задачу решает ARP (Address Resolution Protocol — протокол разрешения адресов). Компьютер отправляет широковещательный кадр на MAC FF:FF:FF:FF:FF:FF (все устройства в сети получат) с вопросом: “У кого IP 192.168.1.1? Ответьте свой MAC”. Роутер отвечает своим MAC-адресом. Результат кешируется в ARP-таблице.

Путь пакета через интернет

Компьютер 192.168.1.25 отправляет данные серверу 142.250.74.46 (Google). Маска /24 говорит, что 142.250.74.46 — в другой сети, значит пакет идёт на шлюз по умолчанию.

Формируется IP-пакет: IP отправителя 192.168.1.25, IP получателя 142.250.74.46. Через ARP определяется MAC роутера. Создаётся Ethernet-кадр: MAC отправителя — свой, MAC получателя — роутера, внутри — IP-пакет.

Роутер принимает кадр, извлекает IP-пакет, смотрит в таблицу маршрутизации, определяет следующий хоп и создаёт новый кадр с новыми MAC-адресами, но тем же IP-пакетом внутри. Цепочка из 10–20 роутеров повторяет этот процесс, пока последний роутер не доставит кадр серверу.

Ключевое наблюдение: IP-адреса не меняются на протяжении всего пути. MAC-адреса меняются на каждом хопе.

TTL: защита от петель

При неправильной маршрутизации пакет может ходить по кругу бесконечно. TTL (Time To Live) — счётчик переходов, несмотря на название “время жизни”. При создании пакета TTL устанавливается в 64 или 128. Каждый роутер уменьшает TTL на 1. Когда TTL достигает 0, пакет уничтожается.

IP решает адресацию и маршрутизацию между сетями. Но IP-адрес идентифицирует машину, а на ней работает множество приложений — браузер, почта, мессенджер. Как понять, какому приложению предназначены данные? Эту задачу решает транспортный уровень (UDP и TCP).


Ethernet и коммутация | DHCP