RFC 123 UNKNOWN ARPANET · CONNECTIONS

Proffered Official ICP

A proposed handshake for opening a pair of connections between a user process and a server.

On rfc-editor.org ↗
PUBLISHED
April 1971
AUTHORS
S.D. Crocker
STREAM
Legacy
BUILDS ON
RFC 66 — NIC - third level ideas and other noise, RFC 80 — Protocols and Data Formats, RFC 98 — Logger Protocol, RFC 101 — Notes on the Network Working Group meeting, Urbana, Illinois, February 17, 1971
OBSOLETED BY
RFC 165 — ICP
UPDATED BY
RFC 127 — Comments on RFC 123, RFC 143 — Regarding proffered official ICP, RFC 148 — Comments on RFC 123
LOCAL SOCKET NUMBER
32 bits
FOREIGN SOCKET NUMBER
40 bits
FIRST CONNECTION BYTE SIZE
32
PROPOSED TELNET ICP
L = 1, Bs = Bu = 8
DOI
10.17487/RFC0123

RFC text

Original text · RFC Editor View on rfc-editor.org ↗
Network Working Group                                         S. Crocker
Request for Comments: 123                                           UCLA
NIC #5837                                                    20 April 71
Categories: D.1
Obsoletes: RFCs 66, 80
Updates: RFCs 98, 101


                        A Proferred Official ICP

By Initial Connection Protocol (ICP), I mean a third level protocol
which is initiated by a user process at one site in order to contact a
server process at another site.  Typically, the user process will be a
Telnet and the server process will be a logger, but there may be other
cases.

In this RFC, I wish to describe a family of ICPs suitable for
establishing one pair of connections (one in each direction) between any
user process and any server process, and to propose further a particular
subset of this family as the standard ICP for connecting user processes
to loggers on systems which accept teletype-like devices.

Notation

We have no standard notation for describing system calls which initiate
and close connections or cause data to be sent, so I will use the
following ad hoc notation.

Init (local = l, foreign = f, size = s)

   causes the local Host to attempt to establish a connection between
   socket l at the local Host and socket f, with a byte size of s for
   the connection.

   l is a 32 bit local socket number,
   f is a 40 bit foreign socket number, the high-order eight bits
   of which specify the foreign Host, and
   s is an eight bit non-zero byte size.
   The sum of l and f must be odd.

Listen (local = l, size = s)

   causes the local Host to wait for a request for connection to local
   socket l with byte size s.  The process will be woken when a
   connection is established.  The parameters l and s are the same as
   for Init.

Send (socket = l, data = d)

   The data named by d is sent over the connection attached to local
   socket l. l must be a send socket attached to a connection.  d is the
   name of a data area.

Receive (socket = l, data = d)

   The receive side counterpart to send.

Close (socket = l)

   Any connection currently attached to a local socket l is closed.

A Family of ICPs

Briefly, a server process at a site attaches a well-advertised send
socket L and listens.  A user process initiates connection to L from its
receive socket U.  The byte size for this connection is 32.  The server
process then transmits a 32-bit even number S and closes the connection.
The 32-bit number S and its successor, S+1, are the socket number the
server will use.  The final steps are for sockets S and S+1 at the
server site to be connected to sockets U+1 and U respectively at the
user site.

Using the notation, the server executes the following sequence:

   Listen (socket = L, size = 32)
   [Wait until a user connects]
   Send (socket = L, data = S)
   Close (socket = L)
   Init (local = S, foreign = U+1, size = Bu)
   Init (local = S+1, foreign = U, size = Bs)

The user executes the following:

   Init (local = U, foreign = L, size = 32)
   Receive (socket = U, data = S)
   Close (socket = U)
   Init (local = U+1, foreign = S, size = Bu)
   Init (local = U, foreign = S+1, size = Bs)

