RFC 精读
七篇与数据包实验室一一对应的原文精读:英文摘录保持 ASCII 报文图原样,中文注解只讲字段、算法和容易记错的点。
推荐阅读顺序
Reading Path按一次真实访问的封装顺序读:先有下一跳 MAC,再有 IP 数据报,然后是 ICMP 诊断、UDP/TCP 端口,最后才是 DNS 名字和 TLS 握手。不要从 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 结构。
与实验室样本对照
Packet Lab这七篇不是随机选的 Internet 经典,而是实验室里那几类样本的规范真源。抓到包之后回到对应 RFC,对照字段定义。
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 里。
怎么读这些页
How to read每篇页头给出编号、英文标题、年月、状态和 obsoletes / updated-by。外链只指向 rfc-editor.org 与 datatracker.ietf.org。抓包对照写的是 Wireshark / tcpdump 里能直接看到的字节,不是抽象概念。