pxe过程和原理

概要

  1. 远程安装和启动操作系统

  2. 网卡固件支持pxe的接口,一般是有基本的ip/udp协议栈,支持dhcp, tftp协议;bios中可以设置通过pxe启动操作系统

  3. 启动过程,大致如下:

    1. 先发送DHCP Discover消息,请求ip, tftp server地址,bootloader文件名称
    2. 如果没有请求到必要的pxe相关的选项,主要的就有两个TFTP Server Name(tftp服务器地址),Bootfile Name(bootloader的文件名称,相对tftp server的根目录); 则继续执行步骤1,直到取得这些信息
    3. 通过tftp服务器下载到支持pxe启动的bootloader
    4. 后续的事情就交给bootloader了,包括从TFTP服务器下载启动镜像(比如vmlinux),安装镜像(iso文件),自动安装脚本(centos的kickstart脚本)
  4. 分为有盘和无盘系统启动,当客户端机器没有盘时,也可以从网络磁盘启动(比如NFS);客户端有盘时,要么安装操作系统,要么从已安装的磁盘启动(pxe会自动识别是直接安装还是直接启动)

  5. 服务端的dhcp服务器必须支持pxe的相关选项, 这些选项pxe客户端会通过DHCP Discover消息的Request Paramenter List来声明所有需要的选项,如果dhcp server不支持pxe启动,那么就只会回复一个普通的分配地址的DHCP Offer消息,而不会包含pxe启动相关的启动选项,这时候pxe客户端不会直接发送NAK消息拒绝这个Offer, 会继续发送DHCP Discover消息

  6. 之所以不直接NAK没有包含pxe启动的消息,这里是有历史原因的:

    1. dhcp 协议为了兼容BOOTP,以及保持后续的新增选项,对不支持的选项,是可以选择不回复的,对客户端在Request Paramenter List里列出的选项,是尽可能多的回复,单不保证会回复所有的选项
    2. dhcp协议里是允许多个dhcp server存在的,每个server都可以响应DHCP Discover消息,客户端会根据需要来采用多个dhcp server提供配置信息
    3. pxe协议里为了支持不影响已有的dhcp server的配置,pxe启动支持两阶段启动,先是获得地址(可能是dhcp server1),再获得pxe相关的选项(可能是dhcp server2,甚至是通过dhcp relay agent转发到其他网络里的dhcp server),因此当收到不包含pxe相关选项的DHCP Offer消息时,pxe客户端仍然会继续发送DHCP Discover消息,向dhcp server请求pxe相关的选项,否则就不能继续pxe的启动过程
  7. 一般网卡固件里的pxe驱动,只支持通过DHCP和TFTP配合来启动的;但是一些开源的项目,已经拓展了pxe的启动方式,支持通过http, scsi, nfs来引导启动远程操作系统的方式,比较有名的有iPXE(gPXE的继承者)

  8. 另外bootloader也有一些比较有名的,比如SYSLinux, PXELINUX, iPXE也可以作为bootloader来使用

  9. PXE相关的DHCP option基本都可以在RFC 2132, RFC 5071, RFC 4578中找的到解释,也可以参考man dhcp-option来确认dhcpd对这些选项的支持情况

参看

  1. RFC4578: Dynamic Host Configuration Protocol (DHCP) Options for the Intel Preboot eXecution Environment (PXE),主要定义客户端上报系统信息和option请求规范
  2. man dhcp-options, 解释dhcpd的option配置
  3. RFC2132: DHCP Options and BOOTP Vendor Extensions,包含大部分的dhcp option
  4. RFC5071: Dynamic Host Configuration Protocol Options Used by PXELINUX

