📄 rfc60.txt
字号:
组织:中国互动出版网(http://www.china-pub.com/)
RFC文档中文翻译计划(http://www.china-pub.com/compters/emook/aboutemook.htm)
E-mail:ouyang@china-pub.com
译者:梁征强(Zinux lpoo@163.com)
译文发布时间:2002-3-2
版权:本中文翻译文档版权归中国互动出版网所有。可以用于非商业用途自由转载,但必须保留本文档的翻译及版权信息。
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.
摘要
本RFC定义了一则新的NCP协议,该协议十分简单,因此能够在小型计算机上实现。但是该协议又可以被扩展而高效的运行在大型的分时机器上。因为在最坏的情况下,存储需求是可以被预见到,因此该协议的一种保守的实现方法是不考虑复杂的资源分配和存储控制过程。协议定义了通用的的错误恢复过程。
概要和综述
该协议有一个很重要的假设,那就是坚持所有的用户到用户的连接是双向的。对于熟悉通信理论的人来说,这显得最合理不过了。所有的通信需要不断循环的信息流。将消息和其相应的应答信息分离开来,那会使协议不必要的复杂起来,并且简单的流控制机制也会由此而变得异常复杂。
人们建议用一个套接口数对来区分一个双向连接或叫一个双工链路,其中每个数代表一个端。这是目前需要的数目的一半。与连接有关的是一些“箱子”或叫消息容器。这些箱子携带着网络消息在链路中从一端传送到另一端,并且不断反复往来。链路的每一端都分配有缓冲区,用来保存箱子及其携带的消息。在最坏的情况下,需要的缓冲区数与网络中所流通着的箱子数相等,也就是和链路的“容量”一致。
细节
一个消息缓冲有四种相互循环转换的状态,他们是:
1) 空状态,
2) 充满等待卸载的满载着消息的箱子
3) 充满着空箱子,以及
4) 充满等待发送的满载着消息的箱子
状态的相互转换对应着消息的到达,消息的删除,消息的插入以及消息的传送。
一个NCP必须满足以下条件:
1)能通过控制链路与外部主机做初始的联系,而且在必要的时候删除以前系统建立起的链路。
2)能够创建用户到用户的链路。
3)能够通过这些链路与用户交互。
4)能够删除用户到用户的链路。
上述四个功能中的第一个不应该在这里进行讨论,但是必须指出,如果不作最大的消息传送延迟的假设,那么就不能解决该功能的关键问题。因为在ARPA网络中不存在着消息中转时间,因此选择的方法就不具有很高的可靠性。从实现一个最小化的NCP角度出发,下面先讨论其它的三个功能。如果用于更大型的机器,则需要进一步的扩充和改进。
任何的NCP必须能在当地用户进程和远程进程间建立起一条双工链路。目前的协议通过将一个任意的RFC数插入队列,等待用户检查队列来决定他希望和谁通信来实现的。这样保证不了用户何时会察看队列,也没有办法限制队列的大小。溢出错误消息在这种情况下就会失效,因为它承认RFC将只能被在发送一次。然而情况也不是那么的糟糕。下面的网络会话会告诉我们如何不使用队列和不依赖用户进程来实现连接。
假设一个当地进程和一个远程进程希望建立一个新的连接。远程进程查询它的NCP来侦听连接请求并且将它的套接口号告诉其主机。它能随意的给出两个套接口号。当地进程则会要求其NCP发送一个双工链路请求(RFDL)。其中确定了该链路的两个套接口号。
当地 NCP通过控制链路按照以下格式发送一个RFDL:
RFDL<my socket> <your socket> <max number buffers> <spare>
第三个参数通常由当地NCP给定,它表明了NCP将为这个双工链路所可能分配的最大缓冲区数。如果缓冲区位于用户存储器中,则该数可以通过用户的NCP调用给出。
RFDL在远程主机被接收,远程NCP将<my socket>和<your socket>与由没被匹配的侦听提交给它的套接口号相比较。对于那些只给出一个套接口号的侦听来说,只需要匹配<your socket>就可以了。如果给出了两个套接口号,那么这两个套接口号都必须被匹配。如果产生了一个匹配,那么一个如下格式的确认消息就会被NCP发送回去:
ACDL <your socket> <my socket> <number buffers> <spare>
参数<number buffers> 的取值为前面提到的RFDL中的<max number buffers>和远程NCP的消息缓冲区数这两个中的较小值。如果套接口号不能被匹配,那么就返回一个ACDL的错误消息,其中<number buffers>值为零。需要注意的是,RFDL机制与RFC机制类似,只是在前者中,队列大小为1并且是否同意建立连接完全由NCP来决定。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -