Independent Submission                                       A. McKenzie
Request for Comments: 6529                                    S. Crocker
Category: Historic                                            April 2012
ISSN: 2070-1721


               Host/Host Protocol for the ARPA Network

Abstract

  This document reproduces the Host/Host Protocol developed by the ARPA
  Network Working Group during 1969, 1970, and 1971.  It describes a
  protocol used to manage communication between processes residing on
  independent Hosts.  It addresses issues of multiplexing multiple
  streams of communication (including addressing, flow control,
  connection establishment/disestablishment, and other signaling) over
  a single hardware interface.  It was the official protocol of the
  ARPA Network from January 1972 until the switch to TCP/IP in January
  1983.  It is offered as an RFC at this late date to help complete the
  historical record available through the RFC series.

Status of This Memo

  This document is not an Internet Standards Track specification; it is
  published for the historical record.

  This document defines a Historic Document for the Internet community.
  This is a contribution to the RFC Series, independent of any other
  RFC stream.  The RFC Editor has chosen to publish this document at
  its discretion and makes no statement about its value for
  implementation or deployment.  Documents approved for publication by
  the RFC Editor are not a candidate for any level of Internet
  Standard; see Section 2 of RFC 5741.

  Information about the current status of this document, any errata,
  and how to provide feedback on it may be obtained at
  http://www.rfc-editor.org/info/rfc6529.














McKenzie & Crocker              Historic                        [Page 1]

RFC 6529         Host-Host Protocol for the ARPA Network      April 2012


