当前位置: 首页 > article >正文

DHCP介绍

DHCP介绍

  • 1 DHCP简述
  • 2 DHCP协议分析
    • 2.1 主要流程
    • 2.2 DHCP全部报文介绍
    • 2.3 IP租用更新报文
    • 2.4 DHCP协议抓包分析
  • 3 DHCP应用
    • 3.1 DNSmasq参数配置
    • 3.2 DNSmasq框架代码
      • 3.2.1 创建socket监听67端口
      • 3.2.2 监听67端口
      • 3.2.3 处理DHCP请求
    • 3.3 DNSmasq模块排障方法
  • 4 常见问题排查
    • 4.1 问题分类
    • 4.2 上位机不发起DHCP请求
    • 4.3 网络环境问题
    • 4.4 dnsmasq不响应DHCP请求
      • 4.4.1 确认是否为配置问题
      • 4.4.2 检查dnsmasq日志,确认是否存在明显报错
      • 4.4.3 检查dnsmasq协议处理流程中增加日志,确认未响应DHCP报文原因
  • 5 典型案例分享

1 DHCP简述

DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是IETF为实现IP的自动配置而设计的协议,前身是BOOTP协议,属于局域网的网络协议,使用UDP协议工作,常用的2个端口:67(DHCP server),68(DHCP client)。

DHCP通常被用于局域网环境,主要作用是集中的管理、分配IP地址,使client动态地获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。简单来说,DHCP就是一个不需要账号密码登录的、自动给内网机器分配IP地址等信息的协议。

DHCP协议支持C/S(客户端/服务器)结构,主要分为两部分:

  1. DHCP客户端:通常为网络中的PC、打印机等终端设备,使用从DHCP服务器分配下来的IP信息,包括IP地址、DNS等。
  2. DHCP服务器:所有的IP网络设定信息都由DHCP服务器集中管理,并处理客户端的DHCP请求。

DHCP采用UDP作为传输协议,客户端发送消息到DHCP服务器的的67号端口,服务器返回消息给客户端的68号端口。

2 DHCP协议分析

2.1 主要流程

在这里插入图片描述

  1. 客户端第一次登录网络的时候,计算机发现本机上没有任何IP地址设定,将以广播方式发送DHCP-DISCOVER 消息来寻找DHCP服务器,即向255.255.255.255发送特定的广播信息。网络上每一台安装了TCP/IP协议的主机都会接收这个广播信息,但只有DHCP服务器才会做出响应。
  2. 局域网内的DHCP 服务器收到 DHCP 客户端广播的DHCP-DISCOVER 消息后,从自身管理的 IP 地址池挑选一个空闲 IP,单播回复一个带可用IP地址的DHCP-OFFER 消息给请求IP的 DHCP 客户端。
  3. DHCP 客户端在收到 DHCP 服务器的DHCP-OFFER 消息后,选择第一个接收到的提供信息,再次以广播的方式回答一个DHCP-REQUEST 消息,告知自己准备使用 DHCP-OFFER 消息给出的IP 地址。
    (1)客户端初始化时,广播发送DHCP-REQUEST报文来回应服务器的DHCP-OFFER报文。
    (2)客户端重启初始后,广播发送DHCP-REQUEST报文来确认先前被分配的IP地址等配置信息。
    (3)当客户端已知和某个IP地址绑定后,单播发送DHCP-REQUEST报文来延长IP地址租期
  4. DHCP 服务器接收到 DHCP 客户端的 IP 请求消息 DHCP-REQUEST后,确认地址池中的这个地址没有被分配,单播回复一个 DHCP-ACK 告知 DHCP 客户端,你申请的 IP 成功了,DHCP 服务端会将之记录在案:该 IP 已经分配出去了。如果被分配了 ,就会回复DHCP-NAK报文,告诉CLient 地址已经被分配了。
    当客户端收到DHCP服务器分配的地址后,会向这个广播域内发送一个免费ARP的请求,如果没有人响应这个请求,客户端才正式使用这个地址,如果有人回应的话,会返回一个DHCP-Decline报文,要求服务器重新获取地址。

