中文 English

1974 年的设计,为什么至今统治互联网?TCP/IP 的 6 个设计哲学

发布时间: 2026-07-18
Network TCPIP TCP UDP 设计哲学 端到端 计算机网络 科普 RFC IETF 互联网历史

先说结论

TCP/IP 快 50 岁了。它的竞争对手——电话公司的 X.25、IBM 的 SNA、国际标准化组织的 OSI——全都进了博物馆,而它还在承载你今天刷的每一个网页。它赢不是因为最先进,而是因为 6 个设计选择:

  1. 分组交换:不铺专列,大家共享公路——便宜,而且炸不断;
  2. 分层:每层只管一件事,像乐高积木一样可以整块换掉;
  3. 端到端原则:网络保持"笨",聪明全放在两端——所以创新不需要改造网络;
  4. 尽力而为:核心不承诺"必达",可靠性按需购买——简单才能铺到全球;
  5. 粗略共识 + 能跑的代码:不要国王、不要投票,标准在跑动中长大;
  6. 给未来留位置:从 IPv4 到 IPv6、从 HTTP/1 到 HTTP/3,地基不动,上面随便翻修。

一句话:好的设计不是预测未来,而是给未来留位置。 本文是《WiFi 为什么卡?》的姊妹篇——上一篇讲"网络是什么、怎么用",这一篇讲"它为什么这么设计、凭什么活了半个世纪"。文中所有截图均来自真实系统与真实协议文档,IP 与主机名已打码。

封面:1974 年的设计,为什么至今统治互联网

图 1:一份 1974 年的设计,至今仍在承载全世界的流量。


一、开场:50 岁的"老爷爷"和它的手下败将们

1974 年 5 月,《IEEE 通信学报》上发表了一篇只有 8 页的论文——《A Protocol for Packet Network Intercommunication》(分组网络互连协议),作者是 Vint Cerf 和 Bob Kahn。论文描述了一种把"许多张不同的网"连成"一张网的网"的办法。这就是 TCP/IP 的起点。

TCP/IP 之父 Vint Cerf(照片:Veni Markovski, CC BY 3.0, via Wikimedia Commons)

图 2:Vint Cerf,TCP/IP 的设计者之一,后来被称为"互联网之父"。(照片:Veni Markovski, CC BY 3.0, via Wikimedia Commons)

1983 年 1 月 1 日,互联网的前身 ARPANET 干了一件前所未有的事:全网在同一天停用老协议 NCP,整体切换到 TCP/IP。这一天后来被称作 “旗日”(Flag Day)——就像全国铁路同一天换轨距。从那天起,TCP/IP 正式登基,直到今天。

你可能会想:半个世纪前的技术,早该淘汰了吧?可事实是——它的对手们全死了,它还活着

而 TCP/IP 的"身份证"——1981 年 9 月发布的 RFC 791,到今天一字未改,依然是互联网的法律文本。我把它从 RFC 官网拉了下来,抬头长这样:

真实截图:RFC 791 文档首页,1981 年 9 月

图 3:真实抓取的 RFC 791 首页。“INTERNET PROTOCOL, September 1981”——这份 45 年前的文档定义了你今天上网用的 IP 协议。

1970 年代的 ARPANET 节点地图(来自 Wikimedia Commons)

图 4:1970 年代的 ARPANET——互联网的童年。几个大学和研究机构的节点,就是当年"全世界"的规模。

辟谣时间:很多文章说"ARPANET 是为了在核战争中幸存而设计的"——这是互联网流传最广的误传。ARPANET 的真实目标是资源共享(让研究人员共用昂贵的计算机)。不过,“网络被炸掉一部分也要继续工作"的可靠性思想确实存在,它来自 Paul Baran 同期的研究,后来被融进了互联网的基因里。

那么问题就来了:X.25 更严谨,OSI 更"标准”,ATM 更豪华,为什么偏偏是这个看起来"粗糙"的 TCP/IP 赢了? 答案不在技术参数里,而在 6 个设计哲学里。


二、哲学一:分组交换——不铺专列,共享公路