Copyright Notice

  Copyright (c) 2012 IETF Trust and the persons identified as the
  document authors.  All rights reserved.

  This document is subject to BCP 78 and the IETF Trust's Legal
  Provisions Relating to IETF Documents
  (http://trustee.ietf.org/license-info) in effect on the date of
  publication of this document.  Please review these documents
  carefully, as they describe your rights and restrictions with respect
  to this document.

Table of Contents

  1. Introduction ....................................................3
  2. A Few Comments on Nomenclature and Key Concepts .................4
  3. Host/Host Protocol Document .....................................5
     (with its own table of contents on page 7)
  4. Security Considerations ........................................34
































McKenzie & Crocker              Historic                        [Page 2]

RFC 6529         Host-Host Protocol for the ARPA Network      April 2012


1.  Introduction

  The Host/Host Protocol for the ARPA Network was created during 1969,
  1970, and 1971 by the Network Working Group, chaired by Steve
  Crocker, a graduate student at UCLA.  Many of the RFCs with numbers
  less than 72, plus RFCs 102, 107, 111, 124, 132, 154, and 179 dealt
  with the development of this protocol.  The first official document
  defining the protocol was issued by Crocker on August 3, 1970 as
  "Host-Host Protocol Document No. 1" (see citation in RFC 65), which
  was based on RFC 54 by Crocker, Postel, Newkirk, and Kraley.
  Revision of Document No. 1 began in mid-February 1971, as discussed
  in RFC 102.  Although McKenzie is listed as the author of the January
  1972 document, which superseded Document No. 1, it is more correct to
  say McKenzie was the person who compiled and edited the document.
  Most or all of the ideas in the document originated with others.

  At the time "Host-Host Protocol Document No. 1" was issued it was not
  given an RFC number because it was not to be viewed as a "request for
  comments" but as a standard for implementation.  It was one of a set
  of such standards maintained as a separate set of documentation by
  the Network Information Center (NIC) at Stanford Research Institute
  (SRI).  The January 1972 version (NIC 8246) reproduced here also
  followed that approach.  It has been noted by many that all
  subsequent standards were issued as RFCs, and the absence of the
  Host/Host Protocol specification from the RFC series creates a
  curious gap in the historical record.  It is to fill that gap that
  this RFC is offered.

  In 1972, most ARPA Network documents, RFCs and others, were prepared
  and distributed in hard copy.  The Host/Host Protocol document was
  typed on a typewriter (probably an IBM Selectric), which had
  interchangeable print elements, and used both italic and boldface
  fonts in addition to the regular font.  Diagrams were drawn by a
  graphic artist and pasted into the typed document.  Since RFCs are
  constrained to use a single typeface, we have tried to indicate
  boldface by the use of either all capitals or by a double underline,
  and to indicate italics by the use of underscores around words in
  place of spaces.  The resulting document is a bit more difficult to
  read, but preserves the emphases of the original.  Of course, the
  pagination has changed, and we hope we have correctly modified all of
  the page numbers.  There were three footnotes in the original
  document and we have moved these into the text, set off by
  indentation and square brackets.  A .pdf image of the original
  document can be found at
  http://www.cbi.umn.edu/hostedpublications/pdf/McKenzieNCP1972.pdf.






McKenzie & Crocker              Historic                        [Page 3]

RFC 6529         Host-Host Protocol for the ARPA Network      April 2012


2.  A Few Comments on Nomenclature and Key Concepts

  In the protocol definition, "RFC" is used to mean "Request for
  Connection", which refers to either a "Sender to Receiver" or a
  "Receiver to Sender" request to initiate a connection.  In
  retrospect, this seems like an unnecessarily confusing choice of
  terminology.

  At the time this protocol was defined, it was given the
  undistinguished name "Host-Host Protocol."  The acronym "NCP" meant
  "Network Control Program" and referred to the code that had to be
  added to the operating system within each host to enable it to
  interact with its Interface Message Processor (IMP) and manage
  multiple connections.  Over time, and particularly in the context of
  the change from this protocol to TCP/IP, this protocol was commonly
  called "NCP" and the expansion changed to "Network Control Protocol."

  This protocol was superseded by TCP.  In this document, the protocol
  is referred to as a second layer (or "level") protocol, whereas in
  current writings TCP is usually referred to as a layer 4 protocol.
  When this protocol was created, it was expected that over time new
  layers would be created on top of, below, and even in between
  existing layers.

  This protocol used a separate channel (the control link) to manage
  connections.  This was abandoned in future protocols.

  In this design, there was no checksum or other form of error control
  except for the RST.  There had been in earlier versions, but it was
  removed at the insistence of the IMP designers who argued vigorously
  that the underlying network of IMPs would never lose a packet or
  deliver one with errors.  Although the IMP network was generally
  quite reliable, there were instances where the interface between the
  IMP and the host could drop bits, and, of course, experience with
  congestion control as the network was more heavily used made it clear
  that the host layer would have to deal with occasional losses in
  transmission.  These changes were built into TCP.

  Uncertainty about timing constraints in the design of protocols is
  evident in this document and remains a source of ambiguity,
  limitation, and error in today's design processes.










McKenzie & Crocker              Historic                        [Page 4]

RFC 6529         Host-Host Protocol for the ARPA Network      April 2012


3.  Host/Host Protocol Document










                             Host/Host Protocol
                                  for the
                                ARPA Network

























  Prepared for the Network Working Group by
     Alex McKenzie
     BBN
     January 1972








McKenzie & Crocker              Historic                        [Page 5]

RFC 6529         Host-Host Protocol for the ARPA Network      April 2012


                                 PREFACE

  This document specifies a protocol for use in communication between
  Host computers on the ARPA Network.  In particular, it provides for
  connection of independent processes in different Hosts, control of
  the flow of data over established connections, and several ancillary
  functions.  Although basically self-contained, this document
  specifies only one of several ARPA Network protocols; all protocol
  specifications are collected in the document
  _Current_Network_Protocols,_ NIC #7104.

  This document supersedes NIC #7147 of the same title.  Principal
  differences between the documents include:

     - prohibition of spontaneous RET, ERP, and RRP commands
     - a discussion of the problem of unanswered CLS commands (page 16)
     - a discussion of the implications of queueing and not queueing
       RFCs (page 14)
     - the strong recommendation that received ERR commands be logged,
       and some additional ERR specifications.

  In addition to the above, several minor editorial changes have been
  made.

  Although there are many individuals associated with the network who
  are knowledgeable about protocol issues, individuals with questions
  pertaining to Network protocols should initially contact one of the
  following:

     Steve Crocker
     Advanced Research Projects Agency
     1400 Wilson Boulevard
     Arlington, Virginia 22209
     (202) 694-5921 or 5922

     Alex McKenzie
     Bolt Beranek and Newman Inc.
     50 Moulton Street
     Cambridge, Massachusetts 02133
     (617) 491-1350 ext. 441

     Jon Postel
     University of California at Los Angeles
     Computer Science Department
     3732 Boelter Hall
     Los Angeles, California 90024
     (213) 325-2363




McKenzie & Crocker              Historic                        [Page 6]

RFC 6529         Host-Host Protocol for the ARPA Network      April 2012


                             TABLE OF CONTENTS

  I.    INTRODUCTION..................................................8
        An overview of the multi-leveled protocol structure in the ARPA
        Network.

  II.   COMMUNICATION CONCEPTS.......................................10
        Definitions of terminology and a description of the overall
        strategy used in Host-to-Host communication.

  III.  NCP FUNCTIONS................................................13
        The meat of the document for the first-time reader.  Host-to-
        Host "commands" are introduced with descriptions of conditions
        of their use, discussion of possible problems, and other
        background material.

              Connection Establishment..........................13
              Connection Termination............................15
              Flow Control......................................17
              Interrupts........................................20
              Test Inquiry......................................20
              Reinitialization..................................21

  IV.   DECLARATIVE SPECIFICATIONS...................................23
        Details for the NCP implementer.  A few additional "commands"
        are introduced, and those described in Section III are
        reviewed.  Formats and code and link assignments are specified.

              Message Format....................................23
              Link Assignment...................................25
              Control Messages..................................25
              Control Commands..................................25
              Opcode Assignment.................................31
              Control Command Summary...........................31

















McKenzie & Crocker              Historic                        [Page 7]

RFC 6529         Host-Host Protocol for the ARPA Network      April 2012


                            I.  INTRODUCTION

  The ARPA Network provides a capability for geographically separated
  computers, called Hosts, to communicate with each other.  The Host
  computers typically differ from one another in type, speed, word
  length, operating system, etc.  Each Host computer is connected into
  the network through a local small computer called an _Interface_
  _Message_Processor_(IMP)._  The complete network is formed by
  interconnecting these IMPs, all of which are virtually identical,
  through wideband communications lines supplied by the telephone
  company.  Each IMP is programmed to store and forward messages to the
  neighboring IMPs in the network.  During a typical operation, a Host
  passes a message to its local IMP; the first 32 bits of this message
  include the "network address" of a destination Host.  The message is
  passed from IMP to IMP through the Network until it finally arrives
  at the destination IMP, which in turn passes it along to the
  destination Host.

  Specifications for the physical and logical message transfer between
  a Host and its local IMP are contained in Bolt Beranek and Newman
  (BBN) Report No. 1822.  These specifications are generally called the
  _first_level_protocol_ or Host/IMP Protocol.  This protocol is not by
  itself, however, sufficient to specify meaningful communication
  between processes running in two dissimilar Hosts.  Rather, the
  processes must have some agreement as to the method of initiating
  communication, the interpretation of transmitted data, and so forth.
  Although it would be possible for such agreements to be reached by
  each pair of Hosts (or processes) interested in communication, a more
  general arrangement is desirable in order to minimize the amount of
  implementation necessary for Network-wide communication.
  Accordingly, the Host organizations formed a Network Working Group
  (NWG) to facilitate an exchange of ideas and to formulate additional
  specifications for Host-to-Host communications.

  The NWG has adopted a "layered" approach to the specification of
  communications protocol.  The inner layer is the Host/IMP protocol.
  The next layer specifies methods of establishing communications
  paths, managing buffer space at each end of a communications path,
  and providing a method of "interrupting" a communications path.  This
  protocol, which will be used by all higher-level protocols, is known
  as the _second_level_protocol,_ or Host/Host protocol.  (It is worth
  noting that, although the IMP sub-network provides a capability for
  _message_switching,_ the Host/Host protocol is based on the concept
  of _line_switching._)  Examples of further layers of protocol
  currently developed or anticipated include:






McKenzie & Crocker              Historic                        [Page 8]

RFC 6529         Host-Host Protocol for the ARPA Network      April 2012


  1) An _Initial_Connection_Protocol_ (ICP) which provides a convenient
     standard method for several processes to gain simultaneous access
     to some specific process (such as the "logger") at another Host.

  2) A _Telecommunication_Network_ (TELNET) protocol which provides for
     the "mapping" of an arbitrary keyboard-printer terminal into a
     Network Virtual Terminal (NVT), to facilitate communication
     between a terminal user at one Host site and a terminal-serving
     process at some other site which "expects" to be connected to a
     (local) terminal logically different from the (remote) terminal
     actually in use.  The TELNET protocol specifies use of the ICP to
     establish the communication path between the terminal user and the
     terminal-service process.

  3) A _Data_Transfer_ protocol to specify standard methods of
     formatting data for shipment through the network.

  4) A _File_Transfer_ protocol to specify methods for reading,
     writing, and updating files stored at a remote Host.  The File
     Transfer protocol specifies that the actual transmission of data
     should be performed in accordance with the Data Transfer protocol.

  5) A _Graphics_ protocol to specify the means for exchanging graphics
     display information.

  6) A _Remote_Job_Service_ (RJS) protocol to specify methods for
     submitting input to, obtaining output from, and exercising control
     over Hosts which provide batch processing facilities.

  The remainder of this document describes and specifies the Host/Host,
  or second level, protocol as formulated by the Network Working Group.




















