跳到主要内容

引言

在尝试制定正式协议的过程中, 我们也尝试用一种类 Algol 语言编写一个原型 NCP。经过数周的集中努力, 我们意识到代码正变得难以阅读, 于是放弃了该项目。然而, 我们仍然觉得有必要展示我们对如何实现 NCP 的构想;我们认为, 这有助于为把正式规范融入现有系统时可能出现的问题提示解决方案。本文档就是以散文形式说明 NCP 可能是什么样子的一次尝试。

此类项目存在明显的局限。我们不知道、也不可能知道每个需要编写 NCP 的系统的所有特性。我们不得不对环境、系统调用等做出一些假设。我们已尽量保持通用, 但毫无疑问, 许多站点对 NCP 会有完全不同的理解方式。要向看待事物方式截然不同的人传达我们的概念以及处理这些概念的机制, 存在很大困难。不过, 我们通过为虚构的机器实际编写这个程序而获益良多。编码过程中暴露出许多未曾预见的问题, 我们希望通过发布本文档, 帮助缓解个别情况下可能出现的类似问题。

当然, 绝对没有任何要求必须实现本文档中包含的任何内容。NCP 必须遵守的唯一硬性规则载于 NWG/RFC#54。本描述仅作为示例, 而不是作为范本。

在下文的讨论中, 我们首先描述所假定的环境, 并设定一组系统调用。我们讨论 NCP 的整体架构以及用于保存相关信息的表。随后是网络操作的叙述。接着给出一张状态图, 作为理解事件因果顺序的便捷方法。最后讨论每类网络事件(系统调用或传入的网络消息)的详细处理。