DHCP介绍

news2025/6/7 8:39:17

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消息后,问题修复。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2402679.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[蓝桥杯]耐摔指数

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

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

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

JMM初学

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

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

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

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…

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

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

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…

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

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

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

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

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

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

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

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

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

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

C#入门学习笔记 #6(字段、属性、索引器、常量)

欢迎进入这篇文章&#xff0c;文章内容为学习C#过程中做的笔记&#xff0c;可能有些内容的逻辑衔接不是很连贯&#xff0c;但还是决定分享出来&#xff0c;由衷的希望可以帮助到你。 笔记内容会持续更新~~ 将这四种成语放在一起讲是因为这四种成员都是用来表达数据的。 字段…

广目软件GM DC Monitor

广目&#xff08;北京&#xff09;软件有限公司成立于2024年&#xff0c;技术和研发团队均来自于一家具有近10年监控系统研发的企业。广目的技术团队一共实施了9家政府单位、1家股份制银行、1家芯片制造企业的数据中心监控预警项目。这11家政企单位由2家正部级、1家副部级、6家…

每日八股文6.6

每日八股-6.6 Mysql1.怎么查看一条sql语句是否走了索引&#xff1f;2.能说说 MySQL 事务都有哪些关键特性吗&#xff1f;3.MySQL 是如何保证事务的原子性的&#xff1f;4.MySQL 是如何保证事务的隔离性的&#xff1f;5.能简单介绍一下 MVCC 吗&#xff1f;或者说&#xff0c;你…

PostgreSQL17 编译安装+相关问题解决

更新时间&#xff1a;2025.6.6&#xff0c;当前最新稳定版本17.5&#xff0c;演示的是17.5&#xff0c;最新测试版本18beta1 演示系统&#xff1a;debian12 很多时候&#xff0c;只有编译安装才能用上最新的软件版本或指定的版本。这也是编译安装的意义。 一、编译安装 &…

React 第五十六节 Router 中useSubmit的使用详解及注意事项

前言 useSubmit 是 React Router v6.4 引入的强大钩子&#xff0c;用于以编程方式提交表单数据。 它提供了对表单提交过程的精细控制&#xff0c;特别适合需要自定义提交行为或非标准表单场景的应用。 一、useSubmit 核心用途 编程式表单提交&#xff1a;不依赖 <form>…

华为云学堂-云原生开发者认证课程列表

华为云学堂-云原生认证 云原生开发者认证的前5个课程

理解网络协议

1.查看网络配置 : ipconfig 2. ip地址 : ipv4(4字节, 32bit), ipv6, 用来标识主机的网络地址 3.端口号(0~65535) : 用来标识主机上的某个进程, 1 ~ 1024 知名端口号, 如果是服务端的话需要提供一个特定的端口号, 客户端的话是随机分配一个端口号 4.协议 : 简单来说就是接收数据…

全球知名具身智能/AI机器人实验室介绍之AI FACTORY基于慕尼黑工业大学

全球知名具身智能/AI机器人实验室介绍之AI FACTORY基于慕尼黑工业大学 TUM AI FACTORY&#xff0c;即KI.FABRIK&#xff0c;是德国慕尼黑工业大学&#xff08;TUM&#xff09;在巴伐利亚州推出的一个旗舰项目&#xff0c;旨在打造未来工厂&#xff0c;将传统工厂转变为由人工智…