Сетевые протоколы и модель OSI

У нас есть понятие сетевого протокола. Вот скучное определение, но мы все знаем: да, есть разные протоколы HTTP, TCP, веб-сокеты, и они разные.
Протокол передачи данных — набор соглашений, которые определяют обмен данными между различными программами. Эти соглашения задают единообразный способ передачи сообщений и обработки ошибок.
Сетевая модель передачи данных (не углубляясь в её происхождение) показывает, что при любой передаче по сети одновременно задействуется несколько протоколов разного уровня абстракции.
Например, при отправке данных:
- Физический уровень — на нём информация передаётся в виде электрических или оптических сигналов («ноликов и единичек»).
- Транспортный уровень — здесь работают протоколы TCP и UDP. Они отвечают за передачу логических пакетов по сети, но всё ещё остаются достаточно низкоуровневыми.
- Прикладной уровень (седьмой уровень модели OSI) — на нём действуют протоколы, с которыми напрямую работают приложения: HTTP (разных версий), WebSockets и многие другие.
Таким образом, в каждый момент времени данные последовательно проходят через все эти уровни, и на каждом из них используется свой набор протоколов.
В дополнение к семи уровням модели OSI/стека TCP/IP выделяют так называемый «уровень 7+» (уровень над прикладным). На этом уровне находятся протоколы и технологии, которые работают поверх стандартных прикладных протоколов (например, HTTP) и предоставляют более высокоуровневые абстракции.
К «уровню 7+» можно отнести:
- Протоколы удалённого вызова процедур (RPC):
- JSON-RPC — обмен данными в формате JSON.
- gRPC — современный RPC-фреймворк от Google (работает поверх HTTP/2).
- SAP (собственный протокол SAP) — используется в экосистеме SAP для общения между компонентами.
- Протоколы запросов к данным:
- GraphQL — язык запросов к API, позволяющий клиенту точно указывать, какие данные нужны.
- Протоколы систем обмена сообщениями (message brokers) — располагаются ещё выше:
- AMQP, MQTT, STOMP и др. — протоколы для асинхронной передачи сообщений через брокеры (RabbitMQ, ActiveMQ, Kafka и т. п.).
Таким образом, на «уровне 7+» собираются все протоколы и технологии, которые либо надстраиваются над HTTP, либо работают поверх него, либо реализуют собственную логику обмена сообщениями на прикладном уровне и выше.
Понятие «транспорт»

В IT-среде есть сленговое понятие «транспорт». Оно не совпадает с формальным «транспортным уровнем» модели OSI, а используется в более широком смысле.
Простая аналогия: отправка письма в Австралию
- Письмо — у него есть свои правила: адрес отправителя, адрес получателя, марки, конверт и т. д. Это своего рода протокол верхнего уровня.
- Курьер / почтовое отделение — кладёт письмо в коробку. На коробке появляется дополнительная техническая информация. Это протокол уровня ниже.
- Коробки складывают в контейнер. Контейнер — ещё один уровень.
- Контейнер грузят на корабль, который перемещается по своим правилам. Корабль — это уже протокол сетевого уровня (в терминах аналогии).
Так что же такое «транспорт»?
Транспорт — это протокол или технология, которая находится на уровень ниже того протокола или технологии, о котором мы говорим сейчас.
Если зафиксировать любой уровень в этой «матрешке», транспортом для него будет всё, что находится под ним:
- Для письма транспортом является коробка.
- Для коробки транспортом является контейнер.
- Для контейнера транспортом является кораблик.
В IT этот термин применяется гибко:
- В контексте брокеров сообщений «транспортом» могут называть технологию, которая физически перемещает данные (например, TCP, HTTP или шину сообщений).
- Главное — транспорт всегда находится на более низком уровне абстракции по отношению к тому, что обсуждается в данный момент.
Итог: любая передача данных выстраивается как матрешка — каждый уровень «заворачивается» в транспорт следующего, более низкого уровня.
Как это выглядит на практике (матрешка протоколов)