McKenzie & Crocker              Historic                        [Page 9]

RFC 6529         Host-Host Protocol for the ARPA Network      April 2012


                       II.  COMMUNICATION CONCEPTS

  The IMP sub-network imposes a number of physical restrictions on
  communications between Hosts; these restrictions are presented in BBN
  Report Number 1822.  In particular, the concepts of leaders,
  messages, padding, links, and message types are of interest to the
  design of Host/Host protocol.  The following discussion assumes that
  the reader is familiar with these concepts.

  Although there is little uniformity among the Hosts in either
  hardware or operating systems, the notion of multiprogramming
  dominates most of the systems.  These Hosts can each concurrently
  support several users, with each user running one or more processes.
  Many of these processes may want to use the network concurrently, and
  thus a fundamental requirement of the Host/Host protocol is to
  provide for process-to-process communication over the network.  Since
  the first level protocol only takes cognizance of Hosts, and since
  the several processes in execution within a Host are usually
  independent, it is necessary for the second level protocol to provide
  a richer addressing structure.

  Another factor which influenced the Host/Host protocol design is the
  expectation that typical process-to-process communication will be
  based, not on a solitary message, but rather upon a sequence of
  messages.  One example is the sending of a large body of information,
  such as a data base, from one process to another.  Another example is
  an interactive conversation between two processes, with many
  exchanges.

  These considerations led to the introduction of the notions of
  connections, a Network Control Program, a "control link", "control
  commands", connection byte size, message headers, and sockets.

  A _connection_ is an extension of a link.  A connection couples two
  processes so that output from one process is input to the other.
  Connections are defined to be simplex (i.e., unidirectional), so two
  connections are necessary if a pair of processes are to converse in
  both directions.

  Processes within a Host are envisioned as communicating with the rest
  of the network through a _Network_Control_Program_ (NCP), resident in
  that Host, which implements the second level protocol.  The primary
  function of the NCP is to establish connections, break connections,
  and control data flow over the connections.  We will describe the NCP
  as though it were part of the operating system of a Host supporting
  multiprogramming, although the actual method of implementing the NCP
  may be different in some Hosts.




McKenzie & Crocker              Historic                       [Page 10]

RFC 6529         Host-Host Protocol for the ARPA Network      April 2012


  In order to accomplish its tasks, the NCP of one Host must
  communicate with the NCPs of other Hosts.  To this end, a particular
  link between each pair of Hosts has been designated as the
  _control_link._  Messages transmitted over the control link are
  called _control_messages_*, and must always be interpreted by an NCP
  as a sequence of one or more _control_commands_.  For example, one
  kind of control command is used to initiate a connection, while
  another kind carries notification that a connection has been
  terminated.

     [*Note that in BBN Report Number 1822, messages of non-zero type
     are called control messages, and are used to control the flow of
     information between a Host and its IMP.  In this document, the
     term "control message" is used for a message of type zero
     transmitted over the control link.  The IMPs take no special
     notice of these messages.]

  The concept of a message, as used above, is an artifact of the IMP
  sub-network; network message boundaries may have little intrinsic
  meaning to communicating processes.  Accordingly, it has been decided
  that the NCP (rather than each transmitting process) should be
  responsible for segmenting interprocess communication into network
  messages.  Therefore, it is a principal of the second level protocol
  that no significance may be inferred from message boundaries by a
  receiving process.  _The_only_exception_to_this_principle_is_in_
  _control_messages,_each_of_which_must_contain_an_integral_number_of_
  _control_commands._

  Since message boundaries are selected by the transmitting NCP, the
  receiving NCP must be prepared to concatenate successive messages
  from the network into a single (or differently divided) transmission
  for delivery to the receiving process.  The fact that Hosts have
  different word sizes means that a message from the network might end
  in the middle of a word at the receiving end, and thus the
  concatenation of the next message might require the receiving Host to
  carry out extensive bit-shifting.  Because bit-shifting is typically
  very costly in terms of computer processing time, the protocol
  includes the notions of connection byte size and message headers.

  As part of the process of establishing a connection, the processes
  involved must agree on a _connection_byte_size._  Each message sent
  over the connection must then contain an integral number of bytes of
  this size.  Thus the pair of processes involved in a connection can
  choose a mutually convenient byte size, for example, the least common
  multiple of their Host word lengths.  It is important to note that
  the ability to choose a byte size _must_ be available to the
  processes involved in the connection; an NCP is prohibited from
  imposing an arbitrary byte size on any process running in its own



McKenzie & Crocker              Historic                       [Page 11]

RFC 6529         Host-Host Protocol for the ARPA Network      April 2012


  Host.  In particular, an outer layer of protocol may specify a byte
  size to be used by that protocol.  If some NCP is unable to handle
  that byte size, then the outer layer of protocol will not be
  implementable on that Host.

  The IMP sub-network requires that the first 32 bits of each message
  (called the leader) contain addressing information, including
  destination Host address and link number.  The second level protocol
  extends the required information at the beginning of each message to
  a total of 72 bits; these 72 bits are called the _message_header._  A
  length of 72 bits is chosen since most Hosts either can work
  conveniently with 8-bit units of data or have word lengths of 18 or
  36 bits; 72 is the least common multiple of these lengths.  Thus, the
  length chosen for the message header should reduce bit-shifting
  problems for many Hosts.  In addition to the leader, the message
  header includes a field giving the byte size used in the message, a
  field giving the number of bytes in the message, and "filler" fields.
  The format of the message header is fully described in Section IV.

  Another major concern of the second level protocol is a method for
  reference to processes in other Hosts.  Each Host has some internal
  scheme for naming processes, but these various schemes are typically
  different and may even be incompatible.  Since it is not practical to
  impose a common internal process naming scheme, a standard
  intermediate name space is used, with a separate portion of the name
  space allocated to each Host.  Each Host must have the ability to map
  internal process identifiers into its portion of this name space.

  The elements of the name space are called _sockets._  A socket forms
  one end of a connection, and a connection is fully specified by a
  pair of sockets.  A socket is identified by a Host number and a
  32-bit socket number.  The same 32-bit number in different Hosts
  represents different sockets.

  A socket is either a _receive_socket_ or a _send_socket,_ and is so
  marked by its low-order bit (0 = receive; 1 = send).  This property
  is called the socket's _gender._  The sockets at either end of a
  connection must be of opposite gender.  Except for the gender, second
  level protocol places no constraints on the assignment of socket
  numbers within a Host.











McKenzie & Crocker              Historic                       [Page 12]

