home *** CD-ROM | disk | FTP | other *** search
-
-
-
-
-
-
- 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]
-
-