在 TCP/IP 之前,通信世界的祖师爷是电话网,电话网的思路叫电路交换:你打电话时,交换机给你铺一条"专用铁路",从你嘴边直通对方耳朵,通话期间这条铁路别人一寸都不能用——哪怕你们俩谁都不说话,铁路也空转着。

TCP/IP 选了另一条路:分组交换。把数据切成一个个小包裹,贴上地址扔进公共公路网,每个包裹自己找路,到对面再拼起来。就像快递公司不会为你一个包裹发一列专车,而是把你的包裹和成千上万人的包裹混装在同一列火车上。

电路交换 vs 分组交换:专列 vs 共享公路

图 5:左——电路交换:专用铁路,空驶也得养着;右——分组交换:共享公路,包裹混装,路坏了换条路走。

这个选择带来两个决定性好处:

代价也有:共享就会堵车,包裹会丢、会晚、会乱序。后面所有的设计哲学,都是在收拾分组交换留下的这一地鸡毛——而且收拾得极其聪明。


三、哲学二:分层——乐高积木,每层可整块换掉

上一篇文章讲过 TCP/IP 的四层"快递流水线"。这一篇我们追问一步:为什么要分层?

因为分层给了每一层"单独换芯"的自由。就像乐高:每一块都通过标准接口拼接,你可以把底层的"塑料块"换掉,上层的城堡纹丝不动。

真实的证据就在眼前——50 年来:

IP 能这么稳,是因为它对自己的定位极其克制:只认协议号和地址,不关心包裹里装的是什么。你的操作系统里至今保存着这张"协议号登记表":

真实截图:/etc/protocols 中的 IP 协议号

图 6:真实的 /etc/protocols 文件。ICMP 是 1 号、TCP 是 6 号、UDP 是 17 号……IP 只看编号转发,包裹里是什么它一概不管。未来发明的新协议,领一个新编号就能接入互联网。

这就是分层的力量:底层随便革命,上层无感;上层随便创新,底层不动。


四、哲学三:端到端原则——笨网络,聪明终端

这是 TCP/IP 全部哲学里最核心、也最反直觉的一条。

1981 年,MIT 的三位学者 Saltzer、Reed 和 Clark 发表了一篇论文《End-to-End Arguments in System Design》(系统设计中的端到端论证),把话说得很直白:一个功能,如果只有通信的两端才能完整、正确地实现它,那网络中间就别瞎掺和。

用邮政打个比方:邮局只负责把信送到,绝不拆你的信——不管里面是情书还是合同,邮局看不懂也不该管。检查"信有没有被调包"这种事,只能由收信人做(比如核对签名),邮局代劳不了。

于是 TCP/IP 做了一个惊人的决定:把网络本身故意做得很"笨"。路由器只管一件事——看地址、转发包裹;至于"包裹有没有丢、顺序对不对、内容机密不机密",全丢给两端的电脑去操心。

端到端原则:两端聪明,中间要笨

图 7:端到端原则。聪明的活(可靠性、加密、应用逻辑)都在两端,中间的网络只负责一件事:搬。

这样整个互联网就形成了一个著名的**“沙漏模型”**:

IP 沙漏模型:腰部极窄,两头极宽

图 8:沙漏模型。上层应用千变万化,底层链路五花八门,但所有人都必须通过中间那道窄腰——IP。腰越细,整个系统越稳。

沙漏的腰就是 IP:全世界只此一种"通用语",所有设备必须会说;而腰的上下两头,爱怎么变就怎么变。

这个"笨网络"换来了什么?换来了不需要审批的创新。Web 是 1989 年 Tim Berners-Lee 在一个研究所里发明的——他不需要改造任何一台路由器,不需要向谁申请许可,因为网络本来就只管搬运;P2P 下载、视频通话、比特币……全都是"边缘的发明",网络一个字节都没改过。对比一下电话网:想在电话里加一个新功能?得先把全世界的交换机升级一遍。这就是"聪明网络"和"笨网络"的命运差。

