📚 第一章 网络基础知识
📄 一句话概括

标准不是天生就有的,是「各家自制、互联失败」逼出来的。 RFC 是公开编号文档,谁都能下载,实现要对着文档改,而不是对着某一家厂商改。

📝 本节和前面几节的关系

1.3 讲完了协议是什么,1.4 回答「谁定的」这个更现实的问题。 这一节的重点是「标准化的动因」,不是背组织名,组织名只需要知道各管哪一块。

一、各家说各家的话

早期的计算机通信是一片方言区:

年代 局面 后果
1960s 各厂商自己的体系 只能同厂互联
1970s ARPANET 出现 证明异构互联可行
1980s OSI 七层模型出台 有了共同参照系

第一行是说 IBM 的 SNA、DEC 的 DECnet 这些体系: 每一家都自成一套、内部很完整、对外完全不通。 客户买了两家的设备,就只能买两套网、养两拨人。 第二行是关键转折:ARPANET 的 TCP/IP 第一次证明了「不同厂商的机器能跑同一套协议」, 而且这套协议是公开的、不要授权的。 这一点决定了后来的格局——不是技术更好的赢,是「谁都能用」的赢。

二、谁在定标准

定标准的机构不止一个,各管一段:

组织 管什么 代表成果
ISO 通用体系框架 OSI 七层参考模型
IETF 互联网协议 RFC 系列(IP/TCP/HTTP)
IEEE 局域网底层 802.3 以太网、802.11 无线
ITU-T 电信网络 光传输、信令标准

第二行与我们关系最大:IETF 的产出就是 RFC,编号连续、全文公开、免费下载。 它没有会员费、没有投票权门槛, 靠「跑得起来的实现」和「粗共识」推进——这也是它能跟上互联网速度的原因。 第三行是两个常被混淆的东西:802.3 是以太网(有线),802.11 是无线局域网, 它们都只管最底下两层,这也是为什么 Wi-Fi 和以太网能无缝接在一起——上面的层是同一套。

三、RFC 是一份带编号的文档

几个必须认得的编号:

编号 年份 管什么
RFC 791 1981 IP(IPv4)
RFC 793 1981 TCP 原始规范
RFC 768 1980 UDP
RFC 9293 2022 TCP 现行规范(取代 793)
RFC 8200 2017 IPv6

注意 TCP 有两条:793 用了四十一年,2022 年被 9293 取代。 协议不是刻在石头上的,它可以被新文档替换。 但替换的是「文档」,不是「行为」—— 9293 主要是把几十份勘误和补充合并进来,没有推翻 793 的做法。 编号大小与重要性无关:768(UDP)比 791(IP)还早,编号只代表提交顺序。 从 768 到 9293 跨了八千多号,中间绝大多数是早已废弃的实验文档。 这就是「标准化」的实质:把「大家实际怎么做」写成一份谁都能下载的公开文档, 然后让实现对齐文档,而不是让实现对齐某一家厂商。

四、动手 Demo:标准是一份带编号的文档

把几份关键 RFC 的编号、年份、职责列出来。 这些都是可以逐条查到的事实,不是记忆题。

import urllib.request

docs = [('RFC 791', 1981, 'IP (IPv4)'),
        ('RFC 793', 1981, 'TCP 原始规范'),
        ('RFC 768', 1980, 'UDP'),
        ('RFC 9293', 2022, 'TCP 现行规范'),
        ('RFC 8200', 2017, 'IPv6')]
for num, year, what in docs:
    print('%-10s %-6d %s' % (num, year, what))

url = 'https://www.rfc-editor.org/rfc/rfc9293.txt'
req = urllib.request.Request(url, method='HEAD')
with urllib.request.urlopen(req, timeout=8) as r:
    print('rfc9293.txt 状态 %d、长度 %s 字节'
          % (r.status, r.headers.get('Content-Length')))

实跑输出:

--------------------------------------------------------------------
标准是一份带编号的文档
--------------------------------------------------------------------
**书里说「协议由谁规定」——规定它的是 RFC 文档,每份一个编号。**下面这几个编号是硬事实,
直接查得到的:

  编号         年份     管什么
  -----------------------------------------------
  RFC 791      1981     IP(IPv4)
  RFC 793      1981     TCP 原始规范
  RFC 768      1980     UDP
  RFC 9293     2022     TCP 现行规范(取代 793)
  RFC 8200     2017     IPv6

**注意 TCP 有两条**:793 用了四十一年,2022 年被 9293 取代。
**协议不是刻在石头上的,它可以被新文档替换。**

**从 768 到 9293,编号跨了 8525 号**——**编号不代表重要程度,只代表提交顺序。**

**「标准化」的实质是:**
**把「大家怎么做」写成一份谁都能下载的公开文档**,
**然后让实现去对齐文档,而不是让实现去对齐某一家厂商。**

TCP 有 793 与 9293 两条,这是本节最值得记住的一处:一份规范活了四十一年,被新文档接替。 最后两行真的去拉了 RFC 9293 的头部:能拉到就说明「标准是公开可下载的」不是一句口号。 换一家厂商的私有协议,你拿不到这份文档。 这也是排障时最有用的一条路子: 遇到「这个字段到底该填什么」的疑问,直接查 RFC 原文,别信二手博客。

30 秒实验

  1. 把 rfc9293.txt 换成 rfc768.txt, 对比两份文档的长度——感受一下「UDP 简单、TCP 复杂」在文档体量上的差距。
  2. 去 rfc-editor 网站搜 HTTP/1.1,找到它的 RFC 编号(2616 与 7230 系列)。
  3. 查一下 IEEE 802.3 与 802.11 分别对应什么,想想为什么它们只覆盖最底下两层。

常见误区

  1. 以为标准是「技术上最优的那个方案」。 常常是「先跑起来、能被广泛实现」的那个。 OSI 七层在理论上更完整,实际赢的是 TCP/IP。
  2. 以为 RFC 编号越大越新越重要。 编号只代表提交顺序,绝大多数 RFC 是实验性的、早已废弃的。
  3. 以为标准化就是「统一实现」。 统一的是行为与接口, 实现可以千差万别——这正是各家协议栈能共存的原因。
自测三问(点开对答案) 1. 为什么说 ARPANET 的胜利不是「技术更好」而是「谁都能用」? —— **因为 TCP/IP 是公开、不要授权的**,任何厂商都能实现。 厂商私有体系技术上也完整,但只能同厂互联,规模永远起不来。 2. TCP 为什么会有 793 和 9293 两份规范? —— **793 是 1981 年的原始规范,用了四十一年;** **9293 是 2022 年的现行规范,把几十份勘误与补充合并进来。** 换的是文档,不是行为。 3. IETF、IEEE、ISO 各管哪一块? —— **IETF 管互联网协议(RFC 系列),IEEE 管局域网底层(802.3/802.11),** **ISO 管通用体系框架(OSI 七层模型)。**

下一节讲「标准化之后剩下什么」——标准统一了行为,但没统一写法,这才有了后来的协议演进。

相关笔记