5. IP 协议
- [5. IP 协议](#5. IP 协议)
-
- [5.1 概述](#5.1 概述)
- [5.2 IP 数据报格式](#5.2 IP 数据报格式)
- [5.3 无连接数据报传输](#5.3 无连接数据报传输)
-
- [5.3.1 首部校验](#5.3.1 首部校验)
- [5.3.2 数据分片与重组](#5.3.2 数据分片与重组)
- [5.4 IP 数据报选项](#5.4 IP 数据报选项)
-
- [5.4.1 选项格式](#5.4.1 选项格式)
- [5.4.2 选项类型](#5.4.2 选项类型)
- [5.5 IP 模块的结构](#5.5 IP 模块的结构)
- 本章要点
5. IP 协议
5.1 概述
IP 协议是 TCP/IP 协议簇的核心协议,位于网络层,提供不可靠、无连接的数据报服务,是实现网络互联的基础。
- 核心作用:通过 IP 地址统一物理地址,通过 IP 数据报统一物理数据帧,屏蔽底层网络差异,向上层提供统一服务。
- 相邻协议:网络层中,ARP、RARP 报文不封装在 IP 数据报中,而 ICMP、IGMP、OSPF 数据需封装在 IP 数据报中传输。
- 特点:
- 点到点协议:数据传输的对等实体是相邻设备(同一网络)的对等层实体。
- 不可靠性:不保证传输可靠性,不进行数据差错校验和跟踪,若需可靠传输需依赖上层 TCP 协议。
- 无连接性:数据报独立传输,可能经不同路径,可能无序到达。
5.2 IP 数据报格式
IP 数据报由首部 和数据两部分组成,首部分为定长部分(20 字节)和变长部分(选项,最长 40 字节)。各字段详细如下:
字段 | 位数 | 含义与细节 |
---|---|---|
版本 | 4 | 标识 IP 协议版本,IPv4 为 4(二进制 0100),决定数据报格式。 |
首部长度 | 4 | 以 32 位(4 字节)为单位,指示首部总长度(定长 + 选项)。最小值为 5(20 字节,无选项),最大值为 15(60 字节,含 40 字节选项)。 |
服务类型(TOS)/ 区分业务字段 | 8 | 原 TOS 字段用于规定数据报处理方式(如优先级、延迟、吞吐量等);后改为区分业务字段: - 前 6 位:区分业务码点(64 个编码,对应不同业务); - 后 2 位:显式拥塞通告(ECN,RFC 3168 定义),用于 TCP 拥塞控制: - 00:不支持 ECN; - 01/10:支持 ECN; - 11:路由器正经历拥塞。 |
总长度 | 16 | 指示整个 IP 数据报的字节数(首部 + 数据),最大值为 65535 字节。数据长度 = 总长度 - 首部长度 ×4。 |
标识 | 16 | 信源机赋予数据报的唯一标识符(每次发送自动 + 1),用于分片重组时标识同一原始数据报。 |
标志 | 3 | 低 2 位有效,控制分片: - D 位(第 0 位):0 = 允许分片,1 = 不允许分片(若超过 MTU 则丢弃并报错); - M 位(第 1 位):0 = 本片是最后一片,1 = 后续还有分片。 |
片偏移 | 13 | 以 8 字节为单位,指示本片数据在原始数据报数据区中的偏移量(用于重组时确定顺序)。 |
生存时间(TTL) | 8 | 限制数据报在网络中的传输时间,每经过一个路由器减 1,值为 0 时丢弃数据报(防止环路)。常见初始值:Windows 为 128,Linux 为 64。 |
协议 | 8 | 指示数据字段封装的上层协议,如: - 1=ICMP;6=TCP;17=UDP;89=OSPF。 |
首部校验和 | 16 | 保证首部完整性,仅校验首部(不校验数据): - 发送方:将首部分为 16 位块,校验和字段设为 0,用 1 的补码求和后求补,结果填入校验和字段; - 接收方:重复计算,若结果为 0 则首部正确,否则丢弃。 |
源地址 | 32 | 数据报最初发送者的 IP 地址(32 位,点分十进制表示)。 |
目的地址 | 32 | 数据报最终接收者的 IP 地址(32 位,点分十进制表示)。 |
选项 | 可变(≤40 字节) | 用于网络控制和测试(如源路由、记录路由、时间戳等),格式含选项码、长度、数据(详见 5.3)。 |
数据 | 可变 | 上层协议数据(如 TCP 报文段、UDP 数据报等),长度受总长度限制(≤65535 - 首部长度 ×4)。 |
5.3 无连接数据报传输
IP 数据报传输需处理首部校验 、数据分片与重组 和路由选择,核心是适应不同网络的最大传输单元(MTU)。
5.3.1 首部校验
- 仅校验首部:因首部字段在传输中可能变化(如 TTL、校验和),需在相邻设备间逐跳校验;数据校验由上层协议(如 TCP)负责。
- 校验过程:
- 发送方:将首部拆分为 16 位块,校验和字段设为 0,用 1 的补码计算总和,再对结果求补,填入校验和字段。
- 接收方:重复计算,若求和后求补结果为 0,则首部正确;否则丢弃数据报。
5.3.2 数据分片与重组
- 背景:不同物理网络的最大传输单元(MTU,物理帧可封装的最大数据字节数)不同,数据报长度超过 MTU 时需分片。
- 分片规则 :
- 每个分片需携带完整首部(与原数据报首部大部分相同,仅标志、总长度、片偏移不同)。
- 分片数据大小需为 8 字节的整数倍(最后一片除外),以保证片偏移可表示。
- 分片可在信源机或中间路由器进行,重组仅在信宿机进行。
- 分片相关字段 :
- 标识:所有分片的标识相同,用于关联同一原始数据报。
- 标志:M 位 = 1 表示非最后一片,M 位 = 0 表示最后一片。
- 片偏移:指示本片在原始数据中的位置(如偏移 0 表示第 1 片,偏移 175 表示数据从 1400 字节开始)。
- 重组过程 :
- 信宿机根据标识收集所有分片,按片偏移排序。
- 启动重组定时器,超时未集齐所有分片则丢弃,并通过 ICMP 报告错误。
- 重组后的数据报首部恢复为原始格式(总长度为原始长度,标志和片偏移重置)。
5.4 IP 数据报选项
IP 选项是首部的变长部分(≤40 字节),用于网络控制和测试,所有 IP 协议必须支持选项处理。
5.4.1 选项格式
每个选项由三部分组成:
- 选项码(8 位):含 3 个子字段:
- 复制位(1 位):1 = 选项复制到所有分片,0 = 仅复制到第一个分片;
- 选项类(2 位):00 = 路径控制 / 测试,10 = 时间戳测试,01/11 未用;
- 选项号(5 位):细分选项类型。
- 选项长度(8 位):选项总长度(含选项码、长度、数据),单字节选项无此字段。
- 选项数据(可变):选项具体内容(如 IP 地址、时间戳等)。
5.4.2 选项类型
选项类 | 选项号 | 选项名 | 功能与细节 |
---|---|---|---|
00 | 00000 | 选项结束 | 单字节选项,标识选项部分结束,用于填充使首部为 32 位整数倍。 |
00 | 00001 | 无操作 | 单字节选项,作为填充(避免选项结束符过早出现)。 |
00 | 00011 | 宽松源路由 | 信源指定路径关键点,关键点之间可通过路由器自动选路: - 选项码 = 131(复制位 = 1,类 = 00,号 = 00011); - 含指针(指示下一跳地址位置)和 IP 地址表(关键点列表)。 |
00 | 00111 | 记录路由 | 记录数据报从信源到信宿经过的路由器 IP 地址: - 选项码 = 7(复制位 = 0,类 = 00,号 = 00111); - 信源预分配地址空间,指针指向 next 可用位置,空间不足则停止记录。 |
00 | 01001 | 严格源路由 | 信源指定完整路径,数据报必须严格按顺序经过每一路由器: - 选项码 = 137(复制位 = 1,类 = 00,号 = 01001); - 含指针和 IP 地址表(完整路径),若无法按路径传输则丢弃。 |
10 | 00100 | 时间戳 | 记录数据报经过路由器的当地时间(世界时间,千分之一秒为单位): - 选项码 = 68(复制位 = 0,类 = 10,号 = 00100); - 含溢出(未记录的时间戳数)、标志(控制格式:0 = 仅时间,1 = 时间 + 地址,3 = 仅指定地址时间)、时间戳列表。 |
5.5 IP 模块的结构
IP 协议的核心功能包括封装、分片重组、选项处理、路由选择等,数据处理流程如下:
- 上层数据(如 TCP/UDP)向下传输 :
- 封装为 IP 数据报(添加首部字段)。
- 处理模块判断目的地址:若为环回地址(127.x.x.x)或本机 IP,则直接回传上层;否则进入路由选择。
- 路由选择模块确定下一跳接口,分片模块根据接口 MTU 分片(若需),最终交给下层(数据链路层)发送。
- 下层数据(数据链路层帧)向上传输 :
- 解封装获取 IP 数据报,进入 IP 处理模块:校验首部、处理选项、更新 TTL(减 1,若为 0 则丢弃)。
- 若本机是信宿机:根据协议字段将数据提交给对应上层协议(如 TCP/UDP/ICMP)。
- 若需转发(本机是路由器):路由选择模块确定下一跳,分片模块根据出口 MTU 分片(若需),交给下层发送。
本章要点
- IP 是不可靠、无连接的数据报协议,提供尽力传输服务,通过 IP 地址和数据报统一底层差异。
- IP 数据报首部含 20 字节定长部分和≤40 字节选项,关键字段包括版本、首部长度、总长度、标识、标志、片偏移、TTL、协议、校验和、源 / 目的地址。
- 分片由 MTU 触发,依赖标识、标志、片偏移字段,重组仅在信宿机进行,超时未重组则丢弃。
- 首部校验和仅校验首部,采用 1 的补码算法,确保首部完整性。
- IP 选项用于网络控制和测试,包括源路由(严格 / 宽松)、记录路由、时间戳等,需按格式处理。
- IP 模块负责数据报的封装、分片重组、选项处理、路由选择等,实现数据在网络中的传输。