甚至连 TCP 自己,都是靠"商量"而不是"改标准"来进化的。下面这张真实的抓包里,两个陌生的系统正在握手时"对暗号":

真实截图:TCP 握手时的选项协商

图 9:真实抓包。双方通过 options 字段互相通报能力:mss(包裹最大尺寸)、sackOK(支持选择性重传)、TS(时间戳)、wscale(窗口扩大)。这些能力都是 TCP 诞生后陆续"长"出来的——老协议不需要重写,靠协商就能升级。


五、哲学四:尽力而为——把"靠谱"放在正确的位置

紧接着端到端原则,还有一个更"抠门"的决定:IP 层只承诺"尽力而为"(Best Effort)

IP 从不说"我一定送到",它只说"我尽量"。包裹可能丢、可能晚、可能重复、可能乱序——想要"必达"?请出门右转,用 TCP 或者你的应用自己兜底。

这听起来像偷工减料,其实是极其精明的责任分层,跟邮政一模一样:

关键是:不是每个人都愿意为"绝对可靠"付钱。如果所有包裹都按保价收费,寄明信片就成了奢侈消费;如果网络对所有流量都提供 TCP 级保障,视频通话会被"等重传"卡死(上一篇讲过这个道理)。

“尽力而为"还有一个隐藏红利:路由器可以保持又笨又快。它不用记账、不用跟踪每个包裹的命运,看完地址就扔出去——正因为单台设备足够简单,这张网才能从 4 个节点一路铺到今天的几十亿台设备。简单,才能规模化;规模化,才成就了互联网。


六、哲学五:粗略共识 + 能跑的代码——标准不是投票投出来的

技术之外,TCP/IP 还赢在一套"文化”。

1992 年,互联网工程任务组(IETF)的一次会议上,David Clark 说出了那句名言:

“We reject: kings, presidents and voting. We believe in: rough consensus and running code.” (我们拒绝国王、总统和投票。我们相信粗略共识和能跑的代码。)

TCP/IP 的标准不是哪个权威机构盖章颁布的。它的标准文档叫 RFC——Request for Comments,“请求评注”。光这个名字就很谦逊:我写了个草案,大家来提意见;意见收敛得差不多了,代码也真的跑通了,它就成了标准。

它的对照组是 OSI:各国代表、委员会、会议室,十年磨一剑地设计"完美"标准,等标准写完,世界已经被"边跑边改"的 TCP/IP 占领了。完美的图纸输给了能跑的代码。

这套文化里还有一位灵魂人物 Jon Postel,他留下的"Robustness Principle(健壮性原则)“被后人称为 Postel 法则,写在 RFC 793 里:

Postel 法则:严于律己,宽以待人

图 10:Postel 法则——“发送时要严格,接收时要宽容”。自己发的每个包都规规矩矩,收到别人不完美的包时尽量理解它。亿万互不认识的实现因此能互相说话。

“严于律己,宽以待人”——这八个字让全世界几千个厂商、几万种实现,在没有总协调的情况下拼凑出了一张能用的互联网。

而且这套文化至今仍在运转。下面是我电脑上一次真实的 HTTPS 连接协商:

真实截图:ALPN 协议协商过程

图 11:真实抓包。客户端先说"我会 h2 和 http/1.1”(ALPN: curl offers),服务器答"那就 h2"(server accepted h2)。协议版本不是命令出来的,是两端"商量"出来的——2026 年的互联网,依然是 1992 年那套做事方式。

批判性补充:Postel 法则也有代价。“过度宽容"会把错误实现惯成"事实标准”,在安全场景里甚至会掩盖漏洞——新一代的 QUIC 协议反而刻意"严格"。看,连哲学本身都在演化。


七、哲学六:给未来留位置——地基不动,上面随便翻修

最后一个哲学,决定了 TCP/IP 能不能"活得久":可演化性

公平地说,TCP/IP 的设计者并没有预测未来的水晶球。IPv4 用 32 位地址,约 43 亿个——在只有几百台计算机的 1970 年代,这简直是"无限";结果 2011 年,地址真的发光了。这是设计失误吗?某种意义上是。但真正了不起的是系统消化这个失误的方式

