diff options
Diffstat (limited to 'doc/rfc/rfc916.txt')
-rw-r--r-- | doc/rfc/rfc916.txt | 3078 |
1 files changed, 3078 insertions, 0 deletions
diff --git a/doc/rfc/rfc916.txt b/doc/rfc/rfc916.txt new file mode 100644 index 0000000..a13497f --- /dev/null +++ b/doc/rfc/rfc916.txt @@ -0,0 +1,3078 @@ + + +Network Working Group G. Finn +Request for Comments: 916 ISI + October 1984 + + RELIABLE ASYNCHRONOUS TRANSFER PROTOCOL (RATP) + + +Status of This Memo + + This RFC suggests a proposed protocol for the ARPA-Internet + community, and requests discussion and suggestions for improvements. + Distribution of this memo is unlimited. + + This paper proposes and specifies a protocol which allows two + programs to reliably communicate over a communication link. It + ensures that the data entering one end of the link if received + arrives at the other end intact and unaltered. The protocol, named + RATP, is designed to operate over a full duplex point-to-point + connection. It contains some features which tailor it to the RS-232 + links now in common use. + +Introduction + + We are witnessing today an explosive growth in the small or personal + computer market. Such inexpensive computers are not normally + connected to a computer network. They are most likely stand-alone + devices. But virtually all of them have an RS-232 interface. They + also usually have a modem. This allows them to communicate over the + telephone with any other similarly equipped computer. + + The telephone system is a pervasive network, but one of the + characteristics of the telephone system is the unpredictable quality + of the circuit. The standard telephone circuit is designed for voice + communication and not data communication. Voice communication + tolerates a much higher degree of 'noise' than does a data circuit, + so a voice circuit is tolerant of a much higher level of noise than + is a data circuit. Thus it is not uncommon for a byte of data + transferred over a telephone circuit to have noise inserted. For the + same reason it is also not uncommon to have spurious data bytes added + to the data stream. + + The need for a method of reliably transferring data over an RS-232 + point-to-point link has become severe. As the number of powerful + personal computers grows, the need for them to communicate with one + another grows as well. The new markets and new services that these + computers will eventually allow their users to access will rely + heavily upon the telephone system. Services like electronic mail, + electronic banking, ordering merchandise from home with a personal + computer, etc. As the information revolution proceeds data itself + will become a commodity. All require accuracy of the data sent or + received. + + +Finn [Page 1] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + +1. Philosopy of Design + + Many tradeoffs were made in designing this protocol. Decisions were + made by above all ensuring reliability and then by favoring + simplicity of implementation. It is hoped that this protocol is + simple enough to be implemented not only by small computers but also + by stand alone devices incorporating microcomputers which accept + commands over RS-232 lines. Sophisticated but unnecessary features + such as dynamic window management [TCP 81] were left out for + simplicity's sake. Having several packets outstanding at a time was + eliminated for the same reason, and data queued to send when a + connection is closed remotely is discarded. This eliminates two + states from the protocol implementation. + + The reader may ask why define this protocol at all, there are after + all already RS-232 transport protocols in use. This is true but some + lack one or more features vitally important or are too complex. See + Appendix II for a brief survey. + + - A protocol which can only transfer data in one direction is + unable to use a single RS-232 link for a full-duplex connection. + As such it cannot act as a bridge between most computer + networks. Also it is not capable of supporting any applications + requiring the two-way exchange of data. In particular it is not + a platform suitable for the creation of most higher level + applications. Unidirectional flow of data is sufficient for a + weak implementation of file transfer but insufficient for remote + terminal service, transaction oriented processing, etc. + + - Some of the existing RS-232 transport protocols allow the use of + only fixed size packets or do not allow the receiver to place a + limit on the sender's packets. Where that block size is too + large for the receiving end concentrator, that concentrator is + likely to immediately invoke flow control. This results in many + dropped and damaged packets. The receiver must be able to + inform the sender at connection initiation what is the maximum + packet size it is prepared to receive. + + - Some protocols have a number of features which may or may not be + implemented at each site. Examples are, several checksumming + algorithms, differing data transmission restrictions, sometimes + 8-bit data, sometimes restricted ASCII subsets, etc. The + resulting requirement that all sites implement all the various + features is rarely met. + + Finally, the size of this document may be imposing. The document + attempts to fully specify the behavior of the protocol. A careful + + +Finn [Page 2] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + exposition of the protocol's behavior under all circumstances is + necessary to answer any questions an implementor might have, to make + it possible to verify the protocol, etc. This size of this + specification should not be taken as an indication of the difficulty + of implementing it. + + 1.1. The Host Environment + + This protocol is designed to operate on any point-to-point + communication link capable of transmitting and receiving data. It + is not necessary that the link be asynchronous. Because neither + end of a connection has control over when the other decides to + transmit, the link should be full duplex. It is expected that in + the vast majority of circumstances an asynchronous full-duplex + RS-232 link will be used. + + In practice this protocol could reside anywhere from the RS-232 + driver software on a microcomputer in a concentrator all the way + to the user software level. Ideally it properly resides inside + the host operating system or concentrator. It should be an option + associated with communication link which is selectable by the user + program. If reliable data transmission were of great importance + then the software would choose the option. Once the option were + chosen the initial connection handshaking would begin. + + There are many cases where this protocol will not reside in a host + operating system (initially this will always be so). In addition + there are many pieces of stand-alone equipment which accept + commands over an RS-232 link. A plotter is such an example. To + have a several hour plot ruined by noise on an unreliable data + line is an all too often occurrence. The sending and receiving + sides of the protocol should be as simple as possible allowing + applications software and stand alone devices to utilize the + protocol with little penalty of time or space. + + 1.2. Relation to Other Protocols + + The "layering" concept has become the accepted way of designing + communications protocols. Because this protocol will operate in a + point-to-point environment it comprises both the datagram and + reliable connection layers. No multi-network capability is + implied. Where a link using this protocol bridges differing + networks it is expected that other protocols like TCP will have + their packets fragmented and encapsulated inside the packets of + this protocol. + + + + +Finn [Page 3] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + +2. Packet Specification + + RATP transmits data over a full-duplex communication link. Data may + be transmitted in both directions over the link. A stream of data is + communicated by being broken up into 8-bit pieces called octets. + These octets are serially accumulated to form a packet. The packet + is the unit of data communicated over the link. The protocol + virtually guarantees that the data transmitted at one end, if + received, arrives unaltered and intact at the other end. + + Within an octet all eight bits contain data. All eight bits must be + preserved by the link interface and associated device driver. In + many operating systems this is ensured by placing the connection into + RAW or BINARY data mode. During normal operation packets are + transmitted and acknowledged one at a time over the link in each + direction. Each packet is composed of a HEADER followed by a DATA + portion. The DATA portion may be empty. + + NOTE: There are some older operating systems and devices which do + not permit 8-bit communication over an RS-232 link. Most of these + allow restricted 7-bit communication. RATP can automatically + detect this situation during connection initiation and utilizes a + special packing strategy when full 8-bit communication is not + possible. This is entirely transparent to any client software. + See Appendix I for a discussion of this case. + + + + + + + + + + + + + + + + + + + + + + + + +Finn [Page 4] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + 2.1. Header Format + + Byte No. + + +-------------------------------+ + | | + 1 | Synch Leader | Hex 01 + | | + +-------------------------------+ + | S | A | F | R | S | A | E | S | + 2 | Y | C | I | S | N | N | O | O | Control + | N | K | N | T | | | R | | + +-------------------------------+ + | | + 3 | Data length (0-255) | + | | + +-------------------------------+ + | | + 4 | Header Checksum | + | | + +-------------------------------+ + + Header Portion of a Packet + + 2.1.1. Synch Leader + + RS-232 provides a self-clocking communications medium. The + wires over which data flows are often placed in 'noisy' + environments where the noise can appear as added unwanted data. + For this reason the beginning of a packet is denoted by a one + octet SYNCH pattern. This allows the receiver to discard noise + which appears on the connection prior to the reception of a + packet. The SYNCH pattern is defined to be the one octet hex + 01, the ASCII Start Of Header character <SOH>. + + The SYNCH pattern should ideally be unlikely to occur as the + result of noise. Differing modems, etc. have differing + responses to noise so this is hard to achieve. The pattern + chosen is thought to be a good compromise since many modems + manifest noise by setting the high order bits. Situations will + occur in which receiver is scanning for the beginning of a + packet and a spurious SYNCH pattern is seen. To detect + situations of this type a header checksum is provided (see + below). + + + + + +Finn [Page 5] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + 2.1.2. Control Bits + + The first octet following the SYNCH pattern contains a 5-bit + field of control flags and two 1-bit sequence number fields. + The last bit is reserved and must be zero. + + 2.1.2.1. SYN - Synchronize Flag + + Synchronize the connection. No data may be sent in a packet + which has the SYN flag set. + + 2.1.2.2. ACK - Acknowledge Flag + + Acknowledge number is significant. Data may accompany a + packet which has this flag set as long as neither of SYN, + RST, nor FIN are also set. Once a connection has been + established this is always set. + + 2.1.2.3. RST - Reset Flag + + Reset the connection. This is a method by which one end of + a connection can reset the other when an anomalous condition + is detected. No data may be sent in a packet which has the + RST flag set. + + 2.1.2.4. FIN - Finishing Flag + + This indicates that no more data will be sent to the other + end of the connection. It also indicates that no more data + will be accepted. No data may be sent in a packet which has + the FIN flag set. + + 2.1.2.5. SN - Sequence Number + + The Sequence Number associated with this packet. + + 2.1.2.6. AN - Acknowledge Number + + If the ACK control flag is set this is the next Sequence + Number the sender of the packet is expecting to receive. + + 2.1.2.7. EOR - End of Record + + This bit is provided as an aid for higher level protocols + which may need to fragment their packets. The Internet + protocol for example often uses packets as large as 576 + octets. A packet of such size would require fragmentation + + +Finn [Page 6] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + when transported using this protocol. The EOR bit if set + provides information to the higher level that a record is + terminated in this packet. It is for information only and + is the responsibility of the higher level to set/clear it + when building packets to send. The interface to the + protocol must provide a method of reading/setting/clearing + this bit. + + 2.1.2.8. SO - Single Octet + + One application thought to be of special importance is + single character transmission --- a user communicates from + the keyboard of a personal computer to another computer over + an unreliable link. Since rapid interactive response is + desirable it is expected that many of the characters typed + will be transmitted individually. To minimize the overhead + of this special case the SO control flag is provided. + + The SO flag has no meaning if either the SYN, RST, or FIN + flags are set. Assume none of those flags are set, then if + the SO flag is set it indicates that a single octet of data + is contained in this packet. Since the amount of data is + known to be one octet the LENGTH field is superfluous and + itself contains the data octet. The data portion of the + packet is not transmitted. + + The SO flag removes the need to transmit the data portion of + the packet in this special case. Without the SO flag seven + octets would be required of the packet, with it only four + are needed and so transmission efficiency is improved by 40 + percent. The header checksum protects the single octet of + data. + + 2.1.3. Length + + The second octet following the SYNCH pattern holds length + information. If the SYN bit is present this contains the + maximum number of data octets the receiver is allowed to + transmit in any single packet to the sender. This quantity is + called the MDL. A sender may indicate his unwillingness to + accept any data octets by specifying an MDL of zero. In this + case presumably all the data would be moving from the sender to + the receiver. Obviously if data is to be transmitted both + sides of a connection cannot have an MDL of zero. + + If neither the SYN, RST, nor FIN flags are set this is an 8-bit + field called LENGTH. In this case if the SO flag bit is set + + +Finn [Page 7] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + then LENGTH contains a single octet of data. Otherwise it + contains the count of data octets in this packet. From zero + (0) to MDL octets of data may appear in a single packet. MDL + is limited to a maximum of 255. + + 2.1.4. Header Checksum + + The header checksum algorithm is the 8-bit equivalent of the + 16-bit data checksum detailed below. It is built and processed + in an similar manner but is eight bits wide instead of sixteen. + When sending the header checksum octet is initially cleared. + An 8-bit sum of the control, length, and header checksum octets + is formed employing end-around carry. That sum is then + complemented and stored in the header checksum octet. Upon + receipt the 8-bit end-around carry sum is formed of the same + three octets. If the sum is octal 377 the header is presumed + to be valid. In all other cases the header is assumed to be + invalid. + + The reasons for providing this separate protection to the + header are discussed in the chapter dealing with error + handling. The header checksum covers the control and data + length octets. It does not include the SYNCH pattern. + + 2.2. Data Format + + The data portion of a packet immediately follows the header if the + SO flag is not set and LENGTH > 0. It consists of LENGTH data + octets immediately followed by two data checksum octets. If + present the data portion contains LENGTH+2 octets. + + + + + + + + + + + + + + + + + + + +Finn [Page 8] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + Data Byte No. + + +-------------------------------+ + 1 | | High order \ + +-- --+ > Word + 2 | | Low order / + +-- --+ + . | Data | High order \ + +-- --+ > Word + . | | Low order / + +-- --+ + LENGTH | | High order \ + +-------------------------------+ > Word + | Imaginary padding octet 0 | Low order / + +-------------------------------+ + LENGTH+1 | | High order \ + +-- Data Checksum --+ > Word + LENGTH+2 | | Low order / + +-------------------------------+ + + Data Portion of a Packet + + 2.2.1. Data Checksum + + The last two octets of the data portion of a packet are a data + checksum. A 16-bit checksum is used by this protocol to detect + incorrectly transmitted data. This has shown itself to be a + reliable method for detecting most categories of bit drop out + and bit insertion. While it does not guarantee the detection + of all such errors the probability of such an error going + undetected is on the order of 2**(-16). + + The checksum octets follow the data to enable the sender of a + packet to compute the checksum while transmitting a packet and + the receiver to compute the checksum while receiving the + packet. Thus neither must store the packet and then process + the data for checksumming in a separate pass. + + Order of Transmission + + The order in which the 8-bit octets are assembled into + 16-bit words, which is the low order octet and which is the + high, must be rigidly specified for the purpose of computing + 16-bit checksums. We specify the big endian ordering in the + diagram above [Cohen 81]. + + + + +Finn [Page 9] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + Checksum Algorithm + + The checksum algorithm chosen is similar to that used by + IP/TCP protocols [IP 81] [TCP 81]. This algorithm has shown + itself to be both reliable and relatively easy to compute. + The interested reader may refer to [TCP Checksum 78] for a + more thorough discussion of its properties. + + The checksum algorithm is: + + SENDER + + The unsigned sum of the 16-bit words of the data portion + of the packet is formed. Any overflow is added into the + lowest order bit. This sum does not include the header + portion of the packet. For the purpose of building a + packet for transmission the two octet checksum field is + zero. The sum formed is then bit complemented and + inserted into the checksum field before transmission. + + If the total number of data octets is odd then the last + octet is padded to the right (low order) with zeros to + form a 16-bit word for checksum purposes. This pad octet + is not transmitted as part of the packet. + + RECEIVER + + The sum is computed as above but including the values + received in the checksum field. If the 16-bit sum is + octal 177777 then the data is presumed to be valid. In + all other cases the data is presumed to be invalid. + + This unsigned 16-bit sum adds 16-bit quantities with any + overflow bit added into the lowest order bit of the sum. This + is called 'end around carry'. End around carry addition + provides several properties: 1) It provides full commutivity of + addition (summing in any order is equivalent), and 2) If you + apply a given rotation to each quantity before addition and + when the final total is formed apply the inverse rotation, then + the result will be equivalent to any other rotation chosen. + The latter property gives little endian machines like a PDP-11 + the go ahead to pick up 16-bit quantities and add them in byte + swapped order. + + + + + + +Finn [Page 10] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + The PDP-11 code to calculate the checksum is: + + CLR R0 ; R0 will get the checksum + ; R2 contains LENGTH count + LOOP: ADD (R1)+,R0 ; Add the next 16-bit byte + ADC R0 ; Make any carry be end around + SOB R2,LOOP ; Loop over entire packet + COM R0 ; Bit complement result + + 2.3. Sequence Numbers + + Sequence numbers work with acknowledge numbers to inform the + sender that his last data packet was received, and to inform the + receiver of the sequence number of the next data packet it expects + to see. When the ACK flag is set in a packet the AN field + contains the sequence number of the next data packet it expects + from the sender. The sender looks at the AN field and by + implication knows that the packet he just sent should have had a + sequence number of: + + <AN received-1 modulo 2> + + If it did have that number that packet is considered to have been + acknowledged. + + Similarly, the receiver expects the next data packet it sees to + have an SN field value equal to the AN field of the last + acknowledge message it sent. If this is not the case then the + receiver assumes that it is receiving a duplicate of a data packet + it earlier acknowledged. This implies that the packet containing + the acknowledgment did not arrive and therefor the packet that + contained the acknowledgment should be retransmitted. The + duplicate data packet is discarded. + + The only packets which require acknowledgment are packets + containing status flags (SYN, RST, FIN, or SO) or data. A packet + which contains only an acknowledgment, i.e. <AN=n><CTL=ACK>, does + not require a response (it contains no status flags or data). + + Both the AN and SN fields are a single bit wide. Since at most + one packet is in the process of being sent/acknowledged in a + particular direction at any one time a single bit is sufficient to + provide a method of duplicate packet detection and removal of a + packet from the retransmission queue. The arithmetic to advance + these numbers is modulo 2. Thus when a data packet has been + acknowledged the sender's next sequence number will be the current + one, plus one modulo 2: + + +Finn [Page 11] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + <SN = SN + 1 modulo 2> + + The individual acknowledgment of each packet containing data can + mislead one into thinking that side A of a connection cannot send + data to side B until it receives a packet from B. That only then + can it acknowledge B's packet and place in the acknowledging + packet some data of its own. This is not the case. + + As long as its last packet sent requiring a response has been + acknowledged each side of a connection is free to send a data + packet whenever it wishes. Naturally, if one side is sending a + data packet and it also must acknowledge receipt of a data packet + from the other side, it is most efficient to combine both + functions in a single packet. + + 2.4. Maximum Packet Size + + The maximum packet size is: + + SYNCH + HEADER + Data Checksum + 255 = 261 octets + + There is therefor no need to allocate more than that amount of + storage for any received packets. + + + + + + + + + + + + + + + + + + + + + + + + + + +Finn [Page 12] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + +3. The Opening and Closing of a Connection + + 3.1. Opening a Connection + + A "three-way handshake" is the procedure used to establish a + connection. It is normally initiated by one end of the connection + and responded to by the other. It will still work if both sides + simultaneously initiate the procedure. Experience has shown that + this strategy of opening a connection reduces the probability of + false connections to an acceptably low level. + + The simplest form of the three-way handshake is illustrated in the + diagram below. The time order is line by line from top to bottom + with certain lines numbered for reference. User events are placed + in brackets as in [OPEN]. An arrow (-->) represents the direction + of flow of a packet and an ellipsis (...) indicates a packet in + transit. Side A and side B are the two ends of the connection. + An "XXX" indicates a packet which is lost or rejected. The + contents of the packet are shown on the center of each line. The + state of both connections is that caused by the departure or + arrival of the packet represented on the line. The contents of + the data portion of a packet are left out for clarity. + + Side A Side B + + 1. CLOSED LISTEN + + 2. [OPEN request] + SYN-SENT -> <SN=0><CTL=SYN><MDL=n> ... + + 3. --> SYN-RECEIVED + ... <SN=0><AN=1><CTL=SYN,ACK><MDL=m> <-- + + 4. ESTABLISHED <-- + --> <SN=1><AN=1><CTL=ACK><DATA> ... + + 5. --> ESTABLISHED + + In line 2 above the user at side A has requested that a connection + be opened. Side A then attempts to open a connection by sending a + SYN packet to side B which is in the LISTEN state. It specifies + its initial sequence number, here zero. It places in the LENGTH + field of the header the largest number of data octets it can + consume in any one packet (MDL). The MDL is normally positive. + The action of sending this packet places A in the SYN-SENT state. + + In line 3 side B has just received the SYN packet from A. This + + +Finn [Page 13] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + places B in the SYN-RECEIVED state. B now sends a SYN packet to A + which acknowledges the SYN it just received from A. Note that the + AN field indicates B is now expecting to hear SN=1, thus + acknowledging the SYN packet from A which used SN=0. B also + specifies in the LENGTH field the largest number of data octets it + is prepared to consume. + + Side A receives the SYN packet from B which acknowledges A's + original SYN packet in line 4. This places A in the ESTABLISHED + state. Side A can now be confident that B expects to receive more + packets from A. + + A is now free to send B the first DATA packet. In line 5 upon + receipt of this packet side B is placed into the ESTABLISHED + state. DATA cannot be sent until the sender is in the ESTABLISHED + state. This is because the LENGTH field is used to specify the + MDL when opening the connection. + + 3.2. Recovering from a Simultaneous Active OPEN + + It is of course possible that both ends of a connection may choose + to perform an active OPEN simultaneously. In this case neither + end of the connection is in the LISTEN state, both send SYN + packets. A reliable bidirectional protocol must recover from this + situation. It should recover in such a manner that the connection + is successfully initiated. + + + + + + + + + + + + + + + + + + + + + + + +Finn [Page 14] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + Side A Side B + + 1. CLOSED CLOSED + + 2. [OPEN request] + SYN-SENT --> <SN=0><CTL=SYN><MDL=n> ... + + 3. ... [OPEN request] + <SN=0><CTL=SYN><MDL=m> <-- SYN-SENT + + 4. --> SYN-RECEIVED + ... <SN=0><AN=1><CTL=SYN,ACK><MDL=m> <-- + + 5. (packet finally arrives) + SYN-RECEIVED <-- <SN=0><CTL=SYN><MDL=m> + + --> <SN=0><AN=1><CTL=SYN,ACK><MDL=n> --> ESTABLISHED + ... <SN=1><AN=1><CTL=ACK> <-- + + 6. (packet finally arrives) + ESTABLISHED <-- <SN=0><AN=1><CTL=SYN,ACK><MDL=m> + --> <SN=1><AN=1><CTL=ACK> ... + + During simultaneous connection both sides of the connection + cycle from the CLOSED state through SYN-SENT to SYN-RECEIVED, + and finally to ESTABLISHED. + + 3.3. Detecting a Half-Open Connection + + Any computer may crash after a connection has been established. + After recovering from the crash it may attempt to open a new + connection. The other end must be able to detect this condition + and treat it as an error. + + + + + + + + + + + + + + + + +Finn [Page 15] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + Side A Side + + 1. ESTABLISHED ESTABLISHED + + --> <SN=0><AN=1><CTL=ACK><DATA> ... + --> + (crashes) + + 2. XXX <SN=1><AN=1><CTL=ACK><DATA> <-- + + 3. (attempts to open new connection ) + --> <SN=0><CTL=SYN><MDL=m> --> + ... <SN=0><AN=1><CTL=RST,ACK> <-- (abort) + CLOSED + + 4. <-- + (connection refused) + CLOSED + + 3.4. Closing a Connection + + Either side may choose to close an established connection. This + is accomplished by sending a packet with the FIN control bit set. + No data may appear in a FIN packet. The other end of the + connection responds by shutting down its end of the connection and + sending a FIN, ACK in response. + + Side A Side B + + 1. ESTABLISHED ESTABLISHED + + 2. [CLOSE request from user] + FIN-WAIT --> <SN=0><AN=1><CTL=FIN> ... + + 3. --> LAST-ACK + ... <SN=1><AN=1><CTL=FIN,ACK> <-- + + 4. TIME-WAIT <-- + --> <SN=1><AN=0><CTL=ACK> ... + + 5. --> CLOSED + + 6. (after 2*SRTT time passes) + CLOSED + + In line 2 the user on side A of the fully opened connection has + decided to close it down by issuing a CLOSE call. No more data + + +Finn [Page 16] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + will be accepted for sending. If data remains unsent a message + "Warning: Unsent data remains." is communicated to the user. No + more data will be received. A packet containing a FIN but no data + is constructed and sent. Side A goes into the FIN-WAIT state. + + Side B sees the FIN sent and immediately builds a FIN, ACK packet + in response. It then goes into the LAST-ACK state. The FIN, ACK + packet is received by side A and an answering ACK is immediately + sent. Side A then goes to the TIME-WAIT state. In line 5 side B + receives the final acknowledgment of its FIN, ACK packet and goes + to the CLOSED state. In line 6 after waiting to be sure its last + acknowledgment was received side A goes to the CLOSED state (SRTT + is the Smoothed Round Trip Time and is defined in section 6.3.1). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Finn [Page 17] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + +4. Packet Reception + + The act of receiving a packet is relatively straightforward. There + are a few points which deserve some discussion. This chapter will + discuss packet reception stage by stage in time order. + + Synch Detection + + The first stage in the reception of a packet is the discovery of a + SYNCH pattern. Octets are read continuously and discarded until + the SYNCH pattern is seen. Once SYNCH has been observed proceed + to the Header Reception stage. + + Header Reception + + The remainder of the header is three octets in length. No further + processing can continue until the complete header has been read. + Once read the header checksum test is performed. If this test + fails it is assumed that the current SYNCH pattern was the result + of a data error. Since the correct SYNCH may appear immediately + after the current one, go back to the Synch Detection stage but + treat the three octets of the header following the bad SYNCH as + new input. + + If the header checksum test succeeds then proceed to the Data + Reception stage. + + Data Reception + + A determination of the remaining length of the packet is made. If + either of the SYN, RST, SO, or FIN flags are set then legally the + entire packet has already been read and it is considered to have + 'arrived'. No data portion of a packet is present when one of + those flags is set. Otherwise the LENGTH field specifies the + remaining amount of data to read. In this case if the LENGTH + field is zero then the packet contains no data portion and it is + considered to have arrived. + + We now assume that a data portion is present and LENGTH was + non-zero. Counting the data checksum LENGTH+2 octets must now be + read. Once read the data checksum test is performed. If this + test fails the entire packet is discarded, return to the Synch + Detection stage. If the test succeeds then the packet is + considered to have arrived. + + + + + +Finn [Page 18] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + Once arrived the packet is released to the upper level protocol + software. In a multiprocess implementation packet reception would + now begin again at the Synch Detection stage. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Finn [Page 19] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + +5. Functional Specification + + A convenient model for the discussion and implementation of protocols + is that of a state machine. A connection can be thought of as + passing through a variety of states, with possible error conditions, + from its inception until it is closed. In such a model each state + represents a known point in the history of a connection. The + connection passes from state to state in response to events. These + events are caused by user calls to the protocol interface (a request + to open or close a connection, data to send, etc.), incoming packets, + and timeouts. + + Information about a connection must be maintained at both ends of + that connection. Following the terminology of [TCP 81] the + information necessary to the successful operation of a connection is + called the Transmission Control Block or TCB. The user requests to + the protocol interface are OPEN, SEND, RECEIVE, ABORT, STATUS, and + CLOSE. + + This chapter is broken up into three parts. First a brief + description of each protocol state will be presented. Following this + is a slightly more detailed look at the allowed transitions which + occur between states. Finally a detailed discussion of the behavior + of each state is given. + + 5.1. Protocol States + + The states used to describe this protocol are: + + LISTEN + + This state represents waiting for a connection from the + other end of the link. + + SYN-SENT + + This represents waiting for a matching connection request + after having sent a connection request. + + SYN-RECEIVED + + This represents waiting for a confirming connection request + acknowledgment after having both received and sent a + connection request. + + + + + +Finn [Page 20] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + ESTABLISHED + + This state represents a connection fully opened at both + ends. This is the normal state for data transfer. + + FIN-WAIT + + In this state one is waiting for a connection termination + request from the other end of the connection and an + acknowledgment of a termination request previously sent. + + LAST-ACK + + This end of the connection has seen and acknowledged a + termination request from the other end. This end has + responded with a termination request of its own and is now + expecting an acknowledgment of that request. + + CLOSING + + This represents waiting for an acknowledgment of a + connection termination request. + + TIME-WAIT + + This represents waiting for enough time to pass to be sure + that the other end of the connection received the + acknowledgment of its termination request. + + CLOSED + + A fictional state which represents a completely terminated + connection. If either end of a connection is in this state + it will neither send nor receive data or control packets. + + + + + + + + + + + + + + + +Finn [Page 21] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + 5.2. State Transitions + + This section describes events which cause the protocol to depart + from its current state. A brief mention of each state is + accompanied by a list of departure events and to which state the + protocol goes as a result of those events. Departures due to the + presence of a RST flag are not shown. + + 5.2.1. LISTEN + + This is a request to listen for any connection from the other + end of the link. In this state, no packets are sent. The + connection may be thought of as half-open. A STATUS request + will return to the caller this information. + + Arrived at from the CLOSED state in response to a passive OPEN. + In a passive OPEN no packets are sent, the interface is waiting + for the initiation of a connection from the other end of the + link. Also this state can be reached in certain cases in + response to an RST connection reset request. + + Departures + + - A CLOSE request is made by the user. Delete the half-open + TCB and go to the CLOSED state. + + - A packet arrives with the SYN flag set. Retrieve the + sender's MDL he placed into the LENGTH field. Set AN to + be received SN+1 modulo 2. Build a response packet with + SYN, ACK set. Choose your MDL and place it into the + LENGTH octet. Choose your initial SN, place in AN. Send + this packet and go to the SYN-RECEIVED state. + + 5.2.2. SYN-SENT + + Arrived at from the CLOSED state in response to a user's active + OPEN request. + + Departures + + - A CLOSE request is made by the user. Delete the TCB and + go to the CLOSED state. + + - A packet arrives with the SYN flag set. Retrieve the + sender's MDL he placed into the LENGTH field. Set AN to + + + + +Finn [Page 22] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + be received SN+1 modulo 2. Build a response packet with + ACK set, place in AN. Send this packet and go to the + SYN-RECEIVED state. + + - A packet arrives with the SYN, ACK flags set. Retrieve + the sender's MDL he placed into the LENGTH field. Set AN + to be received SN+1 modulo 2. Build a response packet + with ACK set. Set SN to be SN+1 modulo 2, place SN and AN + into the header. Remembering the other end's MDL, build + data portion of packet. Send this packet and go to the + ESTABLISHED state. + + 5.2.3. SYN-RECEIVED + + Arrived at from the LISTEN and SYN-SENT states in response to + an arriving SYN packet. + + Departures + + - A CLOSE request is made by the user. Create a packet with + FIN set. Send it and go to the FIN-WAIT state. + + - A packet arrives with the ACK flag set. This packet + acknowledges a previous SYN packet. Go to the ESTABLISHED + state. The TCB should now note the connection is fully + opened. + + - A packet arrives with the FIN flag set. The other end has + decided to close the connection. Create a packet with + FIN, ACK set. Send it and go to the LAST-ACK state. + + 5.2.4. ESTABLISHED + + This state is the normal state for a connection. Data packets + may be exchanged in both directions (MDL allowing). It is + arrived at from the SYN-RECEIVED and SYN-SENT states in + response to the completion of connection initiation. + + Departures + + - In response to a CLOSE request from the user. Set AN to + be most recently received SN+1 modulo 2. Build a packet + with FIN set. Set SN to be SN+1 modulo 2, place SN and AN + into the header and send the packet. Go to the FIN-WAIT + state. + + - A packet containing a FIN is received. Set AN to be + + +Finn [Page 23] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + received SN+1 modulo 2. Build a response packet with both + FIN and ACK set. Set SN to be SN+1 modulo 2, place SN and + AN into the header. No data portion is built. Send this + packet and go to the LAST-ACK state. + + 5.2.5. FIN-WAIT + + Arrived at from either the SYN-RECEIVED state or from the + ESTABLISHED state. In both cases the user had requested a + CLOSE of the connection and a packet with a FIN was sent. + + Departures + + - A FIN, ACK packet is received which acknowledges the FIN + just sent. Go to the TIME-WAIT state. + + - A FIN packet is received which indicates the other end of + the connection has simultaneously decided to close. Set + AN=received SN+1 modulo 2, and SN=SN+1 modulo 2. Send a + response packet with the ACK set. Go to the CLOSING + state. + + 5.2.6. LAST-ACK + + Arrived at from the ESTABLISHED and SYN-RECEIVED states. + + Departures + + - An ACK is received for the last packet sent which was a + FIN. Delete the TCB and go to the CLOSED state. + + 5.2.7. CLOSING + + Arrived at from the FIN-WAIT state. + + Departures + + - An ACK is received for the last packet sent which was a + FIN. Go to the TIME-WAIT state. + + 5.2.8. TIME-WAIT + + Arrived at from the FIN-WAIT and CLOSING states. + + + + + + +Finn [Page 24] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + Departures + + - This states waits until 2*SRTT time has passed. It then + deletes the TCB associated with the connection and goes to + the CLOSED state. + + 5.2.9. CLOSED + + This state can be arrived at for a number of reasons: 1) while + in the LISTEN state the user requests a CLOSE, 2) while in the + SYN-SENT state the user requests a CLOSE, 3) while in the + TIME-WAIT state the 2*SRTT time period has elapsed, and 4) + while in the LAST-ACK state an arriving packet has an ACK of + the previously sent FIN packet. + + In this state no data is read or sent over the link. To leave + this state requires an outside request to open a new + connection. + + Departures + + - User requests an active OPEN. Create a packet with SYN + set. Choose your MDL and place it into the LENGTH octet. + Choose your initial SN. AN is immaterial. Send this + packet and go to the SYN-SENT state. The TCB for this + connection is created. The connection may be thought of + as half-open. A STATUS request will return to the caller + this information. + + - User requests a passive OPEN. The TCB for this connection + is created. The connection may be thought of as + half-open. A STATUS request will return to the caller + this information. Go to the LISTEN state. + + + + + + + + + + + + + + + + +Finn [Page 25] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + 5.3. State Behavior + + This section discusses in detail the behavior of each state in + response to the arrival of a packet. In what follows a packet is + not considered to have arrived until it has passed a number of + tests (see the chapter entitled: Packet Reception). + + The method chosen to describe state behavior is tabular. Each + state is listed opposite a sequence of named procedures to execute + whenever a packet has arrived. + + STATE BEHAVIOR + =============+======================== + LISTEN | A + -------------+------------------------ + SYN-SENT | B + -------------+------------------------ + SYN-RECEIVED | C1 D1 E F1 H1 + -------------+------------------------ + ESTABLISHED | C2 D2 E F2 H2 I1 + -------------+------------------------ + FIN-WAIT | C2 D2 E F3 H3 + -------------+------------------------ + LAST-ACK | C2 D3 E F3 H4 + -------------+------------------------ + CLOSING | C2 D3 E F3 H5 + -------------+------------------------ + TIME-WAIT | D3 E F3 H6 + -------------+------------------------ + CLOSED | G + -------------+------------------------ + + For example, in the ESTABLISHED state the arrival of a packet + causes procedure C2 to be executed, then D2, then E, F2, H2, and + finally I1. Any procedure may terminate the processing which + occurs or cause a state change. Note that these procedures are + executed in sequence, first C2, then D2, etc. The time ordering + cannot be mixed. + + The particular actions associated with each procedure are now + described. + + + + + + + + +Finn [Page 26] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + A -------------------------------------------------------- + + This procedure details the behavior of the LISTEN state. First + check the packet for the RST flag. If it is set then packet is + discarded and ignored, return and continue the processing + associated with this state. + + We assume now that the RST flag was not set. Check the packet + for the ACK flag. If it is set we have an illegal condition + since no connection has yet been opened. Send a RST packet + with the correct response SN value: + + <SN=received AN><CTL=RST> + + Return to the current state without any further processing. + + We assume now that neither the RST nor the ACK flags were set. + Check the packet for a SYN flag. If it is set then an attempt + is being made to open a connection. Create a TCB for this + connection. The sender has placed its MDL in the LENGTH field, + also specified is the sender's initial SN value. Retrieve and + place them into the TCB. Note that the presence of the SO flag + is ignored since it has no meaning when either of the SYN, RST, + or FIN flags are set. + + Send a SYN packet which acknowledges the SYN received. Choose + the initial SN value and the MDL for this end of the + connection: + + <SN=0><AN=received SN+1 modulo 2><CTL=SYN, ACK><LENGTH=MDL> + + and go to the SYN-RECEIVED state without any further + processing. + + Any packet not satisfying the above tests is discarded and + ignored. Return to the current state without any further + processing. + + + + + + + + + + + + +Finn [Page 27] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + B -------------------------------------------------------- + + This procedure represents the behavior of the SYN-SENT state + and is entered when this end of the connection decides to + execute an active OPEN. + + First, check the packet for the ACK flag. If the ACK flag is + set then check to see if the AN value was as expected. If it + was continue below. Otherwise the AN value was unexpected. If + the RST flag was set then discard the packet and return to the + current state without any further processing, else send a + reset: + + <SN=received AN><CTL=RST> + + Discard the packet and return to the current state without any + further processing. + + At this point either the ACK flag was set and the AN value was + as expected or ACK was not set. Second, check the RST flag. + If the RST flag is set there are two cases: + + 1. If the ACK flag is set then discard the packet, flush the + retransmission queue, inform the user "Error: Connection + refused", delete the TCB, and go to the CLOSED state without + any further processing. + + 2. If the ACK flag was not set then discard the packet and + return to this state without any further processing. + + At this point we assume the packet contained an ACK which was + Ok, or there was no ACK, and there was no RST. Now check the + packet for the SYN flag. If the ACK flag was set then our SYN + has been acknowledged. Store MDL received in the TCB. At this + point we are technically in the ESTABLISHED state. Send an + acknowledgment packet and any initial data which is queued to + send: + + <SN=received AN><AN=received SN+1 modulo 2><CTL=ACK><DATA> + + Go to the ESTABLISHED state without any further processing. + + If the SYN flag was set but the ACK was not set then the other + end of the connection has executed an active open also. + Acknowledge the SYN, choose your MDL, and send: + + <SN=0><AN=received SN+1 modulo 2><CTL=SYN, ACK><LENGTH=MDL> + + +Finn [Page 28] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + Go to the SYN-RECEIVED state without any further processing. + + Any packet not satisfying the above tests is discarded and + ignored. Return to the current state without any further + processing. + + C1 -------------------------------------------------------- + + Examine the received SN field value. If the SN value was + expected then return and continue the processing associated + with this state. + + We now assume the SN value was not what was expected. + + If either RST or FIN were set discard the packet and return to + the current state without any further processing. + + If neither RST nor FIN flags were set it is assumed that this + packet is a duplicate of one already received. Send an ACK + back: + + <SN=received AN><AN=received SN+1 modulo 2><CTL=ACK> + + Discard the duplicate packet and return to the current state + without any further processing. + + C2 -------------------------------------------------------- + + Examine the received SN field value. If the SN value was + expected then return and continue the processing associated + with this state. + + We now assume the SN value was not what was expected. + + If either RST or FIN were set discard the packet and return to + the current state without any further processing. + + If SYN was set we assume that the other end crashed and has + attempted to open a new connection. We respond by sending a + legal reset: + + <SN=received AN><AN=received SN+1 modulo 2><CTL=RST, ACK> + + This will cause the other end, currently in the SYN-SENT state, + to close. Flush the retransmission queue, inform the user + "Error: Connection reset", discard the packet, delete the TCB, + and go to the CLOSED state without any further processing. + + +Finn [Page 29] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + If neither RST, FIN, nor SYN flags were set it is assumed that + this packet is a duplicate of one already received. Send an + ACK back: + + <SN=received AN><AN=received SN+1 modulo 2><CTL=ACK> + + Discard the duplicate packet and return to the current state + without any further processing. + + D1 -------------------------------------------------------- + + The packet is examined for a RST flag. If RST is not set then + return and continue the processing associated with this state. + + RST is now assumed to have been set. If the connection was + originally initiated from the LISTEN state (it was passively + opened) then flush the retransmission queue, discard the + packet, and go to the LISTEN state without any further + processing. + + If instead the connection was initiated actively (came from the + SYN-SENT state) then flush the retransmission queue, inform the + user "Error: Connection refused", discard the packet, delete + the TCB, and go to the CLOSED state without any further + processing. + + D2 -------------------------------------------------------- + + The packet is examined for a RST flag. If RST is not set then + return and continue the processing associated with this state. + + RST is now assumed to have been set. Any data remaining to be + sent is flushed. The retransmission queue is flushed, the user + is informed "Error: Connection reset.", discard the packet, + delete the TCB, and go to the CLOSED state without any further + processing. + + D3 -------------------------------------------------------- + + The packet is examined for a RST flag. If RST is not set then + return and continue the processing associated with this state. + + RST is now assumed to have been set. Discard the packet, + delete the TCB, and go to the CLOSED state without any further + processing. + + + + +Finn [Page 30] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + E -------------------------------------------------------- + + Check the presence of the SYN flag. If the SYN flag is not set + then return and continue the processing associated with this + state. + + We now assume that the SYN flag was set. The presence of a SYN + here is an error. Flush the retransmission queue, send a legal + RST packet. + + If the ACK flag was set then send: + + <SN=received AN><CTL=RST> + + If the ACK flag was not set then send: + + <SN=0><CTL=RST> + + The user should receive the message "Error: Connection reset.", + then delete the TCB and go to the CLOSED state without any + further processing. + + F1 -------------------------------------------------------- + + Check the presence of the ACK flag. If ACK is not set then + discard the packet and return without any further processing. + + We now assume that the ACK flag was set. If the AN field value + was as expected then return and continue the processing + associated with this state. + + We now assume that the ACK flag was set and that the AN field + value was unexpected. If the connection was originally + initiated from the LISTEN state (it was passively opened) then + flush the retransmission queue, discard the packet, and send a + legal RST packet: + + <SN=received AN><CTL=RST> + + Then delete the TCB and go to the LISTEN state without any + further processing. + + Otherwise the connection was initiated actively (came from the + SYN-SENT state) then inform the user "Error: Connection + refused", flush the retransmission queue, discard the packet, + and send a legal RST packet: + + + +Finn [Page 31] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + <SN=received AN><CTL=RST> + + Then delete the TCB and go to the CLOSED state without any + further processing. + + F2 -------------------------------------------------------- + + Check the presence of the ACK flag. If ACK is not set then + discard the packet and return without any further processing. + + We now assume that the ACK flag was set. If the AN field value + was as expected then flush the retransmission queue and inform + the user with an "Ok" if a buffer has been entirely + acknowledged. Another packet containing data may now be sent. + Return and continue the processing associated with this state. + + We now assume that the ACK flag was set and that the AN field + value was unexpected. This is assumed to indicate a duplicate + acknowledgment. It is ignored, return and continue the + processing associated with this state. + + F3 -------------------------------------------------------- + + Check the presence of the ACK flag. If ACK is not set then + discard the packet and return without any further processing. + + We now assume that the ACK flag was set. If the AN field value + was as expected then continue the processing associated with + this state. + + We now assume that the ACK flag was set and that the AN field + value was unexpected. This is ignored, return and continue + with the processing associated with this state. + + G -------------------------------------------------------- + + This procedure represents the behavior of the CLOSED state of a + connection. All incoming packets are discarded. If the packet + had the RST flag set take no action. Otherwise it is necessary + to build a RST packet. Since this end is closed the other end + of the connection has incorrect data about the state of the + connection and should be so informed. + + If the ACK flag was set then send: + + <SN=received AN><CTL=RST> + + + +Finn [Page 32] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + If the ACK flag was not set then send: + + <SN=0><AN=received SN+1 modulo 2><CTL=RST, ACK> + + After sending the reset packet return to the current state + without any further processing. + + H1 -------------------------------------------------------- + + Our SYN has been acknowledged. At this point we are + technically in the ESTABLISHED state. Send any initial data + which is queued to send: + + <SN=received AN><AN=received SN+1 modulo 2><CTL=ACK><DATA> + + Go to the ESTABLISHED state and execute procedure I1 to process + any data which might be in this packet. + + Any packet not satisfying the above tests is discarded and + ignored. Return to the current state without any further + processing. + + H2 -------------------------------------------------------- + + Check the presence of the FIN flag. If FIN is not set then + continue the processing associated with this state. + + We now assume that the FIN flag was set. This means the other + end has decided to close the connection. Flush the + retransmission queue. If any data remains to be sent then + inform the user "Warning: Data left unsent." The user must + also be informed "Connection closing." An acknowledgment for + the FIN must be sent which also indicates this end is closing: + + <SN=received AN><AN=received SN + 1 modulo 2><CTL=FIN, ACK> + + Go to the LAST-ACK state without any further processing. + + + + + + + + + + + + +Finn [Page 33] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + H3 -------------------------------------------------------- + + This state represents the final behavior of the FIN-WAIT state. + + If the packet did not contain a FIN we assume this packet is a + duplicate and that the other end of the connection has not seen + the FIN packet we sent earlier. Rely upon retransmission of + our earlier FIN packet to inform the other end of our desire to + close. Discard the packet and return without any further + processing. + + At this point we have a packet which should contain a FIN. By + the rules of this protocol an ACK of a FIN requires a FIN, ACK + in response and no data. If the packet contains data we have + detected an illegal condition. Send a reset: + <SN=received AN><AN=received SN+1 modulo 2><CTL=RST, ACK> + + Discard the packet, flush the retransmission queue, inform the + user "Error: Connection reset.", delete the TCB, and go to the + CLOSED state without any further processing. + + We now assume that the FIN flag was set and no data was + contained in the packet. If the AN field value was expected + then this packet acknowledges a previously sent FIN packet. + The other end of the connection is then also assumed to be + closing and expects an acknowledgment. Send an acknowledgment + of the FIN: + + <SN=received AN><AN=received SN+1 modulo 2><CTL=ACK> + + Start the 2*SRTT timer associated with the TIME-WAIT state, + discard the packet, and go to the TIME-WAIT state without any + further processing. + + Otherwise the AN field value was unexpected. This indicates a + simultaneous closing by both sides of the connection. Send an + acknowledgment of the FIN: + + <SN=received AN><AN=received SN+1 modulo 2><CTL=ACK> + + Discard the packet, and go to the CLOSING state without any + further processing. + + + + + + + +Finn [Page 34] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + H4 -------------------------------------------------------- + + This state represents the final behavior of the LAST-ACK state. + + If the AN field value is expected then this ACK is in response + to the FIN, ACK packet recently sent. This is the final + acknowledging message indicating both side's agreement to close + the connection. Discard the packet, flush all queues, delete + the TCB, and go to the CLOSED state without any further + processing. + + Otherwise the AN field value was unexpected. Discard the + packet and remain in the current state without any further + processing. + + H5 -------------------------------------------------------- + + This state represents the final behavior of the CLOSING state. + + If the AN field value was expected then this packet + acknowledges the FIN packet recently sent. This is the final + acknowledging message indicating both side's agreement to close + the connection. Start the 2*SRTT timer associated with the + TIME-WAIT state, discard the packet, and go to the TIME-WAIT + state without any further processing. + + Otherwise the AN field value was unexpected. Discard the + packet and remain in the current state without any further + processing. + + H6 -------------------------------------------------------- + + This state represents the behavior of the TIME-WAIT state. + Check the presence of the ACK flag. If ACK is not set then + discard the packet and return without any further processing. + + Check the presence of the FIN flag. If FIN is not set then + discard the packet and return without any further processing. + + We now assume that the FIN flag was set. This situation + indicates that the last acknowledgment of the FIN packet sent + by the other end of the connection did not arrive. Resend the + acknowledgment: + + <SN=received AN><AN=received SN+1 modulo 2><CTL=ACK> + + + + +Finn [Page 35] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + Restart the 2*SRTT timer, discard the packet, and remain in the + current state without any further processing. + + I1 -------------------------------------------------------- + + This represents that stage of processing in the ESTABLISHED + state in which all the flag bits have been processed and only + data may remain. The packet is examined to see if it contains + data. If not the packet is now discarded, return to the + current state without any further processing. + + We assume the packet contained data, that either the SO flag + was set or LENGTH is positive. That data is placed into the + user's receive buffers. As these become full the user should + be informed "Receive buffer full." An acknowledgment is sent: + + <SN=received AN><AN=received SN+1 modulo 2><CTL=ACK> + + If data is queued to send then it is most efficient to + 'piggyback' this acknowledgment on that data packet. + + The packet is now discarded, return to the ESTABLISHED state + without any further processing. + + 5.4. Timers + + There are three timers associated with this protocol. Their + purpose will now be briefly discussed as will the actions taken + when a timer expires. The particular nature these timeouts take + and the methods by which they are set is the responsibility of the + protocol implementation. + + 5.4.1. User Timeout + + For practical implementation reasons it is desirable to have a + user controllable timeout associated with the successful + opening of a connection, successful acknowledgment of data, and + successful closing of a connection. Consider the situations in + which a connection is so noisy that no data gets through, or a + connection is physically cut. Without an overriding timeout + these situations would result in unbounded retransmissions. + + When this timeout expires the user is informed "Error: + Connection aborted due to user timeout.", all queues are + flushed, the TCB is deleted, and the CLOSED state is entered. + + + + +Finn [Page 36] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + 5.4.2. Retransmission Timeout + + This timer ensures that any packet sent for which the SN is + significant is acknowledged. When such a packet is sent it is + placed in a retransmission queue and the retransmission timer + is begun. If an acknowledgment has not arrived within the + timer's period then the packet is retransmitted and the timer + is restarted. If the acknowledgment does arrive in time then + the timer is stopped and the packet is removed from the + retransmission queue. The next packet with a significant SN + may now be sent. + + This timeout is expected to operate in conjunction with a + counter which keeps track of the number of times a packet has + been retransmitted. Normally an upper limit is set on + retransmissions. If that limit is exceeded then the connection + is aborted. This event is similar to the user timeout. The + user is informed "Error: Connection aborted due to + retransmission failure", all queues are flushed, the TCB is + deleted, and the CLOSED state is entered. + + 5.4.3. TIME-WAIT Timeout + + This timeout is used to catch any FIN packets which might be + retransmitted from the other end of a connection in response to + a dropped acknowledgment packet. The timeout period should be + at least as long as 2*SRTT. After this timeout expires the + other end of the connection is assumed to be closed, the TCB is + deleted, and this end enters the CLOSED state also. + + + + + + + + + + + + + + + + + + + + +Finn [Page 37] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + +6. Data Error Handling + + This chapter discusses in detail the types of data errors an + established connection may encounter. These are distinct from + protocol errors discussed above. In order of discussion these are: + + - Framing Errors + + - Missing SYNCH pattern + + - Unacknowledged packets + + - Bad packets + + - Duplicate packets + + - Outside flow control + + - Packets that are too large + + - Packets that are too small + + 6.1. Framing Errors + + The RS-232 specification provides framing only for an individual + octet. Link level protocols for computer networking normally + provide framing for each packet. The SYNCH pattern provides a + boundary for the beginning of a packet. No similar pattern was + chosen to mark the end and completely frame the packet. + + Any bit pattern can appear in the data portion of a packet. For + any particular pattern to reliably mark the end of a packet that + terminating pattern cannot be allowed to appear in the data. This + is usually accomplished by the sender altering any occurrence of + the terminating pattern in the data so that it is both no longer + recognizable as that pattern and also restorable upon receipt. + Both the sender and the receiver are required by this technique to + examine all the data. In the absence of a protocol chip to + perform this function, it is a source of some overhead. + + 6.1.1. Synthetic Framing + + In the absence of framing, the end of the packet must be + synthetically determined. The start of a packet is indicated + by the SYNCH pattern. The expected end of a packet can now + only be determined by examining the LENGTH octet of the header. + It is important to know whether or not the LENGTH data can be + + +Finn [Page 38] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + trusted. This is accomplished by employing a one octet header + checksum to cover the first two octets following the SYNCH + pattern. If the header passes the checksum test and neither + the SYN, FIN, RST, nor SO flag bits were set then LENGTH is + trusted and the number of octets expected beyond the header is + LENGTH+2. (For those packets in which any of the above flag + bits are set the packet length is fixed and includes only a + header portion.) + + If the header fails the checksum test we are in some + difficulty. The length is incorrect so it may be too small or + too large. To recover from this error do the following. + Beginning immediately after the SYNCH pattern rescan looking + for the next SYNCH pattern. Throw away all octets until a + SYNCH is seen and then attempt to reinterpret it as a packet. + The sender's retransmission timeout guarantees that a new copy + of the packet will be transmitted. This ensures that in + discarding the initial SYNCH pattern, the SYNCH pattern from + the beginning of the retransmitted packet will eventually be + seen. + + 6.1.2. Costs of Synthetic Framing + + This framing strategy causes no overhead unless data errors + occur in the packet. This is presumed to be a low probability + occurrence. In addition it removes the overhead of both sender + and receiver passing over the data to process any termination + pattern which might appear in the data. + + The worst case behavior would require a packet header to fail + its checksum, a new SYNCH pattern to appear in the next few + octets, that header failing its checksum, etc., until the SYNCH + pattern of the retransmitted packet were finally seen. + Consistently bad behavior of this type indicates an extremely + noisy communications link. + + 6.2. Missing SYNCH Pattern + + Any valid packet must begin with the SYNCH pattern. Any receiver + must discard all input octets until the SYNCH pattern is seen. + The data which immediately follows a SYNCH pattern is interpreted + as a packet. The header checksum test is applied, then LENGTH+2 + octets are read, the data checksum test is applied, etc. + + + + + + +Finn [Page 39] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + 6.3. Unacknowledged Packets + + If an ACK for a packet is not obtained within the retransmission + timeout interval that packet is retransmitted. Because + significant variability in response can be expected from either + end of a connection it is best to dynamically calculate the + retransmission timeout interval. An example of such a calculation + is provided below. The protocol will operate successfully, + although not with as high an effective transmission rate, if a + realistic upper bound time is used instead. + + A realistic upper bound time depends upon the packet size and line + speed. If the baud rate of the connection is 300 or above let B + be the baud rate (for clarity assume it is the same in both + directions), let L be the MDL of the receiver, let P be the packet + processing time of the receiver. Then an Upper Bound for the + Reception Time (UBRT) is: + + UBRT = L/(B/10) seconds + P seconds + + and a realistic upper bound time is 2*UBRT seconds. + + 6.3.1. Calculation of Retransmission Timeout Interval + + For the purpose of detecting retransmission time out the + protocol must have access to a clock which provides at least + single second resolution. One technique for calculating the + round trip time is: + + Measure the elapsed time between sending a packet with a + particular SN and receiving an ACK with an AN which covers + that SN. The measured elapsed time is the Round Trip Time + (RTT). Next a Smoothed Round Trip Time (SRTT) is calculated + as: + + SRTT = (ALPHA * SRTT) + ((1- ALPHA) * RTT) + + and based upon this you compute the Retransmission Time Out + (RTO) as: + + RTO = min[UBOUND, max[LBOUND, (BETA * SRTT)]] + + where UBOUND is an upper bound on the timeout (e.g., 1 + minute), LBOUND is a lower bound on the timeout (e.g., 1 + second), ALPHA is a smoothing factor (e.g., .8 to .9), and + BETA is a delay variance factor (e.g., 1.3 to 2.0). + + + +Finn [Page 40] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + 6.4. Bad Packets + + A bad packet is received when it fails either the header or data + checksum tests. When this happens the sender will retransmit the + packet after the retransmission timeout interval. + + 6.5. Duplicate Packets + + A duplicate packet is a packet which passes the checksum tests but + for which the SN received is significant but not the expected + value. This is normally caused when the sender did not get the + ACK last sent by the receiver. This situation is diagrammed + below. + + Side A Side B + + ESTABLISHED ESTABLISHED + + 1. --> <SN=1><AN=0><CTL=ACK><DATA> ... + --> + + 2. XXX <SN=0><AN=0><CTL=ACK><OTHER-DATA> <-- + + 3. (after SRTT) + --> <SN=1><AN=0><CTL=ACK><DATA> ... + + 4. --> + ... <SN=0><AN=0><CTL=ACK><OTHER-DATA> <-- + + 5. <-- + + In line 2, B's packet was lost in transit, it may have failed its + checksum tests when it reached A or its initial SYNCH pattern was + smashed, etc.. In line 3 side A comes to the decision that its + packet from line 1 was not received after SRTT time passes and + retransmits that packet. + + In line 4 side B receives the packet. It detects a duplicate + because it already sent a packet acknowledging A's SN=1 (although + that packet was lost). B now discards the duplicate and + immediately retransmits its last packet to A. Side A finally + receives the retransmitted packet in line 5. + + + + + + + +Finn [Page 41] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + 6.6. Outside Flow Control + + There are many large computer systems which make use of flow + control to regulate their input side of an RS-232 link. Flow + control based upon two special characters such as <Ctrl-S> (ASCII + DC3) and <Ctrl-Q> (ASCII DC1) is almost universally in use today. + So it becomes important for the protocol to be able to either: + + (1) Recognize and obey the flow control of the host + computer(s), or + + (2) Ignore the flow control but still guarantee reliable data + reception. + + It is the latter approach which this protocol takes. This + decision was made because the number of differing flow control + characters in use would make it difficult to obey them all. + + There is a particular type of flow control with which this + protocol will not operate. The ENQUIRE, ACKNOWLEDGE method of + flow control requires that the receiver of an inquiry respond + with an acknowledge before any more data will be sent to it. + This type of flow control also usually prohibits unrestricted + 8-bit data transmission because the inquiry character is + forbidden as a data byte. + + For the other class of flow control methods a proof is required + that data may still be reliably transmitted and received if flow + control is ignored. For the purposes of this discussion assume + <Ctrl-S> is sent when the receiving end of the connection wishes + the sender to stop transmitting. A <Ctrl-Q> is sent when the + receiver wishes the sender to resume. The choice of these + particular two characters is arbitrary. If the sender does not + immediately cease transmission upon receipt of the <Ctrl-S>, + characters may be discarded. Since this protocol chooses to + ignore the flow control characters any part of a packet may be + discarded. + + More precisely stated consider X to be the receiver and Y to be + the sender. The packet sent is represented by the string abc + where a, b, and c are data segments of unspecified size. X may + receive one of: + + 1. abc + 2. ab + 3. ac + 4. bc + + +Finn [Page 42] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + For case [1] the correct data is received and no special action + need be taken. + + For cases [2], [3], and [4] we have a situation identical to data + dropped during transmission. This is handled by the same + checksum, time-out and retransmission strategy already described. + + Assume Y is not now in the act of receiving a packet, then Y sees + the two characters <Ctrl-S> and <Ctrl-Q> appear as input in that + order. Y is waiting for a message to appear and so expects to see + a SYNCH pattern. If the two characters "<Ctrl-S><Ctrl-Q>" are not + part of a SYNCH pattern then they will be immediately discarded. + If Y is receiving a packet then the <Ctrl-S> and <Ctrl-Q> are seen + to be added noise characters and would be detected by the checksum + tests. The packet being received would require retransmission. + + The question of which character to pick for the SYNCH pattern is + slightly muddied by the above observation. To the author's + knowledge <SOH> is rarely if ever picked for flow control. This + is part of the motivation in using it as the SYNCH pattern. + + How does one guarantee that any data will actually arrive + successfully? The initial choice of maximum data counts during + connection establishment is very important. Some knowledge of + one's own operating system must be assumed. If it is known for + example, that streams of data in excess of a certain length will + often trigger flow control at the connection baud rate, then the + maximum data count should be chosen sufficiently lower that flow + control rarely will be employed. An intelligent choice of the + maximum data count will guarantee that some packets will arrive + without encountering flow control. + + 6.7. Packets that are too Large + + Assume a packet arrives which passes its header checksum test but + whose LENGTH is larger than the MDL of the receiver. In such a + case the sender has violated the protocol or a packet has a data + error in the LENGTH octet and has passed the header checksum test. + The latter is unlikely so that we assume the former. The receiver + will abort his connection. The sender must inform the user + "Error: Connection aborted due to MDL error", and go to the CLOSED + state. + + When the MDL is exceeded the receiver will transmit a legal reset: + + <SN=received AN><CTL=RST> + + + +Finn [Page 43] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + 6.8. Packets that are too Small + + Assume that a packet has passed its header checksum test but some + of the data octets have been dropped by the link. In such a case + the receiver's routine which reads data and builds packets is + expecting octets which do not arrive. After SRTT the sender will + retransmit this packet to the receiver. The receiver will now + have enough data to complete the packet. Almost certainly however + it will fail the data checksum test. As with any bad packet the + receiver will rescan from the octet immediately following the + SYNCH pattern for the next SYNCH pattern. In this manner the + receiver will eventually see the SYNCH pattern of the + retransmitted packet. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Finn [Page 44] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + +I. Inability to Transmit/Receive 8-bit Data + + There are some older operating systems and devices which do not + permit 8-bit communication over an RS-232 link. Most of these allow + restricted 7-bit communication. Where this is an unavoidable problem + both ends of the connection must have a protocol layer beneath this + protocol. This lower layer will unpack packets it sends over the + RS-232 link. It will also repack packets it receives over the RS-232 + link. RATP will automatically determine whether or not full 8-bit or + restricted 7-bit communication is being used (see below). + + The strategy chosen for restricted 7-bit communication is called 4/8 + packing. That is, each octet to be sent will be broken up into two + 4-bit nibbles. The order of transmission is the high order four bits + followed by the low order bits. Each octet to be received will be + repacked by the inverse function. The high order nibble will be + received first then the low order nibble. These two nibbles will be + reassembled into an octet. + + I.1. Encoding for Transmission + + For those systems which are incapable of 8-bit data transmission + over RS-232 links, there are operating systems which in addition + place special restrictions on the non-printable ASCII characters. + The encoding for 4/8 packing should restrict itself to + transmitting data only in the printable 7-bit ASCII range. + + I.2. Framing an Octet + + The seventh and highest order bit of a transmitted 7-bit ASCII + byte is a flag used to indicate whether the high or low order + nibble of an octet is contained in this character. This flag bit + if set implies that a new octet is being received and that this + printable ASCII character contains the high order nibble of an + octet in its four low order bits. In addition it implies the next + ASCII character received should not have its highest order bit + set. + + This high order flag bit is set by adding the ASCII character "@" + (octal 100) to a data byte. Thus the first nibble of an octet is + always transmitted with "@" added to its value. The high order + nibble will be transformed into the characters "@" through letter + "O". + + The lower order nibble of an octet is transmitted with zero "0" + added to its value. The low order nibble will be transformed into + + + +Finn [Page 45] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + characters "0" through "?". When receiving 4/8 packed data, any + characters not within the range "0" through letter "O" are + discarded. + + The octet whose octal value is 45 will be transmitted as two 7-bit + printable ASCII characters: + + +-------------+ + High order |1|0|0|0|1|0|0| First transmitted ("@" + data) = D + +-------------+ + Low order |0|1|1|0|1|0|1| Second transmitted ("0" + data) = 5 + +-------------+ + + Since data bytes may be dropped or added at any time it is + important to know always which portion of an octet is expected and + to deliver only complete octets to the higher protocol level. If + a single 7-bit character were completely dropped without being + noticed the data stream delivered to the higher level could be + shifted by an odd multiple of four bits. In the worst case this + condition could remain indefinitely and the higher level would + never receive an octet correctly. In such a case no packets would + be correctly received, leading to an unusable connection. + + To avoid this problem octets are assembled using a state machine + driven by the presence of the high order flag bit. The presence + of that bit in the 7-bit printable character indicates the + beginning of a new octet. The two state machine which assembles + octets is described below. A byte received with the high order + flag bit set is called "HIGH", the byte without "LOW". + + State 0 + + [Start state] Read a byte from the legal restricted set. + This is determined by seeing if the byte is in the legal + range "@" to the letter "O". If it was not discard the byte + and return to this state. + + A HIGH byte was read. Place the four low order bits of the + byte into the four high order bits of the assembled octet + and go to state 1. Otherwise discard the byte and return to + this state. + + + + + + + + +Finn [Page 46] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + State 1 + + Read a byte from the legal restricted set. This is + determined by seeing if the byte is in the legal range zero + "0" to the letter "O". If it was not discard the byte and + return to this state. + + If a LOW byte was read subtract zero "0" from the byte + placing the four low order bits of the result into the four + low order bits of the assembled octet. A full octet has now + been assembled. Pass the octet to the higher level and go + to state 0. + + Otherwise a HIGH byte was read. Place the four low order + bits of the byte into the four high order bits of the + assembled octet and return to this state. + + Utilizing this state machine to receive 4/8 packed data ensures + that the data stream delivered to the higher level will not + permanently remain shifted an odd multiple of four bits. The + restriction placed upon bytes read removes obviously bad data and + in some cases would handle uncontrolled padding or blocking + insertion. + + I.3. Automatic Detection of 8-bit or 4/8 Packed Data + + It is an unavoidable problem that some machines cannot handle + unrestricted 8-bit data. Since this is given, it is desirable to + be able to automatically detect whether unrestricted 8-bit or + restricted 4/8 packing is being used to transmit data on a + connection. For the purposes of this discussion those machines + capable of transmitting and receiving both unrestricted 8-bit and + 4/8 packed data are called smart. Machines are called dumb if + they can only transmit and receive 4/8 packed data. + + When initiating a connection there are four possible machine + configurations and they are: + + 1. A (smart) opens a connection to B (smart). + + 2. A (dumb) opens a connection to B (smart). + + 3. A (dumb) opens a connection to B (dumb). + + 4. A (smart) opens a connection to B (dumb). + + + + +Finn [Page 47] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + Each case is examined and extensions to the behavior for the + LISTEN and SYN-SENT states are provided which allow both types of + machines to initiate or receive a connection. + + Cases 1 and 2: LISTEN Behavior for a Smart Machine + + In these cases machine A initiates a connection to B who is + assumed to be in the LISTEN state. B must be able to passively + detect whether 8-bit or 4/8 packing is being used and respond + accordingly. The method B uses relies upon the detection of a + valid first packet. In the LISTEN state B attempts to + simultaneously treat the incoming data as if it were both + unrestricted 8-bit and 4/8 packed. + + The incoming data is in effect fed to two different receiving + algorithms. The detection of a valid header will occur to one + of these algorithms before the other. If the first valid + header was read assuming unrestricted 8-bit data then any + resulting connection is assumed to use unrestricted 8-bit data + for the life of the connection. If the first valid header + assumed 4/8 packing then the resulting connection is assumed to + use 4/8 packing for the life of the connection. In the case of + the detection of illegal condition in the LISTEN state the + protocol will reply with a RST packet in kind. + + Case 3: LISTEN Behavior for a Dumb Machine + + In this case machine B is the recipient of a connection request + and is capable of handling only 4/8 packed data. The LISTEN + behavior for machine B assumes that all connections are 4/8 + packed. It never deals with unrestricted 8-bit data. As a + result it will refuse to open a connection request from a smart + machine (see case 4 below). + + Case 4: SYN-SENT Behavior for a Smart Machine + + In this case machine A attempts to open a connection to machine + B. However, A has no knowledge of B's capabilities. A will + send its connection request assuming B is smart using + unrestricted 8-bit transmission. It will await a reply + assuming the response will be unrestricted 8-bit also. If B is + in fact dumb it will not return a SYN-ACK because of the + restriction imposed by case 3 above. If no connection is made + with B using 8-bit data the entire connection initiation is + restarted assuming B is dumb, 4/8 packing is used and the + response is assumed to be 4/8 packed as well. + + + +Finn [Page 48] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + The cost of this approach is a longer time to determine whether + or not it is possible to open a connection to B. It is twice as + long. The advantages of being able to automatically adjust to + either unrestricted 8-bit or 4/8 packed data out weigh this + disadvantage. RATP will not exhibit the schizophrenic behavior + of many other asynchronous protocols when dealing with both + classes of machines. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Finn [Page 49] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + +II. A Brief Survey of Some Asynchronous Link Protocols + + II.1. DDCMP + + DDCMP, Copyright (c) 1978 Digital Equipment Corporation [DDCMP + 78], is a reliable point-to-point and multi-point transmission + protocol is used by many of that manufacturer's computers. DDCMP + does provide reliable asynchronous two way data transmission. + + Some of the decisions taken in the design of DDCMP reflect its + orientation toward multi-point data links. This leads to headers + which are substantially longer than needed for two way + point-to-point communications. + + DDCMP allows as many as 255 outstanding unacknowledged messages. + DDCMP does specifically mention that a particular end of a + connection may choose to limit the send queue to one outstanding + unacknowledged message. It also allows sending a stream of + outstanding unacknowledged packets. Unless all RS-232 + implementations of DDCMP were limited to a single outstanding + packet, the collision with existing flow control restrictions + could lead to very low thruput. (DDCMP is assumed to have control + over the link driver. Dealing with various differing flow control + mechanisms is not a consideration.) + + DDCMP uses a CRC polynomial for data protection which is difficult + to calculate for many machines without special hardware [TCP + Checksum 78]. Many Digital Equipment computers have such + hardware. + + DDCMP does not provide the receiver with the ability to restrict + incoming packet size. It is true that all the higher level + protocols built on top of DDCMP could separately negotiate packet + size. But this burden would then be moved away from the link + level where it properly resides. + + Generally, a full implementation of DDCMP is too complex for + consideration. If one were to implement 'part' of the protocol + then issues of compatibility with already existing implementations + on other computers are raised. + + + + + + + + + +Finn [Page 50] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + II.2. MODEM Protocol + + This is a protocol in common use amongst microcomputers. The + description here comes from + + MODEM/XMODEM Protocol Explained by Kelly Smith, CP/M-Net + "SYSOP" January 8,1980 + + .... Data is sent in 128-byte sequentially numbered blocks, + with a single checksum byte appended to the end of each block. + As the receiving computer acquires the incoming data, it + performs its own checksum and upon each completion of a block, + it compares its checksum result with that of the sending + computers. If the receiving computer matches the checksum of + the sending computer, it transmits an ACK (ASCII code protocol + character for ACKNOWLEDGE (06 Hex, Control-F)) back to the + sending computer. The ACK therefore means "all's well on this + end, send some more...". + + The sending computer will transmit an "initial NAK" (ASCII + protocol character for NEGATIVE ACKNOWLEDGE (15 Hex, + Control-U))...or, "that wasn't quite right, please send again". + Due to the asynchronous nature of the initial "hook-up" between + the two computers, the receiving computer will "time-out" + looking for data, and send the NAK as the "cue" for the sending + computer to begin transmission. The sending computer knows + that the receiving computer will "time-out", and uses this fact + to "get in sync"... The sending computer responds to the + "initial NAK" with a SOH (ASCII code protocol character for + START OF HEADING (01 Hex, Control-A)), sends the first block + number, sends the 1's complement of the block number, sends 128 + bytes of 8 bit data, and finally a checksum, where the checksum + is calculated by summing the SOH, the block number, the block + number 1's complement, and the 128 bytes of data. + + Receiving Computer: + + ---/NAK/------------------------/ACK/------------------ + 15H 06H + + Sending Computer: + + ---/SOH/BLK#/BLK#/DATA/CSUM/---/SOH/BLK#/BLK#/DATA/etc. + 01H 01H FEH 8bit 8bit 01H 02H FDH 8bit .... + + + + + +Finn [Page 51] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + This process continues, with the next 128 bytes. If the block + was ACK'ed by the receiving computer, and then the next + sequential block number and its 1's complement, etc. .... + + As can be seen from this partial description the MODEM protocol is + unidirectional, data can only pass from the sender to the receiver + in a stream. In order for data to flow simultaneously in the + other direction another connection over another RS-232 line would + be required. + + In addition this protocol is restricted to a fixed 128 octet + packet size. Many front-end concentrators are unable to service + such large incoming packets. It has been observed many times that + the concentrator of a busy DECsystem-20 can invoke flow control on + input at 1200 baud for packets as small as 64 characters. + + II.3. KERMIT System + + The KERMIT system, Copyright (c) 1981 Columbia University, is a + file transfer environment developed recently. It has + implementations which run on DECsystem-20, IBM 370 VM/CMS, 8080 + CP/M based systems, and the IBM PC among others. + + KERMIT combines both the reliable transfer and file transfer into + a single package. Extension to other applications and higher + level protocols would be possible but the boundary between the + reliable transfer and application layers is very indistinct. It + violates the layering design strategy the Internet employs. + + There is a limitation of transmission to the restricted printable + ASCII set for certain computers but not for others. This leads to + confusion. KERMIT allows both restricted ASCII and 8-bit + transmission. + + The KERMIT protocol does have a method of setting MDL at + connection initiation. It is limited to a smaller maximum packet + size, 96 as opposed to 261 octets. Kermit originally used a + checksumming algorithm limited to six bits. This is considered to + provide too low a level of error detection capability for data + packets. Kermit now allows two other checksumming algorithms in + addition to the original. There must be a negotiation between + sender and receiver regarding which algorithm to use. + + The KERMIT protocol does not appear to make provision for both + sides of a connection attempting an active open simultaneously. + One side must be an initial "sending Kermit" and the other a + "receiving Kermit". The code published as a KERMIT implementation + + +Finn [Page 52] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + + guide cannot recover from simultaneous active opens, it + immediately ABORTs. This reflects a bias towards unidirectional + data flow. + + The KERMIT packet type (similar to RATP control flags) specifies + whether an ACK/NAK is contained in the packet, or data, etc. + These are mutually exclusive and piggybacking an ACK on a data + packet is not possible. This can be a source of overhead. In + addition KERMIT restricts the sender to a single outstanding + unacknowledged packet as does RATP. It allocates an entire byte + to the sequence number which is unnecessary. + + On the subject of error recovery, the size of a packet is + contained in the second byte of the packet and is not protected by + a header checksum. If the length field was in error due to noise + on the link, it could be longer than the correct packet size. The + code published as the KERMIT implementation guide relies upon the + detection of the <SOH> character anywhere in a packet to indicate + the beginning of a packet header. It re-SYNCHs using this + technique. This is only possible if binary data in a packet is + quoted. If full eight bit data is transmitted it does not appear + that the KERMIT protocol rescans for a new MARK (SYNCH) character + within the bad packet data just consumed. It will under these + circumstances throw away the retransmitted packet or portions + thereof. Re-SYNCHing under such conditions is problematical. + + + + + + + + + + + + + + + + + + + + + + + + +Finn [Page 53] + + + +RFC 916 October 1984 +Reliable Asynchronous Transfer Protocol + + +REFERENCES + + [Cohen 81] + + Cohen, D. On Holy Wars and a Plea for Peace. IEEE Computer, + October, 1981. + + [DDCMP 78] + + DDCMP AA-D599A-TC edition, Digital Equipment Corporation, 1978. + Version 4.0. + + [IP 81] + + Postel, J. DOD Standard Internet Protocol [RFC-791] Defense + Advanced Research Projects Agency, 1981. + + [TCP 81] + + Postel, J. Transmission Control Protocol [RFC-793] Defense + Advanced Research Projects Agency, 1981. + + [TCP Checksum 78] + + Plummer, W. W. TCP Checksum Function Design. Technical Report, + Bolt Beranek and Newman, Inc., 1978. + +EDITORS NOTES + + This memo was prepared in essentially this form in June 1983, and set + aside. Distribution at this time is prompted by the the "Thinwire" + proposal described in RFC-914. + + --jon postel + + + + + + + + + + + + + + + +Finn [Page 54] + |