【TCP/IP】5. IP 协议

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 数据报中传输。
  • 特点:
    1. 点到点协议:数据传输的对等实体是相邻设备(同一网络)的对等层实体。
    2. 不可靠性:不保证传输可靠性,不进行数据差错校验和跟踪,若需可靠传输需依赖上层 TCP 协议。
    3. 无连接性:数据报独立传输,可能经不同路径,可能无序到达。

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)负责。
  • 校验过程:
    1. 发送方:将首部拆分为 16 位块,校验和字段设为 0,用 1 的补码计算总和,再对结果求补,填入校验和字段。
    2. 接收方:重复计算,若求和后求补结果为 0,则首部正确;否则丢弃数据报。

5.3.2 数据分片与重组

  • 背景:不同物理网络的最大传输单元(MTU,物理帧可封装的最大数据字节数)不同,数据报长度超过 MTU 时需分片。
  • 分片规则
    1. 每个分片需携带完整首部(与原数据报首部大部分相同,仅标志、总长度、片偏移不同)。
    2. 分片数据大小需为 8 字节的整数倍(最后一片除外),以保证片偏移可表示。
    3. 分片可在信源机或中间路由器进行,重组仅在信宿机进行。
  • 分片相关字段
    • 标识:所有分片的标识相同,用于关联同一原始数据报。
    • 标志:M 位 = 1 表示非最后一片,M 位 = 0 表示最后一片。
    • 片偏移:指示本片在原始数据中的位置(如偏移 0 表示第 1 片,偏移 175 表示数据从 1400 字节开始)。
  • 重组过程
    1. 信宿机根据标识收集所有分片,按片偏移排序。
    2. 启动重组定时器,超时未集齐所有分片则丢弃,并通过 ICMP 报告错误。
    3. 重组后的数据报首部恢复为原始格式(总长度为原始长度,标志和片偏移重置)。

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)向下传输
    1. 封装为 IP 数据报(添加首部字段)。
    2. 处理模块判断目的地址:若为环回地址(127.x.x.x)或本机 IP,则直接回传上层;否则进入路由选择。
    3. 路由选择模块确定下一跳接口,分片模块根据接口 MTU 分片(若需),最终交给下层(数据链路层)发送。
  • 下层数据(数据链路层帧)向上传输
    1. 解封装获取 IP 数据报,进入 IP 处理模块:校验首部、处理选项、更新 TTL(减 1,若为 0 则丢弃)。
    2. 若本机是信宿机:根据协议字段将数据提交给对应上层协议(如 TCP/UDP/ICMP)。
    3. 若需转发(本机是路由器):路由选择模块确定下一跳,分片模块根据出口 MTU 分片(若需),交给下层发送。

本章要点

  • IP 是不可靠、无连接的数据报协议,提供尽力传输服务,通过 IP 地址和数据报统一底层差异。
  • IP 数据报首部含 20 字节定长部分和≤40 字节选项,关键字段包括版本、首部长度、总长度、标识、标志、片偏移、TTL、协议、校验和、源 / 目的地址。
  • 分片由 MTU 触发,依赖标识、标志、片偏移字段,重组仅在信宿机进行,超时未重组则丢弃。
  • 首部校验和仅校验首部,采用 1 的补码算法,确保首部完整性。
  • IP 选项用于网络控制和测试,包括源路由(严格 / 宽松)、记录路由、时间戳等,需按格式处理。
  • IP 模块负责数据报的封装、分片重组、选项处理、路由选择等,实现数据在网络中的传输。
相关推荐
BingoGo13 小时前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack13 小时前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
Jony_2 天前
高可用移动网络连接
网络协议
chilix2 天前
Linux 跨网段路由转发配置
网络协议
JaguarJack2 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo2 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack4 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理4 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php