RFC 4 带读:Network Timetable——ARPANET 上线前的系统集成与测试计划

前言

前几篇 RFC 还在讨论 Host Software、Link、控制消息和文档协作规则,RFC 4 却突然换了一个非常“工程项目”的视角。

它的标题只有两个词:Network Timetable

如果把它直译成“网络时间表”,很容易以为这只是一份项目排期。实际上,RFC 4 更像一份 ARPANET 初始四节点网络的系统集成、联调、验收和故障定位计划

它没有定义新的报文格式,也没有给出一套完整协议,而是在回答一个极其现实的问题:

IMP、通信线路和 Host Software 都在并行开发,等设备真正送到各个站点以后,怎样一步一步证明整个网络真的能工作?

Elmer B. Shapiro 在文档中把过程拆成了非常具体的阶段:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
安装通信设备

设计并制造 Host-IMP Interface

安装 IMP

单站调试 Host-IMP Interface

UCLA ↔ SRI 两节点测试

加入 UCSB 做三节点测试

加入 UTAH 做四节点测试

跑简单 TTY

跑不同类型终端

移动文件

建立系统化调试方法

这份计划最有价值的地方并不是日期本身,而是它的验证顺序

RFC 4 没有试图在第一天同时验证:

1
硬件 + 线路 + IMP + Host Interface + Host Software + 协议 + 远程登录 + 多用户 + 文件传输

而是把一个未知因素极多的分布式系统逐层拆开:先证明本机 Host 能和 IMP 通,再证明两个站点能通信,再增加第三个节点验证替代路由,再增加第四个节点,最后才开始跑真正面向用户的终端和文件服务。

站在今天看,这套思路很像:

1
2
3
4
5
6
7
Bring-up
→ Smoke Test
→ Integration Test
→ Multi-node Test
→ Failure Injection
→ Performance Test
→ User Acceptance

当然,RFC 4 并不是现代 DevOps、SRE 或 CI/CD 的直接祖先。但它记录了一个非常早期、非常真实的事实:

互联网从一开始就不只是“设计协议”,还必须解决系统如何安装、联调、测量、恢复和定位故障。

RFC 基本信息

项目 内容
RFC RFC 4
官方英文标题 Network timetable
作者 Elmer B. Shapiro(E. B. Shapiro)
所属机构 Stanford Research Institute(SRI)
工作组 Network Working Group
文档自身日期 24 March 1969
RFC Editor 当前发布日期 March 1969
原文头部 Category Informational
RFC Editor 当前 Status Unknown
后续历史状态 RFC 100 在 1971 年将其标为 Obsolete
RFC Editor 信息页 RFC 4: Network timetable
RFC 原文 RFC 4 原文

RFC 4 居然比 RFC 1 的日期还早

这是阅读早期 RFC 时一个很有意思的细节。

RFC 4 文档头部写的是:

1
24 March 1969

而 RFC 1 的日期是:

1
7 April 1969

也就是说:

1
2
3
4
5
RFC Number:
1 < 4

Document Date:
RFC 4 < RFC 1

这说明早期 RFC 编号不能简单理解为严格按照“文档产生日期”排序的时间戳。

Steve Crocker 后来在 RFC 8700《Fifty Years of RFCs》 中回忆,早期 RFC 是在 Network Working Group 的一批讨论笔记基础上整理、完成并依次分配编号的。因此,RFC Number 是稳定的文档标识,不是严格的历史时间序列

InformationalUnknown 为什么同时出现

RFC 4 当前机器可读原文头部显示:

1
Category: Informational

但 RFC Editor 信息页的现代状态字段显示:

1
Unknown

对于 1969 年这种极早期 RFC,不要试图把它完全套进今天成熟的 RFC Status / Stream 体系。

更重要的历史信息来自 1971 年的 RFC 100《Categorization and Guide to NWG/RFCs》,它对 RFC 4 的记录非常直接:

1
2
3
4
5
NWG/RFC 4: Network Timetable
E. Shapiro (SRI)
24 March 1969

Obsolete

因此今天阅读 RFC 4 时,应把它看成:

一份已经失效的早期 ARPANET 工程计划和历史技术文档。

为什么会有这篇 RFC

RFC 4 出现时,ARPANET 甚至还没有真正上线。

根据 RFC 2555 和 RFC 8700 对早期历史的回顾,ARPANET 第一阶段计划部署四个站点:

1
2
3
4
UCLA
SRI
UCSB
University of Utah

各站点的 Host 完全不同,例如 RFC 8700 回顾的初始四台机器包括:

1
2
3
4
UCLA  → SDS Sigma 7
SRI → SDS 940
UCSB → IBM 360/75
UTAH → DEC PDP-10

它们甚至在字长、byte 大小、字符集、I/O 结构和操作系统层面都可能不同。

同时,网络中的 **IMP(Interface Message Processor,接口报文处理机)**由 BBN 负责设计和制造。

