【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 模块负责数据报的封装、分片重组、选项处理、路由选择等,实现数据在网络中的传输。
相关推荐
OKUNP9 小时前
Docker高级管理--容器通信技术与数据持久化
docker·容器·php
hunzi_19 小时前
搭建商城系统
java·uni-app·php
kfepiza12 小时前
Netplan 中 bridges、bonds、ethernets、vlans 之间的关系 笔记250711
linux·tcp/ip·shell
程序小武13 小时前
网络请求的基本概念、原理及生活化解析
网络协议
kfepiza14 小时前
Netplan 配置网桥(Bridge)的模板笔记250711
linux·tcp/ip·ubuntu
hrrrrb14 小时前
【TCP/IP】11. IP 组播
服务器·网络·tcp/ip
甘露寺15 小时前
HTTP 请求体类型详解:选择最适合的数据提交格式
网络·网络协议·http
傻啦嘿哟15 小时前
长效住宅代理IP:反爬虫战场上的隐形盾牌
爬虫·网络协议·tcp/ip
夏至春来-美美16 小时前
微信获取access_token授权的两种不同情况
微信·php·微信公众平台
hrrrrb17 小时前
【TCP/IP】7. IP 路由
网络·tcp/ip·智能路由器