《TCP/IP详解 卷1:协议》之第四、五章:ARP RARP
目录
一、ARP && RARP 报文结构
1、ARP请求报文示例
2、ARP响应报文示例
3、RARP请求报文示例
4、RARP响应报文示例
5、关于 padding
6、免费ARP
二、tcpdump 的使用
1、基本语法
2、常用选项
3、常用过滤条件
三、arp 命令的使用
1、基本语法
2、常用选项
3、示例
一、ARP && RARP 报文结构
ARP 主要用于将 IP 地址解析为 MAC 地址,而 RARP 用于将 MAC 地址解析为 IP 地址。
RARP报文的格式与ARP报文非常相似,它们都使用相同的报文结构,主要区别在于帧类型的不同(ARP帧类型为0x0806,RARP帧类型为0x8035),以及操作码(Operation Code)字段值不同。报文结构如下:
| 字段 | 长度(字节) | 说明 |
|---|---|---|
| 硬件类型 | 2 | 表示硬件地址类型,以太网为1 |
| 协议类型 | 2 | 表示协议地址类型,IPv4为0x0800 |
| 硬件地址长度 | 1 | 硬件地址(MAC地址)的长度,以太网为6字节 |
| 协议地址长度 | 1 | 协议地址(IP地址)的长度,IPv4为4字节 |
| 操作码 | 2 | 表示操作类型,1为ARP请求,2为ARP响应,3为RARP请求,4为RARP响应 |
| 发送方硬件地址 | 6 | 发送方的MAC地址 |
| 发送方协议地址 | 4 | 发送方的IP地址 |
| 目标硬件地址 | 6 | 目标设备的MAC地址 |
| 目标协议地址 | 4 | 目标设备的IP地址 |
1、ARP请求报文示例
以太网帧头:
| 目的MAC地址 | 源MAC地址 | 类型 |
|---|---|---|
| FF:FF:FF:FF:FF:FF | 00:11:22:33:44:55 | 0x0806(ARP协议) |
ARP请求报文内容:
| 字段 | 值(十六进制) | 说明 |
|---|---|---|
| 硬件类型 | 0001 | 以太网 |
| 协议类型 | 0800 | IPv4 |
| 硬件地址长度 | 06 | MAC地址长度 |
| 协议地址长度 | 04 | IP地址长度 |
| 操作码 | 0001 | ARP请求 |
| 发送方硬件地址 | 00:11:22:33:44:55 | 主机A的MAC地址 |
| 发送方协议地址 | C0:A8:01:64 | 主机A的IP地址(192.168.1.100) |
| 目标硬件地址 | 00:00:00:00:00:00 | 未知,用全0填充 |
| 目标协议地址 | C0:A8:01:C8 | 主机B的IP地址(192.168.1.200) |
2、ARP响应报文示例
以太网帧头:
| 目的MAC地址 | 源MAC地址 | 类型 |
|---|---|---|
| 00:11:22:33:44:55 | AA:BB:CC:DD:EE:FF | 0x0806(ARP协议) |
ARP响应报文内容:
| 字段 | 值(十六进制) | 说明 |
|---|---|---|
| 硬件类型 | 0001 | 以太网 |
| 协议类型 | 0800 | IPv4 |
| 硬件地址长度 | 06 | MAC地址长度 |
| 协议地址长度 | 04 | IP地址长度 |
| 操作码 | 0002 | ARP响应 |
| 发送方硬件地址 | AA:BB:CC:DD:EE:FF | 主机B的MAC地址 |
| 发送方协议地址 | C0:A8:01:C8 | 主机B的IP地址(192.168.1.200) |
| 目标硬件地址 | 00:11:22:33:44:55 | 主机A的MAC地址 |
| 目标协议地址 | C0:A8:01:64 | 主机A的IP地址(192.168.1.100) |
3、RARP请求报文示例
以太网帧头:
| 目的MAC地址 | 源MAC地址 | 类型 |
|---|---|---|
| FF:FF:FF:FF:FF:FF | 00:11:22:33:44:55 | 0x8035(RARP协议) |
RARP请求报文内容:
| 字段 | 值(十六进制) | 说明 |
|---|---|---|
| 硬件类型 | 0001 | 以太网 |
| 协议类型 | 0800 | IPv4 |
| 硬件地址长度 | 06 | MAC地址长度 |
| 协议地址长度 | 04 | IP地址长度 |
| 操作码 | 0003 | RARP请求 |
| 发送方硬件地址 | 00:11:22:33:44:55 | 无盘工作站的MAC地址 |
| 发送方协议地址 | 00:00:00:00 | 无盘工作站的IP地址(未知,用0.0.0.0填充) |
| 目标硬件地址 | 00:00:00:00:00:00 | 未知,用全0填充 |
| 目标协议地址 | 00:00:00:00 | 未知,用0.0.0.0填充 |
注:无盘工作站没有本地存储设备,启动时需要从网络上的服务器获取操作系统映像。它们通过RARP请求一个IP地址,以便能够与服务器通信。
4、RARP响应报文示例
假设RARP服务器收到请求后,为无盘工作站分配了IP地址192.168.1.100,并发送一个RARP响应报文。
以太网帧头:
| 目的MAC地址 | 源MAC地址 | 类型 |
|---|---|---|
| 00:11:22:33:44:55 | 服务器的MAC地址 | 0x8035(RARP协议) |
RARP响应报文内容:
| 字段 | 值(十六进制) | 说明 |
|---|---|---|
| 硬件类型 | 0001 | 以太网 |
| 协议类型 | 0800 | IPv4 |
| 硬件地址长度 | 06 | MAC地址长度 |
| 协议地址长度 | 04 | IP地址长度 |
| 操作码 | 0004 | RARP响应 |
| 发送方硬件地址 | 服务器的MAC地址 | RARP服务器的MAC地址 |
| 发送方协议地址 | C0:A8:01:64 | RARP服务器的IP地址(192.168.1.1) |
| 目标硬件地址 | 00:11:22:33:44:55 | 无盘工作站的MAC地址 |
| 目标协议地址 | 00:00:00:00 | 分配给无盘工作站的IP地址(192.168.1.100) |
5、关于 padding
ARP数据为28字节,根据以太网帧最小负载长度为46字节的规定,需要 padding 18个字节。如下报文所示:

