📚 第二章 TCP/IP基础知识
📄 一句话概括

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 秒实验

  1. 算一下:如果 1983 年真的全连,需要多少条链路?和实际链路数比一比。
  2. 把 1971 到 1983 的节点数画成倍数:涨了多少倍?年复合增长是多少?
  3. 想一下:为什么「旗帜日」这种做法在今天的 IPv6 迁移上不可能重演?

常见误区

  1. 以为 ARPANET 一开始就是 TCP/IP。 它先用的是 NCP,1983 年才全网切换。
  2. 以为「旗帜日」是一次优雅的升级。 它是硬切换, 当天不兼容的机器就直接掉线——能做成是因为当年规模小。
  3. 以为节点数增长是「慢慢加」。 从 4 到 500 用了十四年,但可连对数涨了三万倍。
自测三问(点开对答案) 1. ARPANET 最初的四个节点在哪? —— **UCLA、SRI(斯坦福研究所)、UCSB、犹他大学。**第一次通信只发出去两个字符就断了。 2. 1983 年 1 月 1 日发生了什么? —— **全网从 NCP 切换到 TCP/IP**,也就是「旗帜日」。一次全网同时切换,没有过渡期。 3. NCP 为什么不够用? —— **它假设所有机器在同一个网络里**,没法跨网络寻址。 而 TCP/IP 的 IP 层天生就是为「网际互联」设计的。

下一节讲 TCP/IP 本身是怎么被设计出来的。

相关笔记