网络协议之DHCP和PXE分析
写在前面
本文看下DHCP和PXE相关内容。
1:正文
不知道你自己手动配置过IP地址没有,在Linux的环境中可以通过如下的命令们来进行配置:
$ sudo ifconfig eth1 10.0.0.1/24
$ sudo ifconfig eth1 up以及:$ sudo ip addr add 10.0.0.1/24 dev eth1
$ sudo ip link set up eth1
虽然可以手动配置,但是不能随意配置,为什么呢?因为啊如果是配置的IP地址和当前网络不在一个局域网中,则是无法和其他机器完成通信的,哪怕是连接在同一个交换机上也不行。具体原因是Linux在发送网络包之前会先判断,当前的目标IP地址是否和自己是一个局域网的,如果是一个局域网则会通过ARP请求获取目标IP的mac,并填充mac信息,最终将网络包发出去,但如果不是一个局域网(即和自己任何一张网卡的IP地址都不是一个网段)
的,则会尝试获取网关MAC,然后将包发送给网关,包到了网关,其实就出去了
。
但是,实际生活和工作中我们并没有手动配置过IP地址,你入职了一个新公司,是不是插上网线就能上网了,既然能上网了肯定是已经分配好了IP地址的。其实这是DHCP在默默的工作,DHCP,即动态主机配置协议,dynamic host configuration protocol。是一种负责维护IP段并给新成员分配IP的一种协议,当然是需要一个对应的DHCP server的。
1.1:DHCP的工作流程
当一个局域网有一个新成员加入时,这个新成员一穷二白,为什么说是一穷二白呢,因为它除了有MAC地址外啥都没有。所以第一步新成员会先吼一嗓子,使用BOOTP协议封装一个UDP的数据包,尝试获取一个IP地址,此时源IP是0.0.0.0,目标IP是255.255.255.255,即广播方式发送,而源MAC就是自己的MAC了,目标MAC是ff:ff:ff:ff:ff:ff,即广播MAC,这一步叫做DHCP discover
,对应的数据包格式如下:
接着DHCP server会收到这个请求,通过MAC判断还没有给其分配IP地址,就知道有一个新成员加入了,接着会分配一个IP地址,因为新成员到目前还是没有IP地址的,所以还是通过广播的方式来回复这个消息,格式如下:
这个过程叫做DHCP offer。
因为可能有多个DHCP server,所以新成员可能会收到多个DHCP offer,此时新成员一般是谁先到达使用谁的,并会告知多个DHCP server自己接收了哪个DHCP server分配的IP地址信息,此时因为还未最终确认所以源IP依然是0.0.0.0,数据包如下:
这个过程叫做DHCP request。
DHCP server在收到了DHCP request后就会回复一个ack消息,对IP地址的分配做最终的确认,注意因为IP地址还没有确认完成,所以目标IP依然使用广播的方式,消息格式如下:
这样新成员就有了自己的IP地址,加入到网络大家庭了!
1.1.1:IP地址的收回和续租
DHCP server分配的IP地址是有一个有效期的,就像我们北漂一族租房子,到期之前要提前告知房东,我还要续租,IP地址同样如此,一般会在到达到期时间的50%的时候重新发送一个DHCP request,请求DHCP server完成续租,接着DHCP server会回复一个ack完成续租。当然如果是不续租的话就会被收回了。
1.2:PXE
PXE全称是pre-boot execution environment,即预启动执行环境,为什么是预启动呢?因为此时是BIOS(一个小的操作系统)
刚启动,操作系统启动之前的阶段(当然也可能是空机器)。
对应有一个叫做PXE的协议,使用该协议可以完成空机器在首次启动时自动完成操作系统安装的工作,这在我们有大量空机器需要安装操作系统时就很有用了(数据中心场景???)
。我们需要PXE client和PXE server,其中PXE client内置在BIOS中,在BIOS启动后就会启动PXE client,因为PXE client需要通过网络请求来从PXE 服务器下载操作系统的安装包,所以首先会使用DHCP来获取一个IP地址(注意这个IP地址只用于安装操作系统使用,操作系统安装并启动成功后还需要自己通过DHCP来获取IP地址)
,和常规的DHCP过程不同之处在于,DHCP server除了返回IP地址信息外,还会告知PXE 服务器的地址,以及要下载的文件信息等,接着下载相关文件安装操作系统,这个过程如下:
操作系统启动后,在通过DHCP协议获取IP地址,就可以了。
写在后面
相关文章:
网络协议之DHCP和PXE分析
写在前面 本文看下DHCP和PXE相关内容。 1:正文 不知道你自己手动配置过IP地址没有,在Linux的环境中可以通过如下的命令们来进行配置: $ sudo ifconfig eth1 10.0.0.1/24 $ sudo ifconfig eth1 up以及:$ sudo ip addr add 10.0…...
SSH 服务部署指南
本指南涵盖 OpenSSH 服务端的安装、配置密码/公钥/多因素认证,以及连接测试方法。 适用系统:Ubuntu/Debian、CentOS/RHEL 等主流 Linux 发行版。 1. 安装 SSH 服务端 Ubuntu/Debian # 更新软件包索引 sudo apt update# 安装 OpenSSH 服务端 sudo apt i…...
表达式求值(算法题)
#include <bits/stdc.h> // 引入常用头文件 using namespace std;stack<int> num; // 存储操作数的栈 stack<char> op; // 存储运算符的栈/* 执行一次运算操作:1. 从num栈弹出两个操作数(n2先弹出,作为右操作数)2. 从op栈弹出运算符…...
IO流--13--MultipartFile
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 MultipartFile1. 概述2. 常用方法解析2.1 getName方法2.2 getOriginalFileName方法2.3 getContentType方法2.4 isEmpty方法2.5 getSize方法2.6 getBytes方法2.7 get…...
leetcode 242. Valid Anagram
题目描述 因为s和t仅仅包含小写字母,所以可以开一个26个元素的数组用来做哈希表。不过如果是unicode字符,那就用编程语言自带的哈希表。 class Solution { public:bool isAnagram(string s, string t) {int n s.size();if(s.size() ! t.size())return …...
内核态函数strlcpy及strscpy以及用户态函数strncpy
一、背景 编写C程序时有一类看似简单实则经常暗藏漏洞的问题就是字符串的处理。对于字符串的处理,常用的函数如strcpy,sprintf,strcat等,这些函数的区别无外乎就是处理\0结尾相关的逻辑。字符串的长度有时候并不能很好确定&#…...
Matlab 车辆四自由度垂向模型平稳性
1、内容简介 Matlab221-车辆四自由度垂向模型平稳性 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略基于Simulink的汽车平顺性仿真_1_杜充 基于Simulink的汽车平顺性仿真分析_谢俊淋...
【hadoop】Sqoop数据迁移工具的安装部署
一、Sqoop安装与配置 步骤: 1、使用XFTP将Sqoop安装包sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz发送到master机器的主目录。 2、解压安装包: tar -zxvf ~/sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz 3、修改文件夹的名字,将其改为s…...
只出现一次的数字(暴力、哈希查重、异或运算)
目录 一.题目 题目解析 题目链接 二.解题过程 俗手(暴力:数组模拟哈希表) 思路 代码示例 提交情况 本手:哈希查重 思路 代码示例 提交情况 妙手:异或运算 思路 代码示例 提交情况 作者的个人gitee 作者…...
Spark缓存
生活中缓存容量受成本和体积限制(比如 CPU 缓存只有几 MB 到几十 MB),但会通过算法(如 “最近最少使用” 原则)智能决定存什么,确保存的是 “最可能被用到的数据”。 1. 为什么需要缓存? 惰性执…...
linux中的常用命令(一)
目录 常用的快捷键 1- tab键:命令或者路径提示及补全; 2-ctrlc:放弃当前输入,终止当前任务或程序 3-ctrll;清屏 4-ctrlinsert:复制 5-鼠标右键:粘贴; 6-altc:断开连接/ctrlshift r 重新连接 7-alt1/2/3/等:切换回话窗口 8-上下键…...
Lua学习笔记
文章目录 前言1. Lua的数据类型2. Lua的控制结构2.1 循环2.1.1 for2.1.1.1 数值循环2.1.1.2 迭代循环2.1.2 while2.1.3 repeat-until 2.2 条件语句2.3 函数 3. Lua中的变量作用域 前言 Lua是一种轻量级的、高效的、可扩展的脚本语言,由巴西里约热内卢天主教大学&am…...
5月8日星期四今日早报简报微语报早读
5月8日星期四,农历四月十一,早报#微语早读。 1、外交部回应中美经贸高层会谈:这次会谈是应美方请求举行的; 2、河南许昌官方:胖东来联合京东物流打造的供应链产业基地将于今年投入运营; 3、我国外汇储备…...
P2415 集合求和 详解
此题我认为主要考数学逻辑,这个题目考的是你面对代码时,是否会从中去找规律推导一个数学公式。 先看题目: 此题目与集合有关,所以对于数学基础不好的同学,我会先给你讲一下这个集合的相关知识。 一,首先,…...
#define ccw (0)和#define ccw 0什么区别
目录 区别 一般建议 简单总结 #define ccw (0) 和 #define ccw 0 这两者在大多数情况下的功能非常相似,但在细节上有一些区别,主要涉及宏展开时的行为。 区别 #define ccw (0):宏定义的内容是(0),带括…...
跨平台移动开发框架React Native和Flutter性能对比
背景与架构 React Native 和 Flutter 都是跨平台移动开发框架,但它们的性能表现因架构差异而异。React Native 在 2025 年采用了 Bridgeless New Architecture(版本 0.74),使用 JavaScript Interface (JSI) 替代传统的 JavaScrip…...
【PhysUnits】2 SI 量纲 实现解析(prefix.rs)
源码 这是一个编译时量纲检查的物理单位库。 //! Physical Units Library with Type-Level Dimension Checking //! 带类型级量纲检查的物理单位库 //! //! This module provides type-safe physical unit representations using Rusts type system //! to enforce dimension…...
新能源汽车赛道变局:传统车企子品牌私有化背后的战略逻辑
2025年5月,一则资本市场动态引发行业震动:某国内头部传统车企宣布拟以每股2.57美元的价格私有化旗下高端新能源品牌,若交易完成,该新能源品牌将正式从纽交所退市。这一决策发生在全球新能源汽车行业经历剧烈洗牌、资本市场估值逻辑…...
[matlab]private和+等特殊目录在新版本matlab中不允许添加搜索路径解决方法
当我们目录包含有private,或者时候matlab搜索目录不让添加,比如截图: 在matlab2018以前这些都可以加进去后面版本都不行了。但是有时候我们必须要加进去才能兼容旧版本matlab库,比如mexopencv库就是这种情况。因此我们必须找到一个办法加进去…...
ImportError: cannot import name ‘Optional‘ from ‘pydantic‘
概览 再使用Optional定义fastapi可选参数时,出现了错误: ImportError: cannot import name Optional from pydantic python version: 3.8 pydantic version: 2.9.2 快速解决方案 Optional导入修改为typing包,如下 from typing import List…...
“水木精灵” 王泫梓妍时尚造型引关注
“水木精灵” 王泫梓妍一组时尚照片曝光,再次展现其独特时尚品味与青春活力。 照片中,王泫梓妍身着白色针织开衫搭配深蓝色牛仔短裙,开衫上精致的水钻装饰与深蓝色海军领增添了细节亮点,牛仔短裙的金色纽扣设计别致,整…...
数据结构-堆排序
1.定义 -堆中每个节点的值都必须大于等于(或小于等于)其左右子节点的值。如果每个节点的值都大于等于其子节点的值,这样的堆称为大根堆(大顶堆);如果每个节点的值都小于等于其子节点的值,称为…...
影响服务器性能的主要因素是什么
在这个数字化高速发展的时代,服务器就像是幕后的超级英雄,默默支撑着我们丰富多彩的网络世界。首先,硬件配置堪称服务器性能的基石。就好比一辆跑车,强大的引擎(CPU)、宽敞的跑道(内存ÿ…...
为什么 MySQL 用 B+ 树作为数据的索引,以及在 InnoDB 中数据库如何通过 B+ 树索引来存储数据以及查找数据
http://www.liuzk.com/410.html 索引是一种数据结构,用于帮助我们在大量数据中快速定位到我们想要查找的数据。 索引最形象的比喻就是图书的目录了。注意这里的大量,数据量大了索引才显得有意义,如果我想要在 [1,2,3,4] 中找到 4 这个数据&am…...
若依框架Ruoyi-vue整合图表Echarts中国地图标注动态数据
若依框架Ruoyi-vue整合图表Echarts中国地图 概述创作灵感预期效果整合教程前期准备整合若依框架1、引入china.json2、方法3、data演示数据4、核心代码 完整代码[毫无保留]组件调用 总结 概述 首先,我需要回忆之前给出的回答,确保这次的内容不重复&#…...
可撤销并查集,原理分析,题目练习
零、写在前面 可撤销并查集代码相对简单,但是使用场景往往比较复杂,经常用于处理离线查询,比较经典的应用是结合线段树分治维护动态连通性问题。在一些较为综合的图论问题中也经常出现。 前置知识:并查集,扩展域并查…...
中介者模式(Mediator Pattern)详解
文章目录 1. 中介者模式概述1.1 定义1.2 基本思想2. 中介者模式的结构3. 中介者模式的UML类图4. 中介者模式的工作原理5. Java实现示例5.1 基本实现示例5.2 飞机空中交通控制示例5.3 GUI应用中的中介者模式6. 中介者模式的优缺点6.1 优点6.2 缺点7. 中介者模式的适用场景8. 中介…...
Java网络编程:深入剖析UDP数据报的奥秘与实践
在浩瀚的计算机网络世界中,数据传输协议扮演着至关重要的角色。其中,用户数据报协议(UDP,User Datagram Protocol)以其独特的“轻量级”和“无连接”特性,在众多应用场景中占据了一席之地。与更为人熟知的传输控制协议(TCP,Transmission Control Protocol)相比,UDP提…...
17.thinkphp的分页功能
一.分页功能 1.不管是数据库操作还是模型操作,都使用paginate()方法来实现(第一种方式); //查找user表所有数据,每页显示5条 returnView::fetch(index, [list > User::paginate(5)]); 页数: 2.创建一个静态模版页面…...
Pandas比MySQL快?
知乎上有人问,处理百万级数据,Python列表、Pandas、Mysql哪个更快? Pands是Python中非常流行的数据处理库,拥有大量用户,所以拿它和Mysql对比也是情理之中。 实测来看,MySQL > Pandas > Python列表…...
问题 | 低空经济未来发展前景机遇及挑战
低空经济 **一、发展前景与机遇**1. **政策红利加速释放,顶层设计逐步完善**2. **技术突破驱动商业化落地**3. **应用场景多元化拓展**4. **万亿级市场潜力** **二、主要挑战**1. **空域管理与安全监管难题**2. **技术瓶颈与产业链短板**3. **法规与标准体系待完善*…...
Matlab 分数阶PID控制
1、内容简介 Matlab218-分数阶PID控制 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略...
如何对 Oracle 日志文件进行校验
目录 一、基本概述 二、基础知识 1、工具介绍 (1)BBED (2)dump 2、数据解析 (1)BLOCK 0 (2)BLOCK 1 (3)Block n( >=2 ) (4)redo record header (5)redo change 1)redo change header 2)redo change length list (6)Example 三、参考代码…...
从零开始用 AI 编写一个复杂项目的实践方法论
从零开始用 AI 编写一个复杂项目的实践方法论 这篇文章我用ai润色了一下,但是初稿是完全由我个人整理的逻辑思路,不是完全由ai生成的。其中内容也确实是我在实践中遇到问题、解决问题、总结出来的经验。 在从零开发一个复杂项目时,直接把目标…...
k8s监控方案实践(一):部署Prometheus与Node Exporter
k8s监控方案实践(一):部署Prometheus与Node Exporter 文章目录 k8s监控方案实践(一):部署Prometheus与Node Exporter一、Prometheus简介二、PrometheusNode Exporter实战部署1. 创建Namespace(p…...
2.5 特征值与特征向量
本章围绕特征值、特征向量及其应用展开,是线性代数的核心章节之一。以下从四个核心考点系统梳理知识体系: 考点一:矩阵的特征值与特征向量 1. 计算方法 具体矩阵: 解特征方程 ∣ λ E − A ∣ 0 |\lambda E - A| 0 ∣λE−A∣…...
从简历筛选到面试管理:开发一站式智能招聘系统源码详解
当下,如何打造一款高效、精准的一站式智能招聘系统,成为了很多人力资源科技公司和创业团队关注的焦点。在这篇文章中,将带你深入了解如何从零开始开发一款智能招聘系统源码,涵盖从简历筛选到面试管理的全流程。 一、招聘系统的核心…...
10.进程控制(下)
一、进程程序替换(重点) 在程序替换过程中,并没有创建新的进程,只是把当前进程的代码和数据用新程序的代码和数据进行覆盖式的替换。 1)一旦程序替换成功,就去执行新代码了,后序代码不执行 2&am…...
【Python 字符串】
Python 中的字符串(str)是用于处理文本数据的基础类型,具有不可变性、丰富的内置方法和灵活的操作方式。以下是 Python 字符串的核心知识点: 一、基础特性 定义方式: s1 单引号字符串 s2 "双引号字符串" s…...
最新CDGP单选题(第四章)补充
31、 [单选] 企业数据模型主题域的识别准则必须在整个企业模型中保持一致,以下哪项是常用的主题域识别准则: A:使用规范化规则,从系统组合中分离主题域...
Cursor降智找不到文件(Cursor降智)
文章目录 明明提供了上下文,却找不到文件! 明明提供了上下文,却找不到文件! 解决办法,删除codebase index,最好再把那个Index new folders by default给设置为Disabled。 这样设置貌似就不会出现找不到文件…...
Python基于Django和MySQL实现突发公共卫生事件舆情分析系统(有大屏功能)
说明:这是一个系统实战项目(附带代码文档安装讲解),如需代码文档安装讲解可以直接到文章最后关注获取。 系统演示如下: Python基于Django和MySQL实现突发公共卫生事件舆情分析系统(有大屏功能) 项目背景 随着互联网的…...
cat、more和less的区别
在 Linux 系统中,cat、more 和 less 都是用于查看文件内容的命令,但它们在功能和使用场景上有显著区别。以下是它们的详细对比: 1. cat 命令 功能: - 直接输出整个文件:一次性将文件内容全部显示在终端上ÿ…...
Python cv2特征检测与描述:从理论到实战
在计算机视觉领域,特征检测与描述是图像匹配、物体识别、SLAM等任务的核心技术。本文将结合OpenCV的cv2库,系统讲解特征检测与描述的原理,并通过Python代码演示主流算法的实现。 一、为什么需要特征检测与描述? 图像本质是像素矩…...
实践005-Gitlab CICD全项目整合
文章目录 环境准备环境准备集成Kubernetes Gitlab CICD项目整合项目整合整合设计 后端Java项目部署后端Java项目静态检查后端Java项目镜像构建创建Java项目部署文件创建完整流水线 前端webui项目部署前端webui项目镜像构建创建webui项目部署文件创建完整流水线 构建父子类型流水…...
为了摸鱼和吃瓜,我开发了一个网站
平时上班真的比较累,摸鱼和吃瓜还要跳转多个平台的话,就累上加累了。 所以做了一个聚合了全网主流平台热搜的网站。 目前市面上确实有很多这种网站了,所以目前最主要有两点和他们不同: 给热搜列表增加了配图,刷的时候…...
React -> AI组件 -> 调用Ollama模型, qwen3:1.7B非常聪明
使用 React 搭建一个现代化的聊天界面,支持与 Ollama 本地部署的大语言模型进行多轮对话。界面清爽、功能完整,支持 Markdown 渲染、代码高亮、<think> 隐藏思考标签、流式渐进反馈、暗黑模式适配等特性。 🧩 核心功能亮点 ✅ 模型选择…...
算法中的数学:约数
1.求一个整数的所有约数 对于一个整数x,他的其中一个约数若为i,那么x/i也是x的一个约数。而其中一个约数的大小一定小于等于根号x(完全平方数则两个约数都为根号x),所以我们只需要遍历到根号x,然后计算出另…...
性能远超SAM系模型,苏黎世大学等开发通用3D血管分割基础模型
如果把人的身体比作一座庞大的城市,那么血管无疑就是这座城市的「道路」,动脉、静脉以及毛细血管对应着高速公路、城市道路以及乡间小道,它们相互协作,通过血液将营养物质、氧气等输送到身体各处,从而维持着这座「城市…...
对 Kotlin 中的 data 关键字的理解,相比于普通类有哪些特点?
Kotlin 中的 data 关键字用于声明数据类(Data Class),它专门为简化数据模型的实现而设计的。 1 主构造函数必须至少有一个参数,且参数标记为 val 或 var 数据类的主构造函数必须至少有一个参数,并且这些参数必须使用…...