今天的互联网就是双栈并行的世界,这是我电脑上的真实解析结果:

真实截图:同一域名的 IPv4 与 IPv6 双栈解析

图 12:真实 DNS 解析。同一个域名同时返回 IPv4 地址(104.x.x.x)和 IPv6 地址(2606:xxxx::xxxx)——两代协议正在并肩值班,用户毫无知觉。

再看应用层的翻天覆地:HTTP/1.1(1997)→ HTTP/2(2015)→ HTTP/3(2022,干脆弃用 TCP、在 UDP 上重建了一套 QUIC)——网页传输技术 25 年换了三代,而底下的 IP 层还是那个 1981 年的 IP。

TCP/IP 演化时间线:地基不动,楼越盖越高

图 13:50 年演化史。地基(IP)几乎没动,上面的楼层换了一茬又一茬——这正是"给未来留位置"的奖赏。

好的设计不是一次就把所有事做对,而是"改得动"。 TCP/IP 当年留下的每一个"简单"和"留白",都变成了后来者的跑道。


八、代价与妥协:伟大不等于完美

把 TCP/IP 吹成"完美设计"是不诚实的。它欠下的账,今天还在还:

但请注意这些批评的共同点:它们都在证明那 6 条哲学的价值——安全能在边缘补(端到端)、NAT 能嵌进分层(分层)、拥塞控制能后加(能跑的代码)、IPv6 能渐进切换(可演化)。一个设计厉不厉害,不看它犯不犯错,而看它犯错之后改不改得动


九、结尾:给未来留位置

回到开头的问题:为什么 1974 年的设计至今统治互联网?

因为它从第一天起就没打算"预测未来”。它不假设线缆长什么样(分层),不假设应用是什么(端到端),不假设谁说了算(粗略共识),不假设需求永远不变(尽力而为 + 可演化)。它像一座只打好了地基和承重墙的房子——里面的房间,留给未来的人随便隔

下一次当你听到某个"革命性技术"宣称要取代互联网的一切时,不妨先问三个问题:它分层吗?它把聪明放在边缘了吗?它给还没发明的应用留位置了吗?——这,就是 TCP/IP 用半个世纪教给我们的事。


Q&A

Q1:OSI 七层模型明明更"科学"、更"标准",为什么输了? 输在时机和方式:OSI 由委员会设计,追求一步到位、面面俱到,标准文档写完时实现寥寥无几;TCP/IP 边实现边改,代码先行,等 OSI 醒来,生态已经被占满了。不过 OSI 也没全输——它的七层"教学模型"至今是讲解网络的好脚手架(上一篇文章的分层图就有它的影子)。

Q2:TCP/IP 会被取代吗? 短期看不会。它历史上最大的一次"自我替换"是 IPv4→IPv6,迁了 20 多年仍在进行——光是"换腰"就这么难,整个推翻重来几乎没有现实路径。更可能的剧本是:它继续按自己的哲学演化(就像 QUIC/HTTP/3 所做的那样)。

Q3:沙漏的"腰"(IP)为什么最重要? 因为它是全球唯一必须遵守的"通用语"。腰细,上面的应用和下面的链路才有自由;腰一旦被换掉(比如换 IPv6),等于全世界重新学说话。所以 IPv6 的推广以"十年"为单位计。

Q4:5G、星链这些新网络,还适用 TCP/IP 吗? 完全适用——这正是分层的胜利。5G 和星链换的都是"链路层"(怎么把比特送上天),对 IP 层和应用层完全透明。你用星链上网,跑的还是 1981 年的 IP。

Q5:如果只能让孩子记住三句话,记哪三句? ① 各管各的层,积木才能换(分层);② 网络要笨,终端要聪明(端到端);③ 能跑的代码胜过完美的图纸(粗略共识)。


1974 年那篇 8 页的论文结尾,Cerf 和 Kahn 大概不会想到,他们写下的不是一个协议,而是一种"让世界自己长大"的方式。50 年过去了,世界还在用它——而且看起来,还要用很久。