IP 协议

devtools/2025/3/19 9:30:26/

文章目录

  • IP 协议
    • 概述
    • 数据包格式
    • 首部校验和
    • 实例分析
      • 实例一
    • 分片
    • 抓包分析
    • 参考

本文为笔者学习以太网对网上资料归纳整理所做的笔记,文末均附有参考链接,如侵权,请联系删除。

IP 协议

概述

IP 协议是 TCP/IP 协议簇中的核心协议,也是 TCP/IP 协议的载体,IP 协议规定了数据传输时的基本单元和格式。从前面介绍的可以看出,IP 协议位于以太网 MAC 帧格式的数据段,IP 协议内容由IP 首部和数据字段组成。所有的 TCP、UDP 及 ICMP 数据都以 IP 数据报格式传输

数据包格式

IP 数据包格式如图所示。
在这里插入图片描述
前 20 个字节和紧跟其后的可选字段是 IP 数据报的首部,前 20 个字节是固定的,后面可选字段是可有可无的,首部的每一行以 32 位(4 个字节)为单位。每个字节传输规则为由比特最高位到最低位的顺序逐一进行发送,4 字节的 32bit 值按照以下次序传输:首先 7-0bit,其次 15-8 bit,然后 23-16bit,最后是 31- 24bit。

  • 版本:4 位 IP 版本号(Version),这个值设置为二进制的 0100 时表示 IPv4,设置为 0110 时表示 IPv6,目前使用比较多的 IP 协议版本号是 4。
  • 首部长度:4 位首部长度(IHL,Internet Header Length),表示 IP 首部一共有多少个 32 位(4 个字节)。在没有可选字段时,IP 首部长度为 20 个字节,因此首部长度的值为 5。
  • 服务类型:8 位服务类型(TOS,Type of service),该字段被划分成两个子字段:3 位优先级字段(现在已经基本忽略掉了)和 4 位 TOS 字段,最后一位固定为 0。服务类型为 0 时表示一般服务。
  • 总长度:16 位 IP 数据报总长度(Total Length),包括 IP 首部和 IP 数据部分,以字节为单位。我们利用 IP 首部长度和 IP 数据报总长度,就可以知道 IP 数据报中数据内容的起始位置和长度。由于该字段长16bit,所以 IP 数据报最长可达 65535 字节。尽管理论上可以传输长达 65535 字节的 IP 数据报,但实际上还要考虑网络的最大承载能力等因素。
  • 标识:16 位标识(Identification)字段,用来标识主机发送的每一份数据报。通常每发送一份报文它的值就会加 1。
  • 标志:3 位标志(Flags)字段,
    • 第 1 位为保留位;
    • 第 2 位表示禁止分片
      • 1:表示不分片,用来cesium接口的 MTU 大小的,例如以太网就是 1500
      • 0:允许分片;
    • 第 3 位标识更多分片(除了数据报的最后一个分片外,其它分片都为 1)
      • 1:表示还有分片,
      • 0:最后一个分片。
  • 片偏移:13 位片偏移(Fragment Offset),在接收方进行数据报重组时用来标识分片的顺序。
  • 生存时间:8 位生存时间字段,TTL(Time To Live)域防止丢失的数据包在无休止的传播,一般被设置为 64 或者 128。
  • 协议:8 位协议(Protocol)类型,表示此数据报所携带上层数据使用的协议类型,ICMP 为 1,TCP为 6,UDP 为 17。
  • 首部校验和:16 位首部校验和(Header Checksum),该字段只校验数据报的首部,不包含数据部分;校验 IP 数据报头部是否被破坏、篡改和丢失等。
  • 源 IP 地址:32 位源 IP 地址(Source Address),即发送端的 IP 地址,如 192.168.1.123。
  • 目的 IP 地址:32 位目的 IP 地址(Destination Address),即接收端的 IP 地址,如 192.168.1.102。
  • 可选字段:是数据报中的一个可变长度的可选信息,选项字段以 32bit 为界,不足时插入值为 0 的填充字节,保证 IP 首部始终是 32bit 的整数倍。

首部校验和

以上内容是对 IP 首部格式的详细阐述,还需要补充的内容是 IP 首部校验和的计算方法,其计算步骤
如下:

  • 将 16 位检验和字段置为 0,然后将 IP 首部按照 16 位分成多个单元;
  • 对各个单元采用反码加法运算(即高位溢出位会加到低位,通常的补码运算是直接丢掉溢出的高位);
  • 此时仍然可能出现进位的情况,将得到的和再次分成高 16 位和低 16 位进行累加;
  • 最后将得到的和的反码填入校验和字段。

实例分析

实例一

例如,我们使用 IP 协议发送一个 IP 数据报总长度为 60 个字节(有效数据为 40 个字节)的数据包,

  • 发送端 IP 地址为 192.168.1.10,
  • 接收端 IP 地址为 192.168.1.102,则 IP 首部数据如下

在这里插入图片描述
按照上述提到的 IP 首部校验和的方法计算 IP 首部校验和,即:
0x4500 + 0x003C + 0x0000 + 0x4000 + 0x4001 + 0x0000(计算时强制置 0) + 0xc0a8 + 0x010a + 0xc0a8 +0x0166 = 0x248FD
0x0002 + 0x48FD = 0x000048FF(此种情况并未出现进位)
0x0000+ 0x48FF= 0x48FF(此种情况并未出现进位)
check_sum = ~0x48FF(按位取反)= 0xb700

分片

一个主机打算发送4000字节的IP数据报(20字节IP首部加上3980字节IP数据区域,假设没有IP数据报首部选项字段),且该数据报必须通过一条MTU为1500字节的以太网链路。这就意味着源始IP数据报中3980字节数据必须被分配为3个独立的数据报分片(其中的每个分片也是一个IP数据报)。假定初始IP数据报贴上的标识号为666,那么

  1. 第一个分片的数据报总大小为1500字节(1480字节数据大小+20字节IP数据报首部),3 位标志的值为 b001 表示允许分片,并且还有更多分片,分片偏移量为0。
  2. 第二个分片的数据报大小也为1500字节,3 位标志的值为 b001 表示允许分片,并且还有更多分片,分片偏移量为185(185*8=1480)。
  3. 第三个分片的数据报大小为1040(3980-1480-1480+20),3 位标志的值为 b000 表示允许分片,但是没有更多分片,分片偏移量为370(185+185)。
  4. 请添加图片描述

抓包分析

请添加图片描述

参考

  • 正点原子《开拓者之FPGA开发指南V3.2》
  • LwIP应用开发实战指南—基于STM32

http://www.ppmy.cn/devtools/168300.html

相关文章

MySQL--DDL

1、DDL-数据库操作 查询: 查询所有数据库: SHOW DATABASES; 查询当前数据库: SELECT DATABASE(); 创建: CREATE DATABASE[IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则]; 删…

JVM部分八股

什么是JVM? 有哪些好处? 索引越界可能导致程序覆盖其他程序内存中的代码 JVM是一套规范,有多种实现 JVM运行流程? 1.类加载器将java程序翻译为java字节码文件 2.运行数据区将字节码文件加载到内存,字节码文件是J…

【计算机视觉】工业表计读数(2)--表计检测

1. 简介 工业表计(如压力表、电表、气表等)在工控系统、能源管理等领域具有重要应用。然而,传统人工抄表不仅工作量大、效率低,而且容易产生数据误差。近年来,基于深度学习的目标检测方法在工业检测中展现出极大优势&…

【第13节】windows sdk编程:GDI编程

目录 一、GDI 概述 二、设备环境概念 三、使用 GDI 绘图对象 四、使用 GDI 坐标系统 五、使用GDI绘图 5.1 输出文字 5.2 画点和线 5.3 画矩形框、圆和多边形 5.4 画位图和图标 5.5 双缓冲技术 六、综合代码示例 一、GDI 概述 Windows 应用程序不支持标准输出函数&am…

【最佳实践】Go 状态模式

设计思路 状态模式的核心在于将对象的行为封装在特定的状态类中,使得对象在不同的状态下表现出不同的行为。每个状态实现同一个接口,允许对象在运行时通过改变其内部状态对象来改变其行为。状态模式使得状态转换更加明确,并且易于扩展新的状…

蓝桥杯学习-01好数

01枚举 1.好数 问题描述 一个整数如果按从低位到高位的顺序,奇数位 (个位、百位、万位 ⋯⋯ ) 上的数字是奇数,偶数位 (十位、千位、十万位 ⋯⋯ ) 上的数字是偶数,我们就称之为 “好数”。 给定一个正整数 NN,请计算从 1 到 …

NAT技术-初级总结

NAT–网络地址转换 NAT基本逻辑是实现公网IP地址和私网IP地址的转换 华为设备所有NAT相关的配置都是在边界路由器的出接口上配置 1.静态NAT–一对一 就是在我们私网边界路由器上建立维护一张静态地址映射表,这张表 反映的是公网IP地址和私网IP地址之间一一对应的关系 只能一个…

[K!nd4SUS 2025] Crypto

最后一个把周末的补完。这个今天问了小鸡块神终于把一个补上,完成5/6,最后一个网站也上不去不弄了。 Matrices Matrices Matrices 这个是不是叫LWE呀,名词忘了,但意思还是知道。 b a*s e 这里的e是高斯分成,用1000…