Когда ваш сервис отправляет HTTP-запрос соседнему сервису, между «дёрнул метод» и «получил ответ» происходит десяток вещей: имя превращается в адрес, устанавливается соединение, данные шифруются, режутся на пакеты, летят через кучу промежуточных узлов и собираются обратно. Держать всё это в голове одной кашей невозможно. Поэтому сеть придумали описывать слоями — каждый слой отвечает за свою задачу и не лезет в чужую.
Есть две такие карты: теоретическая модель OSI (семь слоёв) и практическая модель TCP/IP (четыре слоя), по которой реально работает интернет. Разберёмся с обеими — и дальше вся сеть будет вставать в понятную картину, а не выглядеть магией.
Зачем вообще слои
Идея простая: разбить сложную задачу «передать данные с одной машины на другую» на независимые уровни. Верхний слой не знает и не хочет знать, как работает нижний — он просто пользуется его услугами.
Аналогия — отправка посылки. Вы кладёте вещь в коробку и пишете адрес (это ваша задача). Как коробка доедет — на грузовике, самолёте или велосипеде — вас не волнует, этим занимается служба доставки. А как самолёт держится в воздухе — не волнует уже службу доставки. Каждый уровень доверяет нижнему делать свою работу.
В сети то же самое: ваш код работает с HTTP и JSON, не думая, как байты бегут по проводу. Благодаря этому можно поменять Wi-Fi на кабель, а сервис даже не заметит — сменился только самый нижний слой.
Модель OSI: семь слоёв
OSI (Open Systems Interconnection) — это учебная модель из семи уровней. На практике по ней ничего не построено напрямую, но её знают все, потому что это общий язык: когда инженер говорит «проблема на седьмом уровне» или «это L4-балансировщик», он имеет в виду именно слои OSI.
Сверху вниз:
- Прикладной (Application) — то, с чем работает ваш код: HTTP, gRPC, SMTP, DNS. Здесь живут запросы и ответы, понятные приложению.
- Представления (Presentation) — форматы и шифрование: TLS, кодировки, сжатие. Превращает данные приложения в поток байтов и обратно.
- Сеансовый (Session) — установка и поддержание «диалога» между сторонами. На практике почти растворён в соседних слоях.
- Транспортный (Transport) — доставка между процессами: TCP и UDP, порты. Отвечает за то, чтобы данные дошли до нужного сервиса на машине и (для TCP) дошли целиком и по порядку.
- Сетевой (Network) — адресация и маршрутизация между машинами: IP. Решает, каким путём пакет доберётся от отправителя к получателю через промежуточные узлы.
- Канальный (Data Link) — передача внутри одного участка сети: Ethernet, MAC-адреса, Wi-Fi.
- Физический (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-запрос от вашего сервиса:
- Прикладной: формируется HTTP-запрос — строка
GET /orders/42, заголовки, тело. - Транспортный: TCP заворачивает это в сегмент и приписывает порты (например, «от порта 51000 к порту 443») и номера для сборки по порядку.
- Сетевой: IP заворачивает сегмент в пакет и приписывает IP-адреса отправителя и получателя.
- Канальный: пакет заворачивается в кадр с 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. Всё это встаёт ровно на слои, которые мы только что разложили.