2.2 DHCP全部报文介绍

1. DHCP DISCOVER
客户端开始DHCP过程的第一个报文,是DHCP协议的开始,是请求IP地址和其它配置参数的广播报文。
DHCP客户端初始化TCP/IP,通过UDP端口67向网络中发送一个DHCPDISCOVER广播包,来寻找局域网中的DHCP服务器,请求租用IP地址。该广播包中的源IP地址为0.0.0.0,目标IP地址为255.255.255.255;包中还包含客户机的MAC地址和计算机名。网络上所有支持TCP/IP的主机都会收到该DHCP DISCOVER报文,但是只有DHCP Server会响应该报文。
2. DHCP OFFER
服务器对DHCP DISCOVER报文的响应,是包含有效IP地址及配置的单播(或广播)报文。
任何接收到DHCPDISCOVER广播包并且能够提供IP地址的DHCP服务器,通过解析报文,查询dhcpd.conf配置文件,如果在地址池中能找到合适的IP地址,将通过UDP端口68给客户机回应一个DHCPOFFER广播包,提供一个IP地址。该广播包的源IP地址为DCHP服务器IP,目标IP地址为 255.255.255.255;包中还包含提供的IP地址、客户端的MAC地址、子网掩码、服务器的识别符及租期等信息。
如果存在多个DHCP服务器,会发送多个DHCP OFFER报文。
3. DHCP REQUEST
客户端对于服务器发出的DHCP OFFER所做出的响应,表示接受相关配置。客户端续延IP地址租期时也会发出该报文。
客户端从不止一台DHCP服务器接收到提供之后,会选择第一个收到的DHCPOFFER 包,并向网络中广播一个 DHCPREQUEST消息包,表明自己已经接受了一个DHCP服务器提供的IP地址。该广播包中包含所接受的IP地址和服务器的IP地址。 所有其他的DHCP服务器撤消它们的提供以便将IP地址提供给下一次IP租用请求。
4. DHCP DECLINE
当客户端发现服务器分配的IP地址无法使用(如IP地址冲突时),将发出此报文,通知服务器禁止使用该IP地址。
5. DHCP ACK
服务器在接收到客户端发来的DHCP REQUEST之后发出的成功确认的报文。客户端收到此报文后,才真正获得了IP地址和相关的配置信息。
被客户端选择的DHCP服务器在收到DHCPREQUEST广播后,会广播返回给客户端一个DHCPACK消息包,表明已经接受客户端的选择,并将这一IP地址的合法租用以及其他的配置信息都放入该广播包发给客户端。
6. DHCP NAK
DHCP ACK的相反报文,表示服务器拒绝了客户端的请求。服务器对客户端的DHCP REQUEST报文的拒绝响应报文。
客户端收到此报文后,会重新开始新的DHCP过程。
7. DHCP RELEASE
一般出现在客户端关机、下线等情况。这个报文将会使DHCP服务器释放发出此报文的客户端的IP地址。客户端主动释放服务器分配的IP地址。当服务器收到此报文后,则回收该IP地址,并可以将其分配给其它的客户端。
8. DHCP INFORM
客户端发出的服务器请求一些信息的报文。客户端获得IP地址后,发送此报文请求获取服务器的其它一些网络配置信息,如DNS等。

2.3 IP租用更新报文