于是实际系统不是简单的:

1
2
3
Computer A
|
Computer B

而是:

1
2
3
4
5
6
7
8
9
10
11
12
13
Host A

│ Host-IMP Interface

IMP A

│ Communication Line

IMP B

│ Host-IMP Interface

Host B

加入第三、第四个节点以后,还会出现多路径、负载和路由问题。

其中任何一个环节出错,用户看到的现象都可能只是:

1
“网络不通。”

所以真正困难的问题不是“网络应该具有什么协议”,而是:

当整套系统第一次被拼起来时,怎样知道究竟是哪一层坏了?

RFC 4 就是在解决这个问题。

协议设计已经开始,但基础设施还没有到位

RFC 1、RFC 2 已经开始讨论 Host Software、Link、TTY、Host-to-Host Error Checking、Control Link 等概念,但 RFC 4 提醒我们一个很容易被历史叙述忽略的事实:

那时候大家讨论网络协议时,真正的网络还没有完整存在。

Steve Crocker 在 RFC 8700 回忆:

1
2
When we first started working on the protocols,
the network did not exist.

所以这些工程师同时在做两件事:

1
2
3
设计未来网络应该怎样工作
+
准备几个月后真实设备到达时如何验证它

RFC 4 就是第二部分。

为什么需要跨站点 Timetable

一次 UCLA–SRI 联调至少涉及:

1
2
3
4
5
6
UCLA Host 团队
UCLA IMP
通信线路
SRI IMP
SRI Host 团队
BBN

如果双方不知道今天测试什么格式、谁先发、发什么序列、怎么判断成功、出错由谁记录、系统崩溃后怎样恢复,那么一次测试很容易变成:

1
2
3
4
5
UCLA:我们已经发了。
SRI:我们没收到。
BBN:线路看起来正常。
UCLA:那是不是你们 Host 有问题?
SRI:也可能你们 IMP Interface 有问题。

RFC 4 的本质,就是提前把这种混乱拆掉。

核心内容

RFC 4 可以分成两个大的阶段:

1
2
阶段 A:把网络基础设施真正跑起来
阶段 B:开始把网络作为用户系统使用

第一阶段:基础设施 Bring-up

RFC 4 给出的主要时间节点如下。

编号 计划时间 工作
2 8/1/69 安装通信设备
3 9/1/69 设计并制造 Host-IMP Interface
4 9/15/69 安装 IMP
5 10/1/69 调试 Host-IMP Interface
6 10/15/69 UCLA–SRI 之间测试消息
7 11/15/69 UCSB–SRI 之间测试消息
8 12/15/69 UTAH–SRI 之间测试消息
timeline
    title RFC 4 的 1969 年网络联调计划
    1969-08-01 : 安装通信设备
    1969-09-01 : Host-IMP Interface 完成
    1969-09-15 : 安装 IMP
    1969-10-01 : 调试 Host-IMP Interface
    1969-10-15 : UCLA ↔ SRI 测试
    1969-11-15 : UCSB ↔ SRI 测试
    1969-12-15 : UTAH ↔ SRI 测试

这条时间线揭示出验证顺序:

1
2
3
4
5
6
7
8
9
10
11
12
13
物理设施

硬件接口

网络节点

单节点接口

双节点

三节点

四节点

第二阶段:从“网络能传消息”走向“用户真的能用”

完成节点联调以后,RFC 4 继续列出:

1
2
3
4
5
6
9   Run simple TTY systems
10 Run simple typewriter systems
11 Run arbitrary terminals without local feedback
12 Run arbitrary terminals
13 Move files
14 Develop debugging techniques

这部分没有再给出具体日期,说明工作开始从受设备交付约束的基础设施阶段,进入软件、协议和应用实验阶段。

flowchart LR
    A[Physical Network]
    B[Host-IMP Communication]
    C[Host-to-Host Test]
    D[Multi-node Routing]
    E[Interactive Terminal]
    F[Multi-user Access]
    G[File Transfer]
    H[Operational Debugging]

    A --> B --> C --> D --> E --> F --> G --> H

1. 通信设备不是“插根网线”那么简单

RFC 4 第 2 项 Installation of communication gear 包括:

  • 从 AT&T / BBN 获取尺寸、电源和布线规格;
  • 确定 SRI 设备候选位置;
  • 根据位置计算电信线路最大线缆长度;
  • 确定 voice coordination circuits 的位置和接点;
  • 获取 voice drops 与内部 intercom 系统连接所需的线路信息;
  • 订购并安装 AC 电源。

也就是说,ARPANET 节点部署首先面对的是:

1
2
3
4
5
6
机房空间
电源
线缆
通信线路
设备位置
语音协调线路

这些极其物理的问题。

2. Host-IMP Interface 必须自己设计和制造

RFC 4 第 3 项是:

1
2
Design and construct host-Imp interface
9/1/69

子任务包括:

1
2
3
4
5
6
从 BBN 获取规范
开发 trial design
和 system programmers 评审
确定 final design
设计并制造硬件
通过 hardware loop test 调试 trial software
flowchart TD
    A[BBN Interface Specification]
    B[Trial Design]
    C[Review with System Programmers]
    D[Final Design]
    E[Build Hardware]
    F[Trial Software]
    G[Hardware Loop Test]
    H[Ready for IMP]

    A --> B --> C --> D
    D --> E
    D --> F
    E --> G
    F --> G
    G --> H

这里很值得注意的一点是 Review with system programmers:硬件接口设计必须让真正写系统软件的人提前参与。

3. 安装 IMP 以后,先做单站接口调试

RFC 4 没有规定 IMP 一送到就马上和远端 Host 发消息,而是先安排:

1
2
Debug host-Imp interface
10/1/69

测试包括:

  • 和 BBN 一起编写调试程序;
  • 传输测试 Message;
  • 测试 crash 和 recovery;
  • 检查 Message fill / stripping;
  • 验证 Host → IMP;
  • 验证 IMP → Host;
  • 验证经 IMP loop 回来的传输;
  • 明确 IMP reload 和 restart procedure。

这已经是一套相当完整的 bring-up checklist:

1
2
3
4
5
6
7
8
TX
RX
Loopback
Crash
Recovery
Reload
Restart
Framing / Padding

4. 两节点测试不是只看“通不通”

RFC 4 为 UCLA–SRI 两节点测试列出了一整组维度。

双方首先要约定 Test Message 的:

1
2
3
4
5
Formats
Sequences
Checks
Test procedures
Fault reporting

随后测试:

1
2
3
4
5
6
7
Message integrity
Delivery sequence
Delay
Loop
Invalid / abnormal conditions
Facility loss and restoration
Trouble reporting
测试维度 要验证的问题
Format 两端是否对消息结构理解一致
Sequence 消息顺序是否正确
Checks 怎样判断消息正确
Integrity 内容是否被破坏
Delay 网络延迟是多少
Loop 环回路径是否工作
Invalid Conditions 非法输入时系统怎样响应
Link Failure 通信线路断开后怎样表现
IMP Failure IMP 丢失后怎样表现
Host Failure Host 丢失后怎样表现
Recovery 设施恢复后系统是否恢复
Fault Reporting 故障怎样汇报

这是一套功能、正确性、性能、异常、恢复和运维联合测试,而不是一句“ping 通了”。

5. 第三个节点加入后,测试目标发生变化

UCSB 加入以后,RFC 4 要求先重做 All of 6,然后增加:

1
Load network for alternate routing to be effective

也就是通过增加网络负载,让 **Alternate Routing(替代路由)**真正被触发。

两节点系统中:

1
A ── B

基本不存在“走哪条路”的问题。

三个或更多节点形成多条路径后,才真正开始出现:

1
2
3
4
Routing
Load
Alternate Path
Path Failure

这些网络问题。

6. 三节点测试还要求建立语音协调机制

RFC 4 还有一项今天读起来很有时代感:

1
Develop voice coordination scheme

包括:

1
2
3
Three way conference
Design and build conference gear
Deliver conference gear to UCLA and UCSB

也就是说,网络工程师调试 ARPANET 时,需要另外准备电话语音协调系统。

原因很简单:

当你正在调试的对象就是“网络”时,不能假设网络本身可以稳定承载你的协作工具。

所以必须存在 Out-of-Band Communication(带外通信)

7. 多节点阶段开始主动测试路径变化

RFC 4 还写了:

1
Route messages around ring

并区分:

1
2
Via Imps
Via hosts

随后列出六种:

1
2
3
4
5
6
UCLA-I, UCSB-I
UCLA-H, UCSB-I
UCLA-H, UCSB-H
UCSB-I, UCLA-I
UCSB-H, UCLA-I
UCSB-H, UCLA-H

原文没有单独解释 IH。结合紧邻的 Via ImpsVia hosts,可以合理推断:

1
2
I → IMP
H → Host

但这属于结合上下文的解释,不应当作 RFC 4 明文定义的术语。

更重要的是它背后的测试思想:同一个网络行为,需要从不同节点、不同处理路径和不同方向反复验证,这已经是一种非常朴素的 Test Matrix

8. 第四个节点加入以后做回归

UTAH 加入以后,RFC 4 写:

1
2
3
Selected group of previous test
All of 6
7b

也就是说:

1
2
3
新节点加入

重复之前关键测试

这就是最朴素的 Regression Testing(回归测试)

9. 网络最后必须跑真正的用户系统

基础网络跑起来以后,RFC 4 开始要求:

1
Run simple TTY systems

这里已经进入应用与操作系统层。

它不仅测试单用户,还测试多用户:

1
2
3
4
5
Single user access
Multiple user access
A,C to B
A,A to B
Various combinations

