Entfernte Funktionsaufrufe (RPC): Unterschied zwischen den Versionen

Aus dev.kaibel.net
Zur Navigation springen Zur Suche springen
Die Seite wurde neu angelegt: „{{DISPLAYTITLE:Entfernte Funktionsaufrufe (RPC)}} {{Infobox Software | Name = Entfernte Funktionsaufrufe (RPC) | Entwickler = Verschiedene | Erscheinungsjahr = ab 1980er | Typ = Kommunikationsprotokoll | Standard = ONC RPC, DCE/RPC }} == Überblick == '''Entfernte Funktionsaufrufe (Remote Procedure Calls, RPC)''' sind ein Konzept, bei dem ein Programm auf einem Rechner eine Prozedur (Funktion) auf einem entfernten Rechn…“
 
 
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
{{DISPLAYTITLE:Entfernte Funktionsaufrufe (RPC)}}
{{DISPLAYTITLE:Entfernte Funktionsaufrufe (RPC)}}
{{Infobox Software
{{Infobox Software
| Name = Entfernte Funktionsaufrufe (RPC)
| Name           = Entfernte Funktionsaufrufe (RPC)
| Entwickler = Verschiedene
| Entwickler     = Diverse
| Erscheinungsjahr = ab 1980er
| Erscheinungsjahr = 1984 (ONC RPC)
| Typ = Kommunikationsprotokoll
| Kategorie      = Netzwerktechnologie
| Standard = [[Open Network Computing RPC|ONC RPC]], [[DCE/RPC]]
| Standard       = [[ONC RPC]], [[DCE/RPC]], [[gRPC]]
}}
}}


== Überblick ==
== Einführung ==
'''Entfernte Funktionsaufrufe (Remote Procedure Calls, RPC)''' sind ein Konzept, bei dem ein Programm auf einem Rechner eine Prozedur (Funktion) auf einem entfernten Rechner aufruft, als handele es sich um eine lokale Funktion. RPC abstrahiert die Details der Netzwerkkommunikation und erleichtert so verteilte Systeme und Client-Server-Architekturen.
'''Entfernte Funktionsaufrufe (Remote Procedure Calls, RPC)''' sind ein Mechanismus, der es Programmen ermöglicht, Funktionen oder Prozeduren auszuführen, die sich auf einem entfernten System befinden, als ob sie lokal verfügbar wären. RPC abstrahiert die Details des Netzwerkprotokolls und erlaubt Entwicklern, sich auf die Funktionalität zu konzentrieren statt auf die Übertragungsschicht.


== Funktionsprinzip ==
RPC ist ein zentrales Konzept verteilter Systeme und findet Anwendung in Betriebssystemdiensten, Microservices und Cloud-Architekturen.
RPC ermöglicht es, dass der aufrufende Prozess („Client“) und der ausführende Prozess („Server“) transparent über ein Netzwerk kommunizieren. Der Client ruft eine Prozedur auf, übergibt Parameter, und erhält Rückgabewerte, ohne direkt mit Netzwerk-Sockets oder Protokollen umgehen zu müssen.


Typischer Ablauf:
== Grundprinzip ==
# Der Client ruft eine lokale Stub-Funktion auf.
Bei einem RPC ruft ein Client eine Funktion auf, die auf einem Server implementiert ist. Der Ablauf:
# Der Stub serialisiert die Parameter („Marshalling“) und sendet sie an den Server.
# Der Client ruft eine Stub-Funktion auf (lokales Platzhalterobjekt).
# Der Serverstub empfängt die Daten, deserialisiert sie und ruft die tatsächliche Serverfunktion auf.
# Die Stub-Funktion serialisiert Parameter (Marshalling).
# Das Ergebnis wird zurückserialisiert („Unmarshalling“) und an den Client übertragen.
# Die Daten werden über ein Transportprotokoll (z. B. [[TCP]] oder [[UDP]]) gesendet.
# Der Server-Stub deserialisiert die Daten und ruft die eigentliche Serverfunktion auf.
# Das Ergebnis wird zurückgesendet und im Client-Stub deserialisiert.


== ONC RPC-Standard ==
== Der ONC RPC-Standard ==
'''ONC RPC (Open Network Computing Remote Procedure Call)''' ist ein Standard, der ursprünglich von Sun Microsystems entwickelt wurde. Er ist im [[RFC 5531]] spezifiziert und basiert auf UDP oder TCP. ONC RPC wird in UNIX-Umgebungen häufig verwendet, z. B. im [[Network File System (NFS)]].
'''Open Network Computing Remote Procedure Call (ONC RPC)''' ist ein von Sun Microsystems entwickelter Standard, der erstmals in den 1980er-Jahren für das [[Network File System|NFS]] eingesetzt wurde. ONC RPC ist in [[RFC 5531]] definiert und gilt als einer der ältesten und am weitesten verbreiteten RPC-Standards.


