Output of the Host-Host Protocol Glitch Cleaning Committee
A 1971 committee's fixes to the first ARPANET Host-Host Protocol, from byte streams to new flow control.
Bressler, R.D., Crocker, S.D., Crowther, W.R., Grossman, G.R., Tomlinson, R.S., and J.E. White, "Output of the Host-Host Protocol Glitch Cleaning Committee", RFC 107, DOI 10.17487/RFC0107, March 1971, <https://www.rfc-editor.org/info/rfc107>.
@misc{rfc107,
series = {Request for Comments},
number = 107,
howpublished = {RFC 107},
publisher = {RFC Editor},
doi = {10.17487/RFC0107},
url = {https://www.rfc-editor.org/info/rfc107},
author = {R.D. Bressler and S.D. Crocker and W.R. Crowther and G.R. Grossman and R.S. Tomlinson and J.E. White},
title = {{Output of the Host-Host Protocol Glitch Cleaning Committee}},
pagetotal = 12,
year = 1971,
month = mar,
} RFC text
Contents
Network Working Group
Request for Comments # 107
NIC # 5806
Output of the Host-Host Protocol
Glitch Cleaning Committee
UCLA
23 March 1971
Robert Bressler
Steve Crocker
William Crowter
Gary Grossman
Ray Tomlinson
James Withe
Introduction
The Host-Host Protocol Glitch Cleaning Committee met for the second
time at UCLA on 8, 9 March 1971, after canvassing the network com-
munity. [The result of the (slightly larger) committee's first
meeting are documented in RFC #102.] The committee agreed on
several modifications to the protocol in Document #1; these modi-
fications are listed below.
At each of the meeting, the committee quickly treated all but one
of the extant topics. At the first meeting, the bulk of time was
spent considering the interrupt mechanism, and that discussion is
summarized in RFC #102. At the second meeting, the committee spent
almost all of its time discussing the notion of bytes; this dis-
cussion is summarized after the list of modifications.
This RFC entirely supercedes RFC #102, and is an official modi-
fication of Document #1. A revision of Document #1 will be written
shortly which incorporates the changes listed here.
NCP implementers are to incorporate these changes as soon as
possible. NCP implementers also are to estimate on what date
theis NCP's will be ready and to communicate this estimate to
Steve Crocker or his secretary, Byrna Kristel.
Modifications
I Bytes
Heretofore, a connection has been a bit stream. Henceforth, it is to
be a byte stream, with the byte size, S, indicated in the STR command
and in each message. The byte size meets the constraints: 1 <= S <=
255.
The choice of the byte size for a connection is a 3rd level protocol
issue, but the size is constant for the life of a connection. Each
message must contain an integral number of text bytes (see below).
II Message Format
The message format is changed to the format shown in figure 1.
The fields S and C are the byte size and byte count, respectively.
The S field is 8 bits wide and must match the byte size specified in
the STR which created the connection. The C field is 16 bit long and
specifies the number of bytes in the text portion of the message. A
zero value in the C field serves no purpose, but is explicitly
permitted.
The M1 and M2 field are each 8 bits long and must contain zero. The
M3 field is zero or more bits long and must be all zero. The M3 may
be used to fill out a message to a word boundary. It is followed by
padding.
The text field consists of C bytes, where each byte is S bit long.
The text field starts 72 bits after the start of the message.
The partition of a byte stream into messages is an artifact
required by the subnet. No semantic contents be attacched
to message boundaries. In particular,
32 bits
|<--------------------------------->|
+-----------------------------------+
| |
| leader |
| |
+--------+--------+-----------------+
| | | |
| M1 | S | C |
| | | |
+--------+--------+-----------------+
| | ^ |
| M2 | | |
| | | |
+--------+ | |
| | |
| | |
| |
| Text |
// //
| | |
| | |
| | |
| | |
| | +--------+
| | | |
| | | M3 |
| v | |
+-----------------+--------+--------+
| |
| 10 --------- 0 | <-- Padding
| |
+-----------------+
Typical Message
Figure 1
1. A message with a zero value for C has no meaning, although
it is legal and it does use up resource allocation. (See
Flow Control below.)
2. A receiver may not expect to see 3rd level control infor-
mation synchronized with message boundaries. Particuralrly,
if the notion of record is defined for a connection, the
receiver must expect multiple records and/or record frag-
ments within one message. (However, control message obey
special rules. See below.)
III Message Data Types
No notion of data type is defined as part of the 2nd level pro- tocol.
3rd level protocols may include the notion. Data types cannot be
synchronized on message boundaries.
IV Reset and Reset Reply
A new pair of one bit control commands RST (reset) and RRP (reset
reply) are added. The RST is interpreted as a signal to purge the NCP
tables of all existing entries which arose from the Host which sent to
RST. The Host receiving the RST acknowledges by returning a RRP. The
Host sending the RST may proceed to request connection after receiving
either a RST or RRP in return. An RST is returned if the second Host
comes up after the first Host.
V Flow Control
The flow control techniques are changed in two ways. First, the Cease
mechanism is discontinued. The 10HI and 11HI message will no longer
be recognized by the Imps, and the Imps will no loger generate the
10HI, 11HI or 12HI messages.
Second, the allocation mechanism now deals with two quantities, bits
and messages. The receiver allocates each of these quantities
separately. The sender and receiver each must mantain a 16 bit
unsigned counter for message and a 32 bit unsigned counter for bits.
When sending a message, the sender subtract one from the message
counter, and the text length from the bit counter. The receiver
decrements his counter similarly when receiving the message. The
sender is prohibited from sending if either counter would be decre-
mented below zero. Similarly, the receiver is prohibited from raising
the current message allocation above 2**16 - 1, or the current bit
allocation above 2**32 - 1.
The TEXT LENGTH of a message is the product of S, the byte size, and
C, the number of bytes. These values always appear in the first part
of the message, as described under Message Format.
The ALL, GVB, and RET command are modified to treat two quantities.
Their formats are given under Control Command, below. The GVB command
is further modified to make it possible to ask for none of the
allocation to be returned. The new GVB command has four eight bit
fields. The first two fields are the op code and the link, as before.
The next two fields contain number fM and fB which control how much of
message and a bit allocation are to be returned. Each of these
numbers is interpreted as "the number of 128ths of the current
allocation" to be returned if it is in the range of 0 to 128, and is
to be interpreted as "all of the current allocation", if it is in the
range 128 to 255.
VI Control Message
The control link is chsnged to link 0; link 1 is not to be used. The
old and new protocols may thereforre coexist.
Message sent over the control link have the same format as other
regular messages, as described above under Message Format. The byte
size field must contain the value 8.
Control messages may not contain more tha 120 byte of text; the
value in the byte count field is thus limited to 120. This limi-
tation is intended to help smaller hosts.
Control messages must contain an integral number of control commands.
Control commands, therefore, may not be split across control messages.
VII Link Assignment
The link are now assigned as follows:
0 control link
1 old protocol's control link - to be phased out
2 - 31 links for connections
32 - 190 reserved -- not for current use
191 to be used only for measurement work under direction
of the network measurement center (UCLA)
192 - 255 available for any private experimental use.
VIII Fixed Length Control Commands
The ECO, ERP and ERR commands are now fixed length. The ECO and ERP are
now 16 bit long -- 8 bits of op code and 8 bits of data. The ERR command
is now 96 bits long -- 8 bits of op code, 8 bits of error code, and 80
bits of text. 80 bits is long enough to hold the longest non-ERR control
command.
IX Control Command Formats
As mentioned above, the formats of the STR, ALL, GVB, RET, ECO, ERP and
ERR commands have changed; and the commands RST and RRP have been added.
The formats of these commands are given here.
| 8 | 32 | 32 | 8 |
+-----+-----------------------+-----------------------+-----+
| | | | |
1. | STR | send socket | receive socket | |
| | | | ^ |
+-----+-----------------------+-----------------------+--|--+
|
| 8 | 8 | 16 | 32 | +-- byte size
+-----+-----+-----------+-----------------------+
| | | | |
2. | ALL | link| msg space | bit space |
| | | | |
+-----+-----+-----------+-----------------------+
| 8 | 8 | 16 | 32 |
+-----+-----+-----------+-----------------------+
| | | | |
3. | RET | link| msg space | bit space |
| | | | |
+-----+-----+-----------+-----------------------+
| 8 | 8 | 8 | 8 |
+-----+-----+-----+-----+
| | | | |
4. | GVB | link| fM | fB |
| | | ^ | ^ |
+-----+-----+--|--+--|--+
| |
| +-- bit fraction
+-------- message fraction
| 8 | 8 |
+-----+-----+
| | |
5. | ECO |data |
| | |
+-----+-----+
| 8 | 8 |
+-----+-----+
| | |
6. | ERP |data |
| | |
+-----+-----+
| 8 | 8 | 80 |
+-----+-----+---------------------- // -----------------------+
| | | |
7. | ERR | | text |
| | ^ | |
+-----+--|--+---------------------- // -----------------------+
|
+-- error code
| 8 |
+-----+
| |
8. | RST |
| |
+-----+
| 8 |
+-----+
| |
9. | RRP |
| |
+-----+
The values of the op codes 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
Discussion on Byte Streams
The previous specification that connections would be conduits of bit
streams provided maximum generality and minimum efficiency. Pressure
for greater efficiency developed and the problen was examined.
Two separate kinds of inefficiency arose from bit streams.
1. Receiving Hosts were equired to engage in expensive
shifting to concatenate the texts of successive
messages. Sending Hosts often also had to shift text
fields to align them on word boundaries.
2. Sending NCP's were prohibited from hanging onto ANY
text for an indefinite time if it were possible to send
even one bit. This requirement was necessary to prevent
possible deadlocks. For example, suppose processes A
and B have a conversation in progress over a pair of
connections, one in each directions. Also suppose that
these processes produce exactly one bit of output for
each bit of input. Then if A's NCP fails to send a
waiting bit because it wants to pack it together with
later output from A, then B will not be able to output
and neither will A. It is clear then, that unless there
is some quantitee that the data in the sending NCP's
buffers are not crucially needed on the receive side, the
sending NCP must assume otherwise and transmit any
waiting data as soon as it is able.
These considerations led to the notion of a "transmission unit," whose
existence would be known to the NCP's. The questions then became what
were typical and/or possible transmission unit sizes. For
character-oriented interaction, 8-bit transmission units seemed
reasonable. For line-oriented interaction, the transmission unit might
best be the line itself, and therefore variable length; alternatively,
it might be best consider the transmission unit to be a character. For
file transfer, it might be desirable for the transmission unit to be a
multiple of the word lengths of both machines; however, the last part of
the file may not form a whole transmission unit, if the transmission
unit is too large. The consensus became that the transmission unit
should not be divisible under any circumstances, and should, therefore,
be fairly small. The notion of transmission unit thus seems to be
synonymous with the notation of byte, and the term transmission unit was
dropped.
Subsequent discussion of the deadlocks and wakeup aspect revealed that
there may be two byte sizes associated with a single connection:
1. Transmission from the sending process to the sending NCP
is in bytes of size S. The sending NCP must send a
message whenever the link is unblocked, the message
counter is at least 1, the bit counter is at least S,
and the least S bits of text are ready. The message
must contain an integral number of bytes.
2. At the receiving side, there may be a different byte
size R for transmission from the receiving NCP to the
receiving process. An example of where R <> S, is
suggested by UCSB which is providing a file system for
transparently storing binary files. It is reasonable that
a using HOST might send with 36 bit bytes, while the UCSB
file system might want to receive 32-bit increments.
It is clear that from a network protocol point of view, only the byte S
is relevant, and this is quantity which is communicated in the STR
command in every message. The choice of the byte size R is up
to the receiving user, and its meaning is how often the receiving NCP
should wakeup the receiving process. It may also happen that a
receiving process has an agreement with the receiving NCP which is more
complex than "please wake me every R bits;" for example, the NCP might
scan for new-line characters before waking up the receiving process.
In the new protocol, it is the option of the receiver to refuse a
request for connection on the basis of the proffered byte size.
Conceptually, we imagine that NCP's are capable of handling all byte
sizes, and that such a choice would be up to the third level pro- grams
(user programs, loggers, telnets, etc.) Some Hosts, small ones in
particular, may know enough about their third level programs to restrict
the variety of byte sizes which can be sent or received. While it is a
matter of a local policy, the committee strongly suggests that NCP's be
capable of handling all byte sizes. One of our committee, moreover,
feels strongly that NCP's should be written to be able to receive all
byte sizes S and provide for different byte sizes R for transmission to
the user process.
[ This RFC was put into machine readable form for entry ]
[ into the online RFC archives by Enrico Bertone 4/97 ]
ISO Plain Language
On this page
§1The Glitch Cleaning Committee
The Host-Host Protocol Glitch Cleaning Committee met for the second time at UCLA on 8 and 9 March 1971, after canvassing the network community. The first meeting, which spent most of its time on the interrupt mechanism, is documented in RFC 102. This RFC entirely supersedes RFC 102 and is an official modification of Document #1, the original Host-Host Protocol specification; a revision of Document #1 was to follow.
NCP implementers were told to incorporate the changes as soon as possible and to report an estimated ready date to Steve Crocker or his secretary. The second meeting spent almost all of its time on the notion of bytes, which is discussed after the list of modifications.
A committee of network engineers met twice to fix unclear parts of the first rules for connections between ARPANET computers. This RFC lists the fixes they agreed on and replaces their earlier report.
§2Byte Streams and Message Format
A connection has been a bit stream; henceforth it is a byte stream, with the byte size S named in the STR command and in each message. The size must satisfy 1 <= S <= 255, is chosen by third-level protocol, stays constant for the life of the connection, and each message must contain a whole number of text bytes.
The new message format carries fields S (8 bits, the byte size, which must match the size in the STR that created the connection) and C (16 bits, the number of bytes in the text). A zero C has no meaning but is legal. Fields M1 and M2 are 8 bits each and must be zero, and M3, zero or more bits, must be all zero and may pad the message out to a word boundary, followed by padding. The text field starts 72 bits after the start of the message and consists of C bytes of S bits each.
The partition of the byte stream into messages is an artifact of the subnet, and no semantic content attaches to message boundaries. A message with a zero byte count is legal but uses up resource allocation. A receiver may not expect third-level control information to line up with message boundaries, and no data type is defined in the second-level protocol.
Data now moves in agreed-size bytes instead of single bits. Every message states the byte size and how many bytes it carries. Where one message ends carries no meaning for the program, so records and data types cannot depend on message boundaries.
§3Reset, Flow Control and Control Links
Two new one-bit control commands were added: RST (reset) tells the receiving host to purge its NCP tables of all entries that arose from the host that sent the RST, and the host receiving it acknowledges with RRP (reset reply). The host that sent the RST may then request connections after receiving either an RST or an RRP in return.
Flow control changes in two ways. The Cease mechanism is discontinued, and the Imps stop recognizing and generating the 10HI, 11HI and 12HI messages. Allocation now deals with two quantities, messages and bits, allocated separately by the receiver. Each side keeps a 16-bit unsigned counter for messages and a 32-bit unsigned counter for bits. The sender may not send if either counter would go below zero, and the receiver may not raise the current message allocation above the maximum of the 16-bit counter or the current bit allocation above the maximum of the 32-bit counter. The text length of a message is S times C. The ALL, GVB and RET commands treat both quantities; the new GVB has four eight-bit fields, with fM and fB naming how much of the message and bit allocation to return, read as 128ths of the current allocation for values 0 to 128 and as all of it for 128 to 255.
The control link is changed to link 0, and link 1 is not to be used, so the old and new protocols can coexist. Control messages use the normal message format with byte size 8, may not carry more than 120 bytes of text, and must contain whole control commands. Links are assigned as follows: 0 is the control link, 1 is the old protocol's control link, to be phased out, 2 to 31 are for connections, 32 to 190 are reserved, 191 is only for measurement work under the network measurement center at UCLA, and 192 to 255 are available for private experimental use. The ECO and ERP commands become fixed at 16 bits, and ERR at 96 bits: 8 bits of op code, 8 bits of error code and 80 bits of text, enough for the longest non-ERR control command.
A reset command lets one computer tell another to forget everything it remembers about it. Flow control now counts messages and bits separately, and the sender may spend only what the receiver has granted. Dedicated control traffic moves to link 0.
- 0NOP — No operation.
- 1RTS — Listed op code; not described in this RFC.
- 2STR — Carries the byte size; format changed.
- 3CLS — Listed op code; not described in this RFC.
- 4ALL — Allocation of messages and bits.
- 5GVB — Give back part of the allocation.
- 6RET — Return allocation.
- 7INR — Listed op code; not described in this RFC.
- 8INS — Listed op code; not described in this RFC.
- 9ECO — Echo request; now 16 bits.
- 10ERP — Echo reply; now 16 bits.
- 11ERR — Error; now 96 bits.
- 12RST — Reset; purge NCP table entries.
- 13RRP — Reset reply.
§4Why Bytes? The Committee's Discussion
Bit streams gave maximum generality and minimum efficiency. Receiving hosts had to do expensive shifting to concatenate the texts of successive messages, and sending hosts often had to shift text to align it on word boundaries. A sending NCP was also prohibited from holding any text if it could send even one bit, to prevent deadlock: two processes that each produce one bit of output per bit of input could stall each other if a waiting bit were delayed.
These considerations led to a transmission unit the NCPs would know about, which the committee concluded should be indivisible and fairly small; that notion turned out to be synonymous with the byte, so the term transmission unit was dropped. For character-oriented interaction an 8-bit unit seemed reasonable; for line-oriented interaction the line itself or a character; for file transfer a multiple of both machines' word lengths, though a too-large unit would leave a short final piece.
The discussion also noted two byte sizes may exist on one connection: size S from the sending process to the sending NCP, which the protocol carries, and a possibly different size R from the receiving NCP to the receiving process, which only decides how often the NCP wakes the user process; UCSB, storing binary files, might receive 32-bit increments while a host sends 36-bit bytes. A receiver may refuse a connection because of the proffered byte size. Conceptually NCPs handle all byte sizes, and the committee strongly suggests they do, though small hosts may restrict the variety based on what their third-level programs need.
The committee explains why sending single bits was slow and could stall both sides, and why they settled on small indivisible bytes. The sending side's byte size is a protocol matter; the receiving side may wake its program at a different, local rhythm.