DHCP和PXE是怎么工作的
dhcp(Dynamic Host Configuration Protocol):配置一段共享IP地址,为新上线的机器分配IP地址,回收下线机器的IP地址。
正常情况下主机(DHCP client)和DHCP server交互通过四个数据包完成IP的配置,分为DHCP Discover、DHCP Offer、DHCP request、DHCP ACK四步:

如何为新机器分配IP
不完整的包是无法在网络上传输的
一、客户端申请地址(DHCP Discover)
新的机器上线还没有合法的IP地址时,会使用0.0.0.0向255.255.255.255这个地址发送广播包,广播包封装了UDP,UDP封装了BOOTP(Bootstrap Protocol)。这个包发出Boot request,意在告诉局域网中的主机,我还没有IP地址,我的MAC地址是xx:xx:xx:xx:xx:xx,谁能给我一个IP地址?

物理层:包含网卡信息、使用了DHCP协议的UDP包等信息
数据链路层:包含主机MAC地址,广播MAC地址ff:ff:ff:ff:ff:ff等信息
网络层:包含TTL、主机IP地址、广播地址等信息
传输层:udp的端口号等信息
应用层:Boot request中包含当前主机IP地址、DNS服务器地址(此时的主机一无所知,置为0.0.0.0),需要获取的子网掩码、网关、DNS等信息
后续主机和DHCP传输的四个包都是一步一步对以上信息的填补。
二、DHCPserver分配地址(DHCP Offer)
- 局域网中的主机收到网络包判断如果不是发给自己的则丢弃,DHCP服务器发现了dhcp类型的包,于是接收并解开分析,发现有一个新主机向自己申请IP地址,于是DHCP server会保留一个IP地址(期间不会分配给别人)。
- 新主机还没有分配到IP地址,DHCP server仍然需要使用⁄广播包的方式发送,在数据链路层添加自己的MAC地址,设置广播MAC地址。填充自己的IP地址到网络层,设置UDP端口信息,在Boot reply中设置Boot request请求的内容,并附加租约时间。
- 发送广播包

三、新主机选择DHCP Offer(DHCP request)
为什么叫选择DHCP Offer?因为如果有多个DHCP server,他们都会发送DHCP Offer广播包,此时新主机(DHCP client)会收到多个包,通常会选择最先到达的DHCP Offer。选择好offer之后此时的客户端仍然没有IP地址,继续发送广播包,称为DHCP request。
- 设置MAC地址信息,设置IP信息(0.0.0.0和255.255.255.255),设置UDP信息
- 设置Boot request接受的DHCP offer中的IP地址、DHCP server的IP地址、以及要下一次收到ACK的广播或单播模式。
- 通过广播包告诉所有DHCP server,我接受了那个DHCP server的Offer,请其他DHCP server撤销提供的IP地址

四、最终确认(DHCP ACK)
DHCP server收到DHCP request后会使用广播或单播的模式发送一个ACK包作为最终确认,完成这一步新机器的IP地址就设置完成了。
- 组装MAC头,根据request要求用单播还是广播(Bootp flags:BROADCAST设1为广播,设0为单播),单播设置新机器的MAC地址,广播则仍然是
ff:ff:ff:ff:ff:ff,同理组装IP头,UDP头 - 组装应用层BOOTP头,包含要分配给主机的IP地址,主机网卡的MAC地址,以及子网掩码、网关、DNS、租期、续约时间等。

DHCP租约更新
通过以上内容我们知道DHCP分配的IP地址有租约一说,租期到了就需要收回地址,如果主机IP在租期到期后还需要继续使用,那么就要主动向DHCP server以单播的形式发送DHCP request来请求续租。
- 一般在租期过去1/2时发送请求DHCP request请求。
- DHCP server收到请求后会发送DHCP ACK,如果续约成功则返回新的租期给主机;如果DHCP server不允许主机继续使用IP,则DHCP ACK应答会告诉主机。申请失败后主机继续使用该IP,直到7/8时主机再次发送DHCP request请求,如果失败则该地址被释放。
HDCP与PXE
通过DHCP server和PXE server(Pre-boot Execution Environment)、TFTP server可以做到批量安装操作系统。
主机启动是通过BIOS读取MBR(Master Boot Record)来启动GRUB -> 通过GRUB加载内核、initramfs文件 -> 再由内核启动初始化操作系统。所以将PXE client放在BIOS里面,BIOS将PXE client调入内存,通过PXE client与PXE server传输数据和执行指令可以完成操作系统的自动安装
PXE安装过程
- 配置DHCP的
next-server指向PXE server的地址,再配置filename指向启动文件pxelinux.0 - 主机拿到IP地址的同时也会收到PXE server的IP地址和启动文件pxelinux.0路径,主机的PXE client通过TFTP下载pxelinux.0并执行,拿到pxelinux.cfg,该配置文件有内核、initramfs的路径。
- PXE client读取配置文件后逐个请求,完成安装后重启并从硬盘启动操作系统。
如果需要一些定制化的配置可以使用kickstart配置文件。

学习自:
《趣谈网络协议》刘超
《图解TCP/IP》
《图解HTTP》
《网络是怎样连接的》
DHCP和PXE是怎么工作的的更多相关文章
- DHCP和PXE
继续学习,Let's go!DHCP和PXE都是什么呢?如果非科班出身,可能一脸懵逼,好多东西需要去学习了,真的,继续学吧,付出不一定会有回报,不付出肯定就是等死了,呵呵! 一.DHCP 真正需要手动 ...
- 第4讲 | DHCP与PXE:IP是怎么来的,又是怎么没的?
第4讲 | DHCP与PXE:IP是怎么来的,又是怎么没的? linux 配置网络IP地址: 使用 net-tools: sudo ifconfig eth1 10.0.0.1/24 sudo ifc ...
- DHCP(动态主机配置协议)工作流程
一.DHCP的作用 我们先来看一下什么是DHCP,DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)它可以为客户机自动分配IP地址.子网掩码以及缺省网 ...
- CentOS6下DHCP服务(一)工作原理及安装配置说明
1.DHCP服务用途 DHCP是Dynamic Host Configuration Protocol的简写,DHCP服务器最主要的工作就是自动地将网络参数分配给网络中的每台计算机,让客户端的计算机在 ...
- DHCP服务+PXE自动安装系统
DHCP服务+PXE自动安装系统 DHCP安装 安装DHCP服务器 yum install dhcp -y 安装完dhcp默认无法启动,需要编辑配置文件设置分配地址范围等相关信息,服务器自身IP地址要 ...
- 4 (计算机网络) DHCP与PXE:IP是怎么来的,又是怎么没的?
如何配置 IP 地址? 那如何配置呢?如果有相关的知识和积累,你可以用命令行自己配置一个地址.可以使用 ifconfig,也可以使用 ip addr.设置好了以后,用这两个命令,将网卡 up 一下,就 ...
- [无人值守安装操作系统]__RHEL6__FTP+TFTP+DHCP+Kickstart+PXE
实验环境 1.实验平台:VMware Workstation 10 2.实验OS:RHEL6 3.服务器A: (1) 10.0.10.158 (2) DHCP/FTP/TFTP (3) 有可使用的yu ...
- linux dhcp搭建及pxe无人值守装机
DHCP动态主机配置协议:由IETF组织制定,用来简化主机ip地址分配管理可以自动分配的入网参数ip地址/子网掩码/广播地址默认网关地址DNS服务器地址 ----------------------- ...
- DHCP协议和PXE
在学习IP地址基本概念之后,需要了解到如果需要和其他机器通讯,我们就需要一个通讯地址,我们需要给网卡配置一个地址. 如何配置 IP 地址? 可以用命令行自己配置一个地址.可以使用 ifconfig,也 ...
- dhcp、tftp及pxe简介
DHCP: 全称:Dynamic Host Configuration Protocol 动态主机配置协议 DHCP配置内容: IP/Netmask Gateway DNS Server bootp ...
随机推荐
- XTTS系列之五:警惕大文件表空间
在上篇<XTTS系列之四:迷迷糊糊的并行度>验证之后,就让测试组在RMAN配置中设置好正确的并行.然后重新将备份任务执行,平均速度直接由之前的150MB/s提升为1200MB/s.优化效果 ...
- 记一次 .NET 在线客服系统同时支持 SQL Server 和 MySQL 没卡死分析
前段时间我发表了一系列文章,开始介绍基于 .net core 的在线客服系统开发过程. 有很多朋友一直提出希望能够支持 MySQL 数据库,考虑到已经有朋友在用 SQL Server,我在升级的过程中 ...
- python的jsonpath 提取器
jsonpath 解析 接下来讲一个非常强大并且方便的 jsonpath 专门用于 json 解析,解决路径深的老大难问题!先安装依赖包 pip install jsonpath 学习jsonpath ...
- 移动端APP组件化架构实践
前言 对于中大型移动端APP开发来讲,组件化是一种常用的项目架构方式.个人最近几年在工作项目中也一直使用组件化的方式来开发,在这过程中也积累了一些经验和思考.主要是来自在日常开发中使用组件化开发遇到的 ...
- Hexo博客Next6.0版本主题配置(背景图片加载、侧边栏社交小图标设置、设置网站图标)
随机背景图片加载 原理 自动更换背景是修改添加背景的css样式实现 图片来源 https://source.unsplash.com/ 修改背景样式 修改themes\next\source\css\ ...
- 源码解析Collections.sort ——从一个逃过单测的 bug 说起
本文从一个小明写的bug 开始,讲bug的发现.排查定位,并由此展开对涉及的算法进行图解分析和源码分析. 事情挺曲折的,因为小明的代码是有单测的,让小明更加笃定自己写的没问题.所以在排查的时候,也经历 ...
- zabbix 主动模式下报文分析
获取监控项列表 客户端发起请求 3次握手之后,请求监控项列表: {"request":"active checks","host":&quo ...
- 如何用 Java 写一个 Java 虚拟机
项目链接 https://github.com/FranzHaidnor/haidnorJVM haidnorJVM 使用 Java17 编写的 Java 虚拟机 意义 纸上得来终觉浅,绝知此事要躬行 ...
- linux文本编辑YCM报错
linux文本编辑YCM报错 刚从github安装了vimplus,可是发现存在不少的问题.索性给直接记录一下. The ycmd server SHUT DOWN (restart with ':Y ...
- asp.net core之Options
本文将介绍 ASP.NET Core 中的 Options 概念和使用方法.Options 是一种配置管理机制,可以将应用程序的配置信息从代码中分离出来,提高代码的可维护性和可测试性.我们将详细介绍如 ...