V. NCP 中的表
我们设想 NCP 的大部分数据库位于关联表中。所谓“关联”, 是指存在某个查找例程, 向其提供一个键后, 它要么成功返回指向相应条目的指针, 要么在没有条目与该键对应时失败。主要的表如下:
1. 会合表
此表保存连接的属性。该表通过本地套接字访问, 但其他表可以持有指向现有条目的指针。
条目的组成部分为:
- (a) 本地套接字
- (b) 外部套接字
- (c) 链路
- (d) 连接状态
- (e) 流状态
- (f) 数据队列
- (g) 呼叫队列
- (h) 端口指针
- (i) 对方缓冲区大小(仅发送端需要)
- (j) 错误状态
当执行 CONNECT 或 LISTEN 系统调用, 或收到连接请求时, 会创建一个条目。在连接建立之前, 部分字段一直不会被使用。
2. 输入链路表
输入解释器将外部主机与链路拼接起来, 作为输入表的键。该表在处理传入链路上发往用户的消息时使用, 提供指向会合表的指针。
3. 输出链路表
当已传输消息的 RFNM 返回时, 输入解释器使用输出链路表来访问流状态。输出链路表以主机和链路为键, 提供指向会合表的指针。
4. 端口表
系统调用解释器将进程标识与端口标识拼接起来作为键, 以获取指向会合表的指针。
5. 输出控制命令表
系统调用解释器和输入解释器使用此表在相应的输出控制命令队列中登记条目。命令按外部主机分别排入不同的表条目中。输出之前, 队列的内容会被拼接成一条大的控制消息。条目的组成部分为:
- (a) 主机
- (b) 输出控制命令队列
6. 输出请求队列
对于每个有数据需要传输到网络的连接, 此队列都包含一个条目。每个连接只有一个条目, 当最后一个数据包传输完毕时删除该条目, 而每当用户发出数据传输的系统请求时则登记该条目。
如果传输未完成(消息太长)或被流量控制机制阻止, 该条目会被重新插入。条目的唯一组成部分是本地套接字。
7. 主机存活表
这是一张列出存活主机的简单表。在建立连接之前以及发送任何数据之前都会检查此表, 以确保目的主机确实存在。目前协议尚未定义主机上线/主机下线情况下应遵循的过程。参见 NWG/RFC#57。
8. 链路分配表
链路号由接收方分配。此表记录哪些链路是空闲的, 因而可以被分配。