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

最新文章

  1. Fedora 21 安装 Nvidia 驱动以及失败后的补救方法
  2. 铁人系列(2)LA2218
  3. noip2014普及组——珠心算测验
  4. (转)兼容主流浏览器的CSS透明代码
  5. HID Boot device.
  6. eclipse 好用的插件总结
  7. 同样是IT培训,为什么人家月薪过万,你才几千,问题在哪?!
  8. shape图形的使用
  9. spring jpa 语法
  10. Harbor 使用 Helm 一键安装
  11. js将数组根据条件分组
  12. Java设计模式(13)模板模式(Template模式)
  13. Spark2 Dataset DataFrame空值null,NaN判断和处理
  14. 22-[模块]-hashlib
  15. 扒一扒MathType不为人知的技巧
  16. 微信开发 api 需要 https 服务器
  17. HTML5坦克大战(2)绘制坦克复习
  18. python文章的抓取
  19. 《暗黑世界V1.6》服务器代码执行图
  20. oop 单例模式

热门文章

  1. 乌云wooyun网站硬盘复活
  2. 商品sku的排列组合
  3. CSP-S 2020 游记
  4. Linux 查看CPU型号,内存大小,硬盘空间的命令
  5. Spring Boot 的2020最后一击:2.4.1、2.3.7、2.2.12 发布
  6. java-01-基础语法
  7. js下 Day18、综合案例
  8. react第十二单元(react路由-使用react-router-dom-认识相关的组件以及组件属性)
  9. 初始Node
  10. [TSCTF-J] relax