简单的 NCP 协议

【简单的 NCP 协议】本RFC定义了一则新的NCP协议,该协议十分简单,因此能够在小型计算机上实现 。但是该协议又可以被扩展而高效的运行在大型的分时机器上 。因为在最坏的情况下,存储需求是可以被预见到,因此该协议的一种保守的实现方法是不考虑复杂的资源分配和存储控制过程 。协议定义了通用的的错误恢复过程 。
概要和综述
该协议有一个很重要的假设,那就是坚持所有的用户到用户的连接是双向的 。对于熟悉通信理论的人来说,这显得最合理不过了 。所有的通信需要不断循环的信息流 。将消息和其相应的应答信息分离开来,那会使协议不必要的复杂起来,并且简单的流控制机制也会由此而变得异常复杂 。
人们建议用一个套接口数对来区分一个双向连接或叫一个双工链路,其中每个数代表一个端 。这是目前需要的数目的一半 。与连接有关的是一些“箱子”或叫消息容器 。这些箱子携带着网络消息在链路中从一端传送到另一端,并且不断反复往来 。链路的每一端都分配有缓冲区,用来保存箱子及其携带的消息 。在最坏的情况下,需要的缓冲区数与网络中所流通着的箱子数相等,也就是和链路的“容量”一致 。
细节
一个消息缓冲有四种相互循环转换的状态,他们是:
1)空状态,
2)布满等待卸载的满载着消息的箱子
3)布满着空箱子,以及
4)布满等待发送的满载着消息的箱子
状态的相互转换对应着消息的到达,消息的删除,消息的插入以及消息的传送 。
一个NCP必须满足以下条件:
1)能通过控制链路与外部主机做初始的联系,而且在必要的时候删除以前系统建立起的链路 。
2)能够创建用户到用户的链路 。
3)能够通过这些链路与用户交互 。
4)能够删除用户到用户的链路 。
上述四个功能中的第一个不应该在这里进行讨论,但是必须指出,假如不作最大的消息传送延迟的假设,那么就不能解决该功能的要害问题 。因为在ARPA网络中不存在着消息中转时间,因此选择的方法就不具有很高的可靠性 。从实现一个最小化的NCP角度出发,下面先讨论其它的三个功能 。假如用于更大型的机器,则需要进一步的扩充和改进 。
任何的NCP必须能在当地用户进程和远程进程间建立起一条双工链路 。目前的协议通过将一个任意的RFC数插入队列,等待用户检查队列来决定他希望和谁通信来实现的 。这样保证不了用户何时会察看队列,也没有办法限制队列的大小 。溢出错误消息在这种情况下就会失效,因为它承认RFC将只能被在发送一次 。然而情况也不是那么的糟糕 。下面的网络会话会告诉我们如何不使用队列和不依靠用户进程来实现连接 。
假设一个当地进程和一个远程进程希望建立一个新的连接 。远程进程查询它的NCP来侦听连接请求并且将它的套接口号告诉其主机 。它能随意的给出两个套接口号 。当地进程则会要求其NCP发送一个双工链路请求(RFDL) 。其中确定了该链路的两个套接口号 。
当地NCP通过控制链路按照以下格式发送一个RFDL:
RFDL
第三个参数通常由当地NCP给定,它表明了NCP将为这个双工链路所可能分配的最大缓冲区数 。假如缓冲区位于用户存储器中,则该数可以通过用户的NCP调用给出 。
RFDL在远程主机被接收,远程NCP将与由没被匹配的侦听提交给它的套接口号相比较 。对于那些只给出一个套接口号的侦听来说,只需要匹配就可以了 。假如给出了两个套接口号,那么这两个套接口号都必须被匹配 。假如产生了一个匹配,那么一个如下格式的确认消息就会被NCP发送回去:

推荐阅读