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)学习随笔:QDockWidget停靠部件的allowedAreas属性

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 QDockWidget的allowedAreas属性用于控制停靠部件在 ...

  2. 第二十九章、containers容器类部件QFrame框架部件详解

    一.概述 容器部件就是可以在部件内放置其他部件的部件,在Qt Designer中可以使用的容器部件有如下: 容器中的Frame为一个矩形的框架对象,对应类QFrame,QFrame类是PyQt中带框架 ...

  3. 第10.4节 Python模块的弱封装机制

    一. 引言 Python模块可以为调用者提供模块内成员的访问和调用,但某些情况下, 因为某些成员可能有特殊访问规则等原因,并不适合将模块内所有成员都提供给调用者访问,此时模块可以类似类的封装机制类似的 ...

  4. PyQt(Python+Qt)学习随笔:QTreeWidget中获取可见项视口位置矩形的visualItemRect方法

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 树型部件的visualItemRect方法可以返回参数指定项在视口的位置矩形. QRect visu ...

  5. PyQt(Python+Qt)学习随笔:Qt Designer中QAbstractButton派生按钮部件的text属性

    text属性保存按钮上显示的文字,如果按钮未设置文字则为空字符串.如果文字中包含有与符号('&'),则该按钮会自动设置一个快捷键,快捷键就是'&'后第一个字符,显示时会在该字符下加下划 ...

  6. 谈谈传说中的redo log是什么?有啥用?

    目录 一.引出 redo log 的作用 二.思考一个问题: 三.redo log block 四.redo log buffer 五.redo log的刷盘时机 六.推荐参数 七.redo log ...

  7. jQuery无限滚动

    由于demo实在虚拟桌面写的,所以懒得在敲一遍了,直接贴图了

  8. mybatis-generator 插件用法

    xml 配置 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE generatorCo ...

  9. 转:什么是Shingling算法

    shingling算法用于计算两个文档的相似度,例如,用于网页去重.维基百科对w-shingling的定义如下: In natural language processing a w-shinglin ...

  10. 微信小程序下拉加载下一页

    小程序做得多了,有些常用功能就有必要记录一下 请看详解: 微信小程序之下拉触底时加载下一页 wxml参考: <scroll-view class='dataContainer' scroll-y ...