FPGA 41 ,ICMP 协议详细解析之构建网络诊断系统( ICMP 协议与 IP 协议理论详细解析 )
目录
前言
一、ICMP协议介绍
1.1 ICMP协议介绍
1.2 ICMP报文格式
1.3 ICMP地位流程
1.4 为何需要ICMP差错报文
1.5 协议关系
二、FPGA 与 ICMP
2.1 平台选择与环境搭建
2.2 模块化设计
2.3 ICMP 功能设计
(1)ICMP 报文解析
(2)ICMP 报文生成
(3)异常处理与安全策略
2.4 状态机设计
三、实际应用场景
3.1 网络诊断系统
3.2 优势对比
3.3 后续发展方向
四、更多操作
前言
随着高速网络通信需求的增长,越来越多的嵌入式系统开始采用FPGA作为核心处理平台。在构建完整的TCP/IP协议栈过程中,ICMP(Internet Control Message Protocol)作为网络层的重要组成部分,承担着网络诊断、错误报告等关键功能。
本文将从ICMP协议的基本原理出发,逐步解析其在FPGA平台上的实现逻辑与关键技术要点,涵盖协议结构、硬件设计思路、模块划分与数据流控制等内容。通过本篇文章,我们可以全面理解ICMP在网络通信中的作用,并掌握如何在FPGA上高效地实现该协议。
一、ICMP协议介绍
ICMP协议基础与网络角色
1.1 ICMP协议介绍
ICMP(Internet Control Message Protocol,互联网控制消息协议) 是网络层的一个重要协议,主要用于在IP主机与路由器之间传递控制信息,包括错误报告、诊断工具的反馈以及状态查询等。尽管ICMP并非用于传输用户数据的主要协议,但是它在网络管理和故障排查中发挥着至关重要的作用。
通过ICMP协议,网络可以传递差错报告和控制消息,支持如 ping 命令测试连通性和 traceroute 追踪路由路径等网络诊断与维护功能。这些特性不仅增强了网络管理的能力,还提供了有效的故障排查手段,使得ICMP成为确保网络稳定运行不可或缺的一部分。
简单来说,ICMP协议就是用于网络中发送错误信息和控制消息的协议。
- ICMP协议,中文名称:互联网控制消息协议
- IP协议,中文名称:互联网协议
ICMP协议运行于IP层之上,不依赖传输层协议(如TCP或UDP)。它主要用于以下几类场景:
- 网络连通性测试:如
ping
命令使用ICMP Echo Request/Reply(类型8/0)来检测主机可达性;- 路径追踪:
traceroute
工具利用Time Exceeded(类型11)消息探测路由路径;- 错误通知:如Destination Unreachable(类型3)用于告知源主机数据包无法送达;
- 流量控制:Source Quench(类型4)曾用于请求减缓发送速率(现已被淘汰);
- 路由优化:Redirect(类型5)用于指导主机使用更优网关。
1.2 ICMP报文格式
ICMP报文被封装在IP数据报的数据部分,用于在网络设备之间传递控制消息和差错报告。了解其基本格式对于深入理解网络诊断工具如ping和traceroute的工作原理至关重要。
ICMP报文的基本格式如下:
Type (类型) - 1字节:指定ICMP报文的类型,指示该报文的目的或用途。例如,值为8表示这是一个Echo请求(通常由ping命令发出),而值为0则表示Echo应答(对ping请求的响应)。
Code (代码) - 1字节:进一步细分特定类型的子类型,提供更详细的信息。不同的Type有不同的Code值。例如,在某些错误报告中,Code可以具体说明错误的原因。
Checksum (校验和) - 2字节:用于确保ICMP报文的完整性。发送方计算整个ICMP报文的校验和,并将其放入此字段;接收方收到报文后会重新计算校验和并与发送方提供的值比较,以检测传输过程中可能出现的任何错误。
Data (数据) - 可变长度:携带与ICMP报文相关的额外信息或数据。具体内容依赖于报文的Type和Code。例如,在Echo请求和回应中,这里包含一个标识符、序列号以及可能的时间戳,以便源端能够匹配响应到相应的请求,并测量往返延迟时间。在其他情况下,比如目的不可达报文中,它可能包含未能正确处理的数据包的部分首部及其前8字节的数据内容,供问题定位使用。
例如,在执行Ping请求时,ICMP头部之后通常跟随一段数据区,该区域不仅包含了时间戳和序列号,还可能包括一些填充数据以达到特定的报文大小。这使得接收端可以准确地回应这些信息,验证连通性的同时也提供了关于网络状况的重要反馈,如响应时间和潜在的丢包情况等。通过这种方式,ICMP不仅支持了基本的网络通信功能,还极大地增强了网络管理和故障排查的能力。
简单来说,就是在Ping请求中,ICMP头部后通常跟随一个包含时间戳和序列号的数据区,以便接收端回应并验证。
1.3 ICMP地位流程
ICMP在网络层的地位与交互流程
ICMP(Internet Control Message Protocol)是网络层协议,依附于IP协议运行,其在IP协议族中的协议号为1。它作为IP协议的重要补充,主要用于传递控制信息和差错报告,在网络通信中起着诊断与反馈的关键作用。
网络层地位:
ICMP在网络层的地位
- 与IP协议紧密协作:ICMP报文通过IP协议进行传输,封装在IP数据报的数据部分;
- 不面向连接、无可靠性保障:ICMP本身不建立连接,也不保证报文的可靠传输,采用的是“尽力而为”的交付方式;
- 支持网络管理与故障排查:如ping、traceroute等工具均依赖ICMP实现连通性测试和路径追踪功能。
交互流程:
当IP数据报无法正常转发时,路由器或目标主机将生成ICMP报文返回给源地址。典型的ICMP交互流程如下:
- 主机A发送ICMP Echo Request:当用户执行ping命令时,源主机(主机A)会构造一个类型为8的ICMP Echo Request报文,并通过IP协议将其发送至目标主机(主机B);
- 主机B接收并解析请求:主机B接收到该ICMP报文后,识别出其为Echo Request类型,随后构造一个类型为0的ICMP Echo Reply(回应报文);
- 主机B返回响应报文:回应报文同样通过IP协议发回给主机A;
- 主机A接收并分析响应:主机A接收到Echo Reply后,根据发送与接收时间差计算往返时延(RTT, Round-Trip Time),并统计是否出现丢包或超时情况。
在整个交互过程中,ICMP报文的传输依赖于底层IP协议,但其目的不是传输用户数据,而是用于检测网络可达性、延迟状况及错误状态。由于其轻量且无需连接的特性,ICMP成为网络诊断和性能监测的核心工具之一。
另外,ICMP作为网络层的重要控制协议,虽然不具备传输层的可靠性机制,但其在网络连通性测试、路径追踪、错误反馈等方面发挥着不可替代的作用,是保障网络稳定运行的关键组件之一。
1.4 为何需要ICMP差错报文
尽管IP协议是互联网通信的基础,但它自身存在一些局限性,特别是在错误检测和管理方面。具体来说,IP协议有两个主要缺点:
缺乏差错报告机制:当数据包在传输过程中遇到问题(如无法到达目的地、TTL超时等),IP协议本身无法提供任何反馈给发送方。这意味着发送者无从得知数据是否成功送达。
缺少管理和查询支持:对于网络诊断和维护而言,缺乏一种有效的方法来获取关于网络状态的信息。例如,没有简单的方法来测试主机之间的连通性或了解路由路径的具体情况。
鉴于上述限制,ICMP(Internet Control Message Protocol)应运而生,作为IP协议的重要补充。ICMP不仅能够提供差错报告,帮助诊断网络故障,还支持多种查询功能,使得网络管理员和技术人员可以更好地监控和维护网络环境。
- 差错报告示例:包括但不限于“目的不可达”、“重定向请求”、“超时”等消息类型。
- 查询功能示例:最常用的ping命令就是基于ICMP Echo Request/Reply实现的,它允许用户检查两台设备间的连通性;而traceroute工具则利用了ICMP Time Exceeded消息来追踪数据包穿越网络的路径。
通过这种方式,ICMP极大地增强了IP协议的功能,确保了互联网通信更加稳定可靠。简单总结来说就是:
IP 协议本身存在两个主要缺陷:一是缺乏差错报文和纠错机制,无法在数据传输异常时向源主机反馈错误信息;二是缺少为主机和网络管理提供查询功能的基础支持。为弥补这些不足,ICMP 协议被设计出来,作为 IP 协议的重要补充,用于传递控制消息和差错报告,协助实现网络诊断、路径追踪和通信状态查询等功能,从而提升网络的可靠性与可管理性。
1.5 协议关系
IP协议与ICMP协议的关系:
IP 协议(Internet Protocol)是互联网通信的基础协议,负责在不同的网络间传输数据包。然而,IP 协议本身存在一定的局限性,例如它没有内置的机制来报告数据传输中的错误或提供管理查询功能。这正是 ICMP 协议(Internet Control Message Protocol)发挥作用的地方。
ICMP 协议是为了解决 IP 协议的这些限制而设计的。它是 IP 协议的一个补充,主要用于在网络设备如路由器和主机之间传递控制消息和差错报告。具体来说,ICMP 可以用来通知发送者其发送的数据包是否成功到达目的地,或者提供关于网络状态的信息。例如,当数据包因为TTL(生存时间)到期或者无法抵达目标地址时,ICMP 报文就会被生成并发送回源地址以通知相关问题。
虽然 ICMP 与 IP 协议紧密相关,并且通常被视为 IP 协议的一部分,但它的主要职责集中在差错报告、诊断和控制信息上。换句话说,ICMP 利用 IP 协议进行传输,但是它们的服务目的不同:IP 专注于数据包的路由和转发,而 ICMP 则用于帮助维护和调试网络,确保其正常运行。两者共同作用,保证了互联网的稳定性和可靠性。
因此,ICMP 协议作为IP 协议的补充,主要就是用于提供差错报告和控制消息,以帮助确保数据包正确传输并支持网络诊断与维护。
二、FPGA 与 ICMP
FPGA实现ICMP协议的核心要素
2.1 平台选择与环境搭建
FPGA平台选择与开发环境搭建
在FPGA上实现ICMP协议,通常需要以下几个组件的支持:
- 开发板:如Xilinx Zynq UltraScale+ MPSoC、Intel Cyclone V SoC等支持千兆以太网接口的开发平台;
- 开发工具链:如Vivado(Xilinx)、Quartus(Intel)、ModelSim(仿真)、SDK(嵌入式开发)等;
- 以太网PHY芯片:负责物理层的电信号转换;
- MAC控制器IP核:实现以太网帧的封装与解封装;
- IP协议栈软核或自定义逻辑:处理IP头解析与路由;
- ICMP协议模块:实现ICMP报文的生成与响应。
这里我们使用的是Xilinx Zynq开发板和Xilinx Vivado设计工具。
2.2 模块化设计
网络协议栈的模块化设计
为了便于管理和维护,通常将整个协议栈划分为多个模块:
- 以太网接口模块:负责接收和发送以太网帧;
- ARP模块:实现地址解析协议,获取目标设备的MAC地址;
- IP模块:处理IP头部解析与校验;
- ICMP模块:实现ICMP报文的识别与响应;
- 应用层接口模块:向上层提供API或寄存器接口,用于触发ICMP操作。
每个模块之间通过标准化的数据总线(如AXI4-Lite、AXI Stream)进行通信,确保系统的可扩展性和灵活性。
2.3 ICMP 功能设计
ICMP模块的功能设计
ICMP模块是本文重点,其实主要包括以下几个方面:
(1)ICMP 报文解析
- 判断IP数据包是否携带ICMP负载(根据IP头部协议字段判断);
- 解析ICMP头部字段(Type、Code、Checksum);
- 根据Type判断消息类型(Echo Request、Unreachable等);
(2)ICMP 报文生成
- 构建Echo Reply报文:复制Echo Request的Identifier和Sequence Number;
- 计算ICMP校验和;
- 封装为IP数据报,再封装为以太网帧发送出去;
(3)异常处理与安全策略
- 对非法或未知类型的ICMP消息进行丢弃;
- 支持配置是否响应特定类型的ICMP请求(如关闭Echo Reply以增强安全性);
- 实现限速机制,防止ICMP Flood攻击;
2.4 状态机设计
数据流与状态机设计
在FPGA中实现ICMP响应,通常采用有限状态机(FSM)的方式控制数据流:
- IDLE状态:等待新的以太网帧到来;
- RECEIVE_ETH_FRAME:提取以太网帧头部,判断是否为IP帧;
- PARSE_IP_HEADER:解析IP头部,判断协议类型;
- PARSE_ICMP_HEADER:解析ICMP头部;
- GENERATE_RESPONSE:根据ICMP类型生成响应;
- SEND_ETH_FRAME:封装并发送响应帧;
- ERROR_HANDLER:处理异常情况并记录日志。
状态机的设计要兼顾吞吐量和资源占用,尤其在多通道或多任务环境下,需考虑并行处理能力。
三、实际应用场景
拓展与实际应用场景
3.1 网络诊断系统
基于 ICMP 的网络诊断系统
在 FPGA 平台上成功实现 ICMP 协议后,可进一步拓展功能,构建一系列强大且实用的网络诊断系统。这些系统依托 ICMP 协议的差错报告与控制消息特性,在不同场景下发挥着至关重要的作用:
Ping 服务器:作为网络连通性检测的核心工具,它持续监听来自网络各节点的 ICMP Echo Request 报文,并自动回复对应的 ICMP Echo Reply 报文。通过这种一问一答的方式,用户能够快速判断目标主机是否可达,以及网络链路的基本连通状态。无论是日常网络运维,还是排查网络故障,Ping 服务器都是不可或缺的基础组件。
Traceroute 模拟器:该系统主动向目标地址发送带有不同 TTL 值的数据包,利用 ICMP 协议在数据包 TTL 到期时返回差错报文的机制,精准分析数据包从源节点到目标节点的传输路径。它不仅能清晰呈现数据包所经过的每一个路由器节点,还能帮助网络工程师发现网络中的潜在瓶颈、异常路由跳转等问题,是网络路径探测与优化的重要手段。
网络健康监测仪:为保障网络的稳定运行,该监测仪会定期向多个关键节点发送 ICMP 请求,并对返回的响应报文进行细致分析。通过统计丢包率和延迟数据,实时掌握网络的健康状况。一旦发现丢包率异常升高或延迟大幅增加,系统能够迅速发出告警,助力运维人员及时定位和解决网络故障,确保网络服务的高可用性。
安全过滤网关:面对日益复杂的网络安全威胁,安全过滤网关凭借对 ICMP 流量的深度识别能力,能够有效区分正常与恶意的 ICMP 流量。当检测到诸如 ICMP 洪水攻击、伪装的恶意 ICMP 报文等威胁时,网关会立即采取阻断措施,将恶意流量拦截在网络之外,为网络安全筑起一道坚实的防护屏障。
这些基于 ICMP 的网络诊断系统应用场景广泛,在数据中心,它们能够保障服务器间高效稳定的通信;在工业自动化领域,可实时监测生产线网络的运行状态,避免因网络故障导致生产停滞;在远程监控系统中,确保监控数据的可靠传输,为远程决策提供有力支持。
3.2 优势对比
FPGA 实现 ICMP 的优势对比
特性 | 软件实现(如 Linux 内核) | FPGA 实现 |
---|---|---|
响应速度 | 微秒级甚至更高 | 纳秒至亚纳秒级 |
并发处理 | 多线程受限 | 并行流水线处理 |
安全可控性 | 易受攻击 | 可定制安全策略 |
开发难度 | 较低 | 中高 |
灵活性 | 高 | 极高(可通过重配置调整功能) |
在响应速度方面,基于 Linux 内核等软件实现的 ICMP,由于需依赖操作系统调度、进程切换以及软件代码的顺序执行,处理单个 ICMP 请求的响应时间通常在微秒级甚至更高。而 FPGA 实现 ICMP 时,凭借其硬件并行计算架构,数据处理可在纳秒至亚纳秒级内完成,极大提升了网络响应效率,尤其适用于对实时性要求极高的场景,如高频交易网络、工业控制网络等。
并发处理能力上,软件实现受限于多线程机制,线程间的切换和资源竞争会带来额外开销,难以满足大规模并发 ICMP 请求的高效处理需求。相比之下,FPGA 的并行流水线处理特性,能够同时处理多个 ICMP 请求,实现真正意义上的并行计算,可轻松应对高并发网络流量,在数据中心、云计算等对并发性能要求严苛的环境中展现出显著优势。
安全可控性也是两者的重要差异点。软件实现的 ICMP,因运行在通用操作系统环境中,易受恶意软件攻击、漏洞利用等安全威胁。而 FPGA 基于硬件逻辑编程,用户可根据实际需求定制安全策略,从底层硬件层面阻断非法访问和恶意流量,有效提升网络安全性,特别适合对安全要求极高的军事、金融等关键领域。
在开发难度上,软件实现借助现有的操作系统和开发工具,门槛相对较低,但功能拓展往往受限于软件架构。FPGA 实现 ICMP 则需要掌握硬件描述语言(如 Verilog、VHDL)、数字电路设计等专业知识,开发难度较高。不过,其灵活性极高,用户可通过动态重配置功能,根据实际需求随时调整 ICMP 功能模块,甚至重新定义整个网络协议栈,满足多样化的应用场景需求。
3.3 后续发展方向
未来,FPGA 性能提升与 AI 加速技术融合,为 ICMP 协议应用带来新机遇,主要体现在以下几个方向:
集成轻量级 TCP/IP 协议栈:利用 FPGA 硬件并行优势,在其上集成轻量级 TCP/IP 协议栈,可解决软件实现效率低、实时性差的问题,减少网络延迟与资源占用。适用于工业自动化等对实时性要求高的场景。结合 ICMP 协议,可以进一步保障复杂网络通信的稳定性。
HLS 工具开发 ICMP 逻辑:HLS(高层次综合)工具能够将 C/C++ 高级语言转换为 FPGA 硬件描述语言,大幅缩短开发周期,助力快速设计优化 ICMP 逻辑模块。它还支持算法级优化,从而提升 ICMP 协议处理性能,使得开发者能够在短时间内完成高性能的设计。
结合 RISC-V 软核:RISC-V 开源且灵活可定制,将其与 FPGA 结合并集成 ICMP 协议,可以打造高性能、低成本的嵌入式网络终端,应用于智能家居等场景,实现网络监测与设备智能化。这种组合不仅降低了成本,还提高了系统的灵活性和安全性。
实现 ICMP over IPv6:随着 IPv6 成为主流,其对应的 ICMPv6 功能更加丰富。在 FPGA 上实现该协议,能够发挥硬件加速的优势,提升 IPv6 网络管理、故障检测与安全防护能力,支撑新兴技术的发展,确保网络基础设施适应未来的需要。
构建网络协议加速卡:面向边缘计算与智能网卡需求,在 FPGA 上构建集成 ICMP 的网络协议加速卡,可快速处理转发数据,提升节点性能,增强网卡功能,推动相关技术的应用。这对于提高数据中心和云计算环境中的网络效率至关重要。
以上发展方向围绕 FPGA 与 ICMP 协议的深度结合,从协议栈集成、开发工具应用、硬件架构融合、协议升级适配以及硬件加速卡构建等多个维度展开。
通过这些方向的探索与实践,不仅能充分发挥 FPGA 在网络处理上的性能优势,也能推动 ICMP 协议在新兴网络场景中实现功能拓展与性能升级,为网络通信的高效性、稳定性和智能化发展提供有力支撑,助力工业自动化、物联网、边缘计算等领域迈向新台阶。
四、更多操作
完整FPGA系列,请看
FPGA系列,文章目录https://blog.csdn.net/weixin_65793170/article/details/144185217?spm=1001.2014.3001.5502https://blog.csdn.net/weixin_65793170/article/details/144185217?spm=1001.2014.3001.5502
相关文章:
FPGA 41 ,ICMP 协议详细解析之构建网络诊断系统( ICMP 协议与 IP 协议理论详细解析 )
目录 前言 一、ICMP协议介绍 1.1 ICMP协议介绍 1.2 ICMP报文格式 1.3 ICMP地位流程 1.4 为何需要ICMP差错报文 1.5 协议关系 二、FPGA 与 ICMP 2.1 平台选择与环境搭建 2.2 模块化设计 2.3 ICMP 功能设计 (1)ICMP 报文解析 (2&am…...
每天批次导入 100 万对账数据到 MySQL 时出现死锁
一、死锁原因及优化策略 1.1 死锁原因分析 批量插入事务过大: Spring Batch 默认将整个 chunk(批量数据块)作为一个事务提交,100 万数据可能导致事务过长,增加锁竞争。 并发写入冲突: 多个线程或批处理作…...
滑动窗口-窗口中的最大/小值-单调队列
求窗口的最大值 #include <iostream> //滑动窗口最大值用单调队列q[],q存储候选最大值的下标 //队列头是最大值的下标 using namespace std; const int N100010; int nums[N],q[N]; int hh0,tt-1;// hh 是队头指针,tt 是队尾指针,初始…...
Docker Compose 部署 MeiliSearch 指南
Docker Compose 部署 MeiliSearch 指南 目录 环境准备创建 MeiliSearch 配置文件启动 MeiliSearch 服务验证服务状态访问 MeiliSearch安全及防火墙设置...
在 MyBatis 中实现控制台输出 SQL 参数
在 MyBatis 中实现控制台输出 SQL 参数,可通过以下方案实现: # 一、使用 MyBatis-Plus 的 SqlLogInterceptor(推荐) 适用场景:项目已集成 MyBatis-Plus(3.5.3版本) 配置步骤ÿ…...
【MySQL】数据库、数据表的基本操作
个人主页:Guiat 归属专栏:MySQL 文章目录 1. MySQL基础命令1.1 连接MySQL1.2 基本命令概览 2. 数据库操作2.1 创建数据库2.2 查看数据库2.3 选择数据库2.4 修改数据库2.5 删除数据库2.6 数据库备份与恢复 3. 表操作基础3.1 创建表3.2 查看表信息3.3 创建…...
Java中的内部类详解
目录 什么是内部类? 生活中的内部类例子 为什么需要内部类? 生活中的例子 内部类的存在意义 内部类的分类 1. 成员内部类 什么是成员内部类? 成员内部类的特点 如何使用成员内部类? 成员内部类访问外部类同名成员 2. …...
【LangChain全栈开发指南】从LLM集成到智能体系统构建
目录 🌟 前言🏗️ 技术背景与价值💢 当前技术痛点🛠️ 解决方案概述👥 目标读者说明 🔍 一、技术原理剖析📊 核心概念图解💡 核心作用讲解🧩 关键技术模块说明⚖️ 技术选…...
《内存单位:解锁数字世界的“度量衡”》
🚀个人主页:BabyZZの秘密日记 📖收入专栏:C语言 🌍文章目入 一、基础单位:字节(Byte)二、进阶单位:千字节(KB)、兆字节(MB)…...
Spring Boot + MyBatis-Plus 高并发读写分离实战
引言 在高并发场景下,单一数据库实例往往成为性能瓶颈。数据库读写分离通过将读操作和写操作分配到不同的数据库实例,有效缓解主库压力,提升系统吞吐量。MyBatis-Plus 作为一款强大的持久层框架,结合 Spring Boot 能够轻松实现读…...
STC32G12K128-旋转编码器-软件去抖
STC32G12K128-旋转编码器-软件去抖 简介代码 简介 EC11旋转编码器是一种可以连续旋转的器件A,B,C为旋转编码引脚,带按键的有D,E引脚。引脚功能: A:编码器A相;B:编码器B相;C:公共端-一般接到GN…...
第J7周:对于ResNeXt-50算法的思考
目录 思考 一、代码功能分析 1. 构建 shortcut 分支(残差连接的旁路) 2. 主路径的第一层卷积(11) 4. 主路径的第三层卷积(11) 5. 残差连接 激活函数 二、问题分析总结:残差结构中通道数不一致的…...
古方焕新潮!李良济盒马联名养生水,以创新赋能中式养生新潮流
今天下午,中华老字号李良济与新零售巨头盒马联名的“五汁饮&暑清元气水”新品发布会,在李良济隆重举行。 新品发布会上,盒马与多家媒体齐聚李良济,通过中医文化体验、新品品鉴、生产全链路探秘、媒体采访等环节,不…...
使用PyTorch训练马里奥强化学习代理的完整指南
以下是使用PyTorch训练马里奥强化学习代理的完整指南,涵盖依赖库配置、环境搭建、核心代码实现及输出结果分析,结合关键优化策略与实战经验。 一、依赖库配置 基础环境安装 # 使用Anaconda创建虚拟环境(推荐) conda create -n m…...
STM32F103RCT6 + MFC实现网口设备搜索、修改IP、固件升级等功能
资源下载链接:https://download.csdn.net/download/qq_35831134/90712875?spm=1001.2014.3001.5501 一.大概逻辑: // 网口搜索大概逻辑: // ************************************************************************** // 一.环境: // 上位机用MFC下位机用STM32F103R…...
ch09 课堂参考代码
ch09 拓扑排序与基环树 拓扑排序 在一些场景中,需要完成一系列事情,这些事情之间有顺序关系或者依赖关系,在做一件事情之前必须先做另一件事,例如课程学习的先后顺序,这类问题可以抽象为图论中的拓扑排序问题。 拓扑…...
Day 15 训练
Day 15 对鸢尾花数据集进行处理,特征可视化,贝叶斯优化随机森林,Shap解释1. 导入必要的库2. 设置中文字体3. 加载数据集4. 查看数据5. 数据准备6. 贝叶斯优化随机森林7. 评估结果8. 绘制箱形图9. 绘制特征相关性热力图10. SHAP模型解释总结 对…...
Path to Integer_ABC402分析与解答
考虑怎么降低复杂度,使用分治策略降低搜索的复杂度。 对于a_i,j,其一定在最后结果数的第(2n-i-j)位(如果将最低位看成第0位),故将a_i,j看成a_i,j * 10^(2n-i-j),这样每次加上a_i,j就可以了。 从(1,1)到(n…...
嵌入式学习笔记 - 关于结构体成员地址对齐问题
一 在没有#pragma pack()这个宏声明的情况下 C语言中结构体成员分配内存大小时需要满足2个条件,这也是内存对齐的原则: ①每个成员变量的起始地址必须为其数据类型所占空间大小的整数倍 ②结构体所占空间总大小为其最大数据类…...
JAVA实战开源项目:健身房管理系统 (Vue+SpringBoot) 附源码
本文项目编号 T 180 ,文末自助获取源码 \color{red}{T180,文末自助获取源码} T180,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...
升级element-ui步骤
1 执行 cnpm uninstall element-ui 删除element-ui依赖2 执行 cpm install element-ui -S 安装最新的element-ui,并加入到packjson中3 在element-ui中生成主题,并将主题文件加入到element-ui-theme中。删除所有旧版本到主题文件 *4 修改element-ui-theme…...
Dp通用套路(闫式)
闫式dp分析法: 从集合角度来分析DP问题。 核心思想: DP是一种求有限集中的最值或者个数问题 由于集合中元素的数量都是指数级别的,直接用定义去求,把每种方案都用dfs暴力枚举一遍,时间复杂度很高,此时用…...
如何删除豆包本地大模型
由于无法选择大模型的安装位置,因此会占用C盘大量空间,然后又找到不卸载的地方,经排查豆包大模型安装位为:C:\Users\[当前电脑用户]\AppData\Local\Doubao\User Data,只能进行手动卸载。...
在ISOLAR A/B 工具使用UDS 0x14服务清除单个DTC故障的配置
在ISOLAR A/B 工具使用UDS 0x14服务清除单个DTC故障的配置如下图所示 将DemClearDTCLimitation参数改成DEM_ALL_SUPPORTED_DTCS 此时0x14 服务就可以支持单个DTC的故障清除, 如果配置成 DEM_ONLY_CLEAR_ALL_DTCS 则只能够用0x14服务清楚所有DTC。...
Linux59 SSH配置前瞻 JumpServer双网卡ping通
为什么Ping这个IP地址Ping得通 本地址 [rootlocalhost network-scripts]# cat ifcfg-ens33 iTYPEEthernet BOOTPROTOnone DEFROUTEyes DEVICEens33 ONBOOTno IPADDR192.168.235.4 NETMASK255.255.255.0 GATEWAY192.168.235.2 DNS1114.114.114.114 [rootlocalhost network-scrip…...
TensorFlow中数据集的创建
目录 前言示例示例1示例2示例3示例4 前言 TensorFlow 的 tf.data.Dataset API 提供了一种灵活且高效的方式来加载和预处理数据。它可以轻松处理大规模数据集,并支持多种数据源格式。 所有数据集相关的内容都在tf.data中,from_tensor_slices:…...
OpenHarmony SystemUI开发——实现全局导航栏和状态栏关闭
在实际生产中,进场遇到需要关闭导航栏和状态栏的需求,现分享解决办法: 开发环境 OpenHarmony 5.0.0r 代码分析 思路: launcher本身可以关闭 导航栏(实际是 公共事件,发送消息给systemUI来实控制&#x…...
机器视觉的平板电脑屏幕组件覆膜应用
在现代智能制造业中,平板电脑屏幕组件覆膜工序是确保产品外观和功能完整性的重要环节。随着技术的进步,传统的覆膜方式已经无法满足高速度、高精度的生产需求。而MasterAlign视觉系统的出现,将传统覆膜工艺转变为智能化、自动化的生产流程。在…...
Windows 10 无法启动或黑屏的修复指南(适用于更新失败或磁盘故障)
Windows 10 无法启动或黑屏的修复指南(适用于更新失败或磁盘故障) 当 Windows 10 突然无法启动(黑屏、无限重启、更新失败后断电等情况),很可能是由于启动引导程序损坏或系统映像异常(如系统磁盘出现坏道&…...
AI星智协脑:智能驱动的高效协作管理平台全解读
前言 想象一下:早上刚开电脑,十几条未读消息如机关枪般扫射而来,各路任务像陨石雨一样砸向你,会议排得比热播剧还密集,文档版本堪比宫斗剧剧情反转,同事围着你转圈追KPI,活脱脱一场《职场大逃杀…...
WebSocket:实时通信的新时代
在现代Web应用中,实时通信变得越来越重要。传统的HTTP协议虽然能够满足基本的请求-响应模式,但在需要频繁更新数据的场景下,其效率和性能显得捉襟见肘。WebSocket协议应运而生,它提供了一种在单个TCP连接上进行全双工通信的机制&a…...
NetSuite Saved Search如何在Criteria中利用Expressions处理不同Transaction之间的关系?
最近有几个Saved Search都用到了Criteria中的Use Expressions的参数,具体的场景是我们想要对不同的Transaction Type做出不同条件的限定,这里有两个不同的举例。 1.除了ER类型头和行的内容要根据实际取,其余所有Transaction类型都取头信息&a…...
2025年 全新 AI 编程工具 Cursor 安装使用教程
一、Cursor 软件下载 首选,登录Cursor官网,进行软件下载,官网下载地址如下: Cursor AI IDE 下载 二、Cursor软件安装配置 此处以Windows10系统安装为例,下载完成之后,右键安装包,以管理员身份…...
跨平台编码规范文档
1. 引言 1.1 目的与范围 本编码规范旨在为软件开发团队提供统一的代码编写标准,以提高代码质量、可维护性和团队协作效率。适用于使用C#、Java、安卓和Web前端(HTML/CSS/JavaScript/TypeScript)的项目开发,不针对特定语言特性&a…...
Spring创建的线程池
在自动审核的方法上加上Async注解(标明要异步调用) Async//异步方法调用public void audit(WmNews wmNews) {//这个方法处理时间很长,单体异步思想,线程池}在自媒体引导类中使用EnableAsync注解开启异步调用 SpringBootApplicati…...
【深度学习新浪潮】苹果在显示算法技术上的研发进展调研
苹果的显示算法技术研发呈现三大趋势:AI深度整合(如HDR增强、动态校准)、多模态环境感知(光、温湿度、生物特征)、软硬件协同优化(芯片、传感器、算法深度耦合)。 一、动态刷新率与功耗管理 1. ProMotion技术的算法升级 技术修正: 像素级功耗管理:iPhone 13系列的Pr…...
图像画质算法记录(前言)
一、背景介绍 本篇主要是对图像画质增强相关,进行简单整理和记录。 二、整体流程 整体效果主要受到两部分影响: 1、前端isp处理。 2、后端画质增强。 三、isp常规流程 可以参考:刘斯宁:Understanding ISP Pipeline 四、后端画质…...
uniapp-商城-47-后台 分类数据的生成(通过数据)
在第46章节中,我们为后台数据创建了分类的数据表结构schema,使得可以通过后台添加数据并保存,同时使用云函数进行数据库数据的读取。文章详细介绍了如何通过前端代码实现分类管理功能,包括获取数据、添加、更新和删除分类。主要代…...
阿里云服务器数据库故障排查指南?
阿里云服务器数据库故障排查指南? 以下是针对阿里云服务器(如ECS自建数据库或阿里云RDS等托管数据库)的故障排查指南,涵盖常见问题的定位与解决方案: 一、数据库连接失败 检查网络连通性 ECS自建数据库 确认安全组规则放行数据库…...
服务器不备案有影响吗
在当今数字化的时代,服务器成为了众多企业和个人开展业务、展示自我的重要工具。然而,有一个问题常常被忽视,那就是服务器不备案到底有没有影响? 答案是肯定的!服务器不备案,影响可不小。据相关数据显示&a…...
LVGL9保姆级教程(源码获取)
文章目录 🌟 LVGL 9 源码获取全流程指南📥 获取 LVGL 9 源码✅ 官方 GitHub 仓库下载📌 下载步骤: 🛠️ 获取 LVGL Code::Blocks 工程源码下载步骤有两种方式:🚀 方法一:通过 README…...
【react组件】矩形框选小组件,鼠标左键选中 div,键盘 ESC 清空
在线预览 GitHub demo import React, { useState } from react; import Chooser from rc-chooser;const containerStyle: React.CSSProperties {display: flex,alignItems: center,justifyContent: center,flexWrap: wrap, };const boxStyle: React.CSSProperties {width:…...
数据结构5.0
大家好,今天是队列的知识哦~ 目录 一、概念 1.0单链表 2.0双链表 3.0数组 二、队列的方法 1.0 offer方法 2.0 poll方法 3.0 peek方法 4.0 isEmpty方法 三、队列的题目 1.0 用队列实现栈 2.0 用栈实现队列 3.0 设计循环队列 一、概念 数组 、单链表和双…...
Python字典:数据操作的核心容器
在Python编程生态中,字典(dict)是最常用且功能强大的内置数据结构之一。它以键值对(Key-Value Pair)的形式存储数据,为快速查找、灵活映射关系提供了天然支持。无论是数据清洗、算法实现还是Web开发&#x…...
Midjourney-V7:支持参考图片头像或背景生成新保真图
Midjourney-V7重磅升级Omni Reference:全能图像参考神器!再也不用担心生成图片货不对版了! 就在上周,Midjourney发版它最新的V7版本:Omini Reference,提供了全方位图像参考功能,它可以参考你提…...
【MySQL数据库】--SQLyog创建数据库+python连接
目录 1.连接本地数据库 2.创建数据库和表 3.使用 python读取数据 1.连接本地数据库 进入SQLyog 2.创建数据库和表 创建数据库gyp_test: CREATE DATABASE gyp_test CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; 创建表student_grade: CREATE TABLE …...
深入解析:思维链模型在大语言模型中的应用与实践
在人工智能领域,大语言模型的发展正以前所未有的速度改变着我们的生活和工作方式。从早期的文本生成到如今的复杂推理,模型的能力不断进化。而其中,思维链(Chain-of-Thought, CoT)技术的出现,更是为大模型的…...
服务器多客户端连接核心要点(1)
刷题 服务器多客户端连接核心要点 多进程服务器 实现原理 fork子进程:每次accept新客户端后,调用fork创建子进程。独立处理:子进程负责与客户端通信(如read/write),父进程继续监听新连接。 特点 隔离性…...
SIGIR 2025端到端生成式推荐ETEGRec
文章目录 1. 背景2. 方法2.1 框架图2.2 问题定义2.3 Item Tokenizer2.4 Generative Recommender2.5 ⭐️Sequence-Item Alignment2.6 ⭐️Preference-Semantic Alignment2.7 交替优化 3. 总结 现阶段 GRM 大多是两阶段的模型,第一阶段进行内容理解-行为语义对齐&…...
rust 中的 EBNF 介绍
在 rust 参考手册中,有大量类似: 句法 MacroInvocation :SimplePath ! DelimTokenTreeDelimTokenTree :( TokenTree* )| [ TokenTree* ]| { TokenTree* }TokenTree :Token排除 定界符(delimiters) | DelimTokenTreeMacroInvocationSemi :SimplePath ! (…...