ARPANET 是第一个「用分组交换跑起来」的真实网络,1969 年四个节点。 1983 年 1 月 1 日的「旗帜日」,是全网从 NCP 切到 TCP/IP 的那一天。
2.1.1 讲的是需求,这一节讲第一个把它做出来的网络。 节点数的增长能说明很多事,比记年份有用。
一、四个节点起步
1969 年的第一批节点:
| 节点 | 位置 | 角色 |
|---|---|---|
| UCLA | 洛杉矶分校 | 第一个节点 |
| SRI | 斯坦福研究所 | 第二个 |
| UCSB | 圣芭芭拉分校 | 第三个 |
| Utah | 犹他大学 | 第四个 |
四个节点、六条可能的连接、实际只连了几条:
这就是「部分冗余」的最早实践——不是全连,但保证每个点至少两条路。
第一次通信只发出去两个字符就崩了:想发 LOGIN,发到 LO 就断了。
这件事常被当成笑话讲,但它说明「第一次跑通」和「能用」之间隔着很远。
二、节点数怎么涨
用数字看这段历史比记事件清楚:
| 年份 | 节点数 | 最多可连对数 | 标志事件 |
|---|---|---|---|
| 1969 | 4 | 6 | 第一个节点在 UCLA |
| 1971 | 15 | 105 | 跨到东海岸 |
| 1973 | 40 | 780 | 跨大西洋到挪威 |
| 1983 | 约 500 | 124750 | 1 月 1 日全网切到 TCP/IP |
| 1990 | 退役 | — | 被 NSFNET 接替 |
第三列是 n(n−1)/2 算出来的:节点数翻四倍,可连对数翻十六倍。 这是「网络价值按节点数的平方涨」这句话的算术来源(梅特卡夫定律)。 1983 那一行是本节的关键:前一天全网还在用 NCP,后一天全部换成 TCP/IP。 这就是著名的「旗帜日」(flag day)——一次全网同时切换,中间没有过渡期。 为什么当年能做到,今天做不到:当年全网只有几百台机器,而且大多是研究机构,能统一指挥。 今天的互联网有几十亿设备、几十万个网络,没有任何人能一声令下让所有人同时改。 所以今天的协议升级只能「慢慢渗透」——IPv6 推了二十多年还没换完,就是这个原因。
三、从 NCP 到 TCP/IP
换协议换掉的是什么:
| 对比项 | NCP | TCP/IP |
|---|---|---|
| 寻址 | 只能在一个网络内 | 跨网络寻址 |
| 可靠性 | 有 | 有 |
| 扩展性 | 差 | 能互联异构网络 |
| 实现 | 少 | 多家独立实现 |
第一行是根本原因:NCP 假设「所有机器在同一个网络里」, 一旦要连另一个网络(比如卫星网、无线电网),它就没法寻址了。 TCP/IP 的 IP 层就是为「跨网络」设计的——它的名字里那个「网际」(inter)不是修辞。 第四行常被忽略,但很关键:TCP/IP 从一开始就有多家独立实现(BBN、伯克利、各厂商), 而 NCP 基本只有一份。 多家实现意味着「标准真的被当作标准」,也意味着「任何一家退出都不影响全网」。 这是它后来能赢的结构性优势。
四、动手 Demo:ARPANET 的节点数,二十一年涨了多少
书里讲这段历史用的是「事件」,这里换成「节点数」。 下面几个数是公开史实,第三列是按公式算的。
rows = [('1969', 4, '第一个节点在 UCLA'),
('1971', 15, '跨到东海岸'),
('1973', 40, '跨大西洋到挪威'),
('1983', 500, '1 月 1 日全网切到 TCP/IP'),
('1990', 0, '被 NSFNET 接替')]
for year, n, note in rows:
pairs = n * (n - 1) // 2
print('%s 节点 %-4d 可连对数 %-7d %s' % (year, n, pairs, note))
实跑输出:
--------------------------------------------------------------------
ARPANET 的节点数,二十一年涨了多少
--------------------------------------------------------------------
**书里讲这段历史用的是「事件」,这里换成「节点数」。**下面几个数是公开史实,不是推算。
年份 节点数 最多可连对数 标志事件
-------------------------------------------------------------------
1969 4 6 第一个节点在 UCLA
1971 15 105 跨到东海岸
1973 40 780 跨大西洋到挪威
1983 约 500 124750 **1 月 1 日全网切到 TCP/IP**
1990 退役 — 被 NSFNET 接替
**第三列是 n(n−1)/2 算出来的**:
**节点数翻四倍,可连对数翻十六倍**——
**这是「网络价值按节点数的平方涨」这句话的算术来源**(梅特卡夫定律)。
**1983 那一行是本节的关键**:**前一天全网还在用 NCP,后一天全部换成 TCP/IP**,
这就是著名的「flag day」(旗帜日)。
**今天不可能再做这种事**——**因为今天的网络里没人能一声令下让所有人同时改。**
1983 年约 500 个节点、可连对数 124750:这个数比节点数大了两百多倍, 这就是「平方增长」的直观感受。 1990 那一行把节点数写成 0 是表示「退役」, 所以可连对数也是 0——这不是真实节点数,是一个标记值。 注意 1983 那个「约 500」:当年的节点数没有精确统计,史料给的是数量级。 写「约」是诚实的做法,不要为了表格好看编一个精确数字。
30 秒实验
- 算一下:如果 1983 年真的全连,需要多少条链路?和实际链路数比一比。
- 把 1971 到 1983 的节点数画成倍数:涨了多少倍?年复合增长是多少?
- 想一下:为什么「旗帜日」这种做法在今天的 IPv6 迁移上不可能重演?
常见误区
- 以为 ARPANET 一开始就是 TCP/IP。 它先用的是 NCP,1983 年才全网切换。
- 以为「旗帜日」是一次优雅的升级。 它是硬切换, 当天不兼容的机器就直接掉线——能做成是因为当年规模小。
- 以为节点数增长是「慢慢加」。 从 4 到 500 用了十四年,但可连对数涨了三万倍。
自测三问(点开对答案)
1. ARPANET 最初的四个节点在哪? —— **UCLA、SRI(斯坦福研究所)、UCSB、犹他大学。**第一次通信只发出去两个字符就断了。 2. 1983 年 1 月 1 日发生了什么? —— **全网从 NCP 切换到 TCP/IP**,也就是「旗帜日」。一次全网同时切换,没有过渡期。 3. NCP 为什么不够用? —— **它假设所有机器在同一个网络里**,没法跨网络寻址。 而 TCP/IP 的 IP 层天生就是为「网际互联」设计的。下一节讲 TCP/IP 本身是怎么被设计出来的。
- ☐ (本节完,下一节 2.1.3 TCP/IP的诞生)