从阿帕网到万物互联:TCP/IP 协议族的诞生与进化史

从 1969 年的阿帕网、NCP 协议,到“互联网之父”瑟夫与卡恩设计 TCP/IP,再到 1983 年那场著名的“切换日”,一文讲清互联网骨架是怎么搭起来的。

如果你今天随手打开手机刷个视频、或者用电脑 SSH 连上自己的一台海外 VPS 敲两行命令,可能从没想过一件事:把这些完全不同的设备连在一起、让它们能“说上话”的那套规则,到底是谁、在什么时候定下来的?答案绕不开一个词——TCP/IP。

一、故事得从阿帕网(ARPANET)说起

时间回到 1969 年。那时候“互联网”这个词还没诞生,美国国防部高级研究计划局(DARPA,当时叫 ARPA)搞了一个实验性的分组交换网络,叫阿帕网。最初它只把几所大学和研究机构的几台大型机连了起来,目的很单纯:让科学家们能共享昂贵的计算机资源。

早期的阿帕网用的是一套叫 NCP(Network Control Protocol,网络控制协议)的通信协议。NCP 能干活,但它有个致命的局限:它假设网络里所有机器用的都是同一套“方言”,只能在一个统一的网络内部通信。换句话说,阿帕网自己玩可以,但阿帕网和别的网络之间,根本没法互相说话。

二、“互联网之父”登场:罗伯特·卡恩与温顿·瑟夫

到了 1972 年,罗伯特·卡恩(Robert Kahn)加入 DARPA,他开始琢磨一件更宏大的事:能不能把卫星分组网、地面无线分组网、还有阿帕网这些“长相完全不同”的网络连成一个大网络?他提出了“开放架构网络”(open-architecture networking)的想法。

1973 年春天,卡恩找来了当时在斯坦福大学的温顿·瑟夫(Vinton Cerf)。瑟夫此前在 UCLA 深度参与过 NCP 的设计,对底层细节门儿清。两个人一拍即合,从 1973 年起开始合作。1973 年底,他们把研究成果写成了一篇论文,题为《A Protocol for Packet Network Intercommunication》(一种用于分组网络互联的协议),并在 1974 年 5 月发表在了 IEEE 的《通信汇刊》上。这篇论文描述的,就是后来的 TCP(传输控制协议)。

这里有个有意思的细节:瑟夫和卡恩本人其实很谦虚,他们从不说 TCP/IP 是自己“一个人发明”的。他们在论文里明确致敬了法国 CYCLADES 网络的设计者 Louis Pouzin 和 Hubert Zimmermann,那些“用共同互联协议隐藏不同网络差异”的思路,源头在别人那儿。可以说,互联网精神从一开始就是开放和站在巨人肩膀上的。

三、TCP 一分为二:TCP + IP 的诞生

最早的 TCP 是个“大块头”——它既负责给数据包找路(全球寻址),又负责保证数据可靠送达。可是在实际测试和实现的过程中,乔恩·波斯特尔(Jon Postel)、丹尼·科恩(Danny Cohen)和大卫·里德(David Reed)等人提出了一个关键问题:有些应用(比如语音、视频)宁可丢几个包也要快,没必要死等百分百送达。于是 1978 年,大家决定把原来 TCP 里“负责寻址”的那部分拆出来,单独成立一层,叫 IP(Internet Protocol,网际协议);剩下负责可靠传输的部分,继续叫 TCP。为了照顾“要快不要绝对可靠”的需求,又顺手造了 UDP(用户数据报协议)。从此,TCP 和 UDP 都跑在 IP 之上,统称 TCP/IP 协议族。

顺便提一嘴,1974 年 12 月还发布了 RFC 675,这是第一份详尽的 TCP 规范,主笔正是瑟夫。从 1975 年开始,斯坦福、BBN 和伦敦大学学院分别实现了这套规范,边测边改。1977 年 11 月 22 日,阿帕网、分组无线网和卫星网三大网络第一次成功互联演示——这套协议算是真刀真枪地跑通了。

四、1983 年 1 月 1 日:那场著名的“切换日”

真正的历史性时刻是 1983 年 1 月 1 日。这一天 DARPA 一声令下:所有连在阿帕网上的机器,必须停用 NCP、改用 TCP/IP,否则就断网。这种“一刀切”的切换日,在圈内被叫作 flag day。从这一天起,NCP 正式进了历史的垃圾堆,TCP/IP 成了互联网的事实标准。后来 ARPA 的分组无线网、分组卫星网也陆续切了过来,现代意义上的“互联网”骨架就此立住。

