车载以太网测试-11【网络层-ICMP协议】
目录
- 1 摘要
- 2 ICMP协议帧结构
- 2.1 IP头部
- 2.2 ICMP头部
- 2.3 ICMP数据部分
- 2.4 示例:ICMP回显请求(Ping请求)
- 3 ICMP协议在车载以太网的应用
- 3.1 为什么需要ICMP?
- 3.1.1 网络连通性测试
- 3.1.2 错误报告
- 3.1.3 网络性能监测
- 3.1.4 路径MTU发现
- 3.1.5 网络拥塞控制
- 3.2 车载以太网ICMP应用示例
- 3.2.1 网络连通性测试示例
- 3.2.2 错误报告示例
- 3.2.3 网络性能监测
- 3.2.4 路径MTU发现
- 4 总结
1 摘要
ICMP(Internet Control Message Protocol,互联网控制报文协议)属于 OSI模型的第三层(网络层)。
ICMP是TCP/IP协议族的一部分,主要用于在IP网络中传递控制信息和错误报告。它通常用于诊断网络问题(如ping命令)或报告错误(如目标不可达、超时等)。本文主要对ICMP的报文结构和车载以太网的应用进行详细介绍。
2 ICMP协议帧结构
ICMP(Internet Control Message Protocol,互联网控制报文协议)是TCP/IP协议族中的一个重要协议,主要用于在IP网络中传递控制消息和错误报告。ICMP报文封装在IP数据报中,其帧结构如下:
2.1 IP头部
ICMP报文是封装在IP数据报中的,因此首先有一个IP头部。IP头部的结构如下:
- 版本(Version):4位,表示IP协议的版本,IPv4为4。
- 头部长度(IHL):4位,表示IP头部的长度,以4字节为单位。
- 服务类型(Type of Service, ToS):8位,表示服务质量。
- 总长度(Total Length):16位,表示整个IP数据报的长度,包括IP头部和数据部分。
- 标识(Identification):16位,用于标识IP数据报。
- 标志(Flags):3位,用于控制分片。
- 片偏移(Fragment Offset):13位,表示分片在原始数据报中的位置。
- 生存时间(Time to Live, TTL):8位,表示数据报在网络中的生存时间。
- 协议(Protocol):8位,表示上层协议,ICMP的值为1。
- 头部校验和(Header Checksum):16位,用于校验IP头部的完整性。
- 源IP地址(Source IP Address):32位,表示发送方的IP地址。
- 目的IP地址(Destination IP Address):32位,表示接收方的IP地址。
2.2 ICMP头部
ICMP头部紧跟在IP头部之后,结构如下:
| 字段名 | 大小(字节) | 描述 |
|---|---|---|
| 类型(Type) | 1 | 表示ICMP报文的类型,如回显请求(8)、回显应答(0)、目的不可达(3)等。 |
| 代码(Code) | 1 | 提供与类型字段相关的更多信息,如目的不可达的具体原因。 |
| 校验和(Checksum) | 2 | 用于检测ICMP报文的完整性。 |
| 可变部分(Variable) | 可变 | 根据ICMP报文的类型和代码,包含不同的信息,如回显请求的标识符和序列号等。 |
- 类型(Type):8位,表示ICMP报文的类型。常见的类型有:
- 0: Echo Reply(回显应答)
- 3: Destination Unreachable(目的不可达)
- 8: Echo Request(回显请求)
- 11: Time Exceeded(超时)
- 12: Parameter Problem(参数问题)
- 13: Timestamp Request(时间戳请求)
- 14: Timestamp Reply(时间戳应答)
- 代码(Code):8位,表示ICMP报文的子类型。例如,类型为3(目的不可达)时,代码可以表示具体的不可达原因。
- 校验和(Checksum):16位,用于校验ICMP报文的完整性。
- 其他字段(Other Fields):根据ICMP报文类型的不同,其他字段的内容和长度也会有所不同。
常见ICMP报文类型及其代码:
以下是一些常见的ICMP报文类型及其代码:
| 类型 | 代码 | 描述 |
|---|---|---|
| 0 | 0 | 回显应答(Echo Reply) |
| 3 | 0 | 目的网络不可达(Destination Network Unreachable) |
| 3 | 1 | 目的主机不可达(Destination Host Unreachable) |
| 3 | 2 | 目的协议不可达(Destination Protocol Unreachable) |
| 3 | 3 | 目的端口不可达(Destination Port Unreachable) |
| 3 | 4 | 需要分片但DF标志位已设置(Fragmentation Needed and DF Flag Set) |
| 3 | 5 | 源路由失败(Source Route Failed) |
| 3 | 6 | 目的网络未知(Destination Network Unknown) |
| 3 | 7 | 目的主机未知(Destination Host Unknown) |
| 8 | 0 | 回显请求(Echo Request) |
| 11 | 0 | TTL超时(Time Exceeded in Transit) |
| 11 | 1 | 分片重组超时(Fragment Reassembly Time Exceeded) |
| 12 | 0 | 参数问题(Parameter Problem) |
2.3 ICMP数据部分
ICMP数据部分的内容取决于ICMP报文的类型和代码。例如:
- Echo Request/Reply:包含标识符(Identifier)和序列号(Sequence Number),用于匹配请求和应答。
- Destination Unreachable:包含导致不可达的原始IP数据报的头部和部分数据。
- Time Exceeded:包含导致超时的原始IP数据报的头部和部分数据。
2.4 示例:ICMP回显请求(Ping请求)
以下是ICMP回显请求(Ping请求)的帧结构示例:
| 字段名 | 值 | 描述 |
|---|---|---|
| 类型(Type) | 8 | 回显请求(Echo Request) |
| 代码(Code) | 0 | 无 |
| 校验和(Checksum) | 0xABCD | 示例校验和(实际值需计算) |
| 标识符(Identifier) | 0x1234 | 用于匹配请求和应答的标识符 |
| 序列号(Sequence Number) | 0x0001 | 用于标识请求的序列号 |
| 数据(Data) | 可变 | 可选的数据字段,通常包含时间戳或其他信息 |
通过这种结构,ICMP协议能够在IP网络中有效地传递控制信息和错误报告,帮助网络管理员诊断和解决网络问题。
3 ICMP协议在车载以太网的应用
3.1 为什么需要ICMP?
ICMP(Internet Control Message Protocol,互联网控制报文协议)是TCP/IP协议族中的一个重要组成部分,主要用于在IP网络中传递控制信息和错误报告。它的存在对于网络的正常运行和故障排查至关重要。
以下是ICMP协议在车载以太网中的具体应用场景和功能:
3.1.1 网络连通性测试
- Ping命令:通过发送ICMP Echo Request消息并接收Echo Reply消息,可以快速检测车载以太网中各个节点(如ECU、网关、传感器等)之间的连通性。
- 应用场景:在车辆启动或网络初始化时,验证网络设备的连接状态。
3.1.2 错误报告
- 错误通知:当车载以太网中的设备(如ECU)无法到达目标地址或数据包传输失败时,ICMP会发送错误消息(如Destination Unreachable、Time Exceeded等)给源设备。
- 应用场景:帮助诊断网络故障,例如路由问题、设备不可达或数据包丢失。
3.1.3 网络性能监测
- 延迟和丢包率测量:通过ICMP消息的往返时间(RTT)和丢包情况,可以评估车载以太网的实时性能。
- 应用场景:在车辆运行过程中,监测网络延迟和稳定性,确保关键数据(如ADAS、自动驾驶相关数据)的及时传输。
3.1.4 路径MTU发现
- MTU探测:ICMP协议支持路径MTU发现功能,通过发送ICMP消息确定数据包在网络传输中的最大传输单元(MTU)。
- 应用场景:在车载以太网中优化数据传输效率,避免数据包分片。
3.1.5 网络拥塞控制
- 拥塞通知:ICMP Source Quench消息(虽然已被弃用,但在某些场景下仍可使用)可以通知发送方降低数据发送速率。
- 应用场景:在车载以太网中,当网络负载过高时,可以通过ICMP消息调整数据传输速率,避免网络拥塞。
3.2 车载以太网ICMP应用示例
3.2.1 网络连通性测试示例
要通过ICMP协议发送Ping命令来检测网络连通性,可以通过发送ICMP Echo Request消息(即Ping命令)并接收Echo Reply消息,可以快速检测车载以太网中各个节点之间的连通性。这种方法简单且有效,适用于网络诊断和故障排查。以下是一个示例,说明如何在车载以太网中使用Ping命令来检测节点之间的连通性:
1.示例场景:
假设车载以太网中有以下节点:
- ECU1:IP地址为192.168.1.10
- ECU2:IP地址为192.168.1.20
- 网关:IP地址为192.168.1.1
- 传感器:IP地址为192.168.1.30
2. 操作步骤:
-
连接到车载以太网:
- 使用笔记本电脑或其他设备通过以太网接口连接到车载以太网,确保设备与车载网络在同一子网内。
-
使用Ping命令检测连通性:
- 打开命令行终端(如Windows的CMD或Linux的Terminal)。
- 使用Ping命令向各个节点发送ICMP Echo Request消息,并等待Echo Reply消息。
示例命令:
# 检测与ECU1的连通性 ping 192.168.1.10# 检测与ECU2的连通性 ping 192.168.1.20# 检测与网关的连通性 ping 192.168.1.1# 检测与传感器的连通性 ping 192.168.1.30 -
分析结果:
- 如果收到Echo Reply消息,表明与目标节点的连通性正常。例如:
Reply from 192.168.1.10: bytes=32 time=1ms TTL=64 - 如果未收到Echo Reply消息,表明与目标节点的连通性存在问题。例如:
Request timed out.
- 如果收到Echo Reply消息,表明与目标节点的连通性正常。例如:
-
进一步排查:
- 如果某个节点无法Ping通,可以检查以下内容:
- 目标节点的IP地址配置是否正确。
- 网络线缆是否连接正常。
- 目标节点是否处于正常工作状态。
- 防火墙或网络配置是否阻止了ICMP流量。
- 如果某个节点无法Ping通,可以检查以下内容:
5. 注意事项:
- 网络延迟:在车载以太网中,网络延迟通常较低。如果Ping的延迟较高,可能表明网络中存在拥塞或干扰。
- 网络配置:确保所有节点的IP地址配置正确,且处于同一子网内。
- 安全设置:某些设备可能配置了防火墙或安全策略,阻止了ICMP流量,导致Ping命令无法正常工作。
通过这种方式,可以快速检测车载以太网中各个节点之间的连通性,帮助诊断网络问题。
3.2.2 错误报告示例
在车载以太网中,如果设备(如ECU)无法到达目标地址或数据包传输失败,ICMP(Internet Control Message Protocol)会发送错误消息给源设备。以下是一个示例场景:
1. 场景描述:
假设在车载以太网中,ECU_A 尝试发送一个数据包到 ECU_B,但由于某些原因(如网络故障、目标设备不可达等),数据包无法成功传输。
2. 可能发生的ICMP错误消息:
-
Destination Unreachable(目标不可达):
- 原因:ECU_B 无法到达,可能是由于网络故障、目标设备关闭或路由配置错误。
- ICMP消息:ECU_A 会收到一个 ICMP Destination Unreachable 消息,指示目标设备无法到达。
-
Time Exceeded(超时):
- 原因:数据包在传输过程中超过了其生存时间(TTL),可能是由于网络中存在环路或路由配置错误。
- ICMP消息:ECU_A 会收到一个 ICMP Time Exceeded 消息,指示数据包在传输过程中超时。
-
Fragmentation Needed(需要分片):
- 原因:数据包的大小超过了网络的MTU(最大传输单元),并且数据包被标记为不可分片。
- ICMP消息:ECU_A 会收到一个 ICMP Fragmentation Needed 消息,指示数据包需要分片但无法分片。
3. 示例流程:
-
ECU_A 发送数据包:
- ECU_A 尝试发送一个数据包到 ECU_B,假设目标IP地址为 192.168.1.100。
-
网络故障:
- 由于网络故障,数据包无法到达 ECU_B。
-
ICMP错误消息生成:
- 中间路由器或交换机检测到数据包无法到达目标地址,生成一个 ICMP Destination Unreachable 消息。
-
ICMP消息发送:
- ICMP Destination Unreachable 消息被发送回 ECU_A,指示目标设备无法到达。
-
ECU_A 处理ICMP消息:
- ECU_A 接收到 ICMP 错误消息后,可以根据消息类型采取相应的措施,如重试发送、记录错误日志或通知上层应用。
4. 示例ICMP消息内容:
ICMP Destination Unreachable Message:Type: 3 (Destination Unreachable)Code: 1 (Host Unreachable)Checksum: [校验和]Unused: 0Original IP Header: [原始IP头信息]Original Data: [原始数据包的前8字节]
在车载以太网中,ICMP协议在网络通信中扮演着重要的角色,特别是在检测和处理网络故障时。通过发送ICMP错误消息,源设备可以及时了解数据传输中的问题,并采取相应的措施来恢复或优化网络通信。
3.2.3 网络性能监测
在车载以太网中,实时性能的评估至关重要,尤其是对于自动驾驶、高级驾驶辅助系统(ADAS)等应用场景。通过测量ICMP(Internet Control Message Protocol)消息的往返时间(RTT)和丢包率,可以有效地评估网络的延迟和可靠性。以下是一个示例说明如何进行这些测量以及如何解读结果。
1. 测量工具
常用的工具包括ping命令、mtr(My Traceroute)或其他网络诊断工具。这些工具可以发送ICMP Echo请求并接收Echo回复,从而计算RTT和丢包率。
2. 测量步骤
假设我们有两个车载以太网节点:Node A和Node B,我们想要测量从Node A到Node B的延迟和丢包率。
(1) 使用ping命令
在Node A上执行以下命令:
ping -c 100 Node_B_IP
其中:
-c 100表示发送100个ICMP Echo请求。Node_B_IP是Node B的IP地址。
(2) 分析输出
命令执行完毕后,会输出类似以下的结果:
PING Node_B_IP (Node_B_IP): 56 data bytes
64 bytes from Node_B_IP: icmp_seq=0 ttl=64 time=1.234 ms
64 bytes from Node_B_IP: icmp_seq=1 ttl=64 time=1.345 ms
...
--- Node_B_IP ping statistics ---
100 packets transmitted, 95 received, 5% packet loss, time 99010ms
rtt min/avg/max/mdev = 1.234/1.345/1.456/0.123 ms
(3) 结果解读
-
丢包率:在上述示例中,丢包率为5%(100个包中丢失了5个)。对于车载以太网,通常要求丢包率非常低(接近0%),以确保数据的可靠传输。
-
RTT(往返时间):RTT的平均值为1.345 ms,最小值为1.234 ms,最大值为1.456 ms。RTT的稳定性(通过mdev表示)为0.123 ms。较低的RTT和较小的抖动(mdev)表明网络具有良好的实时性能。
3. 结论
通过测量ICMP消息的RTT和丢包率,可以有效地评估车载以太网的实时性能。在本示例中,虽然RTT表现良好,但5%的丢包率可能表明网络存在一些问题,需要进一步排查和优化。
3.2.4 路径MTU发现
MTU(Maximum Transmission Unit,最大传输单元)探测是网络通信中的一个重要机制,用于确定数据包在网络传输中的最大大小,以避免分片和提高传输效率。ICMP(Internet Control Message Protocol)协议支持路径MTU发现(Path MTU Discovery,PMTUD)功能,通过发送ICMP消息来确定路径中的最小MTU。
- 路径MTU发现的工作原理:
- 发送探测包:源主机发送一个带有“不分片”(DF, Don’t Fragment)标志的IP数据包,其大小等于当前路径的MTU。
- 检测MTU:如果中间设备的MTU小于数据包的大小,设备会丢弃数据包,并返回一个ICMP“需要分片”消息(Type 3, Code 4),其中包含该设备的MTU值。
- 调整MTU:源主机根据收到的ICMP消息调整数据包的大小,重新发送。
- 重复过程:直到数据包能够成功传输到目标主机,源主机最终确定路径的最小MTU。
- 示例:
假设源主机向目标主机发送数据,路径中经过多个网络设备,每个设备的MTU可能不同。
- 初始MTU:源主机假设路径的MTU为1500字节(以太网的默认MTU),发送一个1500字节的数据包,并设置DF标志。
- 中间设备:路径中的某个设备的MTU为1400字节,发现数据包过大,丢弃数据包,并返回一个ICMP“需要分片”消息,指示MTU为1400字节。
- 调整MTU:源主机将MTU调整为1400字节,重新发送数据包。
- 成功传输:数据包成功到达目标主机,路径MTU确定为1400字节。
- 代码示例(Python模拟ICMP PMTUD):
以下是一个简单的Python示例,模拟ICMP路径MTU发现的过程:
import socket
import structdef send_ping(dest_ip, mtu):# 创建原始套接字sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP)sock.setsockopt(socket.IPPROTO_IP, socket.IP_MTU_DISCOVER, socket.IP_PMTUDISC_DO)# 构造ICMP Echo请求包icmp_type = 8 # ICMP Echo Requesticmp_code = 0icmp_checksum = 0icmp_id = 1234icmp_seq = 1icmp_data = b"a" * (mtu - 28) # 数据部分,减去IP头和ICMP头# 计算校验和def checksum(data):if len(data) % 2:data += b'\x00's = sum(struct.unpack('!%dH' % (len(data) // 2), data))s = (s >> 16) + (s & 0xffff)s += s >> 16return ~s & 0xfffficmp_checksum = checksum(struct.pack('!BBHHH', icmp_type, icmp_code, icmp_checksum, icmp_id, icmp_seq) + icmp_data)# 构造完整的ICMP包icmp_packet = struct.pack('!BBHHH', icmp_type, icmp_code, icmp_checksum, icmp_id, icmp_seq) + icmp_datatry:sock.sendto(icmp_packet, (dest_ip, 1))print(f"Sent ICMP Echo Request with MTU={mtu}")except socket.error as e:print(f"Failed to send with MTU={mtu}: {e}")finally:sock.close()def path_mtu_discovery(dest_ip):mtu = 1500 # 初始MTUwhile mtu >= 68: # 最小MTU为68字节send_ping(dest_ip, mtu)mtu -= 100 # 逐步减少MTUif __name__ == "__main__":dest_ip = "192.168.1.1" # 目标IP地址path_mtu_discovery(dest_ip)
- 说明:
- 该示例模拟了ICMP路径MTU发现的过程,通过逐步减少MTU并发送ICMP Echo请求,直到成功传输。
- 实际应用中,操作系统和网络设备会自动处理路径MTU发现,无需手动实现。
4 总结
以上是对车载以太网ICMP协议的帧结构、在车载以太网常用应用以及常用应用示例进行了介绍。希望能对大家理解车载以太网ICMP协议有所帮助!
相关文章:
车载以太网测试-11【网络层-ICMP协议】
目录 1 摘要2 ICMP协议帧结构2.1 IP头部2.2 ICMP头部2.3 ICMP数据部分2.4 示例:ICMP回显请求(Ping请求) 3 ICMP协议在车载以太网的应用3.1 为什么需要ICMP?3.1.1 网络连通性测试3.1.2 错误报告3.1.3 网络性能监测3.1.4 路径MTU发现…...
leetcode:728. 自除数(python3解法)
难度:简单 自除数 是指可以被它包含的每一位数整除的数。 例如,128 是一个 自除数 ,因为 128 % 1 0,128 % 2 0,128 % 8 0。 自除数 不允许包含 0 。 给定两个整数 left 和 right ,返回一个列表ÿ…...
【QT】-一文读懂抽象类
抽象类(Abstract Class)是面向对象编程中的一个概念,指的是无法被实例化的类,它通常作为其他类的基类。抽象类的作用是定义一个接口(或约定),让派生类(继承自抽象类的类)来实现具体的功能。 抽象类的特点: 包含纯虚函数(Pure Virtual Function): 抽象类通常包含一…...
vue3-computed计算属性和reactive响应式系统结合使用
1.前言 vue3中使用reactive函数创建一个响应式对象,当对象数据发生变化的时候,依赖这些数据的计算属性和模板会自动的更新。 2.实例 2.1 简写 <template><div><p>用户名: {{ userName }}</p><p>用户名的大写形式: {{ u…...
Dubbo请求调用本地服务
文章目录 前言配置 Dubbo 本地调用方法一:application.yml 中配置方法二:DubboReference 注解中指定 注意个人简介 前言 在微服务架构中,Apache Dubbo 作为一款高性能、轻量级的 RPC 框架,被广泛应用于分布式系统。通常ÿ…...
Pycharm 社区版安装教程
找到安装包双击安装文件---点击下一步 一般路径是:C:\Rambo\Software\Development 选择完成后就是如下地址: C:\Rambo\Software\Development\PyCharm Community Edition 2024.3.3 点击上述3个位置就可以了----下一步 等待安装就可以了---完成后点击完成…...
Linux红帽:RHCSA认证知识讲解(六)创建、管理和删除本地用戶和组
Linux红帽:RHCSA认证知识讲解(六)创建、管理和删除本地用戶和组 前言一、用户和组概念用户类型对比表格主要组和补充组对比表格: 二、本地用户账户增删改查三、本地组账户 前言 上篇博客我们详细了解了从红帽和 DNF 软件仓库下载…...
在虚拟环境里面配置Linux系统
Linux系统有很多版本,常用的有Ubantu乌班图,和CentOS 不同的版本在使用的时候,有部分执行方式的不同 安装的流程都一样 首先,想要安装Ubantu,要去它的官网,找下载连接,然后下载iso后缀的安装…...
React开发指南:核心、实践与案例
文章目录 一、React核心架构与设计哲学1.1 虚拟DOM与Diff算法1.2 JSX编译原理1.3 组件化设计模式1.4 Fiber架构解析1.5 组件生命周期(类组件) 二、React核心特性详解2.1 数据流管理2.2 Hooks革命2.3 Context API进阶2.4 自定义Hooks设计模式 三、React 1…...
分享vue好用的pdf 工具实测
vue3-pdf-app: 带大纲,带分页,带缩放,带全屏,带打印,带下载,带旋转 下载依赖: yarn add vue3-pdf-appornpm install vue3-pdf-app 配置类: 创建文件 pdfConfig.ts /…...
Redis分布式锁深度剖析:从原理到Redisson实战,破解脑裂与高并发锁难题
一、📌 分布式锁的核心应用场景 场景类型典型案例风险说明🚀 高并发场景电商秒杀、票务抢购库存超卖风险⏰ 定时任务场景集群日志清理、数据统计任务重复执行🔄 幂等场景支付接口重试、订单创建资金重复扣款 二、🔧 Redis分布式锁…...
Markdown Poster – 免费Markdown转图片工具|优雅图文海报制作与社交媒体分享
Markdown Poster是什么 Markdown Poster 是一款高效的 Markdown 转图片工具,利用灵活编辑和实时预览功能帮助用户轻松制作优雅的图文海报。该工具内置丰富的海报模板和多种主题选项,支持导出为图片和 HTML 代码,适用于社交媒体分享、网站集成…...
掌握市场先机:9款销售渠道管理工具深度测评
本文主要介绍了以下9款销售渠道管理工具:1.纷享销客; 2.销帮帮; 3.小满CRM; 4.有赞; 5.Oracle NetSuite; 6.Salesforce Sales Cloud; 7.Cin7; 8.Pipedrive; 9.BigCommerc…...
OpenCV图像加权函数:addWeighted
1 addWeighted函数 在OpenCV 里,addWeighted 函数的作用是对两个图像进行加权求和,常用于图像融合、图像过渡等场景。函数如下: cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]])2 参数解释 src1:第一个输入图…...
直方图(信息学奥赛一本通-1115)
【题目描述】 给定一个非负整数数组,统计里面每一个数的出现次数。我们只统计到数组里最大的数。假设 Fmax(Fmax<10000)是数组里最大的数,那么我们只统计{0,1,2.....Fmax}里每个数出现的次数。 【输入】 第一行n是数组的大小。…...
docker桌面版启动redis,解决无法连接
docker run -d --name redis -p 6379:6379 -v E:\2\redis\redis.conf:/usr/local/etc/redis/redis.conf redis redis-server /usr/local/etc/redis/redis.conf 在本地创建一个目录,里面有个redis.conf文件,内容如下,启动时绑定这个配置文件目…...
Scratch 3.0安装包,支持Win7/10/11、Mac电脑手机平板、少儿便编程的启蒙软件。
Scratch是一款由麻省理工学院(MIT) 设计开发的少儿编程工具。其特点是:使用者可以不认识英文单词,也可以不使用键盘,就可以进行编程。构成程序的命令和参数通过积木形状的模块来实现。用鼠标拖动指令模块到脚本区就可以…...
Java创造型模式之原型模式详解
设计模式是面向对象设计中的一种标准方法,用于解决常见的设计问题。原型设计模式(Prototype Pattern)是23种经典设计模式之一,属于创建型模式,它允许通过复制现有对象来创建新对象,而不是通过构造函数或工厂…...
JVM的各种细节
(1)JVM 核心结构(必须知道) 类加载器 负责将.class()文件加载到内存中,供 JVM 使用。 方法区 存储类元数据(类名、字段、方法)、常量池、静态变量等。 JDK 8:由元空间(Metaspace)…...
JavaScript基本知识
文章目录 一、JavaScript基础1.变量(重点)1-1 定义变量及赋值1-2 变量的命名规则和命名规范判断数据类型: 2.数据类型转换2-1 其他数据类型转成数值2-2 其他数据类型转成字符串2-3 其他数据类型转成布尔 3.函数3-1函数定义阶段3-2函数调用阶段…...
Navicat for Snowflake 震撼首发,激活数据仓库管理全新动能
近日,Navicat 家族迎来了一位全新成员 — Navicat for Snowflake。Snowflake 是一款基于云架构的现代数据仓库解决方案,以其弹性扩展、高性能和易用性著称。这次首发的Navicat for Snowflake 专为简化 Snowflake 数据库管理任务而精心打造。它凭借其直观…...
pjsip 自定义获取和设置麦克风、扬声器
获取麦克风和扬声器列表结果Device ID: 0 Name: “Wave mapper” Input channels: 2 Output channels: 2 Default sample rate: 16000 Device ID: 1 Name: “麦克风 (USB Microphone)” Input channels: 2 Output channels: 0 Default sample rate: 16000 Device ID: 2 Name: “…...
C++ 左值(lvalue)和右值(rvalue)
在 C 中,左值(lvalue)和右值(rvalue)是指对象的不同类别,区分它们对于理解 C 中的表达式求值和资源管理非常重要,尤其在现代 C 中涉及到移动语义(Move Semantics)和完美转…...
深度学习基础:线性代数本质2——线性组合、张成的空间与基
目录 一、线性组合 1. 用一个有趣的角度看向量坐标 2. 如果我们选择不同的基向量会怎样? 3. 线性组合 4. 张成的空间 ① 二维向量的张成的空间 ② 三维向量的张成的空间编辑 5.线性相关 6.线性无关 7. 基的定义 一、线性组合 1. 用一个有趣的角度看向量坐…...
第五天 Labview数据记录(5.4 EXCEL文件读写)
5.4 EXCEL文件读写 Excel 文件读写在数据处理、自动化办公、数据分析等领域具有重要的意义。以下是 Excel 文件读写的主要应用场景和意义:1. 数据管理和整理;2. 自动化办公;3. 数据分析和可视化;4. 系统集成;5. 报表生…...
iOS 模块化架构设计:主流方案与实现详解
随着 iOS 工程规模的扩大,模块化设计成为提升代码可维护性、团队协作效率和开发灵活性的关键。本文将探讨为什么需要模块化,介绍四种主流的模块化架构方案(协议抽象、依赖注入、路由机制和事件总线),并通过代码示例和对…...
【WRF模拟】如何查看 WPS 的输入静态地理数据(二进制格式)?
查看 WPS 的输入静态地理数据方法总结 方法 1:使用 gdal_translate 将二进制数据转换为 GeoTIFFgdal_translate 工具概述使用 gdal_translate 将二进制数据转换为 GeoTIFF方法 2:使用 ncdump 查看 geo_em.dXX.nc方法 3:使用 Python xarray + matplotlib 可视化 geo_em.dXX.n…...
麒麟系统利用pycharm生成deb文件
在麒麟系统(Kylin OS)上使用 PyCharm 进行 Python 开发并生成 .deb 可安装软件包,可以按照以下步骤进行操作: 1. 准备工作 安装 PyCharm:确保已经在麒麟系统上安装了 PyCharm,可以使用官方提供的安装包进…...
【日志队列】log日志实时写入队列,流式输出
有一个这样的任务:在网页上流式输出执行一个函数在终端产生的日志,但是目前只有终端日志,可以通过 自定义 loguru 的 Sink 将日志消息定向到线程安全的队列中,主线程从队列中实时获取日志。 import threading import queue from …...
注意力机制,层归一化,RBA。KAN-ODE,小波KAN
目录 attention is all you need 翻译 多头注意力 8.6 Multi-head Self Attention 模型 模型架构 encoder安定 decode 注意力机制 位置编码 自注意力机制的优势 实验结果 结论 代码 Transformer 架构 代码实现思路 总结 编码器、解码器和位置编码的摆放顺序&…...