也就是说不能只证明“一个用户偶尔登录成功”,还要验证多个用户、多个来源和同一 Host 上的多个用户同时访问。

10. 真正的“网络可用”还包括完整用户生命周期

TTY 阶段还要求验证:

1
2
3
4
5
6
7
Login
Logout
进入 subsystem
退出 subsystem
Error messages
Crashes
Recoveries

所以 RFC 4 对“系统可用”的理解并不只是 transport works,而是:

1
2
3
用户能完成完整生命周期
+
失败以后能够恢复

11. 协议甚至还会在实验过程中继续确定

RFC 4 在 TTY 阶段写:

1
2
Establish message formats
Establish protocols

今天看似乎有点反常:协议不是应该设计完才开始测试吗?

但这恰恰体现了早期 ARPANET 的开发方式:

1
2
3
4
5
设计
→ 实现
→ 联调
→ 发现问题
→ 修改协议

RFC 正在记录系统被创造出来的过程,而不是描述一个已经完成的系统。

12. 用户手册、账号和使用排期也属于上线工作

RFC 4 还列出:

1
2
3
4
5
File storage and retrieval
Need user's guides for each site
Need to establish usage schedules
Need to set user names
Design and build comm exec or its equivalent

这说明真正让一个网络投入使用,还需要:

1
2
3
4
5
6
7
8
9
10
11
12
13
协议
+
软件
+
账号
+
文档
+
用户指南
+
资源排期
+
运行管理

只实现数据包传输远远不够。

13. Typewriter 和 Arbitrary Terminal 暴露了终端异构问题

RFC 4 后续要求:

1
2
3
Run simple typewriter systems
Run arbitrary terminals without local feedback
Run arbitrary terminals

对于 simple typewriter,还特别提出:

1
2
How define when in half or full duplex mode
How to set "break" characters

也就是说,终端之间甚至连输入是否本地回显、半双工还是全双工、什么字符表示 Break 都不能假设一致。

14. Move files 只有两个词,却是重要目标

RFC 4 第 13 项只有:

1
Move files

没有进一步展开。

但从 ARPANET 最早期开始,Remote Login 和 File Transfer 就是最明确的实际网络应用之一。这里能说明的是:

文件移动已经明确进入初始网络验收路线图。

不能把 RFC 4 的 Move files 直接等同于后来成熟的 FTP 协议。

关键机制与工作流程

RFC 4 没有定义新的 wire protocol,它真正定义的是一套系统验证工作流

一、整体验证模型:逐步扩大未知范围

flowchart TD
    A[通信设备安装]
    B[Host-IMP Interface 设计]
    C[硬件 Loop Test]
    D[安装 IMP]
    E[单站 Host ↔ IMP TX/RX]
    F[IMP Loopback]
    G[Crash / Recovery / Restart]
    H[UCLA ↔ SRI 双节点]
    I[Integrity / Sequence / Delay]
    J[Link / IMP / Host Failure]
    K[加入 UCSB]
    L[Load + Alternate Routing]
    M[加入 UTAH]
    N[回归之前关键测试]
    O[Single-user TTY]
    P[Multi-user TTY]
    Q[Arbitrary Terminal]
    R[File Transfer]
    S[Systematic Debugging]

    A --> B --> C --> D --> E --> F --> G
    G --> H --> I --> J --> K --> L --> M --> N
    N --> O --> P --> Q --> R --> S

核心原则只有一句话:

一次只增加有限的新变量。

二、单节点阶段:先把失败域缩到 Host–IMP

如果一开始直接测试:

1
2
3
4
5
UCLA Host
→ UCLA IMP
→ Network
→ SRI IMP
→ SRI Host

失败以后至少有五个大方向。

RFC 4 先要求:

1
2
3
Host → IMP
IMP → Host
Host → IMP → Loop → Host

这样可以先证明本地 Host Interface 和本地 IMP Interface 基本正常,然后才进入远程链路。

三、两节点阶段:建立确定的测试契约

UCLA 和 SRI 在测试前先约定:

1
2
3
4
5
Format
Sequence
Check
Procedure
Fault Reporting

从今天的工程语言看,这相当于建立一个 Test Contract:发送什么、期望收到什么、什么叫成功、什么叫失败、失败以后记录什么,都必须先说清楚。

四、性能从第一轮远程测试就进入验收范围

RFC 4 明确写:

1
Measure delays

也就是说,网络能通并不等于网络满足交互需求。

RFC 2555 回顾当时 ARPANET 使用的是约 50 kilobit per second 的通信线路,因此延迟不是最后才优化的指标,而是第一次跨站点联通时就需要测量的指标。

五、主动制造故障

RFC 4 中最值得现代工程师注意的一段是:

1
Lose and restore facilities

然后明确列出:

1
2
3
Communication link
Imps
Hosts

也就是说,他们不满足于“系统正常情况下可以运行”,还要主动验证:

1
2
3
断线路 → 恢复线路
丢 IMP → 恢复 IMP
丢 Host → 恢复 Host

从今天视角看,这和 Failure Injection、Chaos Testing、Disaster Recovery Exercise 有明显思想相似性,但 RFC 4 并没有提出后来所谓 Chaos Engineering 的完整理论。更准确的表述是:

早期 ARPANET 的系统验收已经把故障和恢复作为第一等测试对象。

六、多节点阶段:从通信测试升级为网络测试

双节点主要验证 Communication;三、四节点才开始验证:

1
2
3
4
Routing
Alternate Path
Load
Topology Change

因此 RFC 4 的测试本身也有明显分层:

1
2
3
4
5
6
7
Host Interface Test

Point-to-Point Test

Network Topology Test

Application Test

七、带外协调是测试系统的一部分

RFC 4 多次提到:

1
2
3
voice coordination
telephone
intercom

这实际上组成了测试控制面:

1
2
3
4
5
6
7
ARPANET

被测试系统

Telephone / Voice Channel

测试人员协调系统

如果 ARPANET 出现故障,电话仍然可以工作,双方就能比较日志、确认发送顺序和同步排查。

八、故障定位流程

RFC 4 最后专门定义:

1
Develop debugging techniques

并拆成:

1
2
3
4
5
6
7
Fault Detection

Cause Localization

Cause Determination

Cause Correction
flowchart LR
    A[Fault Detection<br/>发现故障]
    B[Cause Localization<br/>定位故障区域]
    C[Cause Determination<br/>确定根因]
    D[Cause Correction<br/>修复]

    A --> B --> C --> D

这里最重要的是:

1
Detection ≠ Localization ≠ Root Cause ≠ Fix

九、怎样发现和定位故障

RFC 4 给出三种 Fault Detection 方法:

1
2
3
Conformance to manual
"Reasonableness" of result
Comparison with alternate form of use

也就是:

  1. 与规范对照;
  2. 判断结果是否合理;
  3. 换一种使用方式做对比。

Cause Localization 的候选区域则包括:

1
2
3
4
5
6
7
8
Comm-IMP complex
Serving host
Using host
Try other programs
Monitor subsystem via "link" procedures
Use dialup Dataphone
Use voice coordination channel
Move canned messages

其中 canned messages 可以理解为预先准备好的固定测试消息。固定输入以后,预期结果也固定,更容易判断问题来自数据还是系统。

重点概念与术语

Network Timetable

RFC 4 的标题。这里的 Timetable 不只是项目甘特图,文档同时包含 Schedule、Dependency、Integration Plan、Test Plan、Failure Test 和 Operational Preparation。

更准确的技术理解是:

ARPANET 初期网络上线与验证路线图。

ARPANET

ARPANET(Advanced Research Projects Agency Network),早期分组交换网络,也是后来 Internet 技术发展的重要基础。

RFC 4 所描述的仍然只是最初几个站点组成的小型实验网络。

HOST

连接到 ARPANET 的大型计算机系统。不同站点的 Host 架构、OS、I/O 和字符表示可能完全不同。

IMP

IMP(Interface Message Processor,接口报文处理机),ARPANET 的分组交换节点。

可以粗略视为现代分组网络设备的早期前身,但不能简单等同于今天的 IP Router。

Host-IMP Interface

Host 与 IMP 之间的硬件和软件接口。1969 年各站点需要为自己的 Host 构建相应接口。

Hardware Loop Test

利用硬件环回验证接口和试验软件:先不依赖远端网络,在本地闭环中验证 TX / RX。

Message Integrity

消息完整性。RFC 4 要求 UCLA–SRI 测试时验证收到的数据是否与发送数据一致。

Sequence of Delivery

交付顺序。RFC 4 不只验证有没有收到,还验证 Message 是否按预期顺序到达。

Delay

RFC 4 明确要求 Measure delays,说明性能从最早的远程联调开始就是验收内容。

Alternate Routing

替代路由 / 备用路径路由。UCSB 加入后,需要增加网络负载,让 Alternate Routing 真正生效。

Voice Coordination Circuit

用于测试人员语音协调的独立通信线路。现代可以类比为 Out-of-Band Management Channel

TTY

TTY(Teletype,电传打字终端),早期远程计算的重要交互终端模型之一。

Half Duplex / Full Duplex

**Half Duplex(半双工)**和 Full Duplex(全双工)。RFC 4 在 simple typewriter system 中明确提出需要解决模式切换问题。

Break Character

终端中用于触发特殊控制行为的字符或按键语义。不同终端的 Break 行为并不统一。

Serving Host / Using Host

Serving Host 是向远程用户提供资源的一侧;Using Host 是用户所在、通过网络访问远端服务的一侧。

RFC 4 在故障定位中明确区分两端角色。

Comm Exec

原文写:

1
Design and build comm exec or its equivalent

RFC 4 没有详细定义 comm exec。可以理解成管理网络通信的执行/控制软件组件,但不应强行等同于现代某个具体网络栈或进程。

Canned Messages

预先准备的固定测试消息,用于复现和定位问题。

I / H

RFC 4 三节点测试中出现 UCLA-IUCLA-HUCSB-IUCSB-H。原文没有单独定义。结合 Via ImpsVia hosts,可以合理推测:

1
2
I = IMP
H = Host

但应该明确这是上下文推断,而非原文明确定义。

需要特别注意的点

1. RFC 4 不是协议规范

它是一份:

1
2
3
4
5
部署计划
+
测试计划
+
工程 Checklist

今天不存在“实现 RFC 4”的实际意义。

2. RFC 100 早在 1971 年就把它标为 Obsolete

RFC 4 的价值已经完全转向历史和工程方法研究。

3. RFC 编号不是严格时间顺序

RFC 4 的日期 24 March 1969 早于 RFC 1 的 7 April 1969。以后阅读早期 RFC 时,不能仅凭编号推导事件发生顺序。

4. 10/15/69 是计划,不是第一次实际 Host-to-Host 通信日期

RFC 4 计划:

1
2
Test messages between UCLA-SRI
10/15/69

但 UCLA 和 SRI 保存的历史记录显示,第一次著名的 Host-to-Host ARPANET 登录测试发生在:

1
2
29 October 1969
22:30

UCLA 向 SRI 尝试发送:

1
LOGIN

第一次只成功发出:

1
LO

随后系统崩溃,之后才完成完整登录。

因此不要把 RFC 4 的 10/15/69 写成历史事件真实发生日期,它只是计划节点。

5. 四节点网络总体路线很快成为现实

SRI 的官方历史资料记录,到 1969 年 12 月 5 日,UCSB 和 University of Utah 已经加入,形成最初的四节点网络。

所以 RFC 4 的具体日期没有完全按表执行,但 UCLA → SRI → UCSB → UTAH 的总体部署方向很快落地。

6. Test messages 不应该直接翻译成现代 ping

RFC 4 的测试包括:

1
2
3
4
5
6
7
8
format
sequence
checks
integrity
delay
loop
failure
recovery

这比一句 ping host 丰富得多。

7. Alternate Routing 不能直接理解为 OSPF / BGP

当时 ARPANET IMP 网络的路由机制与现代 IP 路由协议不同。

1
2
3
Alternate Routing
≠ OSPF
≠ BGP

只能在“多路径和故障路径需要验证”这个抽象层做类比。

8. RFC 4 有明显的工作笔记痕迹

原文开头出现:

1
1 (n10) network checkout

还有:

1
2f See 16

但当前机器可读文本里并没有完整对应的 16 项;debugging checklist 中还出现重复的 14b3 编号,并有若干拼写错误。

这说明 RFC 4 是早期工程工作文档,不是经过现代 RFC 编辑流水线精修后的正式标准文本。

9. 原文网络拓扑图只是 ASCII 草图

今天重画成 Mermaid 时,应只保留原图表达的拓扑关系,不应自行补充原文没有给出的设备、接口和地址。

10. Run simple TTY systems 不代表 Telnet 已经存在

RFC 4 提到 TTY 和远程使用,但成熟的 TELNET Protocol 还没有形成,不能直接解释成今天熟悉的:

1
telnet host 23

11. Move files 也不是已经定义 FTP

它表达的是能力目标,不是后来的 File Transfer Protocol wire format。

12. Voice Coordination 不是落后的人工 workaround

这是可靠性设计:当生产网络本身坏掉时,故障排查工具不能全部和它共享同一个失败域。

13. “合理性检查”不能替代正式校验

RFC 4 的 "Reasonableness" of result 在早期调试中很实用,但现代系统仍需要 invariant、checksum、schema validation、assertion、metrics threshold 等可自动验证机制。

14. 这份 RFC 没有现代安全模型

它关注连接、调试、恢复、账号和终端,但没有现代意义上的 authentication protocol、encryption、authorization model 或 adversarial threat model。

从今天的视角重新看这篇 RFC

RFC 4 已经完全过时,但把具体设备、日期和 TTY 拿掉以后,很多工程思想依然非常熟悉。

一、这是典型的 Progressive Integration

RFC 4 的验证顺序:

1
2
3
4
5
6
组件
→ 本地接口
→ 双节点
→ 三节点
→ 四节点
→ 应用

现代大型系统也应该尽量避免:

1
2
所有东西开发完
→ 一次性全链路联调

更安全的路径是:

1
2
3
4
5
Component Test
→ Contract Test
→ Integration Test
→ Staging
→ Progressive Rollout

核心原则:每一步只增加少量新的未知因素。

二、Loopback 是缩小故障域最有效的工具之一