RFC 6529         Host-Host Protocol for the ARPA Network      April 2012


                           III.  NCP FUNCTIONS

  The functions of the NCP are to establish connections, terminate
  connections, control flow, transmit interrupts, and respond to test
  inquiries.  These functions are explained in this section, and
  control commands are introduced as needed.  In Section IV the formats
  of all control commands are presented together.

  Connection Establishment
  ========================

  The commands used to establish a connection are STR (sender-to-
  receiver) and RTS (receiver- to-sender).

          8*         32               32           8
       +----------------------------------------------+
       | STR |   send socket  | receive socket | size |
       +----------------------------------------------+

     [*The number shown above each control command field is the length
     of that field in bits.]

          8          32               32           8
       +----------------------------------------------+
       | RTS | receive socket |  send socket   | link |
       +----------------------------------------------+

  The STR command is sent from a prospective sender to a prospective
  receiver, and the RTS from a prospective receiver to a prospective
  sender.  The send socket field names a socket local to the
  prospective sender; the receive socket field names a socket local to
  the prospective receiver.  In the STR command, the "size" field
  contains an unsigned binary number (in the range 1 to 255; zero is
  prohibited) specifying the byte size to be used for all messages over
  the connection.  In the RTS command, the "link" field specifies a
  link number; all messages over the connection must be sent over the
  link specified by this number.  These two commands are referred to as
  requests-for-connection (RFCs).  An STR and an RTS match if the
  receive socket fields match and the send socket fields match.  A
  connection is established when a matching pair of RFCs have been
  exchanged.  _Hosts_are_prohibited_from_establishing_more_than_one_
  _connection_to_any_local_socket._

  With respect to a particular connection, the Host containing the send
  socket is called the _sending_Host_ and the Host containing the
  receive socket is called the _receiving_Host._  A Host may connect
  one of its receive sockets to one of its send sockets, thus becoming
  both the sending Host and the receiving Host for that connection.



McKenzie & Crocker              Historic                       [Page 13]

RFC 6529         Host-Host Protocol for the ARPA Network      April 2012


  These terms apply only to data flow; control messages will, in
  general, be transmitted in both directions.

  A Host sends an RFC either to request a connection, or to accept a
  foreign Host's request.  Since RFC commands are used both for
  requesting and for accepting the establishment of a connection, it is
  possible for either of two cooperating processes to initiate
  connection establishment.  As a consequence, a family of processes
  may be created with connection-initiating actions built-in, and the
  processes within this family may be started up (in different Hosts)
  in arbitrary order provided that appropriate queueing is performed by
  the Hosts involved (see below).

  _There_is_no_prescribed_lifetime_for_an_RFC._  A Host is permitted to
  queue incoming RFCs and withhold a response for an arbitrarily long
  time, or, alternatively, to reject requests (see Connection
  Termination below) immediately if it does not have a matching RFC
  outstanding.  It may be reasonable, for example, for an NCP to queue
  an RFC that refers to some currently unused socket until a local
  process takes control of that socket number and tells the NCP to
  accept or reject the request.  Of course, the Host which sent the RFC
  may be unwilling to wait for an arbitrarily long time, so it may
  abort the request.  On the other hand, some NCP implementations may
  not include any space for queueing RFCs, and thus can be expected to
  reject RFCs unless the RFC sequence was initiated locally.

  _Queueing_Considerations_

  The decision to queue, or not queue, incoming RFCs has important
  implications which NCP implementers must not ignore.  Each RFC which
  is queued, of course, requires a small amount of memory in the Host
  doing the queueing.  If each incoming RFC is queued until a local
  process seizes the local socket and accepts (or rejects) the RFC, but
  no local process ever seizes the socket, the RFC must be queued
  "forever."  Theoretically this could occur infinitely many times
  (there is no reason not to queue several RFCs for a single local
  socket, letting the local process decide which, if any, to accept)
  thus requiring infinite storage for the RFC queue.  On the other
  hand, if no queueing is performed the cooperating processes described
  above will be able to establish a desired connection only by accident
  (when they are started up such that one issues its RFC while the RFC
  of the other is in transit in the network -- clearly an unlikely
  occurrence).

  Perhaps the most reasonable solution to the problems posed above is
  for _each_ NCP to give processes running in its own Host two options
  for attempting to initiate connections.  The first option would allow
  a process to cause an RFC to be sent to a specified remote socket;



McKenzie & Crocker              Historic                       [Page 14]

RFC 6529         Host-Host Protocol for the ARPA Network      April 2012


  with the NCP notifying the process as to whether the RFC were
  accepted or rejected by the remote Host.  The second option would
  allow a process to tell _its_own_ NCP to "listen" for an RFC to a
  specified local socket from some remote socket (the process might
  also specify the particular remote socket and/or Host it wishes to
  communicate with) and to accept the RFC (i.e., return a matching RFC)
  if and when it arrives.  Note that this also involves queueing (of
  "listen" requests), but it is internal queueing which is susceptible
  to reasonable management by the local Host.  If this implementation
  were available, one of two cooperating processes could "listen" while
  the other process caused a series of RFCs to be sent to the
  "listening" socket until one was accepted.  Thus, no queueing of
  incoming RFCs would be required, although it would do no harm.

  _It_is_the_intent_of_the_protocol_that_each_NCP_should_provide_
  _either_the_"listen"_option_described_above_or_a_SUBSTANTIAL_
  _queueing_facility._  This is not, however, an absolute requirement
  of the protocol.


  Connection Termination
  ======================

  The command used to terminate a connection is CLS (close).

          8        32            32
       +-----+-------------+-------------+
       | CLS |  my socket  | your socket |
       +-----+-------------+-------------+

  The "my socket" field contains the socket local to the sender of the
  CLS command.  The "your socket" field contains the socket local to
  the receiver of the CLS command.  _Each_side_must_send_and_receive_a_
  _CLS_command_before_connection_termination_is_completed_and_the_
  _sockets_are_free_to_participate_in_other_connections._

  It is not necessary for a connection to be established (i.e., for
  _both_ RFCs to be exchanged) before connection termination begins.
  For example, if a Host wishes to refuse a request for connection, it
  sends back a CLS instead of a matching RFC.  The refusing Host then
  waits for the initiating Host to acknowledge the refusal by returning
  a CLS.  Similarly, if a Host wishes to abort its outstanding request
  for a connection, it sends a CLS command.  The foreign Host is
  obliged to acknowledge the CLS with its own CLS.  Note that even
  though the connection was never established, CLS commands must be
  exchanged before the sockets are free for other use.

  After a connection is established, CLS commands sent by the receiver



McKenzie & Crocker              Historic                       [Page 15]