客户端获取的IP一般是有租期,到期前需要更新租期,这个过程是通过租用更新数据包来完成的。

  1. 在当前租期已过去50%时,DHCP客户端直接向为其提供IP地址的DHCP服务器单播发送DHCP-REQUEST消息包,请求服务器更新租期。服务器收到以后,如果可以继续使用IP地址的话,会响应Client DHCP-ACK,如果该IP不能继续分配,则响应Client DHCP-NAK。
    如果客户端接收到该服务器回应的DHCP-ACK消息包,客户端就根据包中所提供的新的租期以及其它已经更新的TCP/IP参数,更新自己的配置,IP租用更新完成。如果没收到该服务器的回复,则客户端继续使用现有的IP地址,因为当前租期还有50%。
  2. 如果在租期过去50%时未能成功更新,则客户端将在当前租期过去87.5%时再次向为其提供IP地址的DHCP服务器联系。如果联系不成功,则重新开始IP租用过程。
  3. 如果DHCP客户端重新启动时,它自动发送DHCP-REQUEST广播给DHCP服务器以便请求继续租用原来使用的IP地址。
    如果服务器收到这个消息,确认客户端可以使用该地址,则回答一个DHCP-ACK确认消息;如果此IP地址已经无法再分配,则返回一个DHCP-NAK否认信息,客户端收到这个信息以后,则必须重新发送DHCP-DISCOVER消息获取新的地址。
    DHCP客户机在发出IP租用请求的DHCP-DISCOVER广播包后,将花费1秒钟的时间等待DHCP服务器的回应,如果1秒钟没有服务器的回应,它会将这一广播包重新广播四次(以2,4,8和16秒为间隔,加上1~1000毫秒之间随机长度的时间)。四次之后,如果仍未能收到服务器的回应,则运行Windows 2000的DHCP客户机将从169.254.0.0/16(169.254.0.1~169.254.255.254)这个自动保留的私有IP地址(APIPA)中选用一个IP地址,而运行其他操作系统的DHCP 客户机将无法获得IP地址。DHCP客户机仍然每隔5分钟重新广播一次,如果收到某个服务器的回应,则继续IP租用过程。

2.4 DHCP协议抓包分析

  1. Dhcp Discover:获取DHCP服务器IP,广播包 0.0.0.0:68 <-> 255.255.255.255:67,67、68端口为DHCP协议端口。
    在这里插入图片描述
  2. DHCP Offer:返回DHCP服务器地址+分配给客户端的IP。

在这里插入图片描述

  1. DHCP request:请求分配IP地址,请求的IP为DHCP-discover分配的IP。

在这里插入图片描述

  1. DHCP ACK:分配ip地址成功。

在这里插入图片描述

3 DHCP应用

DNSmasq是一个小巧且方便地用于配置DNS和DHCP的工具,适用于小型网络,它提供了DNS功能和可选择的DHCP功能。它服务那些只在本地适用的域名,这些域名是不会在全球的DNS服务器中出现的。DHCP服务器和DNS服务器结合,并且允许DHCP分配的地址能在DNS中正常解析,而这些DHCP分配的地址和相关命令可以配置到每台主机中,也可以配置到一台核心设备中(比如路由器),DNSmasq支持静态和动态两种DHCP配置方式。

3.1 DNSmasq参数配置

我们的绝大部分模组使用linux原生的DNSmasq提供ipv4的dhcp分配服务。以下为我们大部分模组正在使用的配置参数。
在这里插入图片描述
主要参数为:

  1. dhcp-range:dhcp地址池配置
  2. -i 绑定接口br-lan,即只在br-lan口提供dhcp服务
  3. -K PC端请求地址池外的地址时,是否发送NAK,让PC重新获取IP地址

DNSmasq支持的全部参数见 dnsmasq option.c

在这里插入图片描述

3.2 DNSmasq框架代码

DNSmasq提供dhcpv4、dhcpv6、dns等多种功能,我们这里只关注dhcpv4功能。DNSmasq dhcpv4的基本原理是创建监听本机67端口,接收外界DHCP协议报文,并处理。

3.2.1 创建socket监听67端口

dnsmasq.c:main() -> dhcp_init() ->make_fd()
main()
在这里插入图片描述-> dhcp_init()
在这里插入图片描述
->make_fd()
在这里插入图片描述
在这里插入图片描述
上图中的port是dhcp_init中传参daemon->dhcp_server_port
在这里插入图片描述

3.2.2 监听67端口

  1. Dnsmasq.c:main() 中调用 poll_listen 将创建好的dhcp_fd添加到pollfds数组中

在这里插入图片描述

  1. do_poll 监听poll_fds中所有socket的事件

在这里插入图片描述
在这里插入图片描述

3.2.3 处理DHCP请求

  1. Dnsmasq监听67端口,当收到PC dhcp报文时,会调用dhcp_packet->dhcp_replay处理dhcp数据包。

