Когда ваш сервис отправляет HTTP-запрос соседнему сервису, между «дёрнул метод» и «получил ответ» происходит десяток вещей: имя превращается в адрес, устанавливается соединение, данные шифруются, режутся на пакеты, летят через кучу промежуточных узлов и собираются обратно. Держать всё это в голове одной кашей невозможно. Поэтому сеть придумали описывать слоями — каждый слой отвечает за свою задачу и не лезет в чужую.

Есть две такие карты: теоретическая модель OSI (семь слоёв) и практическая модель TCP/IP (четыре слоя), по которой реально работает интернет. Разберёмся с обеими — и дальше вся сеть будет вставать в понятную картину, а не выглядеть магией.

Зачем вообще слои

Идея простая: разбить сложную задачу «передать данные с одной машины на другую» на независимые уровни. Верхний слой не знает и не хочет знать, как работает нижний — он просто пользуется его услугами.

Аналогия — отправка посылки. Вы кладёте вещь в коробку и пишете адрес (это ваша задача). Как коробка доедет — на грузовике, самолёте или велосипеде — вас не волнует, этим занимается служба доставки. А как самолёт держится в воздухе — не волнует уже службу доставки. Каждый уровень доверяет нижнему делать свою работу.

В сети то же самое: ваш код работает с HTTP и JSON, не думая, как байты бегут по проводу. Благодаря этому можно поменять Wi-Fi на кабель, а сервис даже не заметит — сменился только самый нижний слой.

Модель OSI: семь слоёв

OSI (Open Systems Interconnection) — это учебная модель из семи уровней. На практике по ней ничего не построено напрямую, но её знают все, потому что это общий язык: когда инженер говорит «проблема на седьмом уровне» или «это L4-балансировщик», он имеет в виду именно слои OSI.

Сверху вниз:

  1. Прикладной (Application) — то, с чем работает ваш код: HTTP, gRPC, SMTP, DNS. Здесь живут запросы и ответы, понятные приложению.
  2. Представления (Presentation) — форматы и шифрование: TLS, кодировки, сжатие. Превращает данные приложения в поток байтов и обратно.
  3. Сеансовый (Session) — установка и поддержание «диалога» между сторонами. На практике почти растворён в соседних слоях.
  4. Транспортный (Transport) — доставка между процессами: TCP и UDP, порты. Отвечает за то, чтобы данные дошли до нужного сервиса на машине и (для TCP) дошли целиком и по порядку.
  5. Сетевой (Network) — адресация и маршрутизация между машинами: IP. Решает, каким путём пакет доберётся от отправителя к получателю через промежуточные узлы.
  6. Канальный (Data Link) — передача внутри одного участка сети: Ethernet, MAC-адреса, Wi-Fi.
  7. Физический (Physical) — собственно провода, радиоволны, оптика: как нули и единицы становятся сигналом.

Запоминать все семь наизусть не нужно. Практически важны четыре: прикладной (ваш HTTP), транспортный (TCP/UDP и порты), сетевой (IP-адреса) и — когда доходит до безопасности — слой с TLS.

Модель TCP/IP: четыре слоя

TCP/IP — это то, по чему интернет работает на самом деле. Она проще и группирует те же задачи в четыре слоя:

  • Прикладной (Application) — HTTP, DNS, gRPC. Сюда же по факту относят и TLS. Это слои 5–7 из OSI, слитые вместе.
  • Транспортный (Transport) — TCP и UDP. Ровно четвёртый слой OSI.
  • Межсетевой (Internet) — IP. Третий слой OSI.
  • Канальный (Link) — Ethernet, Wi-Fi, драйверы сетевой карты. Слои 1–2 OSI вместе.

Когда говорят «стек TCP/IP», имеют в виду именно эту четвёрку. Соответствие с OSI держат в голове только чтобы понимать чужой жаргон вроде «L7-роутинг».

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

Самое полезное для интуиции — понять, что происходит с вашими данными по дороге вниз. Каждый слой заворачивает данные верхнего в свой «конверт», добавляя свой заголовок. Это называется инкапсуляцией.

Возьмём HTTP-запрос от вашего сервиса:

  1. Прикладной: формируется HTTP-запрос — строка GET /orders/42, заголовки, тело.
  2. Транспортный: TCP заворачивает это в сегмент и приписывает порты (например, «от порта 51000 к порту 443») и номера для сборки по порядку.
  3. Сетевой: IP заворачивает сегмент в пакет и приписывает IP-адреса отправителя и получателя.
  4. Канальный: пакет заворачивается в кадр с MAC-адресами для передачи до ближайшего маршрутизатора.

На другой стороне всё разворачивается в обратном порядке: канальный слой снимает свой конверт и отдаёт наверх, транспортный — свой, и до вашего кода доезжает ровно тот HTTP-запрос, что был отправлен. Каждый слой на приёме общается как бы «напрямую» со своим слоем на отправке, не зная про остальные.

Где это применяется

Эта карта — не абстракция ради экзамена, а рабочий инструмент диагностики. Когда что-то сломалось, первый вопрос инженера: на каком слое проблема?

  • Сервис не находит другой сервис по имени — это прикладной слой, скорее всего DNS.
  • Соединение устанавливается, но обрывается или тормозит — смотрят транспортный слой, TCP и таймауты.
  • «No route to host», пакеты не доходят — сетевой слой, IP и маршрутизация.
  • Ошибка сертификата — слой TLS, HTTPS.
  • Приходит 500 или 404 — это уже прикладной слой, сам HTTP, сеть тут ни при чём.

Слои дают язык и порядок действий: не «всё сломалось», а «давайте проверим снизу вверх». Отсюда же жаргон балансировщиков — L4-балансировщик работает на транспортном слое (раскидывает TCP-соединения, не заглядывая внутрь), а L7-балансировщик понимает HTTP и умеет роутить по URL. Разницу разбираем в статье про балансировщики.

Где спотыкаются начинающие:

  • Пытаются зубрить семь слоёв OSI дословно. Практически нужны четыре; остальное — чтобы понимать чужой жаргон.
  • Путают TCP и IP. IP (сетевой слой) доставляет пакет до машины; TCP (транспортный) — до конкретного сервиса на ней и следит за целостностью. Это разные задачи на разных слоях.
  • Думают, что TLS — это отдельный протокол вместо HTTP. TLS — это слой шифрования под HTTP: сверху всё тот же HTTP, просто в защищённом конверте.
  • При отладке хватаются за верхний слой, хотя причина ниже: например, чинят код, когда на самом деле не резолвится имя.

Что учить дальше

Дальше логично спускаться по слоям, которые реально трогает backend. Сначала — адресация: IP-адреса, порты и NAT, чтобы понимать, как пакет находит машину и сервис. Затем транспорт: TCP и UDP. После — прикладной слой, с которым вы работаете каждый день: DNS и HTTP, а поверх него HTTPS и TLS. Всё это встаёт ровно на слои, которые мы только что разложили.