• pxe过程和原理


    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
  • 相关阅读:
    C# winform判断窗体是否已打开
    对象与json字符串转换类设计
    Redis 操作帮助类
    C# redis客户端帮助类
    RedisHelper Redis帮助类
    Vue.js实现tab切换效果
    Uni-app 使用总结
    C#中的委托和事件(续)
    12小时超级马拉松赛记
    2016年8月份
  • 原文地址:https://www.cnblogs.com/zhedan/p/12467522.html
Copyright © 2020-2023  润新知