RFC 6529         Host-Host Protocol for the ARPA Network      April 2012


  and sender have slightly different effects.  CLS commands sent by the
  sender indicate that no more messages will be sent over the
  connection.  _This_command_must_not_be_sent_if_there_is_a_message_
  _in_transit_over_the_connection._  A CLS command sent by the receiver
  acts as a demand on the sender to terminate transmission.  However,
  since there is a delay in getting the CLS command to the sender, the
  receiver must expect more input.

  A Host should "quickly" acknowledge an incoming CLS so the foreign
  Host can purge its tables.  However, _there_is_no_prescribed_time_
  _period_in_which_a_CLS_must_be_acknowledged._

  Because the CLS command is used both to initiate closing, aborting
  and refusing a connection, and to acknowledge closing, aborting and
  refusing a connection, race conditions can occur.  However, they do
  not lead to ambiguous or erroneous results, as illustrated in the
  following examples.

     EXAMPLE 1: Suppose that Host A sends Host B a request for
     connection, and then A sends a CLS to Host B because it is tired
     of waiting for a reply.  However, just when A sends its CLS to B,
     B sends a CLS to A to refuse the connection.  A will "believe" B
     is acknowledging the abort, and B will "believe" A is
     acknowledging its refusal, but the outcome will be correct.

     EXAMPLE 2: Suppose that Host A sends Host B an RFC followed by a
     CLS as in example 1.  In this case, however, B sends a matching
     RFC to A just when A sends its CLS.  Host A may "believe" that the
     RFC is an attempt (on the part of B) to establish a new connection
     or may understand the race condition; in either case it can
     discard the RFC since its socket is not yet free.  Host B will
     "believe" that the CLS is breaking an _established_ connection,
     but the outcome is correct since a matching CLS is the required
     response, and both A and B will then terminate the connection.

  Every NCP implementation is faced with the problem of what to do if a
  matching CLS is not returned "quickly" by a foreign Host (i.e., if
  the foreign Host appears to be violating protocol in this respect).
  One naive answer is to hold the connection in a partially closed
  state "forever" waiting for a matching CLS.  There are two
  difficulties with this solution.  First, the socket involved may be a
  "scarce resource" such as the "logger" socket specified by an Initial
  Connection Protocol (see NIC # 7101) which the local Host cannot
  afford to tie up indefinitely.  Second, a partially broken (or
  malicious) process in a foreign Host may send an unending stream of
  RFCs which the local Host wishes to refuse by sending CLS commands
  and waiting for a match.  This could, in worst cases, require 2^32 !
  socket pairs to be stored before duplicates began to appear.



McKenzie & Crocker              Historic                       [Page 16]

RFC 6529         Host-Host Protocol for the ARPA Network      April 2012


  Clearly, no Host is prepared to store (or search) this much
  information.

  A second possibility sometimes suggested is for the Host which is
  waiting for matching CLS commands (Host A) to send a RST (see page
  20) to the offending Host (Host B), thus allowing all tables to be
  reinitialized at both ends.  This would be rather unsatisfactory to
  any user at Host A who happened to be performing useful work on Host
  B via network connections, since these connections would also be
  broken by the RST.

  Most implementers, recognizing these problems, have adopted some
  unofficial timeout period after which they "forget" a connection even
  if a matching CLS has not been received.  The danger with such an
  arrangement is that if a second connection between the same pair of
  sockets is later established, and a CLS finally arrives for the first
  connection, the second connection is likely to be closed.  This
  situation can only arise, however, if one Host violates protocol in
  two ways; first by failing to respond quickly to an incoming CLS, and
  second by permitting establishment of a connection involving a socket
  which it believes is already in use.  It has been suggested that the
  network adopt some standard timeout period, but the NWG has been
  unable to arrive at a period which is both short enough to be useful
  and long enough to be acceptable to every Host.  Timeout periods in
  current use seem to range between approximately one minute and
  approximately five minutes.  _It_must_be_emphasized_that_all_timeout_
  _periods,_although_they_are_relatively_common,_reasonably_safe,_and_
  _quite_useful,_are_in_violation_of_the_protocol_since_their_use_can_
  _lead_to_connection_ambiguities._


  Flow Control
  ============

  After a connection is established, the sending Host sends messages
  over the agreed-upon link to the receiving Host.  The receiving NCP
  accepts messages from its IMP and queues them for its various
  processes.  Since it may happen that the messages arrive faster than
  they can be processed, some mechanism is required which permits the
  receiving Host to quench the flow from the sending Host.

  The flow control mechanism requires the receiving Host to allocate
  buffer space for each connection and to notify the sending Host of
  how much space is available.  The sending Host keeps track of how
  much room is available and never sends more data than it believes the
  receiving Host can accept.

  To implement this mechanism, the sending Host keeps two counters



McKenzie & Crocker              Historic                       [Page 17]

RFC 6529         Host-Host Protocol for the ARPA Network      April 2012


  associated with each connection, a _message_counter_ and a
  _bit_counter._  Each counter is initialized to zero when the
  connection is established and is increased by allocate (ALL) control
  commands sent from the receiving Host as described below.  When
  sending a message, the NCP of the sending Host subtracts one from the
  message counter and the _text_length_ (defined below) from the bit
  counter.  The sender is prohibited from sending if either counter
  would be decremented below zero.  The sending Host may also return
  all or part of the message or bit space allocation with a return
  (RET) command upon receiving a give-back (GVB) command from the
  receiving Host (see below).

  The _text_length_ of a message is defined as the product of the
  connection byte size and the byte count for the message; both of
  these quantities appear in the message header.  Messages with a zero
  byte count, hence a zero text length, are specifically permitted.
  Messages with zero text length do not use bit space allocation, but
  do use message space allocation.  The flow control mechanisms do not
  pertain to the control link, since connections are never explicitly
  established over this link.

  The control command used to increase the sender's bit counter and
  message counter is ALL (allocate).

          8      8       16           32
       +------------------------------------+
       | ALL | link | msg space | bit space |
       +------------------------------------+

  This command is sent only from the receiving Host to the sending
  Host, and is legal only when a connection using the link number
  appearing in the "link" field is established.  The "msg space" field
  and the "bit space" field are defined to be unsigned binary integers
  specifying the amounts by which the sender's message counter and bit
  counter (respectively) are to be incremented.  The receiver is
  prohibited from incrementing the sender's counter above (2^16 - 1),
  or the sender's bit counter above (2^32 - 1).  In general, this rule
  will require the receiver to maintain counters which are incremented
  and decremented according to the same rules as the sender's counters.

  The receiving Host may request that the sending Host return all or
  part of its current allocation.  The control command for this request
  is GVB (give-back).

          8      8    8    8
       +----------------------+
       | GVB | link | fm | fb |
       +----------------------+



McKenzie & Crocker              Historic                       [Page 18]

RFC 6529         Host-Host Protocol for the ARPA Network      April 2012


  This command is sent only from the receiving Host to the sending
  Host, and is legal only when a connection using the link number in
  the "link" field is established.  The fields fm and fb are defined as
  the fraction (in 128ths) of the current message space allocation and
  bit space allocation (respectively) to be returned.  If either of the
  fractions is equal to or greater than one, _all_ of the corresponding
  allocation must be returned.  Fractions are used since, with messages
  in transit, the sender and receiver may not agree on the actual
  allocation at every point in time.

  Upon receiving a GVB command, the sending Host must return _at_
  _least_* the requested portions of the message and bit space
  allocations.  (A sending Host is prohibited from spontaneously
  returning portions of the message and bit space allocations.)  The
  control command for performing this function is RET (return).

     [*In particular, fractional returns must be rounded up, not
     truncated.]

          8      8       16           32
       +------------------------------------+
       | RET | link | msg space | bit space |
       +------------------------------------+

  This command is sent only from the sending Host to the receiving
  Host, and is legal only when a connection using the link number in
  the "link" field is established and a GVB command has been received
  from the receiving Host.  The "msg space" field and the "bit space"
  field are defined as unsigned binary integers specifying the amounts
  by which the sender's message counter and bit counter (respectively)
  have been decremented due to the RET activity (i.e., the amounts of
  message and bit space allocation being returned).  NCPs are obliged
  to answer a GVB with a RET "quickly"; however, there is _no_
  prescribed time period in which the answering RET must be sent.

  Some Hosts will allocate only as much space as they can guarantee for
  each link.  These Hosts will tend to use the GVB command only to
  reclaim space which is being filled very slowly or not at all.  Other
  Hosts will allocate more space than they have, so that they may use
  their space more efficiently.  Such a Host will then need to use the
  GVB command when the input over a particular link comes faster than
  it is being processed.

  Interrupts
  ==========

  The second level protocol has included a mechanism by which the
  transmission over a connection may be "interrupted." The meaning of



McKenzie & Crocker              Historic                       [Page 19]

RFC 6529         Host-Host Protocol for the ARPA Network      April 2012


  the "interrupt" is not defined at this level, but is made available
  for use by outer layers of protocol.  The interrupt command sent from
  the receiving Host to the sending Host is INR (interrupt-by-
  receiver).

          8      8
       +------------+
       | INR | link |
       +------------+

  The interrupt command sent from the sending Host to the receiving
  Host is INS (interrupt-by-sender).

          8      8
       +------------+
       | INS | link |
       +------------+

  The INR and INS commands are legal only when a connection using the
  link number in the "link" field is established.


  Test Inquiry
  ============

  It may sometimes be useful for one Host to determine if some other
  Host is capable of carrying on network conversations.  The control
  command to be used for this purpose is ECO (echo).

          8      8
       +------------+
       | ECO | data |
       +------------+

  The "data" field may contain any bit configuration chosen by the Host
  sending the ECO.  Upon receiving an ECO command an NCP must respond
  by returning the data to the sender in an ERP (echo-reply) command.

          8      8
       +------------+
       | ERP | data |
       +------------+

  A Host should "quickly" respond (with an ERP command) to an incoming
  ECO command.  However, there is no prescribed time period, after the
  receipt of an ECO, in which the ERP must be returned.  A Host is
  prohibited from sending an ERP when no ECO has been received, or from
  sending an ECO to a Host while a previous ECO to that Host remains



McKenzie & Crocker              Historic                       [Page 20]

RFC 6529         Host-Host Protocol for the ARPA Network      April 2012


  "unanswered."  Any of the following constitute an "answer" to an ECO:
  information from the local IMP that the ECO was discarded by the
  network (e.g., IMP/Host message type 7 - Destination Dead), ERP, RST,
  or RRP (see below).


  Reinitialization
  ================

  Occasionally, due to lost control messages, system "crashes", NCP
  errors, or other factors, communication between two NCPs will be
  disrupted.  One possible effect of any such disruption might be that
  neither of the involved NCPs could be sure that its stored
  information regarding connections with the other Host matched the
  information stored by the NCP of the other Host.  In this situation,
  an NCP may wish to reinitialize its tables and request that the other
  Host do likewise; for this purpose the protocol provides the pair of
  control commands RST (reset) and RRP (reset-reply).

          8
       +-----+
       | RST |
       +-----+

          8
       +-----+
       | RRP |
       +-----+

  The RST command is to be interpreted by the Host receiving it as a
  signal to purge its NCP tables of any entries which arose from
  communication with the Host which sent the RST.  The Host sending the
  RST should likewise purge its NCP tables of any entries which arise
  from communication with the Host to which the RST was sent.  The Host
  receiving the RST should acknowledge receipt by returning an RRP.
  _Once_the_first_Host_has_sent_an_RST_to_the_second_Host,_the_first_
  _Host_is_not_obliged_to_communicate_with_the_second_Host_(except_for_
  _responding_to_RST)_until_the_second_Host_returns_an_RRP._  In fact,
  to avoid synchronization errors, the first Host _should_not_
  communicate with the second until the RST is answered.  Of course, if
  the IMP subnetwork returns a "Destination Dead" (type 7) message in
  response to the control message containing the RST, an RRP should not
  be expected.  If both NCPs decide to send RSTs at approximately the
  same time, then each Host will receive an RST and each must answer
  with an RRP, even though its own RST has not yet been answered.

  Some Hosts may choose to "broadcast" RSTs to the entire network when
  they "come up." One method of accomplishing this would be to send an



McKenzie & Crocker              Historic                       [Page 21]

RFC 6529         Host-Host Protocol for the ARPA Network      April 2012


  RST command to each of the 256 possible Host addresses; the IMP
  subnetwork would return a "Destination Dead" (type 7) message for
  each non-existent Host, as well as for each Host actually "dead."
  _However,_no_Host_is_ever_obliged_to_transmit_an_RST_command._

  Hosts are prohibited from sending an RRP when no RST has been
  received.  Further, Hosts may send only one RST in a single control
  message and should wait a "reasonable time" before sending another
  RST to the same Host.  Under these conditions, a single RRP
  constitutes an "answer" to _all_ RSTs sent to that Host, and any
  other RRPs arriving from that Host should be discarded.








































McKenzie & Crocker              Historic                       [Page 22]

RFC 6529         Host-Host Protocol for the ARPA Network      April 2012


                     IV.  DECLARATIVE SPECIFICATIONS

  Message Format
  ==============

  All Host-to-Host messages (i.e., messages of type zero) shall have a
  header 72 bits long consisting of the following fields (see Figure
  1):

     Bits 1-32   Leader - The contents of this field must be
                 constructed according to the specifications contained
                 in BBN Report Number 1822.

     Bits 33-40  Field M1 - Must be zero.

     Bits 41-48  Field S - Connection byte size.  This size must be
                 identical to the byte size in the STR used in
                 establishing the connection.  If this message is being
                 transmitted over the control link the connection byte
                 size must be 8.

     Bits 49-64  Field C - Byte Count.  This field specifies the number
                 of bytes in the text portion of the message.  A zero
                 value in the C field is explicitly permitted.

     Bits 65-72  Field M2 - Must be zero.

  Following the header, the message shall consist of a text field of C
  bytes, where each byte is S bits in length.  Following the text there
  will be field M3 followed by padding.  The M3 field is zero or more
  bits long and must be all zero; this field may be used to fill out a
  message to a word boundary.



















McKenzie & Crocker              Historic                       [Page 23]

RFC 6529         Host-Host Protocol for the ARPA Network      April 2012


  |<---------------------------32 bits--------------------------->|
  |<----8 bits--->|<----8 bits--->|<-----------16 bits----------->|

  +---------------------------------------------------------------+
  |                                                               |
  |                             LEADER                            |
  |                                                               |
  +---------------------------------------------------------------|
  |               |               |                               |
  |    FIELD M1   |    FIELD S    |            FIELD C            |
  |               |               |                               |
  +---------------+---------------+-------------------------------+
  |               |               ^                               |
  |    FIELD M2   |               |                               |
  |               |               |                               |
  +---------------+               |                               |
  |                               |                               |
  |                               |                               |
  |                               |                               |
  |                               |                               |
  |                             TEXT                              |
  |                               |                               |
  |                               |                               |
  |                               |                               |
  |                               |                               |
  |                               |          +--------------------+
  |                               |          |                    |
  |                               |          |      FIELD M3      |
  |                               V          |                    |
  +-----------------------------------+------+--------------------+
  |                                   |
  |      10-----------------0         |<-------PADDING
  |                                   |
  +-----------------------------------+

                              Figure 1
                              ========

  The message header must, among other things, enable the NCP at the
  receiving Host to identify correctly the connection over which the
  message was sent.  Given a set of messages from Host A to Host B, the
  only field in the header under the control of the NCP at Host B is
  the link number (assigned via the RTS control command).  Therefore,
  each NCP must insure that, at a given point in time, for each
  connection for which it is the receiver, a unique link is assigned.
  Recall that the link is specified by the sender's address and the
  link number; thus a unique link number must be assigned to each
  connection to a given Host.



McKenzie & Crocker              Historic                       [Page 24]

RFC 6529         Host-Host Protocol for the ARPA Network      April 2012


  Link Assignment
  ===============

     Links are assigned as follows:

     Link number    Assignment
     ===========    ==========

     0              Control link

     2-71           Available for connections

     1, 72-190      Reserved - not for current use

     191            To be used only for measurement work under the
                    direction of the Network Measurement Center at UCLA

     192-255        Available for private experimental use.


  Control Messages
  ================

  Messages sent over the control link have the same format as other
  Host-to-Host messages.  The connection byte size (Field S in the
  message header) must be 8.  Control messages may not contain more
  than 120 bytes of text; thus the value of the byte count (Field C in
  the message header) must be less than or equal to 120.

  Control messages must contain an integral number of control commands.
  A single control command may not be split into parts which are
  transmitted in different control messages.

  Control Commands
  ================

  Each control command begins with an 8-bit _opcode._  These opcodes
  have values of 0, 1, ...  to permit table lookup upon receipt.
  Private experimental protocols should be tested using opcodes of 255,
  254, ...  Most of the control commands are more fully explained in
  Section III.










McKenzie & Crocker              Historic                       [Page 25]

RFC 6529         Host-Host Protocol for the ARPA Network      April 2012


  NOP - No operation
  ==================

          8
       +-----+
       | NOP |
       +-----+

  The NOP command may be sent at any time and should be discarded by
  the receiver.  It may be useful for formatting control messages.

  RST - Reset
  ===========

          8
       +-----+
       | RST |
       +-----+

  The RST command is used by one Host to inform another that all
  information regarding previously existing connections, including
  partially terminated connections, between the two Hosts should be
  purged from the NCP tables of the Host receiving the RST.  Except for
  responding to RSTs, the Host which sent the RST is not obliged to
  communicate further with the other Host until an RRP is received in
  response.

  RRP - Reset reply
  =================

          8
       +-----+
       | RRP |
       +-----+

  The RRP command must be sent in reply to an RST command.

  RTS - Request connection, receiver to sender
  ============================================

          8          32               32           8
       +----------------------------------------------+
       | RTS | receive socket |  send socket   | link |
       +----------------------------------------------+

  The RTS command is used to establish a connection and is sent from
  the Host containing the receive socket to the Host containing the
  send socket.  The link number for message transmission over the



McKenzie & Crocker              Historic                       [Page 26]

RFC 6529         Host-Host Protocol for the ARPA Network      April 2012


  connection is assigned with this command; the "link" field must be
  between 2 and 71, inclusive.

  STR - Request connection, sender to receiver
  ============================================

          8          32               32           8
       +----------------------------------------------+
       | STR |   send socket  | receive socket | size |
       +----------------------------------------------+

  The STR command is used to establish a connection and is sent from
  the Host containing the send socket to the Host containing the
  receive socket.  The connection byte size is assigned with this
  command; the size must be between 1 and 255, inclusive.

  CLS - Close
  ===========

          8        32            32
       +-----+-------------+-------------+
       | CLS |  my socket  | your socket |
       +-----+-------------+-------------+

  The CLS command is used to terminate a connection.  A connection need
  not be completely established before a CLS is sent.

  ALL - Allocate
  ==============

          8      8       16           32
       +------------------------------------+
       | ALL | link | msg space | bit space |
       +------------------------------------+

  The ALL command is sent from a receiving Host to a sending Host to
  increase the sending Host's space counters.  This command may be sent
  only while the connection is established.  The receiving Host is
  prohibited from incrementing the Host's message counter above
  (2^16 - 1) or bit counter above (2^32 - 1).











McKenzie & Crocker              Historic                       [Page 27]

RFC 6529         Host-Host Protocol for the ARPA Network      April 2012


  GVB - Give back
  ===============

          8      8    8    8
       +----------------------+
       | GVB | link | fm | fb |
       +----------------------+
                      ^    ^
                      |    +--- bit fraction
                      +-------- message fraction

  The GVB command is sent from a receiving Host to a sending Host to
  request that the sending Host return all or part of its message space
  and/or bit space allocations.  The "fractions" specify what portion
  (in 128ths) of each allocation must be returned.  This command may be
  sent only while the connection is established.

  RET - Return
  ============

          8      8       16           32
       +------------------------------------+
       | RET | link | msg space | bit space |
       +------------------------------------+

  The RET command is sent from the sending Host to the receiving Host
  to return all or a part of its message space and/or bit space
  allocations in response to a GVB command.  This command may be sent
  only while the connection is established.

  INR - Interrupt by receiver
  ===========================

          8      8
       +------------+
       | INR | link |
       +------------+

  The INR command is sent from the receiving Host to the sending Host
  when the receiving process wants to interrupt the sending process.
  This command may be sent only while the connection is established.










McKenzie & Crocker              Historic                       [Page 28]

RFC 6529         Host-Host Protocol for the ARPA Network      April 2012


  INS - Interrupt by sender
  =========================

          8      8
       +------------+
       | INS | link |
       +------------+

  The INS command is sent from the sending Host to the receiving Host
  when the sending process wants to interrupt the receiving process.
  This command may be sent only while the connection is established.

  ECO - Echo request
  ==================

          8      8
       +------------+
       | ECO | data |
       +------------+

  The ECO command is used only for test purposes.  The data field may
  be any bit configuration convenient to the Host sending the ECO
  command.

  ERP - Echo reply
  ================

          8      8
       +------------+
       | ERP | data |
       +------------+

  The ERP command must be sent in reply to an ECO command.  The data
  field must be identical to the data field in the incoming ECO
  command.

  ERR - Error detected
  ====================

          8      8                    80
       +-----+------+---------------------------- ~ -------------+
       | ERR | code |                data                        |
       +-----+------+---------------------------- ~ -------------+

  The ERR command may be sent whenever a second level protocol error is
  detected in the input from another Host.  In the case that the error
  condition has a predefined error code, the "code" field specifies the
  specific error, and the data field gives parameters.  For other



McKenzie & Crocker              Historic                       [Page 29]

RFC 6529         Host-Host Protocol for the ARPA Network      April 2012


  errors the code field is zero and the data field is idiosyncratic to
  the sender.  Implementers of Network Control Programs are expected to
  publish timely information on their ERR commands.

  The usefulness of the ERR command is compromised if it is merely
  discarded by the receiver.  Thus, sites are urged to record incoming
  ERRs if possible, and to investigate their cause in conjunction with
  the sending site.  The following codes are defined.  Additional codes
  may be defined later.

     a. Undefined (Error code = 0)
       The "data" field is idiosyncratic to the sender.

     b. Illegal opcode (Error code = 1)
       An illegal opcode was detected in a control message.  The "data"
       field contains the ten bytes of the control message beginning
       with the byte containing the illegal opcode.  If the remainder
       of the control message contains less than ten bytes, fill will
       be necessary; the value of the fill is zeros.

     c. Short parameter space (Error code = 2)
       The end of a control message was encountered before all the
       required parameters of the control command being decoded were
       found.  The "data" field contains the command in error; the
       value of any fill necessary is zeros.

     d. Bad parameters (Error code = 3)
       Erroneous parameters were found in a control command.  For
       example, two receive or two send sockets in an STR, RTS, or CLS;
       a link number outside the range 2 to 71 (inclusive); an ALL
       containing a space allocation too large.  The "data" field
       contains the command in error; the value of any fill necessary
       is zeros.

     e. Request on a non-existent socket (Error code = 4)
       A request other than STR or RTS was made for a socket (or link)
       for which no RFC has been transmitted in either direction.  This
       code is meant to indicate to the NCP receiving it that functions
       are being performed out of order.  The "data" field contains the
       command in error; the value of any fill necessary is zeros.

     f. Socket (link) not connected (Error code = 5)
       There are two cases:

       1.  A control command other than STR or RTS refers to a socket
          (or link) which is not part of an established connection.
          This code would be used when one RFC had been transmitted,
          but the matching RFC had not.  It is meant to indicate the



McKenzie & Crocker              Historic                       [Page 30]

RFC 6529         Host-Host Protocol for the ARPA Network      April 2012


          failure of the NCP receiving it to wait for a response to an
          RFC.  The "data" field contains the command in error; the
          value of any fill necessary is zeros.

       2. A message was received over a link which is not currently
          being used for any connection.  The contents of the "data"
          field are the message header followed by the first eight bits
          of text (if any) or zeros.

  Opcode Assignment
  =================

  Opcodes are defined to be eight-bit unsigned binary numbers.  The
  values assigned to opcodes are:

     NOP = 0
     RTS = 1
     STR = 2
     CLS = 3
     ALL = 4
     GVB = 5
     RET = 6
     INR = 7
     INS = 8
     ECO = 9
     ERP = 10
     ERR = 11
     RST = 12
     RRP = 13


  Control Command Summary
  =======================

          8
       +-----+
       | NOP |
       +-----+

          8          32               32           8
       +----------------------------------------------+
       | RTS | receive socket |  send socket   | link |
       +----------------------------------------------+

          8          32               32           8
       +----------------------------------------------+
       | STR |   send socket  | receive socket | size |
       +----------------------------------------------+



McKenzie & Crocker              Historic                       [Page 31]

RFC 6529         Host-Host Protocol for the ARPA Network      April 2012


          8        32            32
       +-----+-------------+-------------+
       | CLS |  my socket  | your socket |
       +-----+-------------+-------------+

          8      8       16           32
       +------------------------------------+
       | ALL | link | msg space | bit space |
       +------------------------------------+

          8      8    8    8
       +----------------------+
       | GVB | link | fm | fb |
       +----------------------+

          8      8       16           32
       +------------------------------------+
       | RET | link | msg space | bit space |
       +------------------------------------+

          8      8
       +------------+
       | INR | link |
       +------------+

          8      8
       +------------+
       | INS | link |
       +------------+

          8      8
       +------------+
       | ECO | data |
       +------------+

          8      8
       +------------+
       | ERP | data |
       +------------+

          8      8                    80
       +-----+------+---------------------------- ~ -------------+
       | ERR | code |                data                        |
       +-----+------+---------------------------- ~ -------------+







McKenzie & Crocker              Historic                       [Page 32]

RFC 6529         Host-Host Protocol for the ARPA Network      April 2012


          8
       +-----+
       | RST |
       +-----+

          8
       +-----+
       | RRP |
       +-----+





  [ This is the end of the January 1972 document. ]




































McKenzie & Crocker              Historic                       [Page 33]

RFC 6529         Host-Host Protocol for the ARPA Network      April 2012


4.  Security Considerations

  This document does not discuss any security considerations.

Authors' Addresses

  Alexander McKenzie
  PMB #4334, PO Box 2428
  Pensacola, FL 32513
  USA
  EMail: [email protected]

  Steve Crocker
  5110 Edgemoor Lane
  Bethesda, MD 20814
  USA
  EMail: [email protected]


































McKenzie & Crocker              Historic                       [Page 34]