RPC: Remote Procedure Call Protocol specification
RFC 1050

Document Type RFC - Historic (April 1988; No errata)
Obsoleted by RFC 1057
Last updated 2013-03-02
Stream Legacy stream
Formats plain text html pdf htmlized (tools) htmlized bibtex
Stream Legacy state (None)
Consensus Boilerplate Unknown
RFC Editor Note (None)
IESG IESG state RFC 1050 (Historic)
Telechat date
Responsible AD (None)
Send notices to (None)
Network Working Group                             Sun Microsystems, Inc.
Request for Comments: 1050                        April 1988

                       RPC: Remote Procedure Call
                         Protocol Specification


   This RFC describes a standard that Sun Microsystems and others are
   using and is one we wish to propose for the Internet's consideration.
   This memo is not an Internet standard at this time.  Distribution of
   this memo is unlimited.


   This document specifies a message protocol used in implementing Sun's
   Remote Procedure Call (RPC) package.  The message protocol is
   specified with the eXternal Data Representation (XDR) language [9].
   This document assumes that the reader is familiar with XDR.  It does
   not attempt to justify RPC or its uses.  The paper by Birrell and
   Nelson [1] is recommended as an excellent background to and
   justification of RPC.


   This document discusses servers, services, programs, procedures,
   clients, and versions.  A server is a piece of software where network
   services are implemented.  A network service is a collection of one
   or more remote programs.  A remote program implements one or more
   remote procedures; the procedures, their parameters, and results are
   documented in the specific program's protocol specification (see
   Appendix A for an example).  Network clients are pieces of software
   that initiate remote procedure calls to services.  A server may
   support more than one version of a remote program in order to be
   forward compatible with changing protocols.

   For example, a network file service may be composed of two programs.
   One program may deal with high-level applications such as file system
   access control and locking.  The other may deal with low-level file
   IO and have procedures like "read" and "write".  A client machine of
   the network file service would call the procedures associated with
   the two programs of the service on behalf of some user on the client

Sun Microsystems, Inc.                                          [Page 1]
RFC 1050                 Remote Procedure Call                April 1988


   The remote procedure call model is similar to the local procedure
   call model.  In the local case, the caller places arguments to a
   procedure in some well-specified location (such as a result
   register).  It then transfers control to the procedure, and
   eventually gains back control.  At that point, the results of the
   procedure are extracted from the well-specified location, and the
   caller continues execution.

   The remote procedure call is similar, in that one thread of control
   logically winds through two processes -- one is the caller's process,
   the other is a server's process.  That is, the caller process sends a
   call message to the server process and waits (blocks) for a reply
   message.  The call message contains the procedure's parameters, among
   other things.  The reply message contains the procedure's results,
   among other things.  Once the reply message is received, the results
   of the procedure are extracted, and caller's execution is resumed.

   On the server side, a process is dormant awaiting the arrival of a
   call message.  When one arrives, the server process extracts the
   procedure's parameters, computes the results, sends a reply message,
   and then awaits the next call message.

   Note that in this model, only one of the two processes is active at
   any given time.  However, this model is only given as an example.
   The RPC protocol makes no restrictions on the concurrency model
   implemented, and others are possible.  For example, an implementation
   may choose to have RPC calls be asynchronous, so that the client may
   do useful work while waiting for the reply from the server.  Another
   possibility is to have the server create a task to process an
   incoming request, so that the server can be free to receive other


   The RPC protocol is independent of transport protocols.  That is, RPC
   does not care how a message is passed from one process to another.
   The protocol deals only with specification and interpretation of

   It is important to point out that RPC does not try to implement any
   kind of reliability and that the application must be aware of the
   type of transport protocol underneath RPC.  If it knows it is running
   on top of a reliable transport such as TCP/IP [6], then most of the
   work is already done for it.  On the other hand, if it is running on
   top of an unreliable transport such as UDP/IP [7], it must implement
   its own retransmission and time-out policy as the RPC layer does not

Sun Microsystems, Inc.                                          [Page 2]
RFC 1050                 Remote Procedure Call                April 1988
Show full document text