跳到主要内容

4. 一个潜在应用

目前只存在一个资源共享计算机网络, 即 ARPA 计算机网络。本节讨论本文所述系统在 ARPA 网络 [2][5][9] 上的应用。

ARPA 网络目前包含遍布美国的十个站点。每个站点由一个到三个 (可能四个) 称为 Host 的独立计算机系统, 以及一个称为 IMP 的通信计算机系统组成。一个站点上的所有 Host 都直接连接到该 IMP。各 IMP 之间用 50 千比特的电话线相连 (更高速率的线路是有可能的), 不过每个 IMP 只与一至五个其他 IMP 相连。各 IMP 提供一条通信子网, Host 通过它进行通信。数据以任意大小 (目前约 8000 比特)、称为网络消息 (network message) 的消息形式经该通信子网传送。当目的站点上的 IMP 收到一条网络消息时, 该 IMP 向源站点发回一个称为 RFNM 的确认。

面向 ARPA 网络的进程间通信系统 (我们称它为 IPC for ARPA) 目前正由网络工作组 (Network Working Group) 在 UCLA 的 S. Crocker 主持下设计。他们的设计在一定程度上受到通信子网的约束 [5]<9>。我本想逐点比较 IPC for ARPA 与本文提出的系统; 然而, 这样的比较首先需要在这里几乎从头描述 IPC for ARPA 的现状, 因为公开文献中关于 IPC for ARPA 的最新信息极少 [2]。此外, IPC for ARPA 相当复杂, 描述它的工作文档如今已达数百页, 任何描述都会很冗长, 不适合本文。<10> 因此, 我仅对这两个系统作若干零散的比较, 其中第一处比较就隐含在本段之中。

正在为 ARPA 网络开发的进程间通信系统由几个几乎彼此独立的部分组成: Host/IMP 协议、IMP/IMP 协议, 以及 Host/Host 协议。各 IMP 独自负责把比特从一个站点正确地传输到另一个站点。各 Host 独自负责建立进程间连接。Host 和 IMP 都关心流控和消息排序, 并各自承担一小部分责任。把本文所述的进程间通信系统应用于此, 使我做出不同的责任划分。IMP 仍然继续正确地把比特从一个站点搬到另一个站点, 但网络控制器也驻留在 IMP 中, 而流控完全掌握在 Host 中运行的进程手里, 尽管使用的是 IMP 所提供的机制。

各 IMP 以略有改变的形态向 Host 提供 SEND、RECEIVE、SEND FROM ANY、RECEIVE ANY 和 UNIQUE 操作, 并维护会合表, 包括在必要时迁移 SEND 端口。把这些操作放进 IMP, 使得 Host/Host 协议程序只需编写一次, 而不像当前 ARPA 网络中那样要编写许多次。再把那五个操作逐一过一遍或许是有用的。

SEND。Host 把一个 SEND 端口号、一个 RECEIVE 端口号、会合站点以及缓冲区说明 (例如起点和终点, 或起始位置和长度) 交给 IMP。该 SEND 被发送到会合站点的 IMP, 通常就是本地 IMP。当一个匹配的 RECEIVE 到达本地 IMP 时, Host 会被告知刚到达消息的 RECEIVE 端口。这个端口号足以标识执行 SEND 的进程, 尽管某个特定的操作系统可能必须维护内部表格, 把该端口号映射为有用的内部进程标识。同时, IMP 开始向 Host 索取 SEND 缓冲区的特定片段, 并把这些片段作为网络消息发送到目的站点。如果长时间收不到 RFNM (意味着某条网络消息在网络中丢失), 就再次向 Host 索取同样的数据并重传。<11> 除缓冲区的最后一片段之外, IMP 向 Host 索取的片段都是源 Host、IMP 和目的 Host 字长的公倍数。这样可以避免传输中途的字对齐问题。

RECEIVE。Host 把一个 SEND 端口、一个 RECEIVE 端口、一个会合站点以及一个缓冲区描述交给 IMP。RECEIVE 消息被发送到会合站点。当构成一次传输的各条网络消息到达该 RECEIVE 端口时, 它们连同 RECEIVE 端口号 (也许还有 SEND 端口号) 一起被交给 Host, 并指示 Host 把这些数据放在其输入缓冲区的什么位置。当 SEND 缓冲区的最后一条网络消息被交给 Host 时, 会相应地做上标记, 于是 Host 可以察觉这一点。(可以设想, RECEIVE 消息在途经网络前往会合站点时, 也能顺带分配一段网络带宽。)

RECEIVE ANY。Host 把一个 RECEIVE 端口和一个缓冲区描述符交给 IMP。其工作方式与 RECEIVE 相同, 但假定本地站点就是会合站点。

SEND FROM ANY。Host 把 RECEIVE 和 SEND 端口、目的站点以及一个缓冲区描述符交给 IMP。IMP 尽可能快地索取并传输该缓冲区。针对不存在的端口的 SEND FROM ANY 会在目的站点被丢弃。

在 ARPA 网络中, IMP 要求各 Host 把它们的传输在物理上拆分成网络消息, 而且单次传输的相邻消息必须等到前一条消息收到 RFNM 之后才能继续。在本文所述的系统中, 由于 RFNM 与特定缓冲区片段的传输相绑定, 并且由于 Host 允许 IMP 通过告知 Host 每一缓冲区片段的存放位置而在 Host 中重新组装缓冲区, 因此单个缓冲区的各个片段可以放在并行的网络消息中传输, 并且可以同时有多个 RFNM 未收到。这使各 Host 能够处理大小更自然的传输, 并为单次传输获得更高的带宽。

为了进一步提高效率, IMP 可以知道一个 RECEIVE 到达某个特定其他站点所需的大致时间, 并在给某个进程的消息即将到达之前不久提醒 Host 唤醒该进程。