From 4bfd864f10b68b71482b35c818559068ef8d5797 Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Wed, 27 Nov 2024 20:54:24 +0100 Subject: doc: Add RFC documents --- doc/rfc/rfc215.txt | 395 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 395 insertions(+) create mode 100644 doc/rfc/rfc215.txt (limited to 'doc/rfc/rfc215.txt') diff --git a/doc/rfc/rfc215.txt b/doc/rfc/rfc215.txt new file mode 100644 index 0000000..2e24976 --- /dev/null +++ b/doc/rfc/rfc215.txt @@ -0,0 +1,395 @@ + + + + + + +Network Working Group A. McKenzie +Request for Comments: 215 BBN +NIC #7545 30 August 1971 +Categories: C.2, D.1, D.3, G.1 +Updates: none +Obsoletes: none + + NCP, ICP, and TELNET: + + The Terminal IMP Implementation + + By early December there will be six Terminal IMPs incorporated +into the network, with additional Terminal IMPs scheduled for delivery +at a rate of about one per month thereafter. For this reason the +implementation of network protocols (and deviations from them) may be of +interest to the network community. This note describes the choices made +by the Terminal IMP system programmers where choices are permitted by +the protocols, and documents some instances of non-compliance with +protocols. + + Most of the choices made during protocol implementation on the +Terminal IMP were influenced strongly by storage limitations. The +Terminal IMP has no bulk storage for buffering, and has only 8K of 16- +bit words available for both device I/O buffers and program. The +program must drive up to 64 terminals which generally will include a +variety of terminal types with differing code sets and communication +protocols (e.g., the IBM 2741 terminals). In addition, the Terminal IMP +must include a rudimentary language processor which allows a terminal +user to specify parameters affecting his network connections. Since the +Terminal IMP exists only to provide access to the network for 64 +terminals, it must be prepared to maintain 128 (simplex) network +connections at any time; thus each word stored in the NCP tables on a +per-connection basis consumes a significant portion of the Terminal IMP +memory. + + It should be remembered that the Terminal IMP is designed to +provide access to the network for its users, not to provide service to +the rest of the network. Thus the Terminal IMP does not contain +programs to perform the "server" portion of the ICP; in fact, it does +not have a "logger" socket. + + + + + + + + + + + + [Page 1] + +RFC #215 + + + The Terminal IMP program currently implements only the NCP, the +ICP, and the TELNET protocol since these are of immediate interest to +the sites with Terminal IMPs. It is anticipated that portions of the +data transfer protocol will be implemented in the future; the portions +to be implemented are not yet clearly defined, but will probably include +the infinite bit stream (first) and the "transparent" mode (later). +Developments in the area of data transmission protocol will be +documented in the future. + + The remainder of this note describes, and attempts to justify, +deviations from the official protocols and other design choices of +interest. Although written in the present tense, there are some +additional known instances of deviation from protocol which will be +corrected in the near future. + + A) Deviations from Protocols + + 1) The Terminal IMP does not guarantee correct response + to ECO commands. If some Host A sends a control + message containing ECOs to the Terminal IMP, and the + message arrives at a time when + + a) the Terminal IMP has a free buffer and + + b) the control link from the Terminal IMP to Host A + is not blocked + + then the Terminal IMP will generate a correct ERP for + each ECO. In all other cases the ECO commands will + be discarded. (All control messages sent by the + Terminal IMP begin with a NOP control command, so if + Host A sends a control message consisting of 60 ECO + commands, the Terminal IMP will answer (if at all) + with a 121-byte message -- 1 NOP and 60 ERPs.) + + The reason for this method of implementation is that + to guarantee correct response to ECO in all cases + requires an infinite amount of storage. For + example, suppose Host A sends control messages, each + containing an ECO command, to Host B at the rate of + one per second, but that Host A accepts messages from + the network as slowly as possible (one every 39 + seconds, say). Then Host B has only three choices + which do not violate protocol: + + a) Declare itself dead to the network (i.e., turn + off its Ready line), thereby denying all its + users use of the network. + + + + [Page 2] + +RFC #215 + + + b) Refuse to accept messages from the network + faster than the slowest possible foreign Host + (i.e., about one every 39 seconds). If Host B is + a Terminal IMP, this is almost certainly slow + enough to soon reach a steady state of no users. + + c) Implement "infinite" storage for buffering + messages. + + Since it is clear that none of the "legal" solutions + are possible, we have decided to do no buffering, + which should (we guess) satisfy the protocol well + over 99% of the time. + + 2) The Terminal IMP does not guarantee to issue CLS + commands in response to "unsolicited" RFCs. There + are currently several ways to "solicit" an RFC, as + follows: + + a) A terminal user can tell the Terminal IMP to + perform the ICP to the TELNET Logger at some + foreign Host. This action "solicits" the RFCs + defined by the ICP. + + b) A terminal user can send an RFC to any particular + Host and socket he chooses. This "solicits" a + matching RFC. + + c) A terminal user can set his own receive socket + "wild." This action "solicits" an STR from + anyone to his socket. Similarly, the user can + set his send socket "wild" to "solicit" an RTS. + + If the Terminal IMP receives a "solicited" RFC it + handles it in accordance with the protocol. If the + Terminal IMP receives a control message containing + one or more "unsolicited" RFCs it will either issue + CLS commands or ignore the RFCs according to the + criteria described above for answering ECOs (and for + the same reasons). Further, if the Terminal IMP + does issue a CLS in response to an unsolicited RFC + it will not wait for a matching CLS before + considering the sockets involved to be free for other + use. + + 3) After issuing a CLS for a connection, the Terminal + IMP will not wait forever for a matching CLS. + There are two cases: + + + + [Page 3] + +RFC #215 + + + a) The Terminal IMP has sent an RFC, grown tired of + waiting for a matching RFC, and therefore issued + a CLS + + b) The Terminal IMP has sent a CLS for an + established connection (matching RFCs exchanged) + + In either of these cases the Terminal IMP will wait + for a matching CLS for a "reasonable" time (probably + 30 seconds to one minute) and will then "forget" the + connection. After the connection is forgotten, the + Terminal IMP will consider both sockets involved to + be free for other use. + + Because of program size and table size restrictions, + the Terminal IMP assigns socket numbers to a terminal + as a direct function of the physical address of the + terminal. Thus (given this socket assignment scheme) + the failure of some foreign Host to answer a CLS + could permanently "hang" a terminal. It might be + argued that the Terminal IMP could issue a RST to the + offending Host, but this would also break the + connections of other terminal users who might be + performing useful work with that Host. + + 4) The Terminal IMP ignores all RET commands. The + Terminal IMP cannot buffer very much input from the + network to a given terminal due to core size + limitations. Accordingly, the Terminal IMP allocates + only one message and a very small number of bits + (currently 120 bits; eventually some number in the + range 8-4000, based on the terminal's speed) on each + connection for which the Terminal IMP is the + receiver. Given such small allocations, the Terminal + IMP attempts to keep the usable bandwidth as high as + possible by sending a new allocation, which brings + the total allocation up to the maximum amount, each + time that: + + a) one of the two buffers assigned to the terminal + is empty, and + + b) the allocations are below the maxima. + + Thus, if a spontaneous RET were received, the + reasonable thing for the Terminal IMP to do would be + to immediately issue a new ALL. However, if a + foreign Host had some reason for issuing a first + + + + [Page 4] + +RFC #215 + + + spontaneous RET, it would probably issue a second RET + as soon as it received the ALL. This would be likely + to lead to an infinite (and very rapid) RET-ALL loop + between the two machines, chewing up a considerable + portion of the Terminal IMP's bandwidth. Since the + Terminal IMP can't "afford" to communicate with such + a Host, it ignores all RETs. + + 5) The Terminal IMP ignores all GVB commands. + Implementation of GVB appears to require an + unreasonable number of instructions and, at the + moment at least, no Host appears to use the GVB + command. If we were to implement GVB we would always + RET all of both allocations and this doesn't seem + very useful. + + 6) The Terminal IMP does not handle a total bit- + allocation greater than 65,534 (2^16-2) correctly. + If the bit-allocation is ever raised above 65,534 the + Terminal IMP will treat the allocation as infinite. + This treatment allows the Terminal IMP to store the + bit allocation for each connection in a single word, + and to avoid double precision addition and + subtraction. Our reasons for this decision are: + + a) A saving of more than 100 words of memory which + would be required for allocation tables and for + double precision addition/subtraction routines. + + b) Our experience, which indicates that very few + Hosts (probably one at most) ever raise their + total bit allocation above 65,534 bits. + + c) Our expectation that any Host which ever raises + its bit allocation above 65,534 probably would be + willing to issue an infinite bit allocation if + one were provided by the protocol. Once the bit + allocation is greater than about 16,000, the + message allocation (which the Terminal IMP + handles correctly) is a more powerful method of + controlling network loading of a Host system than + bit allocation. We believe that Hosts which have + loading problems will recognize this. + + 7) The Terminal IMP ignores the "32-bit number" in the + ICP. When the Terminal IMP (the "user site") + initiates the Initial Connection Protocol the actual + procedure is to send the required RTS to the logger + + + + [Page 5] + +RFC #215 + + + socket of the user-specified foreign Host and + simultaneously to set the terminal user's send and + receive sockets in a state where each will accept + any RFC from the specified Host. The 32-bit socket + number transmitted over the logger connection is + ignored, and the first RTS and STR addressing the + user's sockets will be accepted (and answered with + matching RFCs). + + The ICP allows the foreign Host to transmit the RFCs + involving Terminal IMP sockets "U+2" and "U+3" at + any time after receipt of the RFC to the (foreign + Host's) logger socket. In particular, the RFCs may + arrive at the Terminal IMP before the 32-bit + number. In the case of a "normal" foreign Host, the + first incoming RFCs for sockets U+2 and U+3 will come + from the sockets indicated by the 32-bit number, so + it doesn't matter if the number is ignored. In the + case of a pathologic foreign Host, a potentially + infinite number of "wrong" RFCs involving U+2 and + U+3 may arrive at the Terminal IMP before the 32-bit + number is sent. The Terminal IMP would be required + to store this stream of RFCs pending arrival of the + 32-bit number, then issue CLS commands for all + "wrong" RFCs. However, the Terminal IMP does not + have infinite storage available for this purpose (it + is also doubtful that a terminal user really wants to + converse with a pathologic foreign Host) so the + Terminal IMP assumes that the foreign Host is + "normal" and ignores the 32-bit number. + + B) Other Design Choices Related to Protocol + + 1) The Terminal IMP ignores incoming ERR commands and + does not output ERR commands. + + 2) The Terminal IMP assumes that incoming messages have + the format and contents demanded by the relevant + protocols. For example, the byte size of incoming + TELNET messages is assumed to be 8. The major checks + which the Terminal IMP does make are: + + a) If an incoming control message has a byte count + greater than 120 then it is discarded. + + + + + + + + [Page 6] + +RFC #215 + + + b) If a control command opcode greater than 13 is + found during the processing of a control message + then the remainder of the control message is + discarded. + + c) If an incoming data message has a byte count + indicating that the bit allocation for the + connection is exceeded (based on the assumed byte + size) then the message is discarded. + + 3) If one control message contains several RST commands + only one RRP is transmitted. If several control + messages, each containing RST commands, arrive "close + together" only one RST is returned. [The actual + implementation is to set a bit each time a RST is + found (in "foreground") and to reset the bit when a + RRP is sent (in "background").] + + 4) Socket numbers are preassigned based on the hardware + "physical address" (in the terminal multiplexing + device) of the terminal. The high order 16 bits of + the socket number give the device number (in the + range 0-63) and the low order bits are normally 2 or + 3 depending on the socket's gender (zero is also used + during ICP). [We would be pleased to see socket + number length reduced to 16 bits; in that case the + high order 8 bits would be mapped to the device and + the low order 8 bits would contain 2 or 3.] + + 5) During ICP, with the Terminal IMP as the user site, + the Terminal IMP follows the "Listen" option rather + than the "Init" option (as described at the top of + page 3, NIC #7170). In other words, the Terminal IMP + does not issue the RFCs involving sockets U+2 and U+3 + except in response to incoming RFCs involving those + sockets. In this context, we will mention that the + "deadlock" mentioned in NWG-RFC #202 does not exist, + since the ICP does not give the server the "Listen" + option (see NIC #7170, page 2). + + + [ This RFC was put into machine readable form for entry ] + [ into the online RFC archives by Randy Dunlap 5/97 ] + + + + + + + + + [Page 7] + -- cgit v1.2.3