一条主线:IPv4 首部是封装的「规格书」,TCP/IP 封装是规格的「执行过程」,跨层协作是规格之间的「咬合关系」;TCP 首部与三次握手是传输层的「连接账本」,分片是包裹超规时的「拆包」,IPv6 则是首部的「重构版」。
目录
- IPv4 首部结构(RFC 791)
- TCP/IP 封装与解封装
- 跨层协作
- TCP 首部结构(RFC 9293)
- TCP 三次握手细节
- IP 分片重组实例演算
- IPv6 首部对比
- 关键数字速查
- 延伸方向
一、IPv4 首部结构(RFC 791)
IPv4 首部 = 固定部分 20 字节 + 可选部分 0–40 字节,按网络字节序(大端)传输。以 32 位字(Word)为单位查看:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| IHL | TOS | Total Length | 字节 0–3
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identification |Flags| Fragment Offset | 字节 4–7
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| TTL | Protocol | Header Checksum | 字节 8–11
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Address | 字节 12–15
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Destination Address | 字节 16–19
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding | 字节 20–59(变长)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
字段明细
| 字段 | 位宽 | 字节偏移 | 作用 |
|---|---|---|---|
| Version · 版本 | 4 | 0 | 协议版本号。IPv4 固定为 4,IPv6 为 6 |
| IHL · 首部长度 | 4 | 0 | 首部长度,以 4 字节为单位。无选项时 = 5(20 字节),最大 15(60 字节) |
| TOS · 服务类型 | 8 | 1 | 已重构为 DSCP(6 位,QoS/差分服务标记)+ ECN(2 位,显式拥塞通知) |
| Total Length · 总长度 | 16 | 2–3 | 首部 + 数据总字节数,最大 65535。收端据此划定数据边界;超过链路 MTU 时触发分片 |
| Identification · 标识 | 16 | 4–5 | 同一报文拆出的所有分片携带相同值,收端按「标识 + 源/目的 IP + 协议号」重组 |
| Flags · 标志 | 3 | 6 | bit0 保留;DF=1 禁止分片(PMTUD 依赖它);MF=1 表示其后还有分片 |
| Fragment Offset · 片偏移 | 13 | 6–7 | 分片数据相对原始报文的偏移,以 8 字节为单位——除最后一片,每片都是 8 的倍数 |
| TTL · 生存时间 | 8 | 8 | 每经一台路由器减 1;减到 0 丢弃并回 ICMP 超时,防止环路打转 |
| Protocol · 协议 | 8 | 9 | 上层协议号:1=ICMP,2=IGMP,6=TCP,17=UDP,41=IPv6,89=OSPF |
| Header Checksum · 首部校验和 | 16 | 10–11 | 只覆盖首部、不覆盖数据;每跳因 TTL 变化必须重算 |
| Source Address · 源地址 | 32 | 12–15 | 源 IPv4 地址 |
| Destination Address · 目的地址 | 32 | 16–19 | 目的 IPv4 地址。路由器逐跳只按它查转发表,不记录完整路径 |
| Options + Padding · 选项与填充 | 0–40 | 20 起 | 记录路由、时间戳、源路由等,极少使用;Padding 补 0 保证首部 4 字节对齐 |
最容易记错的点
- IHL 的单位是 4 字节,不是字节、不是位。
- 分片靠三件套配合:Identification(相同值)+ Flags(DF/MF)+ Fragment Offset(8 字节为单位)。
- 首部校验和只保首部且每跳重算(TTL 递减改变首部);数据正确性由 TCP/UDP 校验和(含伪首部)端到端兜底。
- Protocol 是网络层向上投递的路标,决定剥掉 IP 首部后交给谁。

本文深入剖析TCP/IP协议栈的关键机制:IPv4/IPv6首部结构与差异、TCP封装与分层校验、三次握手状态机与选项协商、路径MTU发现(PMTUD)等跨层协作机制、IP分片重组规则及风险。重点涵盖RFC 791与RFC 9293规范下的字段语义、标志位作用、序号/确认号逻辑、伪首部校验和、DF/MF/Offset分片三件套,以及源主机分片约束、扩展头链、强制UDP校验和等IPv6关键演进。
1471

被折叠的 条评论
为什么被折叠?