Wichtige Merkmale von ONC RPC:
Merkmale von ONC RPC:
* Plattformunabhängigkeit durch einheitliche Datenrepräsentation
* Transportunabhängig (UDP oder TCP)
* Unterstützung mehrerer Transportschichten (UDP/TCP)
* Definiert in der Sprache '''RPC Language (RPCL)'''
* Nutzung von Portmapper-/rpcbind-Diensten zur Dienstzuordnung
* Standardisierte Datenrepräsentation über [[XDR]] (External Data Representation)
* Weit verbreitet in klassischen UNIX/Linux-Systemen
* Weite Unterstützung in UNIX-Derivaten (Linux, BSD, Solaris)


== Schnittstellendefinition ==
== Schnittstellendefinition ==
Bei RPC werden Schnittstellen in einer '''Schnittstellenbeschreibungssprache (IDL)''' definiert. 
RPC-Systeme nutzen Schnittstellendefinitionssprachen (IDLs), um Funktionen, Parameter und Datentypen unabhängig von der Implementierung zu beschreiben.   
* Bei ONC RPC wird die RPC Language (XDR/RPCGen) verwendet. 
Im Fall von ONC RPC:
* Der Entwickler beschreibt die Prozeduren, Parameter und Datentypen in einer .x-Datei.   
* Die IDL heißt '''RPC Language (RPCL)'''.
* Das Werkzeug '''rpcgen''' generiert aus dieser Datei automatisch Client- und Server-Stubs in C.
* Aus RPCL-Dateien generieren Tools automatisch Client- und Server-Stubs (z. B. `rpcgen`).
* Dies ermöglicht Plattform- und Sprachenunabhängigkeit.


