分享
 
 
 

RFC60 - Simplified NCP Protocol

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

Network Working Group R. Kalin

Request for Comments: 60 MIT

Category: EXPerimental 13 July 1970

A Simplified NCP Protocol

Status of this Memo

This memo defines an Experimental Protocol for the Internet

community. This memo does not specify an Internet standard of any

kind. Discussion and suggestions for improvement are requested.

Distribution of this memo is unlimited.

Abstract

This RFCdefines a new NCP protocol that is simple enough to be

implemented on a very small computer, yet can be extended for

efficient operation on large timesharing machines. Because worst case

storage requirements can be predicted, a conservative implementation

can be freed of complicated resource allocation and storage control

procedures. A general error recovery procedure is also defined.

Overview and Rational

The central premise of this proposal is an insistence that all user-

to-user connections be bi-directional. For those familiar with

communication theory, this appears most reasonable. All communication

requires a cyclical flow of information. To deny a simple association

between a message and its reply makes protocol unnecessarily

complicated and turns simple mechanisms of flow control into

nightmares.

It is proposed that a bi-directional connection, or duplex link, be

identified by a pair of socket numbers, one for each end. This is

half the number presently required. Associated with the connection

are some number of "crates" or message containers. These crates

travel back and forth over the link carrying network messages from

one side to the other. Buffers are allocated at each end of the link

to hold crates and the messages that they carry. Worst case buffer

requirements are equal to the number of crates in circulation, or the

"capacity" of the link.

Details

A message buffer has four states which follow one another cyclically.

They are:

1) empty,

2) filled with a message-laden crate to be unloaded,

3) filled with an empty crate, and

4) filled with a message-laden crate to be sent.

Normally state transitions correspond to message arrival, message

removal, message insertion and message transmission.

For a process to be an NCP it must:

1) be able to make initial contact with foreign hosts via the control

link and, if necessary, delete user-to-user links left over from the

previous system incarnation.

2) be able to create user-to-user links.

3) be able to interface users with these links.

4) be able to delete user-to-user links.

The first of the four functions shall not be discussed here except to

point out that it contains critical races that can not be resolved

without making assumptions about maximum message propagation delays.

Since within the ARPA network, bounds on message turnaround time do

not exist, the approach chosen must necessarily be tender. The other

three functions are discussed first from the viewpoint of one

interested in implementing a minimal NCP. Then extensions and

improvements are proposed that are suitable for larger machines.

Any NCP must be capable of creating a duplex link between a local

user process and a remote one. The current protocol accomplishes this

by queuing a potentially unbounded number of RFC's and waiting for

the user to examine the queue to determine with whom he wishes to

talk. There is no guarantee that the user will ever look at the queue

and there is no way to limit the size of the queue. The overflow

error message suggested fails in the respect because it admits that

the RFCwill only be sent again. The picture need not be this bleak.

The following network conversation demonstrates how connections can

be made without using queues or relying on user process attention.

Suppose that a local user process and a remote user process wish to

establish a new connection. The remote process asks its NCP to listen

for a connection request and gives it the socket identifier for its

end. Optionally it can give both socket identifiers. The user process

at the local end asks its NCP to send a request for a duplex link

(RFDL). It specifies both socket identifiers of the proposed link.

The local NCP sends a RFDL over the control link with the following

format:

RFDL <my socket> <your socket> <max number buffers> <spare>

The third argument is normally supplied by the local NCP and

indicates the maximum number of buffers the NCP will consider

allocating to this duplex link. If buffers are in user storage the

count may be given by the user in a call made to the NCP.

The RFDL is received at the remote host and the remote NCP compares

<my socket> and <your socket> against the socket identifiers supplied

by unmatched listens issued to it. For listens in which just a single

identifier was given only <your socket> must match. If both socket

identifiers were given, they both must match. If a match is found an

acknowledgement message with the following format is sent back by the

NCP:

ACDL <your socket> <my socket> <number buffers> <spare>

The <number buffers> parameter is equal to the smaller of <max number

buffers> as specified in the RFDL and the number of message buffers

agreeable to the remote NCP. If no match is found the error message

returned is an ACDL in which <number buffers> equals zero. Note that

the RFDL mechanism is similar to a RFCmechanism in which the bound

on queue size is one and connection acceptance is done entirely by

the NCP.

The two varieties of a listen correspond to two modes of channel

operation. The single parameter variety, as typified by a LOGIN

process, is to be used by programs that will "talk with anyone who

happens to dial their number". Screening of contacts for