五、两种模型之争:OSI 七层 vs TCP/IP 四层

聊到分层模型,很多初学者会犯晕:书上既教 OSI 七层模型,又教 TCP/IP 四层模型,到底听谁的?

OSI(开放系统互联)模型是国际标准化组织(ISO)在 1970 年代末到 1980 年代初推出来的,它把网络通信分成七层:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。设计得很优雅、很学院派,理论上无懈可击。

TCP/IP 模型则更“野路子”,它是被实际需求逼出来的,一般被总结成四层:网络接口层、网际层(IP 在这一层)、传输层(TCP/UDP 在这里)、应用层。它把 OSI 里啰嗦的会话层、表示层干脆并进了应用层。

结果大家都知道了:学院派的 OSI 输给了实战派的 TCP/IP。原因很现实——TCP/IP 已经跑在世界最大的网络上、经过千锤百炼,而且是开放、免费、谁都能实现的;OSI 标准出炉时,仗都打完了。

六、TCP/IP 是怎么打败一众竞争对手的

当年想当“互联网通用语”的可不止 TCP/IP 一家。IBM 有自己的一套 SNA(系统网络架构),DEC 有 DECnet,还有国际电信联盟推的 X.25 分组交换标准。这些方案背后要么是巨头、要么是官方,看着都比 TCP/IP 根正苗红。

但它们最后都败下阵来,核心就三点:第一,TCP/IP 是开放标准,不绑定任何厂商,谁都能用;第二,它天生为“异构网络互联”设计,不管底层是卫星、无线还是电缆,上面都能跑;第三,也是最关键的——它已经长在正在爆炸式增长的互联网上了,迁移成本由全体用户承担,谁也扛不住。于是 SNA、DECnet、X.25 慢慢成了博物馆里的名词,TCP/IP 成了全球通用的“通用语”(lingua franca)。

七、插曲:TCP 到底靠什么保证“可靠”?

很多人听过“TCP 可靠、UDP 不可靠”,却少有人讲清它怎么可靠。说白了,TCP 给每个发出的字节都编了号(序列号),接收方收到后必须回一个“确认”(ACK)。如果发送方在约定时间内没收到确认,就判定数据包丢了,老老实实重发一遍。建立连接时还要来一轮“三次握手”:客户端先发“我想连”,服务端回“可以,我也想连”,客户端再回“那正式开始”——三次往返确认双方都在线、参数对得上,才进入数据传输。

这套机制听着啰嗦,却是今天网页、邮件、文件传输不出错的底层保障。相比之下,UDP 把这套手续全省了,发完就完、不管你收没收到,所以语音通话、直播、游戏实时画面才偏爱 UDP——卡掉一帧,总比等重传来得流畅。两种协议各管一摊,正是 TCP/IP 家族聪明的地方:需要可靠的走 TCP,需要速度的走 UDP,谁也不耽误谁。

八、名字里的玄机:Internet 一词从哪来

顺带说个冷知识:今天人人挂在嘴边的“Internet”(互联网),最早其实写成小写的“internet”,是“interconnected network”(互相连接的网络)的缩写,出自 1974 年那份 TCP 规范,当时指的就是“网之网”。后来首字母被大写成 Internet,专指那张以 TCP/IP 互联的全球大网。换句话说,这个词本身就是为 TCP/IP 而生的,没有这套协议,也就没有我们今天说的互联网。

九、写在最后

从 1969 年阿帕网那几台大型机,到今天你手里几十块钱一个月的 VPS,背后站着的都是同一套 TCP/IP。它不完美,IPv4 地址不够用就是它留的坑(这一点我们后面几篇会专门聊),但它足够好、足够开放,才撑起了整个人类的数字时代。下次你连上 HetznerOVH 或者 DigitalOcean 的机器时,不妨想一想:这趟数据包,可是沿着五十年前那群人定下的规矩,翻山越海才到你面前的。

延伸阅读

更多相关攻略推荐:数据中心"吞电"真相:为什么能源危机和 AI 算力在悄悄拉高你的网费【区块链节点 04】VPS 同步以太坊节点:Geth / NetheVPS 的终点是「杜甫」?Hetzner 独服拍卖场、IPMI 远程从免费赠送到一枚 50 美元:IPv4 地址的价格变迁与二手交易风云打死不宕机:Linux 系统内核免重启升级(Kexec 快速切换与