动态主机配置协议 (DHCPv4)介绍,详细DHCP协议学习笔记
定义
动态主机配置协议 (DHCP) 是一种用于集中对用户 IPv4 地址进行动态管理和配置的技术。为与 IPv6 动态主机配置协议 (DHCPv6) 进行区分,本文统一将动态主机配置协议称为 DHCPv4。
DHCPv4 协议由 RFC 2131 定义,采用客户端/服务器通信模式,由 DHCPv4 客户端 (DHCP Client) 向 DHCPv4 服务器 (DHCP Server) 提出配置申请,服务器返回为客户端分配的配置信息。
地址分配机制
DHCPv4 提供两种地址分配机制,网络管理员可以根据网络需求为不同的主机选择不同的分配策略:
动态分配机制
通过 DHCPv4 为主机分配一个有使用期限(租期)的 IPv4 地址。适用于主机需要临时接入网络或空闲地址数小于网络主机总数且主机不需要永久连接网络的场景。
静态分配机制
网络管理员通过 DHCPv4 为指定的主机分配固定的 IPv4 地址。相比手工静态配置 IPv4 地址,通过 DHCPv4 方式静态分配机制避免人工配置发生错误,方便管理员统一维护管理。
目的
随着网络规模的扩大和网络复杂度的提高,网络配置变得越来越复杂,再加上计算机数量剧增且位置不固定,引发了 IPv4 地址变化频繁以及 IPv4 地址不足的问题。为了实现网络可以动态合理地分配 IPv4 地址给主机使用,动态主机配置协议 DHCPv4 应运而生。
受益
DHCPv4 的主要受益有以下两点:
降低客户端的配置和维护成本
DHCPv4 易配置部署,对于非技术用户,DHCPv4 能够将客户端与配置相关的操作降至最低,并能够降低远程部署和维护成本。
集中管理
DHCPv4 服务器可以管理多个网段的配置信息,当某个网段的配置发生变化时,管理员只需要更新 DHCPv4 服务器上的相关配置即可。
DHCPv4 典型组网
DHCPv4 组网中包括以下三种角色:
DHCPv4 客户端
发送 DHCPv4 请求报文,通过 BOOTP 或 DHCPv4 协议请求获取 IPv4 地址等网络参数的设备。例如,IP 电话、PC、手机、无盘工作站等。
DHCPv4 中继
负责转发 DHCPv4 服务器和 DHCPv4 客户端之间的 DHCPv4 报文,协助 DHCPv4 服务器向 DHCPv4 客户端动态分配网络参数的设备。
DHCPv4 服务器
负责从地址池中选择 IPv4 地址分配至 DHCPv4 客户端,还可以为 DHCPv4 客户端提供其他网络参数,如默认网关地址、DNS 服务器地址和 WINS 服务器地址。
DHCPv4 报文类型
DHCPv4 报文是基于 UDP 协议传输的。DHCPv4 客户端向 DHCPv4 服务器发送报文时采用 68 端口号,DHCPv4 服务器向 DHCPv4 客户端发送报文时采用 67 端口号。目前 DHCPv4 定义了如下八种类型的报文:
报文名称 | 说明 |
DHCP DISCOVER | DHCPv4 客户端首次登录网络时进行 DHCP 交互过程发送的第一个报文,用来寻找 DHCPv4 服务器。 |
DHCP OFFER | DHCPv4 服务器用来响应 DHCP DISCOVER 报文,此报文携带了各种配置信息。 |
DHCP REQUEST | 用于客户端初始化后、重启后或更新 IPv4 地址租约时发送的报文。 |
DHCP ACK | 服务器对客户端的 DHCP REQUEST 报文的确认响应报文。 |
DHCP NAK | 服务器对客户端的 DHCP REQUEST 报文的拒绝响应报文。 |
DHCP DECLINE | 当客户端发现服务器分配给它的 IPv4 地址发生冲突时发送的报文。 |
DHCP RELEASE | 客户端主动释放服务器分配给它的 IPv4 地址时发送的报文。 |
DHCP INFORM | 客户端获取 IPv4 地址后,向服务器请求更为详细的配置信息时发送的报文。 |
DHCPv4 报文格式
DHCPv4 报文格式是在 BOOTP 报文格式的基础上发展而来,因此 DHCPv4 服务器也支持与 BOOTP 客户端之间进行交互。
DHCPv4 报文中的 Options 字段
Options 字段用来存放分配给 DHCPv4 客户端的控制信息和参数,位于 DHCPv4 报文末尾。Options 字段由 Type、Length 和 Value 三部分组成。
Options 号 | Options 作用 |
1 | 设置子网掩码选项。 |
3 | 设置网关地址选项。 |
6 | 设置 DNS 服务器地址选项。 |
12 | 设置 DHCPv4 客户端的主机名选项。 |
50 | 设置请求 IPv4 地址选项。 |
51 | 设置 IPv4 地址租约时间选项。 |
53 | 设置 DHCPv4 消息类型。 |
54 | 设置服务器标识。 |
55 | 设置请求选项列表。 |
58 | 设置续约 T1 时间。 |
59 | 设置续约 T2 时间。 |
DHCP 选项 82
Option 82 记录了 DHCP 客户端的位置信息,可以配置在 DHCP 中继或 DHCP 监听设备上。对于从 DHCP 客户端收到的 DHCP 报文,该报文中携带的 Option 82 将按照 Option 82 策略进行处理后再发送给 DHCP 服务器。
DHCP服务器根据DHCP报文中携带的Option82信息为客户端分配IP地址和其他参数,提供更加灵活的地址分配方案。
Option 82包含两个常用的子选项:Circuit ID和Remote ID。Circuit ID主要用于标识客户端所属的VLAN和接口,Remote ID标识客户端从哪个设备接入,一般为设备的MAC地址。
数据包格式
电路 ID 子选项
Circuit ID 包含三种类型:Type 0(值为端口索引)、Type 1(值为端口名称+VLAN ID)、Type 2(值为端口描述+VLAN ID),下面按照类型列出其格式。
-
类型 0(端口索引)
Circuit ID 类型为 0,其中 Circuit ID 子选项使用物理接口或者 LAG 接口。
-
类型 1(端口名称)
Circuit ID类型为1,其中端口名称和VLAN ID组成Circuit ID子选项值。
-
类型 2(端口描述)
Circuit ID类型为1,其中端口名称和VLAN ID组成Circuit ID子选项值。
远程 ID 子选项
Remote ID包含两种类型:Type 0(值为系统MAC)和Type 1(值为主机名),下面按类型列出格式。
-
类型 0(系统 MAC)
远程 ID 类型为 0,其中系统 MAC 用于远程 ID 子选项。
如何处理选项 82?
系统对收到的DHCP报文中的Option82进行如下处理:
-
当收到不带 giaddr但带有选项 82 的DHCP Discover/Request/Release/Decline/Inform 消息时,
-
如果选项 82 trust-all被禁用,则丢弃该消息。
-
如果启用了Option 82 trust-all 选项 ,则该类消息将按照用户配置的 Option 82 策略进行处理。Option 82 策略可以设置四种操作:Keep、Drop、Insert和Replace。默认操作为Keep,即从 DHCP 客户端收到的 DHCP 消息中的 Option 82 保持不变并进行转发。
-
-
当出现除上述类型以外的任何其他类型的 DHCP 发现/请求/释放/拒绝/通知消息时,将允许接收该消息,并根据选项 82 策略进行处理。
-
当收到不带选项 82 的DHCP Offer/Ack/Nak 消息时,将转发该消息而不带选项 82。
-
当收到带有选项 82 的DHCP Offer/Ack/Nak 消息时,选项 82 会在转发消息之前被删除。
选项 82 信任全部
交换机收到的不带 giaddr 但包含 Option 82 的 DHCP Discover/Request/Release/Decline/Inform 数据包默认会被丢弃,但如果开启了 Option 82 trust all 功能,则此类数据包会被允许并处理。
因此,在配置选项 82 策略时,需要同时考虑网络拓扑和信任配置,特别是如果客户端和中继代理/启用 DHCP 侦听的设备之间存在可能插入选项 82 的交换机。在此设备上启用 DHCP 选项 82 信任所有,以确保这些数据包不会被丢弃。
DHCPv4 客户端首次接入网络的报文交互过程
首次接入网络的 DHCPv4 客户端与 DHCPv4 服务器的报文交互过程称为 DHCPv4 报文四步交互:
第一步:发现阶段
首次接入网络的DHCPv4客户端不知道DHCPv4服务器的IPv4地址,为了学习到DHCPv4服务器的IPv4地址,DHCPv4客户端以广播方式发送DHCP DISCOVER报文(目的IPv4地址为255.255.255.255)给同一网段内的所有设备(包括DHCPv4服务器或中继)。DHCP DISCOVER报文中携带了客户端的MAC地址(chaddr字段)、需要请求的参数列表选项(Option55)、广播标志位(flags字段)等信息。
第二步:提供阶段
与DHCPv4客户端位于同一网段的DHCPv4服务器都会接收到DHCP DISCOVER报文,DHCPv4服务器选择跟接收DHCP DISCOVER报文接口的IPv4地址处于同一网段的地址池,并且从中选择一个可用的IPv4地址,然后通过DHCP OFFER报文发送给DHCPv4客户端。
通常,DHCPv4服务器的地址池中会指定IPv4地址的租期,如果DHCPv4客户端发送的DHCP DISCOVER报文中携带了期望租期,服务器会将客户端请求的期望租期与其指定的租期进行比较,选择其中时间较短的租期分配给客户端。
DHCPv4服务器在地址池中为客户端分配IPv4地址的顺序如下:
IPv4地址分配顺序不支持修改。
-
DHCPv4服务器上已配置的与客户端MAC地址静态绑定的IPv4地址。
-
客户端发送的DHCP DISCOVER报文中Option50(请求IPv4地址选项)指定的地址。
-
地址池内查找“Expired”状态的IPv4地址,即曾经分配给客户端的超过租期的IPv4地址。
-
在地址池内随机查找一个“Idle”状态的IPv4地址。
-
如果未找到可供分配的IPv4地址,则地址池依次自动回收超过租期的(“Expired”状态)和处于冲突状态(“Conflict”状态)的IPv4地址。回收后如果找到可用的IPv4地址,则进行分配;否则,DHCPv4客户端等待应答超时后,重新发送DHCP DISCOVER报文来申请IPv4地址。
设备支持在地址池中排除某些不能通过DHCPv4机制进行分配的IPv4地址。例如,客户端所在网段已经手工配置了地址为192.168.1.100/24的DNS服务器,DHCPv4服务器上配置的网段为192.168.1.0/24的地址池中需要将192.168.1.100的IPv4地址排除,不能通过DHCPv4分配此地址,否则,会造成地址冲突。
为了防止分配出去的IPv4地址跟网络中其他客户端的IPv4地址冲突,DHCPv4服务器在发送DHCP OFFER报文前通过发送源地址为DHCPv4服务器IPv4地址、目的地址为预分配出去IPv4地址的ICMP ECHO REQUEST报文对分配的IPv4地址进行地址冲突探测。如果在指定的时间内没有收到应答报文,表示网络中没有客户端使用这个IPv4地址,可以分配给客户端;如果指定时间内收到应答报文,表示网络中已经存在使用此IPv4地址的客户端,则把此地址列为冲突地址,然后等待重新接收到DHCP DISCOVER报文后按照前面介绍的选择IPv4地址的优先顺序重新选择可用的IPv4地址。
此阶段DHCPv4服务器分配给客户端的IPv4地址不一定是最终确定使用的IPv4地址,因为DHCP OFFER报文发送给客户端等待16秒后如果没有收到客户端的响应,此地址就可以继续分配给其他客户端。通过下面的选择阶段和确认阶段后才能最终确定客户端可以使用的IPv4地址。
第三步:选择阶段
如果有多个DHCPv4服务器向DHCPv4客户端回应DHCP OFFER报文,则DHCPv4客户端一般只接收第一个收到的DHCP OFFER报文,然后以广播方式发送DHCP REQUEST报文,该报文中包含客户端想选择的DHCPv4服务器标识符(即Option54)和客户端IPv4地址(即Option50,填充了接收的DHCP OFFER报文中yiaddr字段的IPv4地址)。
DHCPv4客户端广播发送DHCP REQUEST报文通知所有的DHCPv4服务器,它将选择某个DHCPv4服务器提供的IPv4地址,其他DHCPv4服务器可以重新将曾经分配给客户端的IPv4地址分配给其他客户端。
设备作为DHCPv4客户端,如果网络中有多个DHCPv4服务器,DHCPv4客户端会根据收到DHCP OFFER报文的顺序对DHCPv4服务器进行轮询,在前一个DHCPv4服务器分配IPv4地址失败时,选择下一个DHCPv4服务器分配IPv4地址。
第四步:确认阶段
当DHCPv4服务器收到DHCPv4客户端发送的DHCP REQUEST报文后,DHCPv4服务器回应DHCP ACK报文,表示DHCP REQUEST报文中请求的IPv4地址(Option50填充的IPv4地址)分配给客户端使用。
DHCPv4客户端收到DHCP ACK报文,会广播发送免费ARP报文,探测本网段是否有其他终端使用服务器分配的IPv4地址,如果在指定时间内没有收到回应,表示客户端可以使用此地址。如果收到了回应,说明有其他终端使用了此地址,客户端会向服务器发送DHCP DECLINE报文,并重新向服务器请求IPv4地址,同时,服务器会将此地址列为冲突地址。当服务器没有空闲地址可分配时,再选择冲突地址进行分配,尽量减少分配出去的地址冲突。
当DHCPv4服务器收到DHCPv4客户端发送的DHCP REQUEST报文后,如果DHCPv4服务器由于某些原因(例如协商出错或者由于发送REQUEST过慢导致服务器已经把此地址分配给其他客户端)无法分配DHCP REQUEST报文中Option50填充的IPv4地址,则发送DHCP NAK报文作为应答,通知DHCPv4客户端无法分配此IPv4地址。DHCPv4客户端需要重新发送DHCP DISCOVER报文来申请新的IPv4地址。
DHCPv4客户端重用曾经使用过的地址的工作原理
DHCPv4客户端非首次接入网络时,可以重用曾经使用过的地址。DHCPv4客户端与DHCPv4服务器交互DHCPv4报文,以重新获取之前使用的IPv4地址等网络参数,该过程称为两步交互。
是否支持重用曾经使用过的IPv4地址,因不同客户端而异。下面的DHCPv4客户端以PC为例。
第一步:选择阶段
客户端广播发送包含前一次分配的IPv4地址的DHCP REQUEST报文,报文中的Option50(请求的IPv4地址选项)字段填入曾经使用过的IPv4地址。
第二步:确认阶段
DHCPv4服务器收到DHCP REQUEST报文后,根据DHCP REQUEST报文中携带的MAC地址来查找有没有相应的租约记录,如果有则返回DHCP ACK报文,通知DHCPv4客户端可以继续使用这个IPv4地址。否则,保持沉默,等待客户端重新发送DHCP DISCOVER报文请求新的IPv4地址。
DHCPv4 客户端更新租期的工作原理
DHCPv4 服务器给每个分配给客户端的 IPv4 地址定义一个使用期限(租期)。客户端在租期到期前的某个时间点更新 IPv4 地址的租期。更新租期的过程如下:
-
当租期达到 50%(T1)时,客户端发送 DHCP REQUEST 报文请求更新租期。
-
当租期达到 87.5%(T2)时,如果仍未收到应答,客户端再次发送 DHCP REQUEST 报文。
-
如果租期时间到时都没有收到回应,客户端停止使用此 IPv4 地址,重新发送 DHCP DISCOVER 报文请求新的 IPv4 地址。
相关文章:

