3. Specification (规范)
本章提供互联网协议 (IP) 的完整规范, 包括头部格式、详细字段描述、操作程序和接口定义。
3.1. Internet Header Format (互联网头部格式)
互联网头部内容摘要如下:
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 |Type of Service| Total Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identification |Flags| Fragment Offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Time to Live | Protocol | Header Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Destination Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
互联网数据报头部示例 (图 4)
注意每个刻度线代表一个位位置。
字段描述
Version (版本): 4 位
Version 字段指示互联网头部的格式。本文档描述版本 4。
IHL (Internet Header Length, 互联网头部长度): 4 位
互联网头部长度是互联网头部以 32 位字为单位的长度, 因此指向数据的开始。注意正确头部的最小值为 5。
Type of Service (服务类型): 8 位
服务类型提供了所需服务质量的抽象参数的指示。这些参数用于在通过特定网络传输数据报时指导实际服务参数的选择。
位 0-2: 优先级 (Precedence)
位 3: 0 = 正常延迟, 1 = 低延迟
位 4: 0 = 正常吞吐量, 1 = 高吞吐量
位 5: 0 = 正常可靠性, 1 = 高可靠性
位 6-7: 保留供将来使用
0 1 2 3 4 5 6 7
+-----+-----+-----+-----+-----+-----+-----+-----+
| | | | | | |
| 优先级 | D | T | R | 0 | 0 |
| | | | | | |
+-----+-----+-----+-----+-----+-----+-----+-----+
优先级值:
- 111 - 网络控制 (Network Control)
- 110 - 互联网络控制 (Internetwork Control)
- 101 - CRITIC/ECP
- 100 - 紧急覆盖 (Flash Override)
- 011 - 紧急 (Flash)
- 010 - 立即 (Immediate)
- 001 - 优先 (Priority)
- 000 - 常规 (Routine)
Total Length (总长度): 16 位
总长度是数据报的长度, 以八位字节为单位, 包括互联网头部和数据。此字段允许数据报的长度最多为 65,535 个八位字节。所有主机必须准备好接受最多 576 个八位字节的数据报。建议主机仅在确保目的地准备好接受较大数据报时才发送大于 576 个八位字节的数据报。
Identification (标识): 16 位
由发送方分配的标识值, 用于帮助组装数据报的分片。
Flags (标志): 3 位
各种控制标志。
- 位 0: 保留, 必须为零
- 位 1: (DF) 0 = 可以分片, 1 = 不分片
- 位 2: (MF) 0 = 最后一个分片, 1 = 还有更多分片
Fragment Offset (分片偏移): 13 位
此字段指示此分片在数据报中的位置。分片偏移以 8 个八位字节 (64 位) 为单位。第一个分片的偏移为零。
Time to Live (生存时间): 8 位
此字段指示数据报在互联网系统中允许保留的最长时间。如果此字段包含值零, 则必须销毁数据报。此字段在互联网头部处理中被修改。时间以秒为单位, 但由于处理数据报的每个模块必须将 TTL 至少减少一, 即使它在不到一秒内处理数据报, TTL 也必须被视为数据报可能存在的时间的上限。
Protocol (协议): 8 位
此字段指示互联网数据报数据部分中使用的下一层协议。各种协议的值在"已分配号码" [9] 中指定。
常用值:
- 1 = ICMP
- 6 = TCP
- 17 = UDP
Header Checksum (头部校验和): 16 位
仅对头部的校验和。由于某些头部字段会更改 (例如生存时间), 因此在处理互联网头部的每个点都会重新计算和验证。
校验和算法是: 校验和字段是头部中所有 16 位字的反码和的 16 位反码。为了计算校验和, 校验和字段的值为零。
Source Address (源地址): 32 位
源地址。
Destination Address (目的地址): 32 位
目的地址。
Options (选项): 可变长度
选项可能出现或不出现在数据报中。它们必须由所有 IP 模块 (主机和网关) 实现。可选的是它们在任何特定数据报中的传输, 而不是它们的实现。
3.2. Discussion (讨论)
寻址
为了在为网络分配地址时提供灵活性, 并允许大量中小型网络, 地址字段的解释被编码为指定少量具有大量主机的网络、适量具有适量主机的网络, 以及大量具有少量主机的网络。
地址格式:
| 高位 | 格式 | 类别 |
|---|---|---|
| 0 | 7 位网络, 24 位主机 | a |
| 10 | 14 位网络, 16 位主机 | b |
| 110 | 21 位网络, 8 位主机 | c |
| 111 | 转义到扩展寻址模式 | - |
分片和重组
互联网标识字段 (ID) 与源地址和目的地址以及协议字段一起使用, 以标识用于重组的数据报分片。
更多分片标志位 (MF) 在数据报不是最后一个分片时设置。分片偏移字段标识分片位置, 相对于原始未分片数据报的开头。分片以 8 个八位字节为单位计数。
每个互联网模块必须能够转发 68 个八位字节的数据报而无需进一步分片。这是因为互联网头部最多可以是 60 个八位字节, 而最小分片是 8 个八位字节。
每个互联网目的地必须能够接收 576 个八位字节的数据报, 无论是一整块还是要重组的分片。
3.3. Interfaces (接口)
用户与 IP 接口的功能描述充其量是虚构的, 因为每个操作系统都有不同的设施。但是, 所有 IP 必须提供一定的最小服务集, 以保证所有 IP 实现都能支持相同的协议层次结构。
上层接口示例
以下两个示例调用满足用户到互联网协议模块通信的要求 ("=>" 表示返回):
SEND (发送)
SEND (src, dst, prot, TOS, TTL, BufPTR, len, Id, DF, opt => result)
其中:
- src = 源地址
- dst = 目的地址
- prot = 协议
- TOS = 服务类型
- TTL = 生存时间
- BufPTR = 缓冲区指针
- len = 缓冲区长度
- Id = 标识符
- DF = 不分片
- opt = 选项数据
- result = 响应
- OK = 数据报发送成功
- Error = 参数错误或本地网络错误
RECV (接收)
RECV (BufPTR, prot, => result, src, dst, TOS, len, opt)
其中:
- BufPTR = 缓冲区指针
- prot = 协议
- result = 响应
- OK = 数据报接收成功
- Error = 参数错误
- len = 缓冲区长度
- src = 源地址
- dst = 目的地址
- TOS = 服务类型
- opt = 选项数据
摘要
本规范定义了互联网协议版本 4 (IPv4), 提供:
- 无连接数据报传递
- 尽力而为服务 (无可靠性保证)
- 分片和重组能力
- 最多 2^32 台主机的寻址
- 通过互联网络的路由
- 服务类型指示
- 生存时间管理
- 特殊处理的选项
该协议设计为简单、可扩展且灵活, 使互联网能够支持多样化的应用程序和网络技术。
有关所有 IP 选项、分片程序、重组算法和实现要求的完整详细信息, 请参阅 RFC 791 的完整文本。
注意: 这是 RFC 791 第 3 节的精简版本。有关完整规范, 包括详细的选项格式、分片/重组伪代码和所有边缘情况, 请查阅官方 RFC 791 文档。