Note that L is a send socket (odd), while S and U are receive sockets
(even).  Where L, S or U are used as values of local, they are 32-bit
numbers; where they are values of foreign, they are 40-bit numbers.  The
parameters Bs and Bu are the byte sizes to be sent by the server and
user, respectively.

Examination of the above sequences reveals that an ICP is characterized
by the three numbers L, Bs and Bu, and must meet the restrictions that

   (a) L is a send socket,
   (b) Bs and Bu are legal byte sizes, and
   (c) for each L there is only on pair of associated byte sizes.

This last restriction prevents two distinct services from being
available through the same socket and distinguished only by the byte
sizes.

Telnet ICP

For connecting teletype-like users, i.e. interactive and ASCII, to Hosts
serving such users, I propose an ICP of the form described above and
characterized by L = 1, Bs = Bu = 8. [There has been some confusion
about socket numbers.  Here I specifically mean L = X00000001]

Formalities

I propose that the Telnet ICP be made official.  Comments should be
published before the May NWG meeting, the subject will be discussed
there, and we will decide there to accept or reject this protocol.


       [ This RFC was put into machine readable form for entry ]
          [ into the online RFC archives by Jeff Sorte 5/97 ]

ISO Plain Language

On this page
PROBLEMA user process at one site needs a standard way to contact a server process at another site and establish a connection in each direction.
MECHANISMThe user first connects to the server's advertised socket. The server returns an even socket number and closes that connection; the two hosts then open the pair of intended connections.
WHY IT WAS REPLACEDThe memo proposes one member of this protocol family for Telnet users. The unit metadata says RFC 123 was obsoleted by RFC 165 and updated by RFCs 127, 143, and 148.

§1What the Initial Connection Protocol Does

An Initial Connection Protocol (ICP) is a third-level protocol started by a user process to contact a server process at another site. The RFC gives Telnet and a logger as a typical example, while noting that other pairs of processes may use the idea. It describes a family of protocols for establishing two connections, one in each direction, and proposes one member for systems serving teletype-like users.

The RFC says it obsoletes RFCs 66 and 80 and updates RFCs 98 and 101. Those relationships are also recorded in the unit metadata.

An ICP sets up two connections between a program asking for a service and a program providing it. RFC 123 proposes one version for interactive Telnet users.

§2Sockets and the RFC's Notation

The memo uses short names for connection operations. Init tries to connect a local socket to a foreign socket using a specified byte size; Listen waits for a request; Send and Receive move data; and Close closes a connection attached to a local socket.

A local socket number is 32 bits. A foreign socket number is 40 bits, with its high-order 8 bits specifying the foreign host. The byte size is a non-zero 8-bit number, and the sum of the local and foreign socket numbers must be odd.

A socket is a numbered endpoint for a connection. The memo's operations say which endpoint to contact, how many bits each byte uses, and whether to wait, send, receive, or close.

§3The Two-Stage Connection Sequence

The server listens on a well-advertised send socket L. The user connects from receive socket U to L with byte size 32. The server sends a 32-bit even number S and closes this first connection. The two sides then use S and S+1 at the server, and U+1 and U at the user, to establish the final connections.

The RFC characterizes an ICP by three values: L, the server's byte size Bs, and the user's byte size Bu. Each value must be legal, and a given L can have only one associated pair of byte sizes. This prevents two services from sharing one advertised socket and being distinguished only by byte size.

The first connection exchanges the server's socket number and then closes. Both sides use the agreed socket numbers to open the two connections that carry communication.

§4The Proposed Telnet Version

For interactive ASCII users connecting to hosts that serve them, the RFC proposes an ICP with L = 1 (written as X00000001 in the memo) and Bs = Bu = 8. The final section asks that this Telnet ICP be made official and says comments should be published before the May Network Working Group meeting, where acceptance or rejection would be decided.

For interactive ASCII use, the proposal selects socket 1 and byte size 8 in both directions. The memo asks the Network Working Group to decide whether to make it official.