Beispiel (vereinfachter Auszug):
Beispiel einer RPCL-Definition:
```c
<syntaxhighlight lang="c">
program ADD_PROG {
program MATH_PROG {
     version ADD_VERS {
     version MATH_VERS {
         int ADD(int, int) = 1;
         int ADD(int a, int b) = 1;
     } = 1;
     } = 1;
} = 0x23451111;
} = 0x20000001;
</syntaxhighlight>
 
== Datenrepräsentation ==
Ein Kernproblem verteilter Systeme ist die plattformunabhängige Darstellung von Daten. 
ONC RPC löst dies durch [[XDR]] (External Data Representation):
* Fest definierte Endianness (Big-Endian)
* Definiert Datentypen wie int, float, arrays, strings
* Stellt sicher, dass Daten auf unterschiedlichen Rechnerarchitekturen korrekt interpretiert werden
 
== Sicherheitsaspekte ==
RPC-Systeme müssen Authentifizierung, Autorisierung und Datenschutz gewährleisten. Bei ONC RPC existieren verschiedene Mechanismen:
* '''AUTH_NULL''': Keine Authentifizierung (Standard, unsicher)
* '''AUTH_SYS''': Überträgt UNIX-Benutzer-IDs
* '''AUTH_DES''' / '''AUTH_KERB''' (Kerberos): Sichere Authentifizierung via kryptografischer Verfahren
* RPC über sichere Transportprotokolle (z. B. [[TLS]]) ist möglich, aber im Standard nicht zwingend vorgeschrieben.
 
Empfohlene Sicherheitsmaßnahmen:
* Einsatz verschlüsselter Transportverbindungen (z. B. [[stunnel]] oder IPsec)
* Nutzung starker Authentifizierung (Kerberos)
* Firewalls und Zugriffskontrolllisten für RPC-Dienste
 
== Vergleich zu anderen RPC-Implementierungen ==
{| class="wikitable"
! Merkmal !! ONC RPC !! DCE/RPC !! gRPC
|-
| Transport || UDP/TCP || TCP/SMB || HTTP/2
|-
| Datenrepräsentation || XDR || NDR || Protocol Buffers
|-
| Authentifizierung || AUTH_SYS, AUTH_DES, AUTH_KERB || Kerberos integriert || TLS, OAuth2
|-
| Sprachunterstützung || C, C++ u. a. || C, C++, Java || Viele moderne Sprachen
|}
 
== Anwendungen ==
* [[Network File System (NFS)]]
* Verwaltungstools unter UNIX/Linux
* Interprozesskommunikation in Clustern
 
== Literatur und Standards ==
* RFC 5531 – ''RPC: Remote Procedure Call Protocol Specification Version 2''
* RFC 4506 – ''XDR: External Data Representation Standard''
* [[DCE/RPC]]
* [[gRPC]]
 
== Siehe auch ==
* [[Verteiltes System]]
* [[Stub (Softwareentwicklung)]]
* [[Marshalling (Informatik)]]
 
[[Kategorie:Netzwerkprotokoll]]
[[Kategorie:Middleware]]
[[Kategorie:Verteiltes Rechnen]]

Aktuelle Version vom 23. September 2025, 13:59 Uhr

Vorlage:Infobox Software

Einführung

Entfernte Funktionsaufrufe (Remote Procedure Calls, RPC) sind ein Mechanismus, der es Programmen ermöglicht, Funktionen oder Prozeduren auszuführen, die sich auf einem entfernten System befinden, als ob sie lokal verfügbar wären. RPC abstrahiert die Details des Netzwerkprotokolls und erlaubt Entwicklern, sich auf die Funktionalität zu konzentrieren statt auf die Übertragungsschicht.

RPC ist ein zentrales Konzept verteilter Systeme und findet Anwendung in Betriebssystemdiensten, Microservices und Cloud-Architekturen.

Grundprinzip

Bei einem RPC ruft ein Client eine Funktion auf, die auf einem Server implementiert ist. Der Ablauf:

  1. Der Client ruft eine Stub-Funktion auf (lokales Platzhalterobjekt).
  2. Die Stub-Funktion serialisiert Parameter (Marshalling).
  3. Die Daten werden über ein Transportprotokoll (z. B. TCP oder UDP) gesendet.
  4. Der Server-Stub deserialisiert die Daten und ruft die eigentliche Serverfunktion auf.
  5. Das Ergebnis wird zurückgesendet und im Client-Stub deserialisiert.

Der ONC RPC-Standard

Open Network Computing Remote Procedure Call (ONC RPC) ist ein von Sun Microsystems entwickelter Standard, der erstmals in den 1980er-Jahren für das NFS eingesetzt wurde. ONC RPC ist in RFC 5531 definiert und gilt als einer der ältesten und am weitesten verbreiteten RPC-Standards.

Merkmale von ONC RPC:

  • Transportunabhängig (UDP oder TCP)
  • Definiert in der Sprache RPC Language (RPCL)
  • Standardisierte Datenrepräsentation über XDR (External Data Representation)
  • Weite Unterstützung in UNIX-Derivaten (Linux, BSD, Solaris)

Schnittstellendefinition

RPC-Systeme nutzen Schnittstellendefinitionssprachen (IDLs), um Funktionen, Parameter und Datentypen unabhängig von der Implementierung zu beschreiben. Im Fall von ONC RPC:

  • Die IDL heißt RPC Language (RPCL).
  • Aus RPCL-Dateien generieren Tools automatisch Client- und Server-Stubs (z. B. `rpcgen`).
  • Dies ermöglicht Plattform- und Sprachenunabhängigkeit.

Beispiel einer RPCL-Definition:

program MATH_PROG {
    version MATH_VERS {
        int ADD(int a, int b) = 1;
    } = 1;
} = 0x20000001;

Datenrepräsentation

Ein Kernproblem verteilter Systeme ist die plattformunabhängige Darstellung von Daten. ONC RPC löst dies durch XDR (External Data Representation):

  • Fest definierte Endianness (Big-Endian)
  • Definiert Datentypen wie int, float, arrays, strings
  • Stellt sicher, dass Daten auf unterschiedlichen Rechnerarchitekturen korrekt interpretiert werden

Sicherheitsaspekte

RPC-Systeme müssen Authentifizierung, Autorisierung und Datenschutz gewährleisten. Bei ONC RPC existieren verschiedene Mechanismen:

  • AUTH_NULL: Keine Authentifizierung (Standard, unsicher)
  • AUTH_SYS: Überträgt UNIX-Benutzer-IDs
  • AUTH_DES / AUTH_KERB (Kerberos): Sichere Authentifizierung via kryptografischer Verfahren
  • RPC über sichere Transportprotokolle (z. B. TLS) ist möglich, aber im Standard nicht zwingend vorgeschrieben.

Empfohlene Sicherheitsmaßnahmen:

  • Einsatz verschlüsselter Transportverbindungen (z. B. stunnel oder IPsec)
  • Nutzung starker Authentifizierung (Kerberos)
  • Firewalls und Zugriffskontrolllisten für RPC-Dienste

Vergleich zu anderen RPC-Implementierungen

Merkmal ONC RPC DCE/RPC gRPC
Transport UDP/TCP TCP/SMB HTTP/2
Datenrepräsentation XDR NDR Protocol Buffers
Authentifizierung AUTH_SYS, AUTH_DES, AUTH_KERB Kerberos integriert TLS, OAuth2
Sprachunterstützung C, C++ u. a. C, C++, Java Viele moderne Sprachen

Anwendungen

Literatur und Standards

  • RFC 5531 – RPC: Remote Procedure Call Protocol Specification Version 2
  • RFC 4506 – XDR: External Data Representation Standard
  • DCE/RPC
  • gRPC

Siehe auch