appropriateness is left to the user process. The double parameter

listen is used by user programs who know with whom they will

communicate and do not wish to be bothered by random RFDL's from

other sources. Given the way in which socket name space is

partitioned, it is impossible to get a matching RFDL from any process

but the one intended.

Message buffers for the connection are allocated in the remote host

before it sends the ACDL and in the local host at the time the ACDL

is received. The number of buffers at each end is equal to the

<number buffers> parameter in the ACDL. The state of all remote

buffers is "empty" and of all local buffers "filled with empty

crate". After buffers are allocated the local user process is

notified that it is able to start sending messages.

The type of interface presented by the NCP between the user process

and the newly created duplex link is a decision local to that host. A

simple but complete interface would provide two calls to be made to

the NCP. GETMESSAGE would return the next message from the link

complete with marking, text and padding. PUTMESSAGE would take a

message, marking and text only, and buffer it for transmission. The

obvious logical errors would be reported.

We suggest that message alignment be left to the user. On most

machines it is a simple but time consuming operation. If done in the

NCP there is no guarantee that the user will not have to readjust it

himself. It is usually not possible to know a priori whether the text

portion should be right adjusted to a Word boundary, left adjusted to

a word boundary, aligned to the end of the last message, or

fragmented in some exotic way.

Within this protocol message boundaries are used to provide storage

allocation information. If not required by the user this information

can be forgotten and the user interface can be made to appear as a

bit stream. Though welcomed by purists, sUCh a strategy may produce

complications when attempting to synchronize both ends of a link.

Links are deleted by removing empty crates from them and reclaiming

the buffers allocated to the crates removed. Only buffers with crates

in can be reclaimed; empty buffers must remain available to receive

messages that may arrive. When no crates are left, no buffers remain,

and the socket identifiers can be forgotten. When empty crates are

removed, a decrement size message is sent to the foreign NCP to allow

it to reduce its buffer allocation:

DEC <my socket> <your socket> <number of buffers dropped>

A reply is solicited from the foreign NCP to affirm the deletions or

to complain of an error. Possible errors include "no such link" and

"impossible number of buffers dropped".

The option to close a link can be given to a user process by

providing either of two system calls. NOMOREOUTPUT declares that no

more messages will be sent by the local user process. All local

buffers for the link that contain empty crates are reclaimed by the

NCP. DEC messages are sent to the foreign NCP. As crates are emptied,

via GETMESSAGE calls, their buffers are reclaimed too. As an

alternative, the call KILLMESSAGE can be implemented. This call can

be used in place of a PUTMESSAGE. Instead of filling an empty crate

with a message to be sent, KILLMESSAGE will cause the crate to be

reclaimed and a DEC control message sent.

In situations where the user process has died, or for some other

reason can not close the link, more drastic measures must be taken.

For these situations, the ABEND control message is defined:

ABEND <my socket> <your socket>

After sending an ABEND the issuing NCP starts to close the link. All

buffers containing input are destroyed. A DEC is issued for these and

the previously empty buffers. If messages arrive on the link, they

are destroyed and a DEC is issued. Any ABEND received for the link is

ignored.

When the remote NCP receives the ABEND, it stops sending messages

over the link and refuses new messages from the user process at its

end. Empty buffers are reclaimed. Pending output messages are

destroyed and their buffers reclaimed. Input messages are fed to the

user process as long as it will accept them. Buffers are reclaimed as

input is accepted. DEC's are issued to cover all buffers reclaimed.

When the user process will take no more input, input messages are

destroyed and their buffers reclaimed. Eventually all buffers will be

reclaimed at both ends of the link. At such time the connection can

be considered closed and the socket numbers used can be reassigned

without ambiguity.

Under this proposed protocol the above four functions constitute all

that must be part of a network NCP. If buffers are allocated only

when free ones exist there can be no "overflow" errors nor is there

any need to place further constraints on message flow. For any user

message that arrives buffer room is guaranteed. All control messages

can be processed without requiring additional storage to be

allocated. Attempts by a user process to issue too many listens can

be thwarted by local control procedures.

Inefficiencies in storage will result when the number of outstanding

connections gets large. One price of coding simplicity is a fifty

percent utilization of buffer space. On large hosts it may prove

advantageous to implement some of the following NCP extensions. With

more complicated flow control procedures, it becomes possible for an

NCP to allocate more buffer space than actually exists and still not

to get into trouble. Other extensions provide message compression,

improved throughput and user transparent error recovery.

Because some extensions require the cooperation of foreign hosts and

