网络知识
Close Reading · Fourteen Core Texts

RFC 精读

十四篇精读:前七篇与数据包实验室对应其基础样本,接着是 TLS 之上的 HTTP 语义、HTTP/2、QUIC 与 HTTP/3,再往后是 IPsec ESP、IKEv2 和 WireGuard。英文摘录保持 ASCII 报文图原样,中文注解只讲字段、算法和容易记错的点。

14 篇(13 份 RFC + WireGuard 白皮书) 自底向上 推荐阅读顺序 手机 可横滑原文块

推荐阅读顺序

Reading Path

按一次真实访问的封装顺序读:先有下一跳 MAC,再有 IP 数据报,然后是 ICMP 诊断、UDP/TCP 端口,接着是 DNS 名字和 TLS 握手,再往上才是 HTTP 语义、HTTP/2 帧、跑在 UDP 上的 QUIC 与 HTTP/3。站点到站点的加密通道放在最后:ESP、IKEv2、WireGuard。不要从 TCP 状态机起手。

与实验室样本对照

Packet Lab

前七篇对应实验室的基础样本组;HTTP / HTTP/2 / QUIC / HTTP/3 是同一条访问路径再往上。ESP、IKEv2、WireGuard 是加密通道。抓到包之后回到对应页,对照字段定义。

样本 · ARPEtherType 0x0806

ARP Request / Reply

谁拥有这个 IPv4?操作码、发送方/目标地址四元组。

样本 · 每包都有IP proto

IPv4 Header

TTL、协议号、DF/MF、片偏移。几乎每条样本的外层。

样本 · ICMPType 8 / 0 / 11 / 3

Echo · Unreachable

ping 的回显,traceroute 的超时,PMTUD 的需要分片。

样本 · DNS 载体8 字节

UDP Datagram

DNS 查询通常坐在 UDP 上。先看端口和长度。

样本 · TCP 握手SYN / ACK

Three-Way Handshake

标志位、ISN、ACK 不占序号。对照状态机走三步。

样本 · DNSID · QR · QNAME

DNS Query / Response

12 字节首部、标签编码、0xC0 压缩指针。

样本 · ClientHellolegacy 0x0303

TLS 1.3 ClientHello

版本伪装成 1.2,真正的 1.3 在 supported_versions 里。

应用语义STD 97

方法 · 状态码

GET 不是读文件。safe ≠ 无副作用。幂等 ≠ 安全。

样本 · ALPN h29 字节帧

HTTP/2 Frames

先看 tls.handshake 里的 h2,解密后再用 http2 过滤器。

样本 · UDP/443长头 Initial

QUIC Initial

不是明文;密钥来自 DCID 和版本绑定盐,旁观者解得开。

样本 · ALPN h3quic + http3

HTTP/3 over QUIC

先看 QUIC,再看 h3。QPACK 在 9204,不要在 9114 里找算法。

样本 · proto 50SPI · Seq

ESP

加密后看不到 L4。过 NAT 是 UDP/4500,不是裸协议 50。

样本 · isakmp500 → 4500

IKEv2

明文 IKE_SA_INIT,加密 IKE_AUTH。过滤器名字仍是 ISAKMP。

非 RFCUDP/51820

WireGuard

首字节 1/2/3/4。没有 IKE,没有 SPI 协商。

怎么读这些页

How to read
原文优先。等宽块里是 RFC 原文(或原文中的 ASCII 图),一字未改排。中文只解释这段在规范里的位置、为什么重要、哪里最容易误解。不要把注解当成新的标准。

每篇页头给出编号、英文标题、年月、状态和 obsoletes / updated-by。RFC 外链只指向 rfc-editor.org 与 datatracker.ietf.org。WireGuard 没有 RFC,原文和链接指向官方协议页与白皮书。抓包对照写的是 Wireshark / tcpdump 里能直接看到的字节,不是抽象概念。