分享
 
 
 

RFC215 - NCP, ICP, and Telnet: The Terminal IMP implementation

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

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.

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.

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 RFCto 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" RFCit

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:

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

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

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 RFCfrom 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 RFCto 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.

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 RFCwas put into machine readable form for entry ]

[ into the online RFCarchives by Randy Dunlap 5/97 ]

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有