RFC 4 在连接远端之前先验证 Host → IMP、IMP → Host 和 IMP Loop。

今天排查网络依然会从:

1
2
3
4
5
6
7
8
9
10
11
localhost

local NIC

default gateway

same subnet

remote network

remote service

逐层寻找第一个失败的边界。

三、测试计划必须同时覆盖 Happy Path 和 Failure Path

很多项目上线前只测试“请求成功了吗”。RFC 4 还问:

1
2
3
4
5
线路断了会怎样?
IMP 掉了会怎样?
Host 掉了会怎样?
恢复以后会怎样?
异常输入会怎样?

Availability、Resilience、Recovery 必须和功能正确性一起设计。

四、第一次跨服务集成就应该测延迟

RFC 4 在最初两节点测试中就要求 Measure delays

现代微服务同样不能等功能全部完成以后才发现:

1
A → B → C → D → E

每层都增加 100 ms,最后整个请求变成 500 ms。

五、故障定位必须和故障检测分开

RFC 4 的:

1
2
3
4
Fault Detection
Cause Localization
Cause Determination
Cause Correction

到今天仍然是非常合理的 Incident 思维。

例如 5xx 上升 只说明检测到了异常,并不代表已经知道根因。

六、固定测试消息就是今天的 Synthetic Test

RFC 4 提到 Move canned messages,现代可以类比:

1
2
3
4
5
Synthetic Transaction
Health Check Request
Golden Test Data
Replay Fixture
Known-good Packet

输入稳定以后,系统差异就更容易观察。

七、多节点上线以后必须重跑旧测试

RFC 4 加入 UTAH 后要求重新运行之前关键测试。

现代系统从 single node 扩到 cluster、从 single AZ 扩到 multi-AZ、从 single region 扩到 multi-region,也不能只验证“新节点健康”,还必须确认原有功能、路由、一致性、故障恢复和延迟没有被破坏。

八、运维通道必须独立于业务通道

RFC 4 的 voice coordination 今天最值得映射到:

1
OOB Management

例如生产网络大面积故障时,还需要 BMC / IPMI、Serial Console、独立管理网或电话。

九、上线不只有代码和协议

RFC 4 在 TTY 阶段还要求:

1
2
3
4
User guides
Usage schedules
User names
Communication executive

这提醒我们:

1
2
3
Feature Complete

Production Ready

真正可用还需要 Documentation、Identity、Operations、Resource Allocation、Support Process 和 Recovery Procedure。

十、它很像一份早期 Definition of Done

用现代语言重写 RFC 4,一个网络节点“完成”不能只满足设备通电,而要满足:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
硬件接口可用
TX/RX 可用
Loopback 可用
Crash Recovery 可用
跨站点可用
数据完整
顺序正确
延迟可测
故障可恢复
路由可验证
多用户可用
用户能登录
文件能传输
故障能定位
有操作文档
有账号
有运维协调机制

这才是真正的 Done。

十一、它有一点 Chaos Engineering 的味道,但不要过度类比

RFC 4 主动要求:

1
2
3
4
Lose and restore
Communication link
IMP
Host

思想上确实接近主动故障验证,但 RFC 4 没有 steady-state hypothesis、随机故障注入、自动化实验平台等现代 Chaos Engineering 方法。

十二、它是一份“先测试系统,再完善协议”的活文档

现代标准常给人一种:

1
2
3
Specification

Implementation

的印象。

RFC 4 所处的世界更像:

1
2
3
4
5
6
7
8
9
10
11
12
13
Idea

Draft Protocol

Hardware Arrives

Test

Discover Problem

Change Protocol

Test Again

早期 RFC 的价值就在这里:你能直接看到工程师当时不知道什么、担心什么、准备测什么、计划怎样失败。

这篇 RFC 带来的影响

RFC 4 并没有像 TCP、IP、HTTP 那样留下一个今天仍然运行的协议,它甚至在 1971 年就被 RFC 100 明确标记为 Obsolete

所以讨论它的影响,不应该去寻找现代协议中的某个字段是否继承自 RFC 4,而应该从工程史角度理解。

一、它保存了 ARPANET 初始四节点部署前的工程路线图

在事情发生以前,没有 Internet、Web、Cloud、Streaming,只有:

1
2
3
4
5
6
7
8/1  装通信设备
9/1 做 Host-IMP Interface
9/15 装 IMP
10/1 调接口
10/15 计划 UCLA-SRI 联调
11/15 计划加 UCSB
12/15 计划加 Utah

它让我们看到:

伟大的基础设施在诞生之前,看起来往往只是大量很琐碎的接口、线缆、测试程序和故障清单。

二、它证明早期 ARPANET 从一开始就在考虑“可运营性”

RFC 4 不只问数据能不能传,还问:

1
2
3
4
5
6
7
8
9
10
11
12
延迟是多少?
顺序对不对?
异常输入怎么办?
线路掉了怎么办?
IMP 掉了怎么办?
Host 掉了怎么办?
恢复以后怎么办?
故障怎么报告?
怎么定位?
怎么协调?
用户手册在哪里?
账号怎么设?

这意味着网络工程从很早开始就包含:

1
2
3
Protocol Engineering
+
Operations Engineering

三、它记录了从“两台机器通信”到真正“网络”的跨越

UCLA–SRI 两节点阶段主要验证 Host-to-Host Communication。

UCSB 加入以后,开始测试:

1
2
3
Alternate Routing
Network Load
Route Around Ring

两台计算机连起来,和构成一个能够选择路径、承受故障和扩展节点的网络,不是同一个问题。

四、时间表与实际历史之间留下了很有价值的对照

RFC 4 计划:

1
2
UCLA ↔ SRI Test Messages
15 October 1969

实际被 UCLA 和 SRI 记录为第一次著名 Host-to-Host 消息的日期是:

1
29 October 1969

第一次试图输入 LOGIN,只发出了 LO,系统就崩溃。

工程角度真正有意思的是,RFC 4 在几个月前已经把:

1
2
3
4
crash
recovery
fault reporting
debugging

写进了测试计划,而真正第一次历史性登录测试时,系统真的就 crash 了。

五、四节点初始网络的总体规划很快成为现实

SRI 的官方历史资料记录,到 1969 年 12 月 5 日,UCSB 和 University of Utah 已经加入,形成最初的四节点网络。

虽然 RFC 4 的具体日程发生调整,但它描绘的四节点总体路线在当年就基本落地。

六、它给今天软件工程留下的不是协议,而是一种测试思维

把 RFC 4 压缩成现代工程语言:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
先单组件
再接口

先本地
再远程

先两节点
再多节点

先正常路径
再异常路径

先检测故障
再定位故障

增加节点以后
重跑旧测试

测试系统故障时
保留独立协调通道

功能可用以后
再验证用户、文档、账号和运维

这套思维直到今天仍然适用于微服务、Kubernetes、Service Mesh、数据库集群、消息队列、多机房网络、分布式存储和 AI 推理集群。

不是因为这些系统继承了 RFC 4,而是因为:

复杂分布式系统的调试规律,并没有因为硬件快了一百万倍就消失。

总结

RFC 4 是一篇很容易被跳过的 RFC。

它没有伟大的新算法,没有经典报文格式,也没有成为后世网络协议的核心标准。

它只是一份 Network Timetable

但认真读完以后,会发现这其实是一份非常完整的 1969 年分布式系统上线计划。

它从最底层开始:

1
2
3
4
机房
电源
线缆
通信设备

然后进入:

1
2
3
4
5
Host-IMP Interface
硬件环回
TX / RX
Crash / Recovery
Reload / Restart

再进入:

1
2
3
4
5
6
UCLA ↔ SRI
Message Format
Sequence
Integrity
Delay
Fault Reporting

第三个节点加入以后开始测试:

1
2
3
Network Load
Alternate Routing
Route Around Ring

第四个节点加入以后进行:

1
Regression Test

随后才让真正的用户开始使用:

1
2
3
4
5
6
7
8
Single-user TTY
Multi-user TTY
Login / Logout
Subsystem
File Storage
File Retrieval
Arbitrary Terminal
Move Files

最后再建立:

1
2
3
4
Fault Detection
Cause Localization
Cause Determination
Cause Correction

整篇 RFC 最值得记住的,不是 10/15/6911/15/6912/15/69 这些早已失效的日期,而是它隐含的一套工程方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
不要一次验证整个复杂系统。

把系统拆成边界。

先验证最小闭环。

逐步增加节点和变量。

每扩展一次都做回归。

不要只测试成功路径。

主动测试 crash、线路故障和恢复。

让测试结果可判断。

让故障可以定位。

给故障排查保留独立通信渠道。

真正上线之前,把用户、文档、账号和运维也算进系统。

RFC 1 和 RFC 2 让我们看到早期工程师怎样思考 Host Software。

RFC 3 让我们看到他们怎样建立技术协作规则。

RFC 4 则让我们看到:

当纸面上的网络终于要变成真实机器、线路和用户时,他们准备怎样把它一点一点调通。

从今天的软件开发视角看,RFC 4 已经不是一份值得“实现”的 RFC。

它更像一张保存了五十多年的工程现场照片。

而照片里最熟悉的东西不是 IMP,也不是 TTY。

是那套今天每个做过复杂系统联调的人都见过的流程:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
先接起来。

再测。

坏了。

定位。

修。

重测。

再加一个节点。

然后继续。

互联网,就是这样一点一点被调通的。


RFC 4 带读:Network Timetable——ARPANET 上线前的系统集成与测试计划
https://allendericdalexander.github.io/2026/08/14/rfc/rfc00004-network-timetable/
作者
AtLuoFu
发布于
2026年8月14日
许可协议