问1:IP 报文的格式是什么时候制定的
IP 报文格式最早是在 1981 年制定的。
它由互联网标准文档 RFC 791 正式定义,该文档发布于 1981 年 9 月,并由 Internet Engineering Task Force (IETF) 发布。
1️⃣ IP 报文格式的来源
互联网协议的发展大致经历了几个阶段:
| 时间 | 事件 |
|---|---|
| 1974 | 提出 TCP/IP 概念 |
| 1981 | 发布 RFC 791,正式定义 IPv4 |
| 1983 | TCP/IP 成为 ARPANET 标准 |
| 1998 | 发布 IPv6 规范 |
其中 RFC 791 就规定了 IPv4 报文结构。
2️⃣ RFC 791 定义的 IPv4 报文结构
IPv4 报文由 头部 + 数据组成:
| Version | IHL | Type of Service | Total Length |
| Identification | Flags | Fragment Offset |
| TTL | Protocol | Header Checksum |
| Source Address |
| Destination Address |
| Options (optional) |
| Data |
IPv4 头部字段
| 字段 | 作用 |
|---|---|
| Version | IP版本(IPv4=4) |
| IHL | 头部长度 |
| Type of Service | 服务类型 |
| Total Length | 整个 IP 包长度 |
| Identification | 分片标识 |
| Flags | 分片控制 |
| Fragment Offset | 分片偏移 |
| TTL | 生存时间 |
| Protocol | 上层协议(TCP/UDP) |
| Header Checksum | 头部校验 |
| Source Address | 源IP |
| Destination Address | 目标IP |
3️⃣ IPv4 头部长度
RFC 791 规定:
| 类型 | 长度 |
|---|---|
| 最小头部 | 20 字节 |
| 最大头部 | 60 字节 |
原因是 Options 字段可变。
4️⃣ 后来的 IPv6 改进
由于 IPv4 头部复杂,后来 RFC 8200 定义了 IPv6,做了很多优化:
主要变化:
- 头部固定 40 字节
- 取消 Header Checksum
- 用 扩展头代替 Options
- 地址从 32bit → 128bit
✅ 总结
- IPv4 报文格式:1981 年
- 标准文档:RFC 791
- 制定组织:Internet Engineering Task Force
也就是说,现在互联网每天传输的绝大多数 IPv4 数据包结构,其实是 40 多年前制定的标准。
问2:在 RFC 791 就在 IP 的包头设计好了 version,这是不是意味着,那时就已经开始了着手 IPv6 的设计了
不完全是。在 RFC 791 里设计 Version 字段,并不意味着当时已经开始设计 IPv6。
更准确地说,这是 协议设计时预留扩展空间的一种工程习惯。👍
1️⃣ 当时确实还没有 IPv6 的概念
IPv6 的研究大约是在 1990 年前后才开始的,后来形成标准 RFC 8200(最早规范是 1998 年的 RFC 2460)。
而 RFC 791 是 1981 年发布的,中间差了将近 10 年。
所以:
在设计 IPv4 时,工程师并不知道未来会有 IPv6。
2️⃣ 为什么一开始就设计了 Version 字段
主要原因是:IP 协议在 RFC 791 之前其实已经有多个版本。
早期互联网研究阶段出现过:
| 版本 | 情况 |
|---|---|
| IP version 0 | 实验版本 |
| IP version 1–3 | ARPANET 早期实验 |
| IP version 4 | 最终标准(RFC 791) |
所以 RFC 791 里的 Version=4 并不是随便定的,而是:
“这是第 4 版 IP 协议”。
3️⃣ Version 字段的真正目的
设计 Version 的核心目的有两个:
① 允许协议演进
如果未来需要新的 IP 协议:
- 路由器看到 version=6
- 就可以用新的解析方式
否则设备根本不知道包结构。
② 允许多种 IP 协议共存
现实中确实出现了:
| Version | 协议 |
|---|---|
| 4 | IPv4 |
| 5 | Internet Stream Protocol (ST-II) |
| 6 | IPv6 |
注意一个有趣的点:
IP version 5 并不是 IPv5。
它是一个专门做 实时流媒体实验的协议(ST),后来没有普及。
4️⃣ Version 字段只有 4 bit
IPv4 头部里:
Version: 4 bit
意味着理论上最多支持:
2^4 = 16 个版本
也就是说:
IP version 0 ~ 15
这也是一种典型的 前瞻性协议设计。
✅ 总结
- RFC 791 的 Version 字段 不是为 IPv6 预留的
- 只是为了 协议版本识别和未来扩展
- IPv6 的设计大约 10 年后才开始
一句话理解:
Version字段不是为了 IPv6,而是为了让 IP 协议未来可以升级,而不用推倒重来。
如果你对这个问题感兴趣,其实还有一个 更有意思的历史细节:
为什么 IPv4 地址是 32 位?当年为什么不是 64 位?
这个决定其实直接导致了 后来 IPv6 的诞生。