📚 第二章 TCP/IP基础知识
📄 一句话概括

RFC 全部免费公开,官方源是 rfc-editor.org。 UDP 的整份规范只有 5896 字节——「查原文」的成本比想象的低得多。

📝 本节和前面几节的关系

2.2.4 讲的是流程,这一节是最实操的一节:去哪儿拿、怎么拿。 这一节会真下载两份 RFC 并量出体量。

一、三个来源

按可靠性排序:

来源 地址 特点
官方 rfc-editor.org 最全、格式最规范
镜像 各大学与机构 快,但可能滞后
搜索引擎 —— 容易拿到废弃版

第一行是唯一权威源:它由 RFC 编辑部维护,提供 txt、PDF、HTML 多种格式, 并且有完整的索引(rfc-index.txt)可以按编号、按标题、按状态查。 第三行要特别小心:搜出来的往往是二手转贴,很多是十年前的老版本, 而且经常没标「已被替代」。 所以「搜到了」不等于「找对了」,一定要回官方源核对编号与状态。

二、量一下体量

两份关键的 RFC,体量差得很远:

文档 字节数 行数 特点
RFC 768(UDP) 5896 173 四个字段,几页纸
RFC 9293(TCP) 几十万 上千 状态机、拥塞控制

第一行那个 5896 字节很说明问题:UDP 的整份规范比一张照片还小。 所以你完全可以在十分钟内读完一份协议的权威定义,不必依赖二手博客。 第二行那个「几十万」也不是读不完:TCP 规范里真正要看的只有「状态机」和「头部格式」两节, 其余是各种边界情况的处理。 所以「读 RFC」的正确姿势是「按需查」,不是「从头读到尾」。 这也解释了为什么工程上大量引用 RFC 编号: 因为它是唯一「不会变、不会删、免费可查」的技术依据。 当两个人对某个行为有争议时,翻 RFC 是唯一能定论的办法。

三、怎么查得快

四个实用技巧:

想查什么 怎么查 省多少时间
某个编号 rfc-editor.org/rfc/rfcNNNN.txt 最快
某个关键词 官方搜索页按 title 搜 省掉猜编号
是不是现行版 看头部有没有 Obsoleted By 避免用废弃版
某条硬要求 页内搜 MUST/SHOULD 跳过九成正文

第一行那个 URL 规则值得记住:编号直接拼在路径里,不需要记任何参数。 所以「我想看 RFC 791」这句话,可以直接变成一个网址。 第三行是排错的第一步:很多人照着某个编号实现,结果行为不对,根因就是那份文档已经被替代了。 看一眼头部,三十秒就能排除。 第四行那个「搜 MUST」是读长文档的核心技巧:一份几十页的规范,硬性要求往往只有十几条。 先搜出来,再逐条看上下文,比通读一遍快十倍,而且不会漏。

四、动手 Demo:RFC 768 全文只有几 KB

把 UDP 的整份规范拉下来量一下,再摘出头部格式那一段。 这是「原文其实很短」的直接证据。

import urllib.request

url = 'https://www.rfc-editor.org/rfc/rfc768.txt'
req = urllib.request.Request(url, headers={'User-Agent': 'demo'})
with urllib.request.urlopen(req, timeout=8) as r:
    txt = r.read().decode('latin-1')
print('全文 %d 字节、%d 行' % (len(txt), txt.count('\n')))

ls = txt.split('\n')
i = next(k for k, l in enumerate(ls) if l.strip() == 'Format')
for l in ls[i:i + 9]:
    print(l.rstrip())

实跑输出:

--------------------------------------------------------------------
RFC 768 全文只有几 KB
--------------------------------------------------------------------
**UDP 的规范短到什么程度?**下面把 RFC 768 整份拉下来量一下。

**RFC 768 全文 5896 字节、173 行。**
**对比一下:RFC 9293(TCP)有几十万字节**——**UDP 的简单,在文档体量上就能看出来。**

UDP 头部的字段说明(原文摘录):

Format
------


                  0      7 8     15 16    23 24    31
                 +--------+--------+--------+--------+
                 |     Source      |   Destination   |
                 |      Port       |      Port       |
                 +--------+--------+--------+--------+

**UDP 头只有四个字段:源端口、目的端口、长度、校验和。**
**没有序号、没有确认、没有窗口**——**所以它没法保证可靠,也不需要维护状态。**
**「简单」不是缺点,是它存在的理由。**

5896 字节、173 行:整份 UDP 规范比你手机里任何一张照片都小。 这就是「查原文」的成本——低到没有任何理由去依赖二手解读。 摘出来的那一段是头部格式图:源端口、目的端口、长度、校验和,四个 16 位字段,正好 8 字节。 这张 ASCII 图就是 UDP 头的全部定义,没有别的隐藏字段。 对比一下 RFC 9293 的规模: TCP 要处理握手、挥手、重传、拥塞控制、窗口缩放、各种异常状态,所以规范几十万字。 「简单」与「复杂」在文档体量上一目了然。

30 秒实验

  1. 把编号换成 793,看全文多少字节(TCP 的老规范)。
  2. 拉 rfc-index.txt,搜一下 Obsoleted 看看有多少文档被替代过。
  3. 用「页内搜 MUST」的办法读 RFC 768,看能找到几条。

常见误区

  1. 以为 RFC 要付费或要注册。 全部免费公开,直接拼 URL 就能下。
  2. 以为搜到的就是对的。 搜索引擎常给废弃版,一定要回官方源看状态。
  3. 以为读 RFC 要通读。 按需查、搜 MUST 就够了,硬性要求往往只占一成篇幅。
自测三问(点开对答案) 1. RFC 的官方源是哪个? —— **rfc-editor.org**(RFC 编辑部维护)。URL 规则是 `/rfc/rfcNNNN.txt`,编号直接拼在路径里。 2. RFC 768(UDP)全文多大? —— **5896 字节、173 行。**比一张照片还小,十分钟能读完权威定义。 3. 查一份 RFC 是不是现行版,最快的方法是什么? —— **看头部有没有 `Obsoleted By` 字段。**有就说明已被替代,三十秒能排除。

下一节进入 2.3:互联网基础知识——先搞清楚「互联网」这个词到底指什么。

相关笔记