assume that they have implemented more than the minimal NCP it is

proposed that an inquiry control message be used to find out what

extensions the foreign host has implemented. The response to an INQ

will be a control message defining a host profile. If an "undefined

error" message is returned, the foreign host is assumed to have only

a minimal NCP.

A simple extension is to define a control message that will replace

user RFNM's. A user RFNM is a null text message sent, for example, as

a reply when a file is transferred via a duplex link. They are

inefficient since they tie up an entry in the IMP's link assignment

table and degrade network throughput. A more efficient solution is to

send a special message over the control link. In this way one short

message can replace several user messages.

URFNM <my socket> <your socket> <number of user RFNM's>

Because the control link is concurrent with the return side of the

user link, URFNM's can not be substituted for user RFNM's when there

are other messages to be sent on the return link. Otherwise ordering

will be lost and with it user transparency.

Throughput can also be increased with a mechanism to add additional

crates on a duplex link. This might be at user instigation or be a

decision of the NCP.

INC <my socket> <your socket> <number buffers desired>

The foreign host replies to an increase request by returning an INCR.

INCR <my socket> <your socket> <number buffers to be added>

If the foreign NCP is unable to meet the additional buffer demand,

<number buffers to be added> will be less than <number buffers

desired> and possibly zero. The initial state of all local buffers

added is "filled with empty crate" and of all foreign buffers

"empty".

The spare argument in the RFDL and ACDL could be used to declare the

maximum sized message that will actually be sent in that direction. A

perceptive NCP could observe this information and allocate smaller

buffers. A lesser NCP could ignore it and always assume maximum

length messages. For example, if the field were zero then only user

RFNM's would be sent. A smart NCP would allocate no storage at all.

If the NCP retains a copy of each user message sent over the network

until a reply is returned, an automatic error recovery procedure can

be implemented. Because the capacity of the link is always known, an

NCP can determine whether there are messages in transit. This is done

by first sending a STOP message to the foreign NCP:

STOP <my socket> <your socket>

The STOP message tells the foreign NCP to temporarily stop

transmitting messages over the selected link. Unlike CEASE-ON-LINK

there is no guarantee as to how many messages will be sent before the

STOP takes effect. The local NCP then sends a link inquiry message:

LINQ <my socket> <your socket>

The reply gives the number of crates at the foreign end of the link.

The LINQ message is repeated until this number plus the number of

local crates equals the capacity of the link. At this time no

messages are in transit and the two ends of the link have been

synchronized. Messages can now be identified relative to the

synchronization point. Thus the local NCP can send a control message

aSKINg, for example, that the third to last message be retransmitted.

The foreign NCP is able to identify which message this is and to

retransmit it. Once all errors have been recovered a START control

message, similar in format to the STOP, is sent to the foreign NCP

and normal operation continues. The entire recovery procedure can be

transparent to both user processes.

It is expected that the larger hosts will not adhere strictly to the

worst case storage allocation requirements. Rather they will allocate

more buffers than they have and reply on statistics to keep them out

of trouble most of the time. Such conduct is perfectly permissible as

long as it is transparent to foreign hosts. The protocol allows an

NCP to lie about storage allocation as long as he is not caught. In

situations where detection appears imminent some of the following

control mechanisms will need to be applied. They are listed in

increasing order of power.

a) Do not send out any user RFNM's or other short messages. There is

a good chance that they will be replaced by longer messages that will

strain buffer capacity even more.

b) Try not to accept any new messages from the IMP. Block local

processes attempting to issue messages.

c) Issue DEC's to free up buffer space. Do not allocate more than one

buffer to RFDL's and refuse INC's.

d) Fake errors in messages waiting for local user action. Do this

only if the host that sent it has implemented error recovery. This

will free buffer space and allow you to recover later. This final

measure is admittedly a last resort, but it should be powerful enough

to control any emergency.

It is the hope of the author that the above protocol presents an

attractive alternative to that proposed by RFC54 and its additions.

Although it appears at a late date, it should not be more than a

minor jolt to implementation efforts. It is simple enough to be

implemented quickly. If adopted, a majority of the present sites

could be talking intelligently with one another by the end of the

summer.

References

[1] Crocker, S.D., Postel, J., Newkirk, J. and Kraley, M., "Official

protocol proffering", RFC54, June 1970.

Author's Address

Richard Kalin

MIT Lincoln Laboratory

[ This RFCwas put into machine readable form for entry ]

[ into the online RFCarchives by Ian Redfern 3/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- 王朝網路 版權所有