跳到主要内容

I 概述

网络协议提供三种设施:

  1. 连接建立

  2. 流控制

  3. 重连接

重连接与连接建立分开考虑, 部分原因是重连接本身的复杂性, 部分原因是我对协议的经验还不足以把这些概念整合在一起加以阐述。

连接建立​

连接建立的工作方式与 NWG/RFC #33 基本相同。主要变化在于, 提供了一种更为通用的切换形式, 且独立于连接建立, 因此连接建立因不再包含切换过程而得以简化。

连接建立的大致场景如下:

  1. 主机 A 中的进程 PA 占用套接字 SA, 并请求与套接字 SB 建立连接。进程 PA 通过系统调用完成这一操作。

  2. 与上述操作同时, 主机 B 中的进程 PB 占用套接字 SB, 并请求与套接字 SA 建立连接。

  3. 响应进程 PA 的请求, 主机 A 中的网络控制程序(称为 NCPA)向主机 B 发送一条连接请求(RFC)命令。主机 B 中的 NCPB 向主机 A 发送一条类似的命令。这里不隐含任何顺序:NCPB 可以在收到来自 NCPA 的命令之前或之后向 NCPA 发送该命令。

  4. 当 NCPA 和 NCPB 各自都收到了一条 RFC 命令, 并且各自都收到了自己所发出那条命令的 RFNM 时, 它们便都认为连接已经建立。随后它们分别通知进程 PA 和 PB 连接已建立。

所遵循的规则之一是:要么 SA 是发送套接字而 SB 是接收套接字, 要么相反。这一条件有时表述为“SA 和 SB 必须构成一个发送/接收对”。

  1. 此时发送进程可以发送了。

流控制​

为了防止发送进程淹没接收进程, 接收进程必须能够停止流(*)。流控制已整合到网络的 RFNM 处理之中。当接收主机希望抑制某条特定链路上的流时, 该主机向其 IMP 发送一条特殊消息, 使该链路上的下一个 RFNM 被修改。发送主机把这条消息解释为一个 RFNM, 同时解释为一个停止发送的请求。随后会返回一条确认控制命令。

当接收主机准备好再次接收时, 它发送一条命令(RSM), 告诉发送主机恢复发送。

重连接​

出于许多原因, 能够把连接的一端(或两端)从一个套接字切换到另一个套接字是可取的。视施加于切换过程的限制而定, 实现起来可能容易也可能困难。为了达到最大的通用性, 我在这里提出一种动态重连接方案, 这意味着即使流已经开始, 重连接仍可进行。结果可能表明, 在大多数情况下, 这种方案的开销远高于实际所需;不过, 它宣称具有以下优点:

  1. 提供了各种形式的连接切换。

  2. 重连接在连接上发送的消息的处理过程中不引入任何开销, 也就是说, 全部代价都由协议处理来承担。


*BB&N 主张应当提供无限制的缓冲。这有可能是一种恰当的策略:但它与我的思路相悖, 而且我把协议设计建立在这样的假设之上, 即每条连接的接收端只提供很小的缓冲区。