pxe过程和原理
pxe过程和原理
概要
远程安装和启动操作系统
网卡固件支持pxe的接口,一般是有基本的ip/udp协议栈,支持dhcp, tftp协议;bios中可以设置通过pxe启动操作系统
启动过程,大致如下:
- 先发送DHCP Discover消息,请求ip, tftp server地址,bootloader文件名称
- 如果没有请求到必要的pxe相关的选项,主要的就有两个TFTP Server Name(tftp服务器地址),Bootfile Name(bootloader的文件名称,相对tftp server的根目录); 则继续执行步骤1,直到取得这些信息
- 通过tftp服务器下载到支持pxe启动的bootloader
- 后续的事情就交给bootloader了,包括从TFTP服务器下载启动镜像(比如vmlinux),安装镜像(iso文件),自动安装脚本(centos的kickstart脚本)
分为有盘和无盘系统启动,当客户端机器没有盘时,也可以从网络磁盘启动(比如NFS);客户端有盘时,要么安装操作系统,要么从已安装的磁盘启动(pxe会自动识别是直接安装还是直接启动)
服务端的dhcp服务器必须支持pxe的相关选项, 这些选项pxe客户端会通过DHCP Discover消息的Request Paramenter List来声明所有需要的选项,如果dhcp server不支持pxe启动,那么就只会回复一个普通的分配地址的DHCP Offer消息,而不会包含pxe启动相关的启动选项,这时候pxe客户端不会直接发送NAK消息拒绝这个Offer, 会继续发送DHCP Discover消息
之所以不直接NAK没有包含pxe启动的消息,这里是有历史原因的:
- dhcp 协议为了兼容BOOTP,以及保持后续的新增选项,对不支持的选项,是可以选择不回复的,对客户端在Request Paramenter List里列出的选项,是尽可能多的回复,单不保证会回复所有的选项
- dhcp协议里是允许多个dhcp server存在的,每个server都可以响应DHCP Discover消息,客户端会根据需要来采用多个dhcp server提供配置信息
- pxe协议里为了支持不影响已有的dhcp server的配置,pxe启动支持两阶段启动,先是获得地址(可能是dhcp server1),再获得pxe相关的选项(可能是dhcp server2,甚至是通过dhcp relay agent转发到其他网络里的dhcp server),因此当收到不包含pxe相关选项的DHCP Offer消息时,pxe客户端仍然会继续发送DHCP Discover消息,向dhcp server请求pxe相关的选项,否则就不能继续pxe的启动过程
一般网卡固件里的pxe驱动,只支持通过DHCP和TFTP配合来启动的;但是一些开源的项目,已经拓展了pxe的启动方式,支持通过http, scsi, nfs来引导启动远程操作系统的方式,比较有名的有iPXE(gPXE的继承者)
另外bootloader也有一些比较有名的,比如SYSLinux, PXELINUX, iPXE也可以作为bootloader来使用
PXE相关的DHCP option基本都可以在RFC 2132, RFC 5071, RFC 4578中找的到解释,也可以参考man dhcp-option来确认dhcpd对这些选项的支持情况
参看
- RFC4578: Dynamic Host Configuration Protocol (DHCP) Options for the Intel Preboot eXecution Environment (PXE),主要定义客户端上报系统信息和option请求规范
- man dhcp-options, 解释dhcpd的option配置
- RFC2132: DHCP Options and BOOTP Vendor Extensions,包含大部分的dhcp option
- RFC5071: Dynamic Host Configuration Protocol Options Used by PXELINUX
pxe过程和原理的更多相关文章
- iOS程序启动的过程及原理
iOS程序启动的过程及原理 文字部分 先执行main函数,main内部会调用UIApplicationMain函数 UIApplicationMain函数里面做了什么事情??? 1> 创建UIA ...
- 四、Struts2的执行过程和原理
执行过程和原理(可能面试题) 学习目标:熟知struts2的执行过程(下图记住).源码可以不看 a.过滤器的初始化 .StrutsPrepareAndExecuteFilter是一个过滤器,过滤器就有 ...
- android:照片涂画功能实现过程及原理
这个功能可以帮你实现,在图片上进行随意的涂抹,可以用于SNS产品. 绘图本身很简单,但是要实现在图片上指定的部分精确(位置,缩放)的绘图,就有点麻烦了. 下面讲讲实现过程及原理: UI构图 这个UI, ...
- 从CM刷机过程和原理分析Android系统结构
前面101篇文章都是分析Android系统源代码,似乎不够接地气. 假设能让Android系统源代码在真实设备上跑跑看效果,那该多好.这不就是传说中的刷ROM吗?刷ROM这个话题是老罗曾经一直避免谈的 ...
- SSH免密登陆配置过程和原理解析
SSH免密登陆配置过程和原理解析 SSH免密登陆配置过很多次,但是对它的认识只限于配置,对它认证的过程和基本的原理并没有什么认识,最近又看了一下,这里对学习的结果进行记录. 提纲: 1.SSH免密登陆 ...
- Vue是如何渲染页面的,渲染过程以及原理代码
Vue是如何渲染页面的,渲染过程以及原理代码:https://www.cnblogs.com/ypinchina/p/7238402.html
- ES读写数据过程及原理
ES读写数据过程及原理 倒排索引 首先来了解一下什么是倒排索引 倒排索引,就是建立词语与文档的对应关系(词语在什么文档出现,出现了多少次,在什么位置出现) 搜索的时候,根据搜索关键词,直接在索引中找到 ...
- Web APi之控制器创建过程及原理解析(八)
前言 中秋歇了歇,途中也时不时去看看有关创建控制器的原理以及解析,时间拖得比较长,实在是有点心有余而力不足,但又想着既然诺下了要写完原理一系列,还需有始有终.废话少说,直入主题. HttpContro ...
- python easy_install centos 下安装过程和原理解析
一.easy_install 安装过程 其安装过程有很多种,我也找了很多的例子,但是结果都不太好,以下方法的结果是不错的. easy_install与yum类似,使用easy_install,可以轻松 ...
随机推荐
- 第15.15节 PyQt(Python+Qt)入门学习:Designer的menu菜单、toolBar工具栏和Action动作详解
老猿Python博文目录 老猿Python博客地址 一.引言 Qt Designer中的部件栏并没有菜单.toolBar以及Action相关的部件,仅在MainWindow类型窗口提供了menu.to ...
- PyQt(Python+Qt)学习随笔:Qt Designer中Action创建的方法
在Qt Designer中,可以两种方法创建Action对象,一种是菜单定义时,一种是单独定义. 一.定义菜单创建Action 在Qt Designer中创建菜单时,如果对应菜单是最终执行的菜单项,则 ...
- Nessus破解没有Scan选项的解决办法
如图,安装之后无Scan选项,流程按照吾爱破解上的文章:https://www.52pojie.cn/thread-1140341-1-1.html 解决办法为: 首先nessus.license在安 ...
- python接口测试自动化框架-发送邮件,邮箱报错: 535 Error, authentication failed
1.无意中把腾讯企业邮箱设置为安全登录,接口测试自动化发送邮件,不能被正常接收.错误信息为:535 Error, authentication failed. 原因:认证安全登录后,原来新的邮箱代码传 ...
- 返回sourceString 中出现的第一个 searchString 的索引
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- springboot:定时任务
在日常的开发过程中经常使用到定时任务,在springMVC的开发中,经常和quartz框架进行集成使用,但在springboot中没有这么做,而是使用了java的线程池来实现定时任务. 一.概述 在s ...
- STL——容器(List)list 的反序排列
list.reverse(); //反转链表,比如list包含1, 2, 3, 4, 5五个元素,运行此方法后,list就包含5, 4, 3, 2, 1元素. 1 #include <iostr ...
- STL—— 容器(vector)的各种功能方法
1. 获取容器的元素个数 size() 使用 vectorName.size() 可以输出这个容器中类型的个数,如下代码: 1 #include <iostream> 2 #include ...
- gnuplot图例legend设置
//将图例放在右下角 set key bottom //将图例放在中间 set key center //将图例放在左边 set key left //将图例放在指定位置右下角的坐标为(10,0.7) ...
- AWT01-体系概述
1.概述 AWT(Abstract Window Toolkit),中文译为抽象窗口工具包,该包提供了一套与本地图形界面进行交互的接口,是Java提供的用来建立和设置Java的图形用户界面的基本工具. ...