动态主机配置协议 (DHCPv4)介绍,详细DHCP协议学习笔记
定义 动态主机配置协议 (DHCP) 是一种用于集中对用户 IPv4 地址进行动态管理和配置的技术。为与 IPv6 动态主机配置协议 (DHCPv6) 进行区分,本文统一将动态主机配置协议称为 DHCPv4。 DHCPv4 协议由 RFC 2131 定义,采用客户端/服务器通信模式ÿ…...
Vue.js组件开发-如何处理跨域请求
在Vue.js组件开发中,处理跨域请求(CORS,即跨来源资源共享)通常不是直接在Vue组件中解决的,而是需要后端服务器进行相应的配置,以允许来自不同源的请求。不过,前端开发者也需要了解一些基本的COR…...

【C++】构造函数与析构函数
写在前面 构造函数与析构函数都是属于类的默认成员函数! 默认成员函数是程序猿不显示声明定义,编译器会中生成。 构造函数和析构函数的知识需要建立在有初步类与对象的基础之上的,关于类与对象不才在前面笔记中有详细的介绍:点我…...
Agent区别于MOE和RAG的核心; Agent(智能体)、RAG和MOE区别
Agent区别于MOE(专家混合模型)和RAG(检索增强生成)的核心 目录 Agent区别于MOE(专家混合模型)和RAG(检索增强生成)的核心自主性与决策能力环境交互与学习能力多模态感知与处理能力Agent(智能体)、RAG(检索增强生成)和MOE(专家混合模型)区别Agent(智能体)RAG(检…...

【PCL】Segmentation 模块—— 欧几里得聚类提取(Euclidean Cluster Extraction)
1、简介 PCL 的 Euclidean Cluster Extraction(欧几里得聚类提取) 是一种基于欧几里得距离的点云聚类算法。它的目标是将点云数据分割成多个独立的簇(clusters),每个簇代表一个独立的物体或结构。该算法通过计算点与点…...

LuaJIT Garbage Collector Algorithms
Explain 本篇文章是对Make Pall发表wili内容《LuaJIT 3.0 new Garbage Collector》的翻译和扩展,因为原文是对LuaJIT 2.x GC重要功能的简介和对LuaJIT 3.0 new GC的工作计划,所以它并不是系统性介绍GC的文章。希望以后能有精力系统性的对LuaJIT 2.x GC做…...
go采集注册表
package mainimport ("fmt""golang.org/x/sys/windows/registry""log""os""strconv""strings" )func USBSTOR_Enum() {// 打开注册表键keyPath : SYSTEM\CurrentControlSet\Services\USBSTOR\Enumk, err : regist…...
软件工程师欧以宁:引领无人机导航与物联网安全的技术革新
在科技日新月异的今天,软件工程师欧以宁凭借卓越的技术能力和前瞻性的创新思维,成为了无人机自主导航和物联网安全领域的佼佼者。作为一名深耕技术前沿的专家,欧以宁不仅推动了无人机导航技术的突破性进展,还为智能家居和物联网的安全架构提供了全新的解决方案。她的研究成果,以…...

从零开始:Gitee 仓库创建与 Git 配置指南
引言 Git 是一款广泛使用的版本控制工具,它能够帮助开发者在开发过程中高效地管理代码的版本。而 Gitee(码云)是国内知名的 Git 托管平台,它提供了强大的代码托管、团队协作和项目管理功能。如果你是 Git 和 Gitee 的新手&#x…...

浅谈计算机网络02 | SDN控制平面
计算机网络控制平面 一、现代计算机网络控制平面概述1.1 与数据平面、管理平面的关系1.2 控制平面的发展历程 二、控制平面的关键技术剖析2.1 网络层协议2.1.1 OSPF协议2.1.2 BGP协议 2.2 SDN控制平面技术2.2.1 SDN架构与原理2.2.2 OpenFlow协议2.2.3 SDN控制器 一、现代计算机…...

在 QNAP NAS中使用 Container Station 运行 Docker 的完整指南
QNAP 为用户提供了一个名为 Container Station 的应用,它在 QNAP NAS 上将 Docker 和 LXC 结合在一起,通过图形化界面,让用户更轻松地在 NAS 上管理容器。本文将带你一步步了解如何在 QNAP NAS 上安装和使用 Container Station,以…...

XML在线格式化 - 加菲工具
XML在线格式化 打开网站 加菲工具 选择“XML 在线格式化” 输入XML,点击左上角的“格式化”按钮 得到格式化后的结果...
大数据学习(34)-mapreduce详解
&&大数据学习&& 🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一下博主哦ᾑ…...
代码合并冲突解决push不上去的问题
环境:【IntelliJ IDEA】 【Gerrit】 1、错误信息 代码合并,迭代1合并到迭代2,解决冲突后,依然push不上去,报错信息如下: remote: Processing changes: refs: 1 remote: Processing changes: refs…...

万字长文介绍ARINC 653,以及在综合模块化航空电子设备(IMA)中的作用
文章目录 一、引言二、ARINC 653背景三、整体系统架构四、应用/执行(APEX)接口五、ARINC 653 RTOS内部机制六、健康监测功能七、软件应用八、ARINC 653现状九、总结 一、引言 在现代航空领域,综合模块化航空电子设备(IMA…...
MySQL 与 Redis 数据一致性 2
1. 强一致还是最终一致?2. 先写 MySQL 还是先写Redis?case 1 3. 缓存(Redis)更新还是清除?更新策略更新策略会有数据不一致问题?数据不一致的概率与影响如果使用监听binlog更新数据还会出现数据不一致问题?binlog的消费问题 使用消息队列行不行?其他方案总结: 数据不一致…...
MySQL程序之:使用类似URI的字符串或键值对连接到服务器
本节介绍使用类似URI的连接字符串或键值对来指定如何为MySQLShell等客户端建立到MySQL服务器的连接。 以下MySQL客户端支持使用类似URI的连接字符串或键值对连接到MySQL服务器: MySQL Shell实现X DevAPI的MySQL连接器 本节记录了所有有效的类似URI的字符串和键值…...

Docker私有仓库管理工具Registry
Docker私有仓库管理工具Registry 1 介绍 Registry是私有Docker仓库管理工具,Registry没有可视化管理页面和完备的管理策略。可借助Harbor、docker-registry-browser完成可视化和管理。Harbor是由VMware开发的企业级Docker registry服务。docker-registry-browser是…...

若依前后端分离项目部署(使用docker)
文章目录 一、搭建后端1.1 搭建流程:1.2 后端零件:1.2.1 mysql容器创建:1.2.2 redis容器创建:1.2.3 Dockerfile内容:1.2.4 构建项目镜像:1.2.5 创建后端容器: 二、前端搭建:2.1 搭建流程&#x…...

Unity2021.3.13崩溃的一种情况
如果出现如下的报错,可能是软件冲突的原因。自己的原因是使用f.lux这款软件似乎和Unity相互冲突,出现下面报错。 错误信息如上图...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...

学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...

NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...