ARPANET:一切的开端
一次登录崩溃、一个紧张的研究生,还有一封不该发的邮件——一个冷战时期的研究项目如何意外地为互联网打下了地基。
TL;DR
1969 年,美国军方的研究机构(ARPA)资助了一个连接大学的四节点网络。它用的是分组交换——把消息切成独立路由的小块——而不是专用电话线。一位研究生因为太紧张不敢写任何权威性的东西,意外创造了互联网的标准流程(RFC)。邮件,这个网络的杀手级应用,从来没在计划里。ARPANET 证明了去中心化网络行得通,但它的协议不能连接不同的网络——这个问题催生了 TCP/IP。
“Lo”
1969 年 10 月 29 日,加州大学洛杉矶分校的一位研究生 Charley Kline 尝试登录 350 英里之外斯坦福的一台计算机。他敲了 L、O、G——然后系统崩了。通过 ARPANET 发送的第一条消息是 “Lo”。互联网的起源故事是一份 bug 报告。
一小时后他再试,完整的 LOGIN 过去了。但没人记得那次成功,大家记得的是那次崩溃。
从 Sputnik 到”星际计算机网络”
一切始于恐慌。1957 年,苏联发射了 Sputnik——一个滴滴响的铝制球体,证明他们能把东西送上轨道。美国的回应是创建 ARPA,一个有钱、有紧迫感、几乎没有官僚主义的国防研究机构。
ARPA 雇了 J.C.R. Licklider,他在 1962 年写了几份备忘录,描述一个 “星际计算机网络”——这就是它真正的名字——让国内每一台研究用的计算机都能像距离不存在一样共享数据。1962 年,计算机连走廊里的打印机都说不上话。他的愿景听起来像科幻小说。
实际的推动来自 Bob Taylor。到 1966 年,他在五角大楼办公室里有三台终端,每台对应一台远程计算机。三套系统,三套命令。他走进老板办公室问:为什么不做一台连接所有这些的终端?他拿着一百万美元走出来,去建这个网络。
分组交换
电话网络用的是电路交换——两个通话者之间有一根专用线路,即使沉默时也保持开启。浪费、脆弱,而且对那些数据是短时突发的计算机来说太贵了。
RAND 公司的 Paul Baran 和英国国家物理实验室的 Donald Davies 独立得到了同一个想法:把消息切成小分组(packet),独立发送,到目的地再组装。Davies 给了它那个保留下来的名字——packet switching(分组交换)。
import random
def packetize(message, size=5):
return [{"seq": i, "data": message[i*size:(i+1)*size]}
for i in range(-(-len(message) // size))]
def reassemble(packets):
return "".join(p["data"] for p in sorted(packets, key=lambda p: p["seq"]))
packets = packetize("Hello from UCLA to SRI")
random.shuffle(packets) # 分组走不同路径
print(reassemble(packets)) # → "Hello from UCLA to SRI"
关键洞见:网络不需要理解你的消息。 它只是把分组从 A 移到 B。这让它富有韧性(没有单点故障)、高效(不浪费带宽)、又面向未来(它不在乎你发的是文本、图像,还是尚未发明的东西)。
IMP:一台 900 磅的路由器
ARPA 需要硬件来实现这件事。IBM 拒绝了。AT&T 拒绝了。一家小的剑桥咨询公司,Bolt Beranek and Newman(BBN),用大约十二人的团队接下了这活。
他们造出了 Interface Message Processor(IMP)——一台 900 磅重、冰箱那么高的 Honeywell 迷你计算机。IMP 是你家里每一台路由器的祖先。每所大学把自己的计算机连接到一台 IMP,IMP 处理所有联网的事。主机完全不需要了解网络本身。
┌──────┐ ┌──────────┐
│ UCLA ├──┐ ┌────┤ Stanford │
└──────┘ │ │ └──────────┘
┌────┴──┐ ┌─┴─────┐
│ IMP 1 ├─┤ IMP 2 │
└───┬───┘ └─┬─────┘
┌───┴───┐ ┌─┴─────┐
│ IMP 3 ├─┤ IMP 4 │
└───┬───┘ └─┬─────┘
┌────────┴┐ ┌───┴──┐
│ UC Santa│ │ Utah │
│ Barbara │ │ │
└─────────┘ └──────┘
四节点 ARPANET(1969 年 12 月)
这种分离——网络与网络上的计算机——意味着任何机器都能加入,不管操作系统或架构是什么。第一台 IMP 于 1969 年 9 月 1 日抵达 UCLA。到 12 月,四个节点全部上线。
RFC 1:意外的治理
没有官方的团队来设计主机如何通过这个网络交谈。取而代之的是,来自四所大学的研究生非正式地碰面。其中一位,Steve Crocker,UCLA 的 24 岁青年,在 1969 年 4 月 7 日写下了他们最初的想法。
他非常怕越位——他不是教授,没有权威。所以他半夜在浴室里写,用谦虚的语言,把标题写成 “Request for Comments”——不是规范,只是邀请讨论。
那个本能创造了 RFC 流程,从那以后一直治理着互联网标准。网页如何被获取、邮件如何被投递、数据如何在网络上传输——每一个重要的互联网协议,都是通过一位紧张的研究生为了不显得专横而发明的流程定义的。
通过这个流程,这个小组构建了 ARPANET 的第一个主机到主机协议:Network Control Protocol。它能工作——但它假设网络永远不会丢包。在四个节点上,这没问题。在全球规模上,这会是灾难。正是这个缺陷推动了它的继任者 TCP/IP 的诞生。
意外的杀手级应用
到 1971 年,ARPANET 有 15 个节点。但它最重要的特性根本没有被规划过。
BBN 的 Ray Tomlinson 把一个本地消息程序和一个文件传输工具结合起来。他需要一种方式给特定机器上的某个用户发地址,所以他挑了一个不会出现在任何人名字里的符号:@。
他告诉同事:“别告诉任何人。这不是我们该做的事。”
两年之内,邮件占了 ARPANET 全部流量的 75%。一个为分享算力而建的网络,成了一个供人类交流的网络。这种模式——用户发现一个平台的真正用途——会在互联网历史中反复出现。
ARPANET 做对了什么(做错了什么)
ARPANET 在 1990 年退役,但它的理念延续至今:
- 去中心化 — 没有主节点,没有中央控制器
- 分组交换 — 你发过的每一个字节都证明 Baran 和 Davies 是对的
- 开放协作 — RFC 流程成为科技界最成功的标准机构
- 平台胜于产品 — 杀手级应用是某人在做”不该做的事”时做出来的
但它也暴露了局限。Network Control Protocol 不能在不同网络之间路由。完全没有安全性——所有人都被信任。而且只有 ARPA 选定的机构才能接入。
下一个挑战:让任何网络都能与任何其他网络对话。这就是 TCP/IP 登场的时候。