\section{Communications}
To communicate between clients and servers through the network,
{\it Discuss} defines a protocol that allows clients to
perform different {\it Discuss} operations on servers.  Like other
systems, {\it Discuss} uses several layers of network protocols.  These
protocols are shown in Figure \ref{protocols}.  
\begin{figure}[thp]
\vspace{1.5in}
\special{psfile=protocols.ps voffset=-108 hoffset=-22}
\caption{Protocol layering in {\it Discuss}\label{protocols}}
\end{figure}
We give a brief description of each protocol and why it was chosen.
We start with the highest-level protocol, and proceed down through the
lower levels.

\paragraph{RPC}
A {\it Discuss} server provides a set of operations that clients can perform
on meetings.  These operations are presented within a Remote Procedure
Call (RPC) mechanism.  RPC is a well-understood programming paradigm
which allows the client-server interface to look like a programming
interface.  The exact RPC mechanism that {\it Discuss} uses is home-brew,
because the recent RPC mechanisms, such as Apollo NCS\cite{apollorpc}
and Sun
RPC\cite{sunrpc}, were not available when {\it Discuss} was first built.
One nice feature of the {\it Discuss} RPC mechanism is that it is designed
so that the client and the server can be linked together into a single
program.  This feature is useful when debugging or writing utilities
that need to run quickly.

\paragraph{USP}
The Remote Procedure Call mechanism uses Unified Stream Protocol (USP)
\cite{usp} to transmit data values for the RPC.  USP was an
early protocol to transmit integers, strings, and other information in
a machine-independent way.  USP solves the problems of byte-ordering
and how strings should be transmitted over a stream.  These days, newer
protocols, such as Sun XDR\cite{sunxdr} or ISO ASN.1\cite{asn1}, would
be used to transmit these values.

\paragraph{TCP/IP}
USP is built on top of TCP/IP, the transport layer of the Internet
protocol suite.  TCP/IP provides a high-speed, reliable stream between
any two hosts connected on the Internet.  TCP/IP is a popular protocol,
with implementations for machines ranging from mainframes to
microcomputers.  This allows {\it Discuss} to be used on different
operating systems, such as UNIX and Multics.

\vspace{0.25in}
Although the current implementation of {\it Discuss} uses these
protocols to communicate between clients and servers, {\it Discuss}
could use any other protocol that provides the same functionality.
{\it Discuss} clients and servers only deal with a set of meeting
operations, which are available as ordinary procedure calls.  {\it
Discuss} could be implemented on other RPC mechanisms, such as Sun
RPC, Apollo NCS, or the Mercury
RPC\cite{mercury}, without much of a problem.  Alternatively, the
operations could be encoded in ASCII on a standard TCP stream, as
SMTP\cite{smtp} is.
