III. 主机软件
连接的建立
我们能想象的最简单的连接是本地主机充当 TTY 并拨号连接到远程主机。在考虑了启动和终止此类连接的问题后, 决定将链路 0 保留用于主机操作系统之间的通信。因此, 其余 31 条链路将用作拨号线路。
每个主机操作系统必须向其用户级程序提供一个与远程主机建立连接的原语 (primitive) 和一个断开连接的原语。当这些原语被调用时, 操作系统必须选择一条空闲链路, 并通过链路 0 向远程主机发送消息, 请求在所选链路上建立连接。远程主机的操作系统必须同意并通过链路 0 发回接受消息。如果两台主机都选择了相同的链路来发起连接, 并且都在基本上同时发送请求消息, 则将调用一个简单的优先级方案, 其中优先级较低的主机让步并选择另一条空闲链路。一个可用的优先级方案就是简单地按主机的标识号对其进行排名。请注意, 两台主机都意识到同时发出了请求, 但它们采取了互补的行动: 优先级较高的主机忽略请求, 而优先级较低的主机同时发送接受消息和另一个请求。
如此建立的连接是登录前状态的类 TTY 连接。这意味着远程主机操作系统最初将把该链路视为刚刚拨入的 TTY。远程主机将生成相同的回显, 期望相同的登录序列并查找相同的中断字符。
大容量传输
当我们考虑传输大型文件时, 充当终端的电传打字机有两个特殊缺点。第一是某些字符是特殊的中断字符。第二是通常采用特殊的缓冲技术, 这些技术仅适用于低速逐字符传输。
因此, 我们定义另一类连接, 用于传输文件或其他大量数据。要启动这类链路, 已建立的类 TTY 链路两端的用户级程序必须请求建立与类 TTY 链路并行的类文件连接。优先级方案再次发挥作用, 优先级较高的主机通过链路 0 发送消息, 而优先级较低的主机等待。当然, 用户级程序不关心这一点。空闲链路的选择由优先级较高的主机完成。
类文件链路的区别在于不进行中断字符搜索, 并采用适合更高数据速率的缓冲技术。
原语摘要
每个主机操作系统必须至少向其用户提供以下原语。此列表已知是必要的但不充分的。
a) 与主机 x 建立类 TTY 连接。
b) 终止连接。
c) 通过类 TTY 连接发送/接收字符。
d) 与类 TTY 连接并行建立类文件连接。
e) 终止类文件连接。
f) 通过类文件连接发送/接收。
错误检查
我们建议每条消息在其主体中携带消息编号、位计数和校验和, 这对 IMP 是透明的。对于校验和, 我们建议使用在 1152 位上计算的 16 位端绕进位和 (end-around-carry sum), 然后循环右移一位。每 1152 位的右循环移位旨在捕获 IMP 消息重组中的错误。
更紧密的交互
上述原语暗示了用户如何简单地使用远程设施。它们没有阐明如何进行更复杂的网络使用。具体来说, 我们关注的是这样一个事实: 在某些站点, 大量工作已经投入到使计算机对复杂控制台高度响应。UCSB 的 Culler 控制台和 SRI 的 Englebart 控制台至少是两个例子。显然, 对于微不足道的回显类响应, 大约半秒的延迟会将交互降低到使控制台的复杂性变得无关紧要的程度。
我们认为大多数控制台交互可以分为两部分: 本质上是本地的、即时的和微不足道的部分, 以及远程的、更长时间的和重要的部分。作为一个简单的例子, 考虑一个使用由键盘和刷新显示屏组成的控制台的用户。用户正在输入的程序积累字符串, 直到遇到回车符, 然后处理该字符串。在输入字符时, 它在屏幕上显示字符。当输入 rubout 字符时, 它删除前一个非 rubout 字符。如果用户输入 H E L L O <- <- P <CR> (其中 <- 是 rubout, <CR> 是回车), 他进行了九次按键。如果这些按键中的每一个都导致发送一条消息, 而该消息反过来又调用对我们显示站的指令, 我们很快就会感到厌倦。
更好的解决方案是让远程程序的前端 -- 即扫描 <- 和 <CR> 的部分 -- 驻留在我们的计算机中。在这种情况下, 只会发送一条五字符消息, 即 H E L P <CR>, 屏幕将在本地管理。
我们建议通过创建一种控制台控制语言来实现这一解决方案。这种语言, 目前命名为 DEL, 将由子系统设计者用来指定终端需要哪些组件以及终端如何响应来自其键盘、Lincoln Wand 等的输入。然后, 作为初始协议的一部分, 远程主机将向本地主机发送控制控制台的程序的源语言文本。该程序将由子系统设计者用 DEL 编写, 但将在本地编译。
DEL 的规范正在讨论中。以下图表显示了操作序列。
A. 链路建立前
/ \
| +-----------+ +-----------+ |
| | | | | |
| | | | | |
| | terminal | | terminal | |
| | | | | |
| | | | | |
| +-----+-----+ +-----+-----+ |
| | | |
| | | |
| | | |
| +-----+-----+ +-----------+ |
| | | | Request connection | | | |
UCLA { | | | -> over link 25 | | | } SRI
| | +-+-+ | +-+ +-+ | +-+-+ | |
| | | OS|---+-=|I|----------|I|=-+---| OS| | |
| | +-+-+ | +-+ +-+ | +---+ | |
| | | | | |
| | | | | |
| +-----------+ +-----------+ |
| HOST: UCLA HOST: SRI |
\ /
B. 链路建立和登录后
/ \
| +-----------+ +-----------+ |
| | | | | |
| | | | | |
| | terminal | | terminal | |
| | | | | |
| | | | | |
| +-----+-----+ +-----+-----+ |
| | | |
| | | |
| | | |
| +-----+-----+ "Please send front"+-----------+ |
| | | | end control" | | | |
UCLA { | | | -> | | | } SRI ___
| | +-+-+ | +-+ +-+ | +--+---+ | | / |
| | | OS|---+-=|I|----------|I|=-+--|OS|NLS| +----+---| |
| | +-+-+ | +-+ +-+ | +------+ | | |___/
| | | DEL prog. | | | | |
| | | <- | | | |____|
| +-----------+ +-----------+ |
| HOST: UCLA HOST:SRI |
\ /
C. 接收并编译 DEL 程序后
/ \
| +-----------+ +-----------+ |
| | | | | |
| | | | | |
| | terminal | | terminal | |
| | | | | |
| | | | | |
| +-----+-----+ +-----+-----+ |
| |Trivial | |
| |Responses | |
| | | |
| +-----+------+ +-----------+ |
| | | | | | | |
UCLA { | | | Major Responses | | | } SRI ___
| | +--+--+ | +-+ +-+ | +--+---+ | | / |
| | |DEL |---+-=|I|----------|I|=-+--|OS|NLS| +---+---| |
| | |front| | +-+ +-+ | +------+ | | |___/
| | | end | | | | | | |
| | |prog.| | | | | |____|
| | +-----+ | | | |
| | | OS | | | | |
| | +-----+ | | | |
| | | | | |
| +------------+ +-----------+ |
| HOST: UCLA HOST: SRI |
\ /
未解决的问题
-
如果 IMP 进行代码转换, 校验和将不正确。
-
请求 DEL 前端的程序尚未指定。