Рассмотрим, как это работает на практике, на примере обычного HTTP-запроса.
Прикладной уровень (уровень 7 модели OSI)
HTTP-запрос состоит из заголовков (headers) и тела (body) (например, в POST-запросе). Это исходное сообщение — оно находится на прикладном (седьмом) уровне.
Упаковка («заворачивание в матрёшку»)
Чтобы отправить это сообщение по сети, оно последовательно «заворачивается» в протоколы нижележащих уровней:
- Транспортный уровень (уровень 4) — добавляются заголовки TCP (или UDP). Теперь исходное сообщение находится внутри TCP-сегмента.
- Сетевой уровень (уровень 3) — добавляются заголовки IP (адреса отправителя и получателя).
- Канальный уровень (уровень 2) — добавляются заголовки канального протокола (например, Ethernet).
- Физический уровень (уровень 1) — данные превращаются в сигналы (биты), которые передаются по среде передачи.
Таким образом, исходный HTTP-запрос оказывается в центре многослойной «матрешки».
Передача через промежуточные узлы
Когда данные путешествуют по сети, они проходят через промежуточные узлы (маршрутизаторы, коммутаторы и т. д.). Каждый такой узел:
- «Разворачивает» матрешку ровно настолько, чтобы прочитать служебную информацию, необходимую для дальнейшей передачи.
- Например, маршрутизатор смотрит IP-адрес назначения (уровень 3), но не разворачивает HTTP или TCP — ему это не нужно.
- Затем снова «заворачивает» данные и отправляет дальше.
Полная распаковка — только у конечного получателя
Полная «распаковка» всей матрешки происходит только на стороне конечного получателя (сервера или клиента, в зависимости от направления):
- Снимаются заголовки канального, сетевого и транспортного уровней.
- Извлекается исходное HTTP-сообщение.
- Затем оно разбирается на заголовки и тело (если это запрос — обрабатывается, если ответ — передаётся приложению).
Суть иерархии протоколов
Именно в этом и заключается суть иерархической модели OSI (и стека TCP/IP):
- Каждый уровень выполняет свою задачу и «общается» только с соседними уровнями.
- Нижележащие уровни служат транспортом для вышележащих.
- Промежуточные узлы работают только с теми уровнями, которые нужны для маршрутизации, и не вникают в содержимое вышележащих протоколов.
Это обеспечивает модульность, гибкость и возможность замены протоколов на любом из уровней без изменения остальных.
Транспортный уровень (формальный) vs сленговое «транспорт»
Существует два разных понятия, которые важно не путать:
-
Транспортный уровень (формальный, модель OSI)
- Это конкретный уровень 4 модели OSI/стека TCP/IP.
- На нём работают строго определённые протоколы: TCP и UDP.
- Их задача — обеспечить передачу данных между приложениями на разных узлах сети.
-
Сленговое понятие «транспорт» (в IT-среде)
- Говоря «транспорт» в неформальном контексте, имеют в виду технологию или протокол, который находится уровнем ниже того, о котором сейчас идёт речь.
- Это может быть любой протокол нижележащего уровня, не обязательно четвёртый.
Иллюстрация на реальных примерах:
| Что обсуждаем | Транспортом для него является |
|---|---|
| GraphQL | HTTP (прикладной уровень) |
| HTTP | TCP (транспортный уровень, уровень 4) |
| TCP | IP (сетевой уровень, уровень 3) |
| IP | Ethernet (канальный уровень, уровень 2) |
И так далее — цепочка «матрешки» продолжается вниз.
В рамках дальнейшего обсуждения мы будем в основном оперировать следующими уровнями (в терминах модели OSI):
- Уровень 4 (транспортный) — TCP, UDP.
- Уровень 7 (прикладной) — HTTP, WebSocket и другие протоколы, с которыми напрямую работают приложения.
- Уровень L7+ (над прикладным) — GraphQL, gRPC, JSON-RPC, протоколы брокеров сообщений и т. д.