在这里插入图片描述
在这里插入图片描述

  1. 具体的dhcp报文处理流程都在rfc2131.c dhcp_replay中,直接搜索DHCPDISCOVER找到对应的报文的处理逻辑

在这里插入图片描述
在这里插入图片描述
代码逻辑非常多,但原理比较简单,主要是根据DHCP协议的标准,响应对应的报文。这里不做赘述。

3.3 DNSmasq模块排障方法

  1. 查看dnsmasq模块日志,/etc/dnsmasq.conf配置中增加如下配置,并重启dnsmasq,可以查看日志,但是dnsmasq日志较少,只有关键错误才会打印日志。
log-queries 
log-facility=/var/log/dnsmasq.log

在这里插入图片描述
查看log方式:
a. cat /var/log/messages|grep dnsmasq
在这里插入图片描述
b. cat /var/log/dnsmasq.log
在这里插入图片描述

  1. DHCP协议的处理过程都在 rfc2131.c dhcp_replay函数中、可以在具体的报文处理逻辑中添加日志,定位具体原因。

4 常见问题排查

4.1 问题分类

DHCP问题可以分为如下3类问题: 上位机问题、PC不发起DHCP请求;网络问题,dnsmasq未收到DHCP请求;dnsmasq问题,dnsmasq不响应DHCP请求。
在这里插入图片描述
PC和bridge0口同时抓包,并根据数据包确定问题分类(注:模组的抓包网卡、需要以具体的网络拓扑为准)

  1. PC端抓包抓不到DHCP请求:判断为上位机不发起dhcp请求。
  2. PC端抓到DHCP请求,bridge0抓不到:判断为网络问题。
  3. PC端和bridge0都能抓到包:判断为dnsmasq不响应DHCP请求。

4.2 上位机不发起DHCP请求

  1. 检查上位机是否开启了DHCP:上位机PC安装了DHCP管控软件,当反复插拔设备USB时,PC会主动关闭了DHCP开关。

在这里插入图片描述

  1. 模组DHCP配置变更时,是否有执行链路的Down/Up
    模组DHCP配置变更时,会通过触发链路的Down/Up,触发PC重新发起DHCP请求;RNDIS拨号情况下,是通过 OEM_CTRL_RNDIS_MEDIA_DISCONNECT请求触发rndis0口的DOWN/UP,触发PC重新发起获取IP请求;物理网卡情况下,高通的QCMAP_CLI是通过 ifconfig down/up 触发链路的DOWN/UP,OEM是通过 ethtool -s eth0 autoneg off/on 触发链路的DOWN/UP。
