第1章 概述(六):技术标准的“立法会议”与TCP/IP的“播种者” —— IETF、RFC之书与早期实现的多元宇宙
朋友我们再次相会上一节我们深入探讨了网络应用的两种设计哲学C/S与P2P以及程序员如何通过“套接字Socket”这个门把手去触摸网络。但是一个问题一定会萦绕在心头全世界那么多厂商、那么多程序员写出来的东西怎么就能保证互不打架、完美兼容答案就藏在这今天的这两页书中——互联网的“立法系统”与“开源种子”。引言从“个体作坊”到“联合国大会”我们都知道互联网是个极其庞大的工程。但你可能不知道它其实更像一个巨大的“开源集市”。在这个集市里没有人能强迫谁必须做什么。要让IBM、苹果、微软、谷歌的产品能在同一个网络里对话靠的绝对不是行政命令而是共同的约定以及开放的代码。今天我们就要把目光对准那些制定约定的人以及把约定变成实物的“取经人”。第一部分1.6 标准化进程 —— 互联网世界的“三权分立”网络上那么多种协议TCP、IP、UDP、HTTP、DNS是谁拍板决定的这就不得不提IETF互联网工程任务组。书里说得很清楚IETF 每年在世界不同地点举行 3 次会议任何人都可以参加大家在一起讨论和通过互联网的“核心”协议。它是一个对所有人开放但不免费的大论坛。这个机制非常有意思它不是封闭的权威机构而是一个“能者上”的开源政治体系。1.1 管理互联网的“政府机构”为了能把这个庞大的论坛运转起来IETF 内部形成了一套清晰的“权力金字塔”【Mermaid 图IETF 组织架构图】IETF 互联网工程任务组IAB 互联网架构委员会IESG 互联网工程指导组IRTF 互联网研究任务组对 IETF 进行战略指导协调 ISOC 等组织具有决策权审批新标准和推进标准聚焦于尚未成熟的长线技术研究IETF互联网工程任务组最大的“民间议会”。大家在这里起草草案、提意见。IAB互联网架构委员会“技术长老会”。负责把关方向防止协议走向歧途。IAB 的成员通常也是 IRTF 的主席。IESG互联网工程指导组“铁面法官”。具有最终决策权。哪个草案能成为标准哪个提案被驳回往往由 IESG 拍板定论。IRTF互联网研究任务组“前沿实验室”。那些还很不成熟、甚至连能不能落地都不知道的技术就在 IRTF 里孵化。它不制定标准只做研究。这种“自下而上提案自上而下审核”的机制确保了互联网既保持了极其开源、鼓励创新的底座又不会因为标准太乱而失控。第二部分1.6.1 RFC —— 互联网的《圣经》与档案不管纸上谈兵说了多少理论互联网的所有官方标准最终落脚点只有一个——RFC征求意见稿。2.1 RFC 到底是个什么文件书中有一句非常本质的话“并非所有 RFC 都是标准。”如果你们公司给你发一份文件里面随意写了一些技术设想这叫“RFC”如果国家颁布了一份《交通法》那才是真正的“标准”。在互联网世界里只有“标准追踪Standards Track”类的 RFC才算是官方盖章的法典。RFC 的分类逻辑标准追踪Standards Track已经经过严格的审核、测试成为官方强制或推荐使用的标准。比如定义 TCP 的RFC 793定义 IPv4 的RFC 791。BCP当前最佳实践Best Current Practice虽然不是核心协议但是在写文档、开发代码时必须遵循的经验法则。比如如何写 RFC 文档本身。信息性Informational/ 实验性Experimental可能只是某个研究员写给 IETF 看的“白皮书”或者一个仅仅是测试性质的技术草案。即使它作为一个文件有编号也未必会被采纳。2.2 快速看懂 RFC 编号的魔法书中举了一个非常具体的例子定义 IPv4 主机和路由器协议的 RFC 1122 和 1812。就像法律文件有编号如“刑法第 232 条”一样RFC 也有自己的编号如RFC 1122。而且随着技术的更新旧的编号会被废弃新的 RFC 会被赋予更大的数字。现在任何人都可以去www.rfc-editor.org免费下载、查阅这些权威文档。当你读网络相关书籍遇到想深入追究的细节时去官网搜索对应的 RFC 编号往往能比看书得到更准确、更底层的答案。【Mermaid 图RFC 文档的结构与分类】RFC 文档标准追踪 (Standards Track)当前最佳实践 (BCP)信息性 / 实验性官方认可的互联网标准 (如 TCP/IP)通用的经验法则与操作规程仅供参考尚未或不会成为标准第三部分1.6.2 其他标准 —— 诸侯割据各司其职IETF 不是全能的。书中也点出了另外三个在互联网底层起着决定性作用的“大佬”IEEE电气和电子工程师学会负责制定物理层和链路层的标准。我们在前面章节啃的 802.3以太网、802.11Wi-Fi都是 IEEE 定的。你几乎所有的有线、无线网卡都在严格遵循 IEEE 的规则。W3C万维网联盟负责制定应用层的标准。浏览器里的 HTML、CSS、HTTP 等是 W3C 的地盘。ITU国际电信联盟负责制定电话、蜂窝网络、无线电频谱的国际标准。我们熟悉的 4G、5G 制式就是 ITU 规定的。正是这三大巨头与 IETF 的互补合作构筑了从“物理铜线”到“浏览器网页”的完整标准链条。第四部分1.7 实现和软件分发 —— 播种者BSD 与 Linux 的故事如果说 IETF 和 RFC 是“图纸”那接下来的1.7 节讲的就是谁把图纸变成了真正能用的“钢筋混凝土”。书的这一页呈现了一幅极其激动人心的TCP/IP 实现大历史时间轴即书中的图 1-7。4.1 伟大的种子BSD 网络代码当今所有主流操作系统Linux、Windows、macOS、Android、iOS的 TCP/IP 协议栈往上追溯它们的祖宗几乎都是加州大学伯克利分校计算机系统研究组CSRG发布的 BSD 网络代码为什么这么牛因为 BSD 是免费的开源并且包含了完整的网络协议代码。任何大学、任何开发者只要搞到一份 BSD 的源码就能立刻在上面跑 TCP/IP 网络。【Mermaid 图TCP/IP 协议栈演化的“宇宙树” (图 1-7 复刻)】**PC 与开源界的分叉伯克利 BSD 的黄金年代 (需要授权 / 免费开源)4.1aBSD1981 实验性 BNN TCP/IP4.2BSD 1983首个广泛使用4.3BSD 1986改进 TCP 性能4.3BSD Tahoe 1988快速重传与拥塞控制4.3BSD Reno 1990快速恢复与头部预测4.4BSD-Lite 1994组播支持、长胖管道Winsock 1992微软移植Windows 95 1995内置 TCP/IPLinux 0.98 1992首个 TCP/IPLinux 1.0.0 1994完善 TCP/IP 实现4.2 那段“硬核”的历史真相书中对于这段历史的注解可谓极其务实BSD 的领先与专利问题4.1aBSD 到 4.3BSD 时代BSD 核心代码需要专利许可证才能商用这让一些大厂有所顾虑。Windows 与 Winsock微软在 1992 年开发出Winsock然后在 Windows 95 中彻底集成了 TCP/IP 协议栈。这也是为什么 Windows 95 能称霸个人电脑操作系统市场的一个重要原因——它让普通人的电脑天然带上了通往互联网的门票。Linux 的崛起点书中有一句非常有意思的旁白“Linux 最初是为 PC 用户量身定制的代替品”。1992 年Linux 0.98 首次加入了 TCP/IP 支持1994 年发布 Linux 1.0.0。恰恰因为 BSD 代码的某些专利限制给了 Linux 这个“替代品”野蛮生长的机会。而时至今日全球绝大多数的服务器、安卓手机底层都跑着 Linux 的 TCP/IP 实现。注图 1-7 还贴心地标注了“需要许可证”与“许可证免费”的分界线这也揭示了商业社会与开源社区在网络技术推广中的奇妙共生关系。结语标准的图纸与免费的种子今天这段旅程我们经历了一次穿越时空的宏大叙事我们认识了IETF、IESG、IAB这些互联网底层的“立法者”它们通过开放性的讨论确立了一套全球通用的“法律RFC”。我们领悟了 RFC 编号背后的分级逻辑知道不是所有官方文件都是必须遵守的铁律。最后我们跟随BSD 协议栈的历史脉络见证了它是如何作为一颗“开源母体”分化繁衍出 Windows 的 Winsock 和当时的新生儿 Linux。当你在 Linux 服务器上敲下ping命令或者在 Windows 电脑上浏览网页时你其实正在使用着由 BSD 演化而来的、被无数 IETF 工程师规范过的“数字遗产”。