diff options
author | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 |
---|---|---|
committer | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 |
commit | 4bfd864f10b68b71482b35c818559068ef8d5797 (patch) | |
tree | e3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc700.txt | |
parent | ea76e11061bda059ae9f9ad130a9895cc85607db (diff) |
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc700.txt')
-rw-r--r-- | doc/rfc/rfc700.txt | 332 |
1 files changed, 332 insertions, 0 deletions
diff --git a/doc/rfc/rfc700.txt b/doc/rfc/rfc700.txt new file mode 100644 index 0000000..3323548 --- /dev/null +++ b/doc/rfc/rfc700.txt @@ -0,0 +1,332 @@ + +NWG/RFC 700 August 1974 +NIC 31020 +INWG Experiments Note 1 + + A Protocol Experiment + + + Eric R. Mader + William W. Plummer + Raymond S. Tomlinson + + + +I. Introduction + +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 + + Page 2 + + + +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 +the receiver to accept the sequence number in the message as a +definition of the starting point of sequence numbers for the +association. + +The second flag is a receiver-to-sender flag called HUH which is a +request by the receiver for a definition of the sequence numbers. Upon +receipt of a message containing an HUH, the sender responds by turning +on FRST in the next data message. Normally, HUH is sent only if the +receiver had been restarted, or if it is replying to messages on a port + + Page 3 + + + +that it knows is not part of an association. + + + +V. A Problem + +A severe problem uncovered with the protocol was concerned with +establishing an association. If the PDP-11 (receiver) was reloaded +while the spooler (sender) was running, the first few pages of the data +stream were printed about six times before normal operation was +established. The cause was traced to the following sequence of actions: + + + 1. The sender would be in a loop, timing out and + retransmitting because the receiver had not responded. + + 2. Upon being restarted, the receiver would see a whole + window's worth of messages, and respond to each with an HUH. + + 3. For each HUH the sender would reset the window and include + a FRST flag with the first message in each of the (six) + retransmissions. + + 4. The receiver would see the first message of the first + retransmission containing a FRST, accept the sequence number, + and print the data from that and the following messages. + Then, another message containing the FRST flag would appear + and the cycle would repeat (five more times). Note that the + ACK's generated in the repetitions were ignored by the sender + because they were to the left of the window. + + +As a "cure" for the above the receiver program was modified so that +after sending an HUH, messages are ignored until one with a FRST flag +appears. This solution is unacceptable in general because it leaves the +receiver port useless if either the message containing the HUH or the +response gets lost in transmission. Although a timeout was used to +guard against this, the timeout cannot be trusted because it might cause +two messages with FRST flags to be received -- just the problem which is +being avoided! + +An alternate cure which does not depend on the network to be lossless +would be to modify the sender to respond to a HUH by ignoring all +messages for at least a round trip delay time before sending its +response containing the FRST flag. This results in having to define +what this time is. In general this cannot be done when messages can +become trapped for indefinite amounts of time in network partitions. +This will be discussed more fully in a subsequent document. + + Page 4 + + + +VI. Features not Investigated + +None of the programs to date have supported any of the following +features: + + + 1. Window size control. The window size was a constant (2048 + bytes). In a future experiment the window size will be varied + not only by indications of buffer space in the receiver, but + also as a function of estimated transit time. (see below). + + 2. Reassembly. Since reassembly is conceptually easy, it is + likely to be one of the first extensions. A message corrupter + will be included in the receiver to test the functioning of + the reassembly mechanism. + + 3. Expanded Internetwork Addresses + + 4. Multiple Associations + + 5. Reliable Making and Breaking of Associations + + + +VII. Implementations Notes + +The sender involves approximately ten pages of assembly code for the +network message interface. Two processes are involved: one which fills +a buffer by reading the input data stream, and a second process which +sends network messages from the buffer and processes replies from the +receiver. The two processes are joined by a coroutine mechanism, but in +the future will be two parallel TENEX processes. + +The receiver program consists of approximately four pages of BCPL code +in addition to IO device drivers and routines which implement queueing +primitives. + +Each message contained between zero and 255 bytes of data arranged (as a +coding convenience) in a way which is directly compatible with the BCPL +string handling routines. Messages contained a single byte of checksum +which was the low eight bits of the twos complement negation of the twos +complement sum of all other bytes in the message. We recommend that +some more reliable checksum function be employed in the future; even +using eight-bit ones complement arithmetic would be better. + +Source files for the various programs are available from the authors at +Bolt Beranek and Newman, 50 Moulton Street, Cambridge Mass., 02138. + + Page 5 + + + +VIII. Simple Rate Calculations + +If we assume that an active association has reached steady state, that +processing delays are lumped into the transit time T, and that there are +no errors, then the maximum data rate may be calculated as follows. + +Assume the sequence numbers being passed by the RIGHT pointer are some +function of time, R(t). Messages received by the receiver will be the +same function of time but delayed T (a transit time) seconds. Since +processing time is zero, the acknowledgments will bear this same +function, R(t-T). Acknowlegements received by the sender will have +sequence numbers R(t-2T). + +Acknowledgements at the sender determine the LEFT pointer, L(t). Also, +it is known that R(t) is ahead of L(t) by the width of the window which +is a constant in steady state. Thus, we have the two relations: + + L(t) = R(t-2T) + L(t) = R(t) - W + +Now, let R(t) = Bt, i.e., sequence numbers are increasing linearly with +time. (Microscopically, short bursts will alternate with longer periods +of inactivity, but the average bandwidth will be B.) The result under +the assumptions is that the bandwidth is: + + B = W/2T . + +That is, the bandwidth in bytes per second is just the steady state +window width divided by the round trip delay time. Conversely, the aboe +relation can be determine the buffer sized needed: in oreder for thee +receiver to guarantee to accept information that was transmitted, it +must supply buffering equal to (or greater than) the window size. The +window size must be equal to or greater than the desired bandwidth times +the round-trip delay time, i.e. equal to the number of messages in a +round-trip "pipeline". + +The bandwidth in the presence of a relatively low error rate may be +calculated. Assume that B and W are expressed in terms of (full) +messages rather than byte numbers. Each error has two effects: a time +out delay of D seconds and retransmission of W messages. So, the time +Q(M,N) required to transmit M messages burdened by N errors is the sum +of the time to transmit the data once, N*D seconds of time out delay, +and the time to transmit the window N more times. + + Q(M,N) = (2T/W)*M + N*D + N*2T + +Dividing by M to get time per message and multiplying the last term by +(W/W): + + Q(M,N)/M = (2T/W) + (N/M)*D + (2T/W)*(N/M)*W . + +But (M/N) is just the fraction of messages in error. Call this E. + + Page 6 + + + + Q(E) = (2T/W)*(1 + EW) + ED + + B(E) = 1/[(2T/W)(1+EW) + ED] + +The advantage to using the "say again" mechanism (Section III.) can now +be seen: it forces D to be zero, allowing a reasonable average data rate +in the presence of errors. Note the effect of a 10 second time out on a +network with an E of 0.01, assuming W to be 20 messages and T of 0.5 +second. B(D=10) is 6.7, but with forced retransmission, B(D=0) is 20. + + + +IX. A Sequence Number Consideration + +In order to reject duplicate messages, sequence numbers must contain a +sufficient number of bits such that it is impossible to cycle through +more than half the sequence number space in a message lifetime at +maximum transmission rate. Assuming a 1 MegaByte per second network and +a maximum lifetime of 500 seconds, the sequence number field of each +message must be capable of holding the number 2*500*10**6 which is 10**9 +or about 2**30. Thus, a 32-bit (4-byte) sequence number field is +recommended. + + + +X. Additional Control Functions + +In response to an attempt to establish an association (SYN) it is felt +that the receiver should be able to deny the attempt (RELease) in one of +the following three ways: + + REJECT. (I'm busy. Try again later.) + ABORT. (I don't understand what you are sending. + (Bad port, etc.)) + ABNORMAL (SYN arrived on a established connection.) + (Receiver breaks connection and issues this REL.) + +During an established association, the sender should be able to RELease +the association in either of these ways: + + DONE. (I'm done sending to you.) + GAG. (Stop. You are sending garbage (ACK's).) + +These may be coded as combinations of bits in the FLAGS which are +convenient for programming. + + + +
\ No newline at end of file |