2. Overview (概述)
2.1. Relation to Other Protocols (与其他协议的关系)
互联网协议一侧与更高层的主机间协议接口, 另一侧与本地网络协议接口。在此上下文中, "本地网络"可以是建筑物中的小型网络, 也可以是 ARPANET 等大型网络。
协议栈
+-------------+
| 应用层 |
+-------------+
| TCP | TCP/UDP/ICMP
+-------------+
| IP | 互联网协议 (本文档)
+-------------+
| 本地网络 | 以太网、WiFi 等
+-------------+
关系图
+------+ +-----+ +-----+ +-----+
|Telnet| | FTP | | ... | |语音 |
+------+ +-----+ +-----+ +-----+
| | | |
+-----+ +-----+ +-----+
| TCP | | UDP | | ... |
+-----+ +-----+ +-----+
| | |
+-------------------------------+
| 互联网协议 & ICMP |
+-------------------------------+
|
+-------------------------------+
| 本地网络协议 |
+-------------------------------+
关键协议
- TCP (传输控制协议): 提供可靠、有序、经过错误检查的数据传递
- UDP (用户数据报协议): 提供无连接的数据报服务
- ICMP (互联网控制消息协议): 用于错误报告和诊断
- 本地网络协议: 以太网、令牌环、ARPANET 等
2.2. Model of Operation (操作模型)
从一个应用程序向另一个应用程序传输数据报的操作模型通过以下场景说明:
传输场景
应用程序 A (主机 1) → IP 模块 → 网关 → IP 模块 → 应用程序 B (主机 2)
详细流程
-
应用程序发送数据
- 应用程序 A 准备要发送的数据
- 将数据传递给 TCP 或 UDP
-
TCP/UDP 处理
- 添加传输层头部
- 将段/数据报传递给 IP
-
IP 模块 (源主机)
- 添加带有地址的 IP 头部
- 确定路由 (直接或通过网关)
- 必要时分片
- 传递给本地网络
-
本地网络传输
- 封装在网络帧中
- 传输到下一跳
-
网关处理 (如需要)
- 接收 IP 数据报
- 检查目的地址
- 确定下一跳
- 递减 TTL
- 可能进一步分片
- 转发到下一个网络
-
IP 模块 (目的主机)
- 接收 IP 数据报
- 检查目的地是否匹配
- 如果已分片则重组
- 传递给上层协议
-
TCP/UDP 处理
- 处理传输头部
- 将数据传递给应用程序
-
应用程序接收数据
- 应用程序 B 接收数据
数据报传输示例
主机 A 网关 1 网关 2 主机 B
| | | |
| 1. 发送数据报 | | |
|------------------->| | |
| | 2. 路由并转发 | |
| |------------------->| |
| | | 3. 路由并转发 |
| | |------------------->|
| | | | 4. 传递
| | | |
2.3. Function Description (功能描述)
互联网协议的目的是通过互联网络集合移动数据报。这通过将数据报从一个互联网模块传递到另一个互联网模块来完成, 直到到达目的地。
核心功能
1. 寻址
- 每个数据报包含源地址和目的地址
- 32 位地址唯一标识主机
- 网络和主机部分实现层次路由
2. 路由
- 通过互联网络选择路径
- 基于目的地址和路由表
- 可以是直接传递或通过网关间接传递
3. 分片和重组
- 大数据报分割成较小的分片
- 当 MTU (最大传输单元) 不同时必要
- 分片仅在最终目的地重组
4. 服务类型
- 指示所需的服务质量
- 参数: 优先级、延迟、吞吐量、可靠性
- 由网关用于路由决策
5. 生存时间
- 限制数据报在互联网中的生存期
- 防止无限循环
- 在每一跳递减
6. 选项
- 安全参数
- 源路由
- 路由记录
- 时间戳
7. 头部校验和
- 保护头部完整性
- 在每一跳重新计算 (由于 TTL 变化)
- 不保护数据载荷
互联网模块职责
互联网模块 (尤其是在网关中) 确定数据报格式正确、地址有效, 并朝其目的地路由。主要职责包括:
- 错误检测: 验证头部校验和
- TTL 管理: 递减并检查 TTL
- 分片: 必要时分割数据报
- 重组: 在目的地重建原始数据报
- 选项处理: 处理 IP 选项
- ICMP 生成: 通过 ICMP 报告错误
寻址方案
A 类: 0NNNNNNN.HHHHHHHH.HHHHHHHH.HHHHHHHH
- 0.0.0.0 到 127.255.255.255
- 128 个网络, 每个 16,777,216 台主机
B 类: 10NNNNNN.NNNNNNNN.HHHHHHHH.HHHHHHHH
- 128.0.0.0 到 191.255.255.255
- 16,384 个网络, 每个 65,536 台主机
C 类: 110NNNNN.NNNNNNNN.NNNNNNNN.HHHHHHHH
- 192.0.0.0 到 223.255.255.255
- 2,097,152 个网络, 每个 256 台主机
D 类: 1110XXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX
- 224.0.0.0 到 239.255.255.255
- 组播
E 类: 1111XXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX
- 240.0.0.0 到 255.255.255.255
- 保留供将来使用
2.4. Gateways (网关)
网关实现互联网协议以在网络之间转发数据报。网关连接到两个或多个网络, 从一个网络接收数据报并将其转发到另一个网络。
网关功能
1. 路由
- 维护路由表
- 确定每个数据报的下一跳
- 可以使用路由协议 (RIP、OSPF 等)
2. 分片
- 可能需要对数据报进行分片
- 当下一个网络的 MTU 较小时发生
- 不重组 (只有目的地才重组)
3. TTL 管理
- 将 TTL 至少递减 1
- 如果 TTL 达到 0 则丢弃数据报
- 向源发送 ICMP 超时消息
4. 错误处理
- 检测各种错误条件
- 生成 ICMP 错误消息
- 将错误转发给源
5. 选项处理
- 处理 IP 选项
- 如果请求则添加时间戳
- 处理源路由
网关架构
网络 A 网关 网络 B
+---------+ +----------+ +---------+
| | | | | |
| 主机 A |---------| 路由器 |---------| 主机 B |
| | | | | |
+---------+ +----------+ +---------+
| | |
| | |
IP 模块 IP 模块 IP 模块
本地网络 A 两个网络 本地网络 B
网关处理步骤
1. 从网络接口接收数据报
2. 验证头部校验和
3. 检查目的地是否为本地
- 是: 传递给主机
- 否: 继续转发
4. 递减 TTL
- 如果 TTL = 0: 丢弃, 发送 ICMP
5. 查找路由表确定下一跳
6. 检查是否需要分片
- 如果设置了 DF 标志且需要分片:
丢弃, 发送 ICMP
- 否则: 必要时分片
7. 重新计算头部校验和
8. 转发到下一个网络接口
路由表示例
| 目的网络 | 下一跳 | 接口 | 度量 |
|---|---|---|---|
| 10.0.0.0/8 | 直接 | eth0 | 0 |
| 192.168.1.0/24 | 直接 | eth1 | 0 |
| 0.0.0.0/0 | 10.0.0.1 | eth0 | 10 |
网关职责
- 不重组分片 (只有最终目的地才重组)
- 必须在必要时分片
- 必须递减 TTL
- 必须在任何修改后重新计算头部校验和
- 应该实现 ICMP 用于错误报告
- 可以使用服务类型进行路由决策
摘要
互联网协议提供无连接、尽力而为的数据报传递服务。它在更高层的主机间协议 (如 TCP) 和底层网络协议之间运行。主要特性包括:
- 跨互联网络的通用寻址
- 通过网关路由
- 针对不同网络 MTU 的分片
- 简单、无状态的操作
- 无可靠性保证 (由上层处理)
这种设计使互联网具有可扩展性、灵活性和健壮性, 支持多样化的网络和应用程序。