pxe过程和原理的更多相关文章

  1. iOS程序启动的过程及原理

    iOS程序启动的过程及原理 文字部分 先执行main函数,main内部会调用UIApplicationMain函数 UIApplicationMain函数里面做了什么事情??? 1> 创建UIA ...

  2. 四、Struts2的执行过程和原理

    执行过程和原理(可能面试题) 学习目标:熟知struts2的执行过程(下图记住).源码可以不看 a.过滤器的初始化 .StrutsPrepareAndExecuteFilter是一个过滤器,过滤器就有 ...

  3. android:照片涂画功能实现过程及原理

    这个功能可以帮你实现,在图片上进行随意的涂抹,可以用于SNS产品. 绘图本身很简单,但是要实现在图片上指定的部分精确(位置,缩放)的绘图,就有点麻烦了. 下面讲讲实现过程及原理: UI构图 这个UI, ...

  4. 从CM刷机过程和原理分析Android系统结构

    前面101篇文章都是分析Android系统源代码,似乎不够接地气. 假设能让Android系统源代码在真实设备上跑跑看效果,那该多好.这不就是传说中的刷ROM吗?刷ROM这个话题是老罗曾经一直避免谈的 ...

  5. SSH免密登陆配置过程和原理解析

    SSH免密登陆配置过程和原理解析 SSH免密登陆配置过很多次,但是对它的认识只限于配置,对它认证的过程和基本的原理并没有什么认识,最近又看了一下,这里对学习的结果进行记录. 提纲: 1.SSH免密登陆 ...

  6. Vue是如何渲染页面的,渲染过程以及原理代码

    Vue是如何渲染页面的,渲染过程以及原理代码:https://www.cnblogs.com/ypinchina/p/7238402.html

  7. ES读写数据过程及原理

    ES读写数据过程及原理 倒排索引 首先来了解一下什么是倒排索引 倒排索引,就是建立词语与文档的对应关系(词语在什么文档出现,出现了多少次,在什么位置出现) 搜索的时候,根据搜索关键词,直接在索引中找到 ...

  8. Web APi之控制器创建过程及原理解析(八)

    前言 中秋歇了歇,途中也时不时去看看有关创建控制器的原理以及解析,时间拖得比较长,实在是有点心有余而力不足,但又想着既然诺下了要写完原理一系列,还需有始有终.废话少说,直入主题. HttpContro ...

  9. python easy_install centos 下安装过程和原理解析

    一.easy_install 安装过程 其安装过程有很多种,我也找了很多的例子,但是结果都不太好,以下方法的结果是不错的. easy_install与yum类似,使用easy_install,可以轻松 ...

随机推荐

  1. PyQt(Python+Qt)学习随笔:实现toolButton与Action的关联

    在Qt Designer中,如果创建的窗口为主窗口QMainWindow类型,可以通过<PyQt(Python+Qt)学习随笔:Qt Designer中怎么给toolBar添加按钮 >介绍 ...

  2. john快速破解各种散列hash

    0x01 john工具安装: kali系统自带的有,也可以自己安装在其他linux和windows系统上,关于安装步骤网上都有可自行百度. 0x02 john常用选项 具体的其他选项可通过john - ...

  3. 题解-Decrease

    [MdOI2020] Decrease 古老的博文. 今天巨佬团队 \(\texttt{luogu}\) 公开赛中的第三题,当时我写了好久才想到暴力做法 \(\texttt{42分}\),后来我还很离 ...

  4. 【Azure Developer】通过Azure提供的Azue Java JDK 查询虚拟机的CPU使用率和内存使用率

    问题描述 在Azure上创建虚拟机(VM)后,在门户上可以查看监控指标(Metrics),如CPU Usage,Memory,Disk I/O等.那如何通过Java 代码获取到这些指标呢? 关于VM ...

  5. Linux下基于.NET5开发CAX应用

    <<.NET5下的三维应用程序开发>>一文中介绍了如何在.NET5下使用AnyCAD开发应用程序.相比.NET4.x,.NET5一大进步便是可以跨平台,即可以在Linux.Ma ...

  6. SSO的通用标准OpenID Connect

    目录 简介 OpenID Connect是什么 ID Token 请求ID Token ID Token可以做什么 Open Connect认证码授权的例子 User Info 简介 OpenID C ...

  7. windows10 64位下安装oracle 11g和PL/SQL Developer

    一.材料准备: oracle11g安装包(64位) oracle11g客户端(32位) PL\SQL Developer安装包(32位) 1.下载Oracle 11g链接:http://www.ora ...

  8. AdaBoost 算法-分析波士顿房价数据集

    公号:码农充电站pro 主页:https://codeshellme.github.io 在机器学习算法中,有一种算法叫做集成算法,AdaBoost 算法是集成算法的一种.我们先来看下什么是集成算法. ...

  9. 死磕以太坊源码分析之Ethash共识算法

    死磕以太坊源码分析之Ethash共识算法 代码分支:https://github.com/ethereum/go-ethereum/tree/v1.9.9 引言 目前以太坊中有两个共识算法的实现:cl ...

  10. 超简单的 Docker部署 SpringBoot项目 步骤

    很久之前就用过,一直没有好好写篇博客,今天就总结一下 创建一个 SpringBoot项目 创建一个SpringBoot项目并打成jar包,结构如图 编写 Dockerfile文件 FROM java: ...