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 основан на модели «клиент-сервер». Клиент отправляет запрос на выполнение процедуры серверу, который обрабатывает его и возвращает результат. Взаимодействие происходит по следующей схеме:
- Идентификация процедуры: Каждая удалённая процедура идентифицируется тройкой чисел: номер программы (program number), номер версии (version number) и номер процедуры (procedure number). Номера программ распределяются централизованно (через IANA) или назначаются локально.
- Маршалинг и демаршалинг: Данные, передаваемые между клиентом и сервером, сериализуются (маршалинг) и десериализуются (демаршалинг) с помощью стандартного формата — External Data Representation (XDR). XDR определяет способ представления целых чисел, строк, массивов и других типов данных в машинно-независимом виде.
- Транспорт: Sun RPC может работать поверх различных транспортных протоколов, но чаще всего используется TCP или UDP. По умолчанию для простых запросов применяется UDP, для больших объёмов данных — TCP.
- Портмаппер (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 →