4. TRANSPORTS AND SEMANTICS
Connected: An Internet Encyclopedia
4. TRANSPORTS AND SEMANTICS
Up:
Connected: An Internet Encyclopedia
Up:
Requests For Comments
Up:
RFC 1831
Prev: 3. THE RPC MODEL
Next: 5. BINDING AND RENDEZVOUS INDEPENDENCE
4. TRANSPORTS AND SEMANTICS
4. TRANSPORTS AND SEMANTICS
The RPC protocol can be implemented on several different transport
protocols. The RPC protocol does not care how a message is passed
from one process to another, but only with specification and
interpretation of messages. However, the application may wish to
obtain information about (and perhaps control over) the transport
layer through an interface not specified in this document. For
example, the transport protocol may impose a restriction on the
maximum size of RPC messages, or it may be stream-oriented like TCP
with no size limit. The client and server must agree on their
transport protocol choices.
It is important to point out that RPC does not try to implement any
kind of reliability and that the application may need to 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 [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 [7], it must implement
its own time-out, retransmission, and duplicate detection policies as
the RPC protocol does not provide these services.
Because of transport independence, the RPC protocol does not attach
specific semantics to the remote procedures or their execution
requirements. Semantics can be inferred from (but should be
explicitly specified by) the underlying transport protocol. For
example, consider RPC running on top of an unreliable transport such
as UDP. If an application retransmits RPC call messages after time-
outs, and does not receive a reply, it cannot infer anything about
the number of times the procedure was executed. If it does receive a
reply, then it can infer that the procedure was executed at least
once.
A server may wish to remember previously granted requests from a
client and not regrant them in order to insure some degree of
execute-at-most-once semantics. A server can do this by taking
advantage of the transaction ID that is packaged with every RPC
message. The main use of this transaction ID is by the client RPC
entity in matching replies to calls. However, a client application
may choose to reuse its previous transaction ID when retransmitting a
call. The server may choose to remember this ID after executing a
call and not execute calls with the same ID in order to achieve some
degree of execute-at-most-once semantics. The server is not allowed
to examine this ID in any other way except as a test for equality.
On the other hand, if using a "reliable" transport such as TCP, the
application can infer from a reply message that the procedure was
executed exactly once, but if it receives no reply message, it cannot
assume that the remote procedure was not executed. Note that even if
a connection-oriented protocol like TCP is used, an application still
needs time-outs and reconnection to handle server crashes.
There are other possibilities for transports besides datagram- or
connection-oriented protocols. For example, a request-reply protocol
such as VMTP [2] is perhaps a natural transport for RPC. ONC RPC
uses both TCP and UDP transport protocols. Section 10 (RECORD
MARKING STANDARD) describes the mechanism employed by ONC RPC to
utilize a connection-oriented, stream-oriented transport such as TCP.
Next: 5. BINDING AND RENDEZVOUS INDEPENDENCE
Connected: An Internet Encyclopedia
4. TRANSPORTS AND SEMANTICS
|