kernel/msm-5.15 / drivers/usb/gadget/function/f_gsi.c
static long gsi_ctrl_dev_ioctl(struct file *fp, unsigned int cmd,unsigned long arg)
{switch (cmd) {case OEM _CTRL_RNDIS_MEDIA_DISCONNECT:{rndis_set_param_medium(gsi->params, RNDIS_MEDIUM_802_3, 0);rndis_signal_disconnect(gsi->params);printk(KERN_DEBUG "%s: OEM _CTRL_RNDIS_MEDIA_DISCONNECT\n",__func__);break;}case OEM_CTRL_RNDIS_MEDIA_CONNECT:{gsi_rndis_open(gsi);printk(KERN_DEBUG "%s: OEM_CTRL_RNDIS_MEDIA_CONNECT \n",__func__);break;}}

4.3 网络环境问题

PC端发起了DHCP请求,但是bridge0口抓不到包,可以判断为网络环境问题(注:需要先梳理下拓扑,大部分情况下为bridge0口收包);排查方法为梳理网络拓扑、并在关键节点抓包;可以参考下网络问题排查类的排障文档

4.4 dnsmasq不响应DHCP请求

4.4.1 确认是否为配置问题

收集正常(可以获取IP)和异常(无法获取IP)情况下,dnsmasq的配置信息,并对比。ps www|grep dnsmasq并逐一对比以下配置
在这里插入图片描述

4.4.2 检查dnsmasq日志,确认是否存在明显报错

日志添加方式,参考Dnsmasq模块排障方法章节

4.4.3 检查dnsmasq协议处理流程中增加日志,确认未响应DHCP报文原因

具体的dhcp报文处理流程都在rfc2131.c dhcp_replay中,直接搜索DHCPDISCOVER找到对应的报文的处理逻辑,添加日志,并抓取正常和异常情况的日志,对比确认,未响应DHCP请求的原因

5 典型案例分享

问题现象: PC获取不到IP地址
在这里插入图片描述
排障过程

  1. PC端抓包分析
    PC端抓包:dhcp discover请求无响应
    在这里插入图片描述
  2. 确认是否为网络不通导致
    Bridge0抓包:bridge0口收到了PC的dhcp discover请求
    在这里插入图片描述
  3. 确认是否为dnsmasq配置问题
    收集正常(可以获取IP)和异常(无法获取IP)情况下,dnsmasq的配置信息,并对比
    ps www|grep dnsmasq并逐一对比以下配置
    在这里插入图片描述
    对比结果:配置完全一致,非配置原因导致
  4. 调试dnsmasq-discover报文处理流程,确认丢包原因
    在这里插入图片描述
    调试结果:没走到dnsmasq处理DHCPDISCOVER的逻辑中
  5. 确认poll_check是否检测到dhcp收包事件
    上面已经介绍过,dnsmsasq框架代码基本逻辑为,收集所有fd, 插入到pollfd数组中,并poll 监听所有事件
    a.打印出所有pollfd及事件
    在这里插入图片描述
    在这里插入图片描述
    结果显示:dhcpfd没有收包事件产生
    Brige0收到了数据包,但dhcpfd没有被设置收包事件POLLIN事件。两个思路排查:
    a. 收包角度:从linux kernel netif_receivce_skb收包开始打印整个收包流程,定位丢包点,并分析原因,耗时较长
    b. 排查socket、setsockopt、bind、poll等函数
    先尝试排查是否是socket相关接口导致
  6. socket相关接口做基本排查
    a. socket():dnsmasq日志打印dhcpfd = 10, ls -l /proc/pid/fd查看dhcpfd是否正常
    在这里插入图片描述
    b. 查看bind是否成功:

在这里插入图片描述
Netstat查看所有监听端口,67端口监听成功
c. setsockopt排查:
setsockopt嫌疑比较大的接口 SO_BINDTODEVICE参数
检查dnsmasq日志是否有相关报错
在这里插入图片描述
检查结果:无相关报错
注释掉 bindtodevice的调用处,测试问题不复现

  1. 梳理 setsockopt 源码,由 kernel net/core/sock.c 将socket绑定到对应网口
    原理:根据网口名(br-lan) 获取net结构体,并找到将网口的ifindex记录到sock结构体中

在这里插入图片描述

  1. 内核增加日志:打印出绑定的具体信息,用于确认,将dhcpfd绑定到了哪个网口
    在这里插入图片描述
    原理:根据网口名(br-lan) 获取net结构体,并找到将网口的ifindex记录都socket中

在这里插入图片描述
结果显示:将dhcpfd绑定到了br-lan接口ifindex == 25

  1. ip link show 确认br-lan接口的最新信息: br-lan的 index已经变成了28

在这里插入图片描述
网卡的ifIndex 只有在物理硬件设备断开重连后才会更新,分析应用层代码,确认是否有会导致网卡断开重连的操作。
分析结果:USB_STOP 会触发 rndis0接口重新加载, rndis接口是br-lan的子接口,USB_STOP和USB_START都会触发br-lan接口更新

#define USB_STOP    "sbin/start_usb stop"
#define USB_START    "sbin/start_usb start"

将USB_START USB_STOP改为 OEM_CTRL_RNDIS_MEDIA_CONNECT/DISCONNECT消息后,问题修复。

相关文章:

DHCP介绍

DHCP介绍 1 DHCP简述2 DHCP协议分析2.1 主要流程2.2 DHCP全部报文介绍2.3 IP租用更新报文2.4 DHCP协议抓包分析 3 DHCP应用3.1 DNSmasq参数配置3.2 DNSmasq框架代码3.2.1 创建socket监听67端口3.2.2 监听67端口3.2.3 处理DHCP请求 3.3 DNSmasq模块排障方法 4 常见问题排查4.1 问…...

李沐《动手学深度学习》d2l安装教程

文章目录 最新回答报错提醒安装对应版本安装C工具和Windows SDK 最新回答 安装旧版本即可 pip install d2l0.17.0 WARNING: Ignoring invalid distribution -pencv-python (e:\python3.10\lib\site-packages) Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple C…...

[蓝桥杯]耐摔指数

耐摔指数 题目描述 X 星球的居民脾气不太好&#xff0c;但好在他们生气的时候唯一的异常举动是&#xff1a;摔手机。 各大厂商也就纷纷推出各种耐摔型手机。X 星球的质监局规定了手机必须经过耐摔测试&#xff0c;并且评定出一个耐摔指数来&#xff0c;之后才允许上市流通。…...

深入理解数字音频:采样率、位深与量化

在当今数字时代&#xff0c;音频技术已经渗透到我们生活的方方面面——从流媒体音乐到视频会议&#xff0c;从播客到智能家居。但你是否曾好奇过&#xff0c;这些美妙的声音是如何被捕捉、存储并在数字世界中重现的&#xff1f;本文将带你深入了解数字音频的核心概念&#xff0…...

2024年第十五届蓝桥杯青少Scratch初级组-国赛—画矩形

2024年第十五届蓝桥杯青少Scratch初级组-国赛—画矩形 题目点下方&#xff0c;支持在线编程&#xff0c;在线获取源码和素材&#xff5e; 画矩形_scratch_少儿编程题库学习中心-嗨信奥 程序演示可点下方&#xff0c;支持源码获取&#xff5e; 画矩形-scratch作品-少儿编程题库…...

java面试场景题: 设计⼀个微博系统

微博系统设计指南&#xff1a;从理论到实践 系统设计考察的核心能力 系统设计面试模拟真实工作场景&#xff0c;候选人需与面试官协作解决模糊问题。关键在于沟通、分析和权衡能力&#xff0c;而非追求完美方案。面试官关注思考过程&#xff0c;而非最终答案。 常见误区与改…...

市面上哪款AI开源软件做ppt最好?

市面上哪款AI开源软件做ppt最好&#xff1f; aippt&#xff1a;AiPPT - 全智能 AI 一键生成 PPT 网站形式&#xff0c;需要注册 ai to pptx &#xff1a;SmartSchoolAI/ai-to-pptx: 前端后端同时开源。 Ai-to-pptx是一个使用AI技术(DeepSeek)制作PPTX的助手&#xff0c;支持在…...

JMM初学

文章目录 1,线程间的同步和通信1.1, 共享内存并发模型 (Shared Memory Model)线程通信机制线程同步机制特点 1.2, 消息传递并发模型 (Message Passing Model)线程通信机制线程同步机制特点 适用场景对比 2,Java内存模型JMM2.0,Java内存模型的基础&#xff08;1&#xff09;内存…...

transformer和 RNN以及他的几个变体区别 改进

Transformer、RNN 及其变体&#xff08;LSTM/GRU&#xff09;是深度学习中处理序列数据的核心模型&#xff0c;但它们的架构设计和应用场景有显著差异。以下从技术原理、优缺点和适用场景三个维度进行对比分析&#xff1a; 核心架构对比 模型核心机制并行计算能力长序列依赖处…...

构建云原生安全治理体系:挑战、策略与实践路径

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 一、引言&#xff1a;从传统安全走向“云原生安全” 随着企业 IT 架构从传统单体系统向容器化、微服务和云原生平台转型&#xf…...

vue-print-nb 打印相关问题

一、背景与解决方案 1、ElementUI表格打印通病&#xff0c;均面临边框丢失、宽度超出问题&#xff1a;相关解决代码有注释&#xff1b; 2、大多数情况下不会打印页眉页脚的日期、网址、未配置popTitle显示的undefined&#xff1a;相关解决代码有注释&#xff1b; 3、打印预览页…...

vcs仿真产生fsdb波形的两种方式

目录 方法一&#xff1a; 使用verilog自带的系统函数 方法二&#xff1a; 使用UCLI command 2.1 需要了解什么是vcs的ucli&#xff0c;怎么使用ucli&#xff1f; 2.2 使用ucli dump波形的方法 使用vcs仿真产生fsdb波形有两种方式&#xff0c;本文参考《vcs user guide 20…...

每日算法 -【Swift 算法】三数之和

Swift&#xff5c;三数之和&#xff08;3Sum&#xff09;详细题解 注释 拓展&#xff08;LeetCode 15&#xff09; ✨题目描述 给你一个包含 n 个整数的数组 nums&#xff0c;判断 nums 中是否存在三个元素 a, b, c&#xff0c;使得 a b c 0。请你找出所有和为 0 且不重…...

Go语言底层(三): sync 锁 与 对象池

1. 背景 在并发编程中&#xff0c;正确地管理共享资源是构建高性能程序的关键。Go 语言标准库中的 sync 包提供了一组基础而强大的并发原语&#xff0c;用于实现安全的协程间同步与资源控制。本文将简要介绍 sync 包中常用的类型和方法: sync 锁 与 对象池&#xff0c;帮助开发…...

登高架设作业操作证考试:理论题库高频考点有哪些?

一、安全基础知识 法律法规 《安全生产法》《特种作业人员安全技术培训考核管理规定》中关于登高作业的强制性要求&#xff08;如持证上岗、培训时限等&#xff09;。 事故责任划分&#xff1a;未系安全带、无监护作业等违规行为的法律后果。 个人防护 安全带使用标准&#…...

2025年06月06日Github流行趋势

项目名称&#xff1a;agent-zero 项目地址url&#xff1a;https://github.com/frdel/agent-zero项目语言&#xff1a;Python历史star数&#xff1a;8958今日star数&#xff1a;324项目维护者&#xff1a;frdel, 3clyp50, linuztx, evrardt, Jbollenbacher项目简介&#xff1a;A…...

华为云CentOS配置在线yum源,连接公网后,逐步复制粘贴,看好自己对应的版本即可,【新手必看】

华为云镜像源配置 YUM 源的详细步骤&#xff1a; 1. 备份原有的 YUM 源配置文件 在修改 YUM 源之前&#xff0c;建议备份原有的配置文件。通常&#xff0c;YUM 源的配置文件位于 /etc/yum.repos.d/ 目录下。例如&#xff0c;备份 CentOS 的默认 YUM 源配置文件&#xff1a; …...

http头部注入攻击

1.HTTP请求的组成部分​​ HTTP(HyperText Transfer Protocol)请求由 ​​请求行(Request Line)、请求头(Headers)、空行(Blank Line)和请求体(Request Body)​​ 组成。具体结构如下: ​​1. 请求行(Request Line)​​ 请求行是HTTP请求的第一行,包含三个部分…...

三类 Telegram 账号的风控差异分析与使用建议

在使用 Telegram 过程中&#xff0c;很多用户会遇到账号被限制、封禁、加群失败等问题。除了操作行为外&#xff0c;账号本身的注册方式、活跃时间、环境匹配程度也会直接影响风控等级。 本篇文章从账号风控角度出发&#xff0c;分析三类常见 Telegram 账号的特点与适用环境&am…...

Matlab | matlab中的点云处理详解

点云处理 ⚙️ **一、点云基础操作**🧹 **二、点云预处理**📊 **三、特征提取与分析**🔄 **四、点云配准(对齐点云)**🔷 **五、三维重建与应用**⚡️ **六、高级功能与性能优化**💎 **七、实战技巧与参数调优**📚 **学习资源**MATLAB 的点云处理能力主要依赖 Poi…...

【机试题解法笔记】寻找最大价值的矿堆

题目 给你一个由 0(空地)、1(银矿)、2(金矿) 组成的的地图&#xff0c;矿堆只能由上下左右相邻的金矿或银矿连接形成。超出地图范围可以认为是空地。 假设银矿价值 1&#xff0c;金矿价值 2&#xff0c;请你找出地图中最大价值的矿堆并输出该矿堆的价值。 输入描述 地图元素信…...

动态规划 熟悉30题 ---上

本来是要写那个二维动态规划嘛&#xff0c;但是我今天在问题时候&#xff0c;一个大佬就把他初一时候教练让他练dp的30题发出来了&#xff08;初一&#xff0c;啊虽然知道计算机这一专业&#xff0c;很多人从小就学了&#xff0c;但是我每次看到一些大佬从小学还是会很羡慕吧或…...

嵌入式学习笔记- freeRTOS 带FromISR后缀的函数

FreeRTOS中带FromISR后缀的函数 是用于中断的函数&#xff0c;它有两个特点 一个是无等待延时&#xff0c; 一个是无立刻触发任务切换&#xff0c; 那么 一 为什么中断中不能等待&#xff08;阻塞&#xff09;&#xff1f; 因为中断中等待的&#xff0c;一般都是任务给予的…...

Linux系统:ELF文件的定义与加载以及动静态链接

本节重点 ELF文件的概念与结构可执行文件&#xff0c;目标文件ELF格式的区别ELF文件的形成过程ELF文件的加载动态链接与静态链接动态库的编址与方法调用 一、ELF文件的概念与结构 1.1 文件概述 ELF&#xff08;Executable and Linkable Format&#xff09;即“可执行与可链…...

迷宫与陷阱--bfs+回路+剪枝

1.用bfs板子&#xff0c;同时会出现回路&#xff0c;但不能不用bo数组&#xff0c;要减去一部分没有用的回路 2.什么叫没有用的回路--因为我有无敌了&#xff0c;以前遇到的陷阱就能过了&#xff0c;那这就是有用的回路&#xff0c; 所以我记录&#xff08;x,y&#xff09;点…...

【国产化适配】如何选择高效合规的安全数据交换系统?

一、安全数据交换系统的核心价值与国产化需求 在数字化转型浪潮中&#xff0c;企业数据流动的频率与规模呈指数级增长&#xff0c;跨网文件传输已成为日常运营的刚需&#xff0c;所以安全数据交换系统也是企业必备的工具。然而&#xff0c;数据泄露事件频发、行业合规要求趋严…...

基于深度学习的裂缝检测与分割研究方向的 数据集介绍

目录 一、基于深度学习的裂缝检测与分割研究方向 1. 任务定义与挑战 2. 主流方法与技术演进 3. 实际应用优化 二、裂缝检测与分割常用数据集详解 1. SDNET2018 2. CrackTree&#xff08;CrackTree200&#xff09; 3. AigleRN 4. CFD&#xff08;Concrete Crack Detect…...

【Prompt实战】国际翻译小组

本文原创作者&#xff1a;姚瑞南 AI-agent 大模型运营专家/音乐人/野生穿搭model&#xff0c;先后任职于美团、猎聘等中大厂AI训练专家和智能运营专家岗&#xff1b;多年人工智能行业智能产品运营及大模型落地经验&#xff0c;拥有AI外呼方向国家专利与PMP项目管理证书。&#…...

简化复杂系统的优雅之道:深入解析 Java 外观模式

一、外观模式的本质与核心价值 在软件开发的世界里&#xff0c;我们经常会遇到这样的场景&#xff1a;一个复杂的子系统由多个相互协作的类组成&#xff0c;这些类之间可能存在错综复杂的依赖关系和交互逻辑。当外部客户端需要使用这个子系统时&#xff0c;往往需要了解多个类…...

设计模式杂谈-模板设计模式

在进入正题之前&#xff0c;先引入这样一个场景&#xff1a; 程序员A现在接到这样一个需求&#xff1a;这个需求有10个接口&#xff0c;这些接口都需要接收前端的传参&#xff0c;以及给前端返回业务状态信息。出于数据保密的要求&#xff0c;不管是前端传参还是最终参数返回都…...