DCE/RPC
DCE/RPC (Distributed Computing Environment / Remote Procedure Calls) — это протокол удалённого вызова процедур, разработанный в рамках проекта Distributed Computing Environment (DCE) консорциума Open Software Foundation (OSF). Он предназначен для обеспечения взаимодействия между программами, работающими на разных узлах сети, позволяя одной программе вызывать функции, выполняемые на удалённом компьютере, так, как если бы они были локальными. DCE/RPC является одной из ранних и наиболее влиятельных реализаций концепции RPC, заложившей основы для многих современных протоколов, включая Microsoft RPC (MSRPC).
История
Разработка DCE/RPC началась в конце 1980-х годов в рамках проекта DCE, инициированного консорциумом OSF (ныне The Open Group). Целью проекта было создание универсальной платформы для построения распределённых вычислений, которая бы обеспечивала стандартизированные сервисы: удалённый вызов процедур, распределённую файловую систему, службу каталогов, службу времени и безопасности. Первая версия DCE/RPC была выпущена в 1992 году.
Протокол был реализован на основе работ компании Apollo Computer (позже приобретённой Hewlett-Packard) по системе Network Computing System (NCS), а также исследований университета Карнеги — Меллон. В 1990-х годах DCE/RPC стал стандартом де-факто для распределённых приложений в Unix-среде, особенно в системах от Hewlett-Packard, IBM и Digital Equipment Corporation (DEC). Однако с ростом популярности CORBA и, позднее, веб-сервисов, DCE/RPC утратил доминирующее положение.
Наибольшее влияние DCE/RPC оказал на экосистему Microsoft Windows. Корпорация Microsoft лицензировала DCE/RPC и адаптировала его для своей операционной системы, создав Microsoft RPC (MSRPC), который стал основой для многих компонентов Windows, включая службы Active Directory, Exchange Server и файловые службы (SMB). Впоследствии MSRPC был расширен и модифицирован, но его базовая архитектура осталась совместимой с DCE/RPC.
Архитектура и принцип работы
DCE/RPC реализует модель «клиент-сервер». Клиентское приложение вызывает локальную функцию-заглушку (stub), которая упаковывает параметры вызова в сообщение (маршалинг) и отправляет его через сеть серверу. Серверная заглушка распаковывает параметры (демаршалинг), вызывает фактическую реализацию функции и возвращает результат обратно клиенту. Этот процесс прозрачен для разработчика: вызов удалённой процедуры выглядит как обычный локальный вызов.
Основные компоненты
- IDL (Interface Definition Language) — язык описания интерфейсов, используемый для определения типов данных, параметров и сигнатур удалённых процедур. Файлы IDL компилируются в код заглушек на целевом языке программирования (обычно C).
- UUID (Universally Unique Identifier) — 128-битные уникальные идентификаторы, используемые для идентификации интерфейсов RPC, объектов и вызовов. UUID гарантируют уникальность в распределённой среде без централизованного управления.
- RPC Runtime — библиотека, обеспечивающая транспортировку сообщений, управление сессиями, аутентификацию и обработку ошибок.
- Endpoint Mapper — служба, работающая на сервере, которая позволяет клиентам динамически определять сетевой порт (endpoint) для конкретного интерфейса RPC. По умолчанию используется порт 135/TCP и 135/UDP.
Протоколы передачи
DCE/RPC может работать поверх различных транспортных протоколов. Наиболее распространённые:
- UDP — для быстрых, не требующих надёжности вызовов.
- TCP — для надёжной передачи данных.
- Named Pipes — для локальных вызовов в Windows.
- HTTP — для прохождения через брандмауэры (в реализации Microsoft).
Аутентификация и безопасность
DCE/RPC поддерживает несколько уровней аутентификации и шифрования, определяемых через механизм DCE Security Service. Взаимодействие может быть:
- None — без аутентификации.
- Connect — аутентификация только при установке соединения.
- Call — аутентификация при каждом вызове.
- Packet — аутентификация и проверка целостности каждого пакета.
- Integrity — аутентификация, целостность и защита от повторного воспроизведения.
- Privacy — полное шифрование всех данных.
Классификация и версии
DCE/RPC прошёл несколько версий, основные из которых:
- DCE 1.0 (1992) — базовая версия с поддержкой RPC, службы времени, каталогов и безопасности.
- DCE 1.1 (1994) — улучшенная поддержка многопоточности, расширенные возможности безопасности.
- DCE 1.2 (1997) — поддержка IPv6, улучшенная производительность.
В контексте Microsoft RPC (MSRPC) выделяют:
- MSRPC over SMB — используется для удалённого управления Windows (например, через службу Server Service).
- MSRPC over HTTP — применяется для Exchange Server и Outlook Anywhere.
- MSRPC over Named Pipes — для локальных вызовов.
Применение
DCE/RPC и его производные широко использовались в следующих областях:
- Корпоративные информационные системы — в 1990-х годах DCE/RPC был основой для многих распределённых приложений на платформах HP-UX, AIX и Tru64 UNIX.
- Сетевые службы Windows — MSRPC является фундаментом для таких служб, как Active Directory (через протокол LDAP), удалённое управление (через службы RPCSS, LSA, SAM), файловые службы (SMB) и службы печати.
- Системы управления базами данных — некоторые СУБД (например, ранние версии Oracle) использовали DCE/RPC для распределённых транзакций.
- Научные и инженерные расчёты — в средах, требующих высокой производительности и надёжности.
Критика и ограничения
Несмотря на свою значимость, DCE/RPC имеет ряд недостатков:
- Сложность реализации — протокол требует глубокого понимания распределённых систем и управления памятью.
- Проблемы с брандмауэрами — динамическое назначение портов (через Endpoint Mapper) затрудняет настройку сетевой безопасности. Для преодоления этого в Microsoft RPC была добавлена поддержка фиксированных портов и HTTP-туннелирования.
- Уязвимости безопасности — MSRPC исторически был источником многочисленных уязвимостей (например, червь Blaster в 2003 году эксплуатировал уязвимость в RPC DCOM). Это привело к необходимости постоянного обновления и патчинга.
- Закрытость и проприетарность — хотя DCE/RPC был открытым стандартом, его реализация Microsoft (MSRPC) является проприетарной и документирована не полностью, что создаёт трудности для сторонних разработчиков.
Интересные факты
- DCE/RPC стал основой для протокола DCOM (Distributed Component Object Model), который, в свою очередь, лёг в основу COM+ и .NET Remoting.
- Протокол используется в протоколе SMB (Server Message Block) для удалённого управления и аутентификации.
- В 2000-х годах была предпринята попытка создать открытую реализацию DCE/RPC для Linux (проект FreeDCE), но она не получила широкого распространения.
- DCE/RPC является одним из немногих протоколов, который поддерживает как синхронные, так и асинхронные вызовы.
Источники
- Open Group. «DCE 1.1: Remote Procedure Call». The Open Group Technical Standard, 1997.
- Microsoft Corporation. «Microsoft RPC Documentation». MSDN Library, 2005.
- Tanenbaum, A. S., Van Steen, M. «Distributed Systems: Principles and Paradigms». Prentice Hall, 2002.
- Coulouris, G., Dollimore, J., Kindberg, T. «Distributed Systems: Concepts and Design». Addison-Wesley, 2005.
- RFC 1831 (RPC: Remote Procedure Call Protocol Specification Version 2).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →