RFC 精读
十四篇精读:前七篇与数据包实验室对应其基础样本,接着是 TLS 之上的 HTTP 语义、HTTP/2、QUIC 与 HTTP/3,再往后是 IPsec ESP、IKEv2 和 WireGuard。英文摘录保持 ASCII 报文图原样,中文注解只讲字段、算法和容易记错的点。
推荐阅读顺序
Reading Path按一次真实访问的封装顺序读:先有下一跳 MAC,再有 IP 数据报,然后是 ICMP 诊断、UDP/TCP 端口,接着是 DNS 名字和 TLS 握手,再往上才是 HTTP 语义、HTTP/2 帧、跑在 UDP 上的 QUIC 与 HTTP/3。站点到站点的加密通道放在最后:ESP、IKEv2、WireGuard。不要从 TCP 状态机起手。
RFC 826 · ARP
把下一跳 IPv4 地址翻译成 MAC,否则以太网帧发不出去。
RFC 791 · IPv4
无连接、尽力而为的数据报;路由器只看目的地址逐跳转发。
RFC 792 · ICMP
IP 的差错与诊断通道。ping / traceroute 都落在这里。
RFC 768 · UDP
8 字节最小传输层:端口复用,不保证送达、顺序或去重。
RFC 9293 · TCP
面向连接的可靠字节流:序号、确认、窗口、状态机。
RFC 1035 · DNS
报文格式、资源记录和压缩指针。名字如何变成查询。
RFC 8446 · TLS 1.3
1.3 与 1.2 的差异、握手消息流,以及 ClientHello 结构。
RFC 9110 · HTTP Semantics
方法的安全/幂等、Host 与 :authority、状态码五类。所有 HTTP 版本共用。
RFC 9113 · HTTP/2
ALPN h2、9 字节帧、SETTINGS、流状态机。HPACK 在 RFC 7541。
RFC 9000 · QUIC
UDP 上的多路流。Initial 用版本盐派生密钥;1-RTT/0-RTT 见 9001。
RFC 9114 · HTTP/3
9110 语义映射到 QUIC。ALPN h3;QPACK 在 RFC 9204。
RFC 4303 · ESP
IPsec 加密载荷。SPI / 序列号明文;传输模式与隧道模式。
RFC 7296 · IKEv2
IKE_SA_INIT / IKE_AUTH 四条消息。检测到 NAT 就改走 UDP/4500。
WireGuard · 白皮书
非 IETF 标准。Noise IK 1-RTT、四种消息、Cryptokey Routing。
与实验室样本对照
Packet Lab前七篇对应实验室的基础样本组;HTTP / HTTP/2 / QUIC / HTTP/3 是同一条访问路径再往上。ESP、IKEv2、WireGuard 是加密通道。抓到包之后回到对应页,对照字段定义。
ARP Request / Reply
谁拥有这个 IPv4?操作码、发送方/目标地址四元组。
样本 · 每包都有IP protoIPv4 Header
TTL、协议号、DF/MF、片偏移。几乎每条样本的外层。
样本 · ICMPType 8 / 0 / 11 / 3Echo · Unreachable
ping 的回显,traceroute 的超时,PMTUD 的需要分片。
样本 · DNS 载体8 字节UDP Datagram
DNS 查询通常坐在 UDP 上。先看端口和长度。
样本 · TCP 握手SYN / ACKThree-Way Handshake
标志位、ISN、ACK 不占序号。对照状态机走三步。
样本 · DNSID · QR · QNAMEDNS Query / Response
12 字节首部、标签编码、0xC0 压缩指针。
样本 · ClientHellolegacy 0x0303TLS 1.3 ClientHello
版本伪装成 1.2,真正的 1.3 在 supported_versions 里。
应用语义STD 97方法 · 状态码
GET 不是读文件。safe ≠ 无副作用。幂等 ≠ 安全。
样本 · ALPN h29 字节帧HTTP/2 Frames
先看 tls.handshake 里的 h2,解密后再用 http2 过滤器。
样本 · UDP/443长头 InitialQUIC Initial
不是明文;密钥来自 DCID 和版本绑定盐,旁观者解得开。
样本 · ALPN h3quic + http3HTTP/3 over QUIC
先看 QUIC,再看 h3。QPACK 在 9204,不要在 9114 里找算法。
样本 · proto 50SPI · SeqESP
加密后看不到 L4。过 NAT 是 UDP/4500,不是裸协议 50。
样本 · isakmp500 → 4500IKEv2
明文 IKE_SA_INIT,加密 IKE_AUTH。过滤器名字仍是 ISAKMP。
非 RFCUDP/51820WireGuard
首字节 1/2/3/4。没有 IKE,没有 SPI 协商。
怎么读这些页
How to read每篇页头给出编号、英文标题、年月、状态和 obsoletes / updated-by。RFC 外链只指向 rfc-editor.org 与 datatracker.ietf.org。WireGuard 没有 RFC,原文和链接指向官方协议页与白皮书。抓包对照写的是 Wireshark / tcpdump 里能直接看到的字节,不是抽象概念。