①、常见的几个字节长度解释:
46:以太网帧(Ethernet Frame)的最小数据负载长度。
60:46字节的基础上 + 14字节长度的以太网帧头。
64:60字节的基础上 + 4字节长度的以太网帧尾。
②、关于以下原文的解释:“其原因是我们在发送该以太网数据帧的系统(bsdi)上运行tcpdump命令。应用程序rarpd写42字节到BSD分组过滤设备上(其中14字节为以太网数据帧的报头,剩下的28字节是RARP应答),这就是tcpdump收到的副本。但是以太网设备驱动程序要把这一短帧填充空白字符以达到最小传输长度(60)。如果我们在另一个系统上运行tcpdump命令,其长度将会是60。” :
1、在本"主机A"上使用 tcpdump 捕获发包,捕获的是副本,没有经过以太网设备驱动程序的 padding 处理。
2、如果在另一台"主机B"上使用 tcpdump 捕获(接收)这个报文,是经过 padding 处理的,因为包在从“主机A”发出时,经过了以太网设备驱动程序的处理。
6、免费ARP
免费ARP报文结构:
免费ARP是一种特殊的ARP报文,报文的格式与普通ARP报文相同,但有一些特定的字段值。以下是报文的详细结构:
| 字段 | 长度(字节) | 说明 |
|---|---|---|
| 硬件类型 | 2 | 硬件地址类型,以太网为1 |
| 协议类型 | 2 | 协议地址类型,IPv4为0x0800 |
| 硬件地址长度 | 1 | 硬件地址长度,以太网为6字节 |
| 协议地址长度 | 1 | 协议地址长度,IPv4为4字节 |
| 操作码 | 2 | 操作类型,免费ARP通常使用2(ARP响应) |
| 发送方硬件地址 | 6 | 发送方的MAC地址 |
| 发送方协议地址 | 4 | 发送方的IP地址 |
| 目标硬件地址 | 6 | 目标硬件地址,通常为发送方的MAC地址 |
| 目标协议地址 | 4 | 目标协议地址,通常为发送方的IP地址 |
假设设备A(IP地址为192.168.1.100,MAC地址为00:11:22:33:44:55)发送一个免费ARP报文,以下是报文的具体内容:
以太网帧头:
| 字段 | 值(十六进制) | 说明 |
|---|---|---|
| 目的MAC地址 | FF:FF:FF:FF:FF:FF | 广播地址 |
| 源MAC地址 | 00:11:22:33:44:55 | 设备A的MAC地址 |
| 类型 | 0806 | 表示这是一个ARP报文 |
ARP报文内容:
| 字段 | 值(十六进制) | 说明 |
|---|---|---|
| 硬件类型 | 0001 | 以太网 |
| 协议类型 | 0800 | IPv4 |
| 硬件地址长度 | 06 | MAC地址长度 |
| 协议地址长度 | 04 | IP地址长度 |
| 操作码 | 0002 | ARP响应(免费ARP通常使用响应格式) |
| 发送方硬件地址 | 00:11:22:33:44:55 | 设备A的MAC地址 |
| 发送方协议地址 | C0:A8:01:64 | 设备A的IP地址(192.168.1.100) |
| 目标硬件地址 | 00:11:22:33:44:55 | 设备A的MAC地址(免费ARP中通常与发送方MAC地址相同) |
| 目标协议地址 | C0:A8:01:64 | 设备A的IP地址(192.168.1.100) |
目的MAC地址:免费ARP报文通常以广播形式发送,因此目的MAC地址为全1(FF:FF:FF:FF:FF:FF)。
操作码:免费ARP通常使用操作码2(ARP响应),而不是1(ARP请求)。这是因为免费ARP的目的是通告自己的IP和MAC信息,而不是请求其他设备的MAC地址。
目标硬件地址和目标协议地址:在免费ARP中,目标硬件地址和目标协议地址通常与发送方的硬件地址和协议地址相同。这是因为设备在通告自己的信息。
应用场景:
1、检测IP地址冲突:设备启动时发送免费ARP报文,如果收到响应,则表明网络中存在IP地址冲突。
2、更新ARP缓存表:当设备的MAC地址发生变化(如更换网卡)时,发送免费ARP报文以更新其他设备的ARP缓存表。
二、tcpdump 的使用
1、基本语法
tcpdump [选项] [过滤条件]
2、常用选项
-
-i <interface>:指定监听的网络接口。-
示例:
tcpdump -i eth0(监听 eth0 接口的流量)。
-
-
-n:不解析主机名(显示 IP 地址而不是主机名)。-
示例:
tcpdump -n(不解析主机名)。
-
-
-nn:不解析主机名和端口号(显示原始 IP 地址和端口号)。-
示例:
tcpdump -nn(不解析主机名和端口号)。
-
-
-v:详细模式,显示更多报文信息。-
示例:
tcpdump -v(显示详细信息)。
-
-
-vv:更详细模式,显示更多报文信息。-
示例:
tcpdump -vv(显示更详细信息)。
-
-
-c <count>:捕获指定数量的报文后停止。-
示例:
tcpdump -c 10(捕获 10 个报文后停止)。
-
-
-w <file>:将捕获的报文保存到指定文件中。-
示例:
tcpdump -w capture.pcap(将捕获的报文保存到 capture.pcap 文件中)。
-
-
-r <file>:从指定文件中读取报文。-
示例:
tcpdump -r capture.pcap(从 capture.pcap 文件中读取报文)。
-
-
-s <size>:设置捕获的报文大小(默认为 65535 字节)。-
示例:
tcpdump -s 100(捕获每个报文的前 100 字节)。
-
-
-e:用于显示以太网帧的头部信息,包括源MAC地址、目的MAC地址以及以太网帧的类型等
-
实例:
tcpdump -e
-
3、常用过滤条件
-
host <IP>:捕获指定主机的报文。-
示例:
tcpdump host 192.168.1.100(捕获来自或发往 192.168.1.100 的报文)。
-
-
net <网络>:捕获指定网络的报文。-
示例:
tcpdump net 192.168.1.0/24(捕获来自或发往 192.168.1.0/24 网络的报文)。
-
-
port <端口>:捕获指定端口的报文。-
示例:
tcpdump port 80(捕获端口 80 的报文)。
-
-
tcp:捕获 TCP 协议的报文。-
示例:
tcpdump tcp(捕获所有 TCP 报文)。
-
-
udp:捕获 UDP 协议的报文。-
示例:
tcpdump udp(捕获所有 UDP 报文)。
-
-
icmp:捕获 ICMP 协议的报文。-
示例:
tcpdump icmp(捕获所有 ICMP 报文)。
-
-
arp:捕获 ARP 协议的报文。-
示例:
tcpdump arp(捕获所有 ARP 报文)。
-
-
src <IP>:捕获来自指定 IP 的报文。-
示例:
tcpdump src 192.168.1.100(捕获来自 192.168.1.100 的报文)。
-
-
dst <IP>:捕获发往指定 IP 的报文。-
示例:
tcpdump dst 192.168.1.100(捕获发往 192.168.1.100 的报文)。
-
-
src port <端口>:捕获来自指定端口的报文。-
示例:
tcpdump src port 80(捕获来自端口 80 的报文)。
-
-
dst port <端口>:捕获发往指定端口的报文。-
示例:
tcpdump dst port 80(捕获发往端口 80 的报文)。
-
-
not <条件>:排除指定条件的报文。-
示例:
tcpdump not host 192.168.1.100(排除来自或发往 192.168.1.100 的报文)。
-
三、arp 命令的使用
1、基本语法
arp [选项] [主机名或IP地址]
2、常用选项
-
-a:显示系统中的所有 ARP 表项。-
示例:
arp -a(显示所有 ARP 表项)。
-
-
-n:不解析主机名,直接显示 IP 地址。-
示例:
arp -n(显示所有 ARP 表项,不解析主机名)。
-
-
-d:删除指定的 ARP 表项。-
示例:
arp -d 192.168.1.100(删除 IP 地址为 192.168.1.100 的 ARP 表项)。
-
-
-s:添加或修改一个静态 ARP 表项。-
示例:
arp -s 192.168.1.100 00:11:22:33:44:55(添加或修改 IP 地址为 192.168.1.100 的静态 ARP 表项,MAC 地址为 00:11:22:33:44:55)。
-
-
-f:从文件中读取 ARP 表项。-
示例:
arp -f /path/to/arpfile(从文件中读取 ARP 表项)。
-
3、示例
执行 arp -a:
? (192.168.1.1) at 00:11:22:33:44:55 [ether] on eth0
-
?表示主机名未知。 -
192.168.1.1是 IP 地址。 -
00:11:22:33:44:55是对应的 MAC 地址。 -
[ether]表示这是一个以太网设备。 -
on eth0表示这些条目属于eth0接口。
相关文章:
《TCP/IP详解 卷1:协议》之第四、五章:ARP RARP
目录 一、ARP && RARP 报文结构 1、ARP请求报文示例 2、ARP响应报文示例 3、RARP请求报文示例 4、RARP响应报文示例 5、关于 padding 6、免费ARP 二、tcpdump 的使用 1、基本语法 2、常用选项 3、常用过滤条件 三、arp 命令的使用 1、基本语法 2、常用选…...
ttsfrd的使用
ttsfrd的作用: 文本标准化,将数字转成大写等预处理,例:数字处理123 → 一百二十三, 日期处理2023-12-25 → 2023年12月25日,特殊符号 40¥→40元。从而适合TTS朗读。 SDK模型下载 from modelsc…...
实战华为1:1方式1 to 1 VLAN映射
本文摘自笔者于2024年出版,并得到广泛读者认可,已多次重印的《华为HCIP-Datacom路由交换学习指南》。 华为设备的1 to 1 VLAN映射有1:1和N :1两种方式。1:1方式是将指定的一个用户私网VLAN标签映射为一个公网VLAN标签,是一种一对一的映射关系…...
NLP 梳理03 — 停用词删除和规范化
一、说明 前文我们介绍了标点符号删除、文本的大小写统一,本文介绍英文文章的另一些删除内容,停用词删除。还有规范化处理。 二、什么是停用词,为什么删除它们? 2.1 停用词的定义 停用词是语言中的常用词,通常语义…...
使用若依二次开发商城系统-1:搭建若依运行环境
前言 若依框架有很多版本,这里使用的是springboot3vue3这样的一个前后端分离的版本。 一.操作步骤 1 下载springboot3版本的后端代码 后端springboot3的代码路径,https://gitee.com/y_project/RuoYi-Vue 需要注意我们要的是springboot3分支。 先用g…...
HarmonyOS-ArkUI: 组件内转场(transition)
什么是组件内转场 组件内转场指的是组件在触发转场的时机所具备的动画效果。转场的时机指的是,组件元素发生变化的时候,具体为: 组件被添加组件被删除组件可见性发生变化-Visibility这些场景有时候单纯的让其消失,出现,平移有时候视觉效果会比较突兀。我们可以利用组件内…...
MVVM框架详解:原理、实现与框架对比
文章目录 1. 引言2. MVVM的基本概念3. MVVM的原理与实现3.1 数据绑定原理3.2 命令模式实现 4. MVVM的优势与局限性4.1 优势4.2 局限性 5. 常见MVVM框架对比5.1 MVVM Light5.2 Prism5.3 Caliburn.Micro5.4 MvvmCross5.5 ReactiveUI 6. 实际应用示例7. 最佳实践与注意事项7.1 MVV…...
opencv--图像处理
这里所说的图像处理并不是专业术语,而是值开发人员对图像的处理技术方法。 教程 菜鸟教程 书籍推介--<opencv4.5 计算机视觉开发实践 基于vc>.朱文伟 获取图像数据 三种方式: cv::VideoCapture: OpenCV 提供的视频捕获类࿰…...
达梦官方管理工具 SQLark——全面支持达梦、Oracle、MySQL、PostgreSQL 数据库!
SQLark 是一款面向信创应用开发者的数据库开发和管理工具,用于快速查询、创建和管理不同类型的数据库系统,已支持达梦、Oracle、MySQL数据库;在最新的 V3.4 版本中,SQLark 新增了对 PostgreSQL 的支持,兼容 PostgreSQL…...
解读大型语言模型:从Transformer架构到模型量化技术
一、生成式人工智能概述 生成式人工智能(Generative Artificial Intelligence)是一种先进的技术,能够生成多种类型的内容,包括文本、图像、音频以及合成数据等。其用户界面的便捷性极大地推动了其广泛应用,用户仅需在…...
理解计算机系统_网络编程(1)
前言 以<深入理解计算机系统>(以下称“本书”)内容为基础,对程序的整个过程进行梳理。本书内容对整个计算机系统做了系统性导引,每部分内容都是单独的一门课.学习深度根据自己需要来定 引入 网络是计算机科学中非常重要的部分,笔者过去看过相关的内…...
前端面试场景题
目录 1.项目第一次加载太慢优化 / vue 首屏加载过慢如何优化 2.说说了解的es6-es10的东西有哪些 ES6(ES2015)之后,JavaScript 新增了许多实用的数组和对象方法,下面为你详细介绍: 3.常见前端安全性问题 XSS&#…...
Unity使用Rider的常用快捷键
最近换了IDE,改用Rider进行Unity的代码编写 Rider提供了几个快捷键方案供选择,默认的是Visual Studio的快捷键方案。我索性直接选择了Rider的快捷键方案,一则这2年搞H5没用Visual Studio,快捷键已经忘的差不多了;二则…...
Spring Boot + MyBatis 动态字段更新方法
在Spring Boot和MyBatis中,实现动态更新不固定字段的步骤如下: 方法一:使用MyBatis动态SQL(适合字段允许为null的场景) 定义实体类 包含所有可能被更新的字段。 Mapper接口 定义更新方法,参数为实体对象&…...
Unity多线程渲染指令队列设计与集成技术详解
一、多线程渲染架构设计背景 1. 传统渲染管线瓶颈分析 阶段单线程耗时占比可并行化潜力场景遍历与排序35%★★★★☆材质属性更新20%★★★★★GPU指令提交25%★★☆☆☆资源上传20%★★★★☆ 2. 多线程渲染优势 CPU核心利用率:从单线程到全核心并行 指令缓冲优…...
栈和队列学习记录
一、栈 1.栈的概念 操作受限的线性表-----栈:栈只允许在表的一端进行插入和删除操作,这一端被称为栈顶(Top),另一端则是栈底(Bottom)。这种受限的操作方式使得栈遵循后进先出(LIFO…...
位运算练习:起床困难综合征(贪心,位运算)【算法竞赛进阶指南学习笔记】
目录 前情提要起床困难综合征(贪心,位运算) 前情提要 一些基础运算操作用法看看上一篇; 起床困难综合征(贪心,位运算) 题目原文 [P2114 NOI2014] 起床困难综合症 - 洛谷 思路分析 题目很长…...
ubuntu24设置拼音输入法,解决chrome不能输入中文
## 推荐方案:使用 Fcitx5 Fcitx5 是当前在 Wayland 环境下兼容性最好的输入法框架。 ### 1. 安装 Fcitx5 bash sudo apt update sudo apt install fcitx5 fcitx5-chinese-addons fcitx5-frontend-gtk3 fcitx5-frontend-gtk4 fcitx5-frontend-qt5 fcitx5-module-c…...
React SSR + Redux 导致的 Hydration 报错踩坑记录与修复方案
一条“Hydration failed”的错误,让我损失了半天时间 背景 我在用 Next.js App Router Redux 开发一个任务管理应用,一切顺利,直到打开了 SSR(服务端渲染),突然看到这个令人头皮发麻的报错: …...
轻量级景好鼠标录制器
景好鼠标录制器(详情请戳 官网)是一款免费无广的键鼠动作录制/循环回放工具,轻松自动化应对一些重复繁琐的操作任务,如来回切换窗口、文档同一相对位置的复制粘贴等场景,兼容Win XP - 11 。毕竟此款本身主打简约类型&a…...
leetcode--两数之和 三数之和
1.两数之和 给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 < index1 < index2 …...
FFMPEG-视频解码-支持rtsp|rtmp|音视频文件(低延迟)
本人亲测解码显示对比延迟达到7到20毫秒之间浮动兼容播放音视频文件、拉流RTSP、RTMP等网络流 基于 Qt 和 FFmpeg 的视频解码播放器类,继承自 QThread,实现了视频流的解码、播放控制、帧同步和错误恢复等功能 工作流程初始化阶段: 用户设置URL和显示尺寸 调用play()启动线程解…...
openEuler安装nvidia驱动【详细版】
注意:在 openEuler 24.03 LTS 系统中安装 NVIDIA 驱动(RTX 3090)需要禁用默认的 Nouveau 驱动并手动安装官方驱动。 一、准备工作 系统更新与依赖安装 更新系统并安装必要依赖包:sudo dnf update -y sudo dnf install gcc make k…...
力扣DAY63-67 | 热100 | 二分:搜索插入位置、搜索二维矩阵、排序数组查找元素、搜索旋转排序数组、搜索最小值
前言 简单、中等 √ 二分法思路很简单,但是判断边界太麻烦了!难道真的要去背模板吗 搜索插入位置 我的题解 循环条件左不超过右,目标大于中间值(向下取整)时,左中1,小于,右中-1&…...
基于Python爬虫的豆瓣电影信息爬取(可以根据选择电影编号得到需要的电影信息)
# 豆瓣电影信息爬虫(展示效果如下图所示:) 这是一个功能强大的豆瓣电影信息爬虫程序,可以获取豆瓣电影 Top 250 的详细信息。 ## 功能特点 - 自动爬取豆瓣电影 Top 250 的所有电影信息 - 支持分页获取,每页 25 部电影,共 10 页 - 获取每部电影的详细信息,包括: - 标题…...
程序员思维体操:TDD修炼手册
程序员思维体操:TDD修炼手册 ——从"先写代码"到"测试先行"的认知革命 一、重新认识TDD:不仅仅是写测试 什么是TDD(测试驱动开发) TDD其实很简单,不要看名字很高级复杂,传统开发是直…...
PHP异常处理__RuntimeException运行时错误
以下是对 PHP 中 RuntimeException 的详细解释: 一、RuntimeException 概述 RuntimeException 是 PHP 内置的异常类,它继承自 Exception 类。它通常用于表示在程序运行时发生的异常情况,这些异常情况通常是在程序正常执行过程中出现的错误&…...
从性能到安全:大型网站系统架构演化的 13 个核心维度
大型网站系统架构的演化是一个复杂的过程,涉及到多个维度的技术内容,从关键维度进行详细分析: 1.性能维度 缓存技术:包括浏览器缓存、CDN(内容分发网络)缓存、服务器端缓存(如 Memcached、Red…...
基于PaddleOCR对图片中的excel进行识别并转换成word优化(二)
0、原图 一、优化地方 计算行的时候,采用概率分布去统计差值概率比较大的即为所要的值。 def find_common_difference(array):"""判断数组中每个元素的差值是否相等,并返回该差值:param array: 二维数组,其中每个元素是一个…...
spring Ai---向量知识库(二)
RAG:检索增强,结合了检索和生成两种技术;用于提升生成模型的效果。 1.信息检索(R) :系统从一个大型文档库中检索出与查询最相关的文档片段。这一步的目标是找到那些可能包含答案或相关信息的文档。 2.生成增强…...
