RFC - Informational
(August 1974; No errata)
||RFC Editor Note
RFC 700 (Informational)
||Send notices to
NWG/RFC 700 August 1974
INWG Experiments Note 1
A Protocol Experiment
Eric R. Mader
William W. Plummer
Raymond S. Tomlinson
In early February, 1974 the main line printer on BBN's TENEX system
failed and it was decided to use the PDP-11 line printer via the ARPANET
both for the direct purpose of obtaining listings and also the indirect
purpose of studying network protocols.
II. The Basic Protocol
The design was based on the protocol described by Cerf and Kahn in INWG
Note #39. Familiarity with that document is assumed. The following is
a brief sketch of the protocol. Not all features described in this
section have been implemented. See Section VI.
At any instant, the sender has two pointers into the stream of bytes to
be sent. Bytes to the left of the LEFT pointer have already been sent
and acknowledged. Bytes in the "window" between the LEFT and RIGHT
pointers have been sent (zero or more times), but no indication of
successful transmission has been received. Bytes to the right of RIGHT
remain to be considered at some time in the future.
In operation the sender is constantly sending bytes from the input data
stream resulting in the RIGHT pointer advancing. Positive
acknowledgements produced by the receiver cause the LEFT edge of the
window to move towards the RIGHT edge.
LEFT and RIGHT are actually numerical byte positions within the data
stream. The low order 16 bits of RIGHT are sent with each message as a
sequence number so that the receiver can identify which part of the data
stream it is receiving in case messages are not received in the same
order they were transmitted. The receiver has a finite amount of buffer
space available in which it can reassemble an image of the data in the
transmitter's window. The receiver discards any messages which have
sequence numbers outside of its buffer area. However, messages to the
left of LEFT must be acknowledged even though they are discarded.
Otherwise, a lost ACK would cause the sender to retransmit (and the
receiver ingore) the message indefinitely. Messages received with bad
checksums are also discarded.
As "good" messages are received, the holes are filled in the receiver's
buffer and continuous segments at the left edge are passed to the
physical line printer (in our case). The receiver informs the sender of
this action by sending an ACK (acknowledgement) message. This message
specifies the sequence number of the byte it would like to receive next
(the new value of LEFT in the sender) and the current amount of buffer
space it has available (new maximum window width in the sender). The
sender ignores ACK's to the left of LEFT and to the right of RIGHT.
Thus, both the sender and receiver are prepared to handle multiple
copies of messages.
Failures such as messages with bad checksums, messages lost during
transmission (data and ACK's), and messages discarded due to sequences
numbers which were apparently out of range, all manifest themselves to
the sender as a dropped ACK. A dropped ACK will cause the sender's LEFT
edge to stop advancing, leaving the unacknowledged message at the left
of the sender's window, and possibly a corresponding hole at the left of
the receiver's image of the window. Eventually, transmission will cease
and a (10 second) timeout will trigger in the sender, causing
retransmission of all data within the window. Note that at the instant
of a timeout, there is no guarantee that the un-ACK'd message will be
exactly at the left edge of the window or that it is the only
unacknowledged message in the window. Retransmissions are likely to
cause the receiver to see data that it has seen before, but duplicate
messages will be discarded due to sequence number considerations.
III. "Say Again"
An extension to the INWN #39 protocol which was implemented was the
ability to let the receiver force retransmission of the entire window by
turning on a flag in any message back to the sender. This is useful in
cases where the receiver believes that a data message has been dropped
and it wants to force retransmission rather than wait for a timeout in
the sender. Clearly, this relies on the network to preserve ordering of
the messages. Also, it is not useful if the error rate is high because
the whole window is retransmitted in order to get retransmission of a
single message or two.
IV. Establishing an Association
In the experiment two flags were used to establish an association. FRST
(FiRST flag) was the equivalent of SYN described in INWG Note #39 and
served to identify the first message of an association. This instructed
Show full document text