Открыть сервис

Sun RPC

Sun RPC — это протокол удалённого вызова процедур (Remote Procedure Call, RPC), разработанный компанией Sun Microsystems в 1980-х годах для операционной системы SunOS. Он позволяет программам вызывать функции (процедуры) на удалённых компьютерах в сети так же, как если бы они вызывались локально, скрывая детали сетевого взаимодействия. Sun RPC стал основой для ряда ключевых сетевых протоколов, включая NFS (Network File System) и NIS (Network Information Service), и широко использовался в Unix-системах.

История

Протокол Sun RPC был создан в середине 1980-х годов в рамках проекта Sun Microsystems по разработке распределённой файловой системы NFS. Первая версия протокола была реализована в SunOS 2.0 (1985 год). Разработчики стремились создать простой и эффективный механизм для взаимодействия между процессами на разных машинах, который бы не зависел от конкретной сетевой архитектуры.

В 1988 году протокол был описан в документе RFC 1057 (первая версия) и RFC 1050 (вторая версия). Позднее, в 1995 году, вышла обновлённая спецификация RFC 1831, описывающая версию 2 протокола. Sun RPC стал стандартом де-факто для Unix-систем, особенно в среде Solaris, Linux и BSD.

С развитием веб-технологий и появлением более современных протоколов (например, XML-RPC, SOAP, gRPC) популярность Sun RPC снизилась, однако он продолжает использоваться в унаследованных системах и в некоторых специализированных областях, таких как встроенные системы и высокопроизводительные вычисления.

Архитектура и принцип работы

Sun RPC основан на модели «клиент-сервер». Клиент отправляет запрос на выполнение процедуры серверу, который обрабатывает его и возвращает результат. Взаимодействие происходит по следующей схеме:

  1. Идентификация процедуры: Каждая удалённая процедура идентифицируется тройкой чисел: номер программы (program number), номер версии (version number) и номер процедуры (procedure number). Номера программ распределяются централизованно (через IANA) или назначаются локально.
  2. Маршалинг и демаршалинг: Данные, передаваемые между клиентом и сервером, сериализуются (маршалинг) и десериализуются (демаршалинг) с помощью стандартного формата — External Data Representation (XDR). XDR определяет способ представления целых чисел, строк, массивов и других типов данных в машинно-независимом виде.
  3. Транспорт: Sun RPC может работать поверх различных транспортных протоколов, но чаще всего используется TCP или UDP. По умолчанию для простых запросов применяется UDP, для больших объёмов данных — TCP.
  4. Портмаппер (portmapper): Для обнаружения сервера используется специальная служба — портмаппер (rpcbind). Она работает на фиксированном порту (111 для TCP и UDP). Клиент сначала обращается к портмапперу, чтобы узнать, на каком порту работает нужная программа RPC, а затем отправляет запрос непосредственно на этот порт.

Формат сообщения

Каждое сообщение Sun RPC состоит из заголовка и тела. Заголовок включает:

  • Тип сообщения: запрос (call) или ответ (reply).
  • Идентификатор транзакции (XID): уникальный номер, позволяющий сопоставлять запросы и ответы.
  • Номер программы, версии и процедуры.
  • Параметры аутентификации (опционально): могут использоваться протоколы AUTH_NONE (без аутентификации), AUTH_UNIX (идентификация по имени пользователя и группе), AUTH_DES (шифрование с помощью DES) и другие.

Версии и спецификации

Существует две основные версии протокола Sun RPC:

  • Версия 1 (RFC 1057, 1988 год): базовая реализация, поддерживающая только UDP и простые типы данных XDR.
  • Версия 2 (RFC 1831, 1995 год): расширенная версия, добавляющая поддержку TCP, улучшенную обработку ошибок, а также возможность использования нескольких транспортных протоколов одновременно.

Применение

Sun RPC лёг в основу нескольких ключевых сетевых служб:

  • NFS (Network File System): протокол для удалённого доступа к файловым системам. NFS использует Sun RPC для вызова операций чтения, записи, создания и удаления файлов на удалённом сервере.
  • NIS (Network Information Service): служба для централизованного управления пользователями, группами и другими системными данными (известна также как Yellow Pages). NIS также основан на Sun RPC.
  • RPC-сервисы в Unix: многие системные утилиты (например, rwall, rwho, rusers) используют Sun RPC для обмена информацией между машинами.
  • Встраиваемые системы: в некоторых промышленных и встраиваемых системах Sun RPC применяется для управления устройствами и сбора данных.

Критика и недостатки

Несмотря на широкое распространение, Sun RPC имеет ряд недостатков:

  • Безопасность: встроенные механизмы аутентификации (AUTH_UNIX) слабы и легко поддаются подделке. AUTH_DES использует устаревший алгоритм DES. Современные реализации часто требуют дополнительных средств защиты, таких как Kerberos или SSH-туннелирование.
  • Сложность отладки: из-за использования XDR и динамического назначения портов через портмаппер отладка сетевых проблем может быть затруднена.
  • Уязвимости портмаппера: служба rpcbind исторически была источником уязвимостей (например, переполнение буфера), что привело к рекомендациям по её блокировке на межсетевых экранах.
  • Отсутствие поддержки современных протоколов: Sun RPC не поддерживает HTTP/2, WebSocket, потоковую передачу и другие современные технологии, что ограничивает его применение в веб-среде.

Современное состояние

В настоящее время Sun RPC считается устаревшим протоколом. В большинстве современных Unix-систем (Linux, FreeBSD, Solaris) он поддерживается для обратной совместимости, но не рекомендуется для новых разработок. Вместо него используются более безопасные и гибкие протоколы, такие как:

  • gRPC: современный RPC-фреймворк от Google, использующий Protocol Buffers и HTTP/2.
  • JSON-RPC и XML-RPC: простые текстовые протоколы на основе JSON и XML.
  • REST API: архитектурный стиль, основанный на HTTP, который часто заменяет RPC в веб-приложениях.

Тем не менее, Sun RPC остаётся важным историческим протоколом, оказавшим значительное влияние на развитие распределённых вычислений и сетевых технологий.

Источники

  • RFC 1057 — RPC: Remote Procedure Call Protocol Specification Version 1
  • RFC 1831 — RPC: Remote Procedure Call Protocol Specification Version 2
  • RFC 1832 — XDR: External Data Representation Standard
  • RFC 5531 — Remote Procedure Call (RPC) Protocol Specification (обновлённая версия)
  • Sun Microsystems. «Network File System (NFS) Protocol Specification» (1989)
  • Stevens, W. Richard. «UNIX Network Programming, Volume 1: Networking APIs — Sockets and XTI» (1998)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →