Citrix Provisioning Service使用了PXE技术来启动虚拟机给用户使用。

首先, 虚拟机默认下必须设置为网卡启动,网卡通过PXE bootROM在网络中发送FIND帧,该数据帧包含了自己的MAC网卡地址,DHCP服务器接收到该数据帧后,会向网卡返回数据包,其中包括了DHCP为网卡分配的IP地址、子网掩码、网关等信息,网卡收到服务器的指派的参数后,会通过TFTP向服务器发起连接请求,以便和服务器建立连接,并开始数据通信。

客户端和TFTP服务器建立通讯之后,就会从实现DHCP服务器上配置的67选项中下载启动映像文件并启动,并通过该启动映像文件连接到CitrixProvisioning Service服务器真正开启该虚拟机。

 使用Wireshark追踪分析PVS PXE启动数据包_虚拟机

PVS的PXE引导过程主要可以分为4个阶段:

  1. DHCP – 通过PXE启动下载引导文件

  2. 登录到PVS服务器

  3. Streaming Pre-BniStack

  4. Determining if BNIStack Driveris up

 

测试环境为:

PVS服务器:10.1.1.1

目标设备:10.1.1.100

 

 

第一阶段:DHCP – 通过PXE启动下载引导文件

使用Wireshark追踪分析PVS PXE启动数据包_服务器_02

使用Wireshark追踪分析PVS PXE启动数据包_DHCP_03

说明:

  1. 1.1   DHCP发现(DISCOVER)

目标设备在物理子网上发送广播来寻找可用的服务器。网络管理员可以配置一个本地路由来转发DHCP包给另一个子网上的DHCP服务器。该目标设备实现生成一个目的地址为255.255.255.255或者一个子网广播地址的UDP包。

  1. 1.2   DHCP提供(OFFER)

当DHCP服务器收到一个来自目标设备的IP租约请求时,它会提供一个IP租约。DHCP为目标设备保留一个IP地址,然后通过网络单播一个DHCPOFFER消息给目标设备。该消息包含目标设备的MAC地址、服务器提供的IP地址、子网掩码、租期以及提供IP的DHCP服务器的IP。

服务器基于在CHADDR字段指定的目标设备硬件地址来检查配置。这里的服务器,10.1.1.1,将IP地址指定于YIADDR字段。

  1. 1.3   DHCP请求(REQUEST)

当目标设备PC收到一个IP租约提供时,它必须告诉所有其他的DHCP服务器它已经接受了一个租约提供。因此,该目标设备会发送一个DHCPREQUEST消息,其中包含提供租约的服务器的IP。当其他DHCP服务器收到了该消息后,它们会收回所有可能已提供给目标设备的租约。然后它们把曾经给目标设备保留的那个地址重新放回到可用地址池中,这样,它们就可以为其他计算机分配这个地址。任意数量的DHCP服务器都可以响应同一个IP租约请求,但是每一个目标设备网卡只能接受一个租约提供。

  1. 1.4   DHCP确认(Acknowledge,ACK)

当DHCP服务器收到来自目标设备的REQUEST消息后,它就开始了配置过程的最后阶段。这个响应阶段包括发送一个DHCPACK包给目标设备。这个包包含租期和目标设备可能请求的其他所有配置信息。这时候,TCP/IP配置过程就完成了。

使用Wireshark追踪分析PVS PXE启动数据包_服务器_04

说明:

  1. 1.1   地址解析(ARP)

当目标设备获取到IP地址之后,将会通过地址解析协议(Address Resolution Protocol)查询DHCP服务器的MAC地址,以保证通信的顺利进行。这是因为在TCP/IP协议中,规定在一个局域网中的设备必须彼此知道对方的MAC地址,否则不能直接通信。上图显示了目标设备广播了一个数据包,内容是谁是10.1.1.1。

  1. 1.2   地址解析(ARP)

DHCP服务器接受到这个数据包之后,发现自己是10.1.1.1,于是将自己的MAC地址填入应答数据包,发送给目标设备的MAC地址。内容是10.1.1.1的MAC地址是32:af:85:d8:16:be。

  1. 1.3   DHCP请求(REQUEST)

目标设备再次发起一个DHCP请求,根据我们在配置DHCP选项找到我们所填写的IP地址,即PVS服务器的IP地址。

  1. 1.4   DHCP确认(Acknowledge,ACK)

DHCP返回应答数据包。

  1. 1.5   地址解析(ARP)

目标设备发起地址解析,解析TFTP服务器的MAC地址。这里DHCP和TFTP服务器是一台服务器。

  1. 1.6   地址解析(ARP)

PVS服务器返回自己的应答MAC数据包。这里DHCP和PVS服务器是一台服务器。

使用Wireshark追踪分析PVS PXE启动数据包_服务器_05

说明:

  1. 1.1   TFTP读请求(TFTP)

目标设备送一个读请求(RRQ)包给TFTP服务器,这时和PVS服务器处于同一角色服务器上,包含了文件名和传输模式。如图,数据包内容为在TFTP服务器上读取引导文件为ARDBP32.bin的数据文件,后面是传输模式。

  1. 1.2   TFTP传输(TFTP)

TFTP服务器向目标设备发送编过号的数据包,目前其编号为1。

  1. 1.3   ACK应答(TFTP)

目的主机用编号的ACK包应答所有的数据包。

如下的数据包我们可以看见,这时已经建立TFTP连接并开始进行TFTP传输了。

 

第二阶段:登录到PVS服务器

使用Wireshark追踪分析PVS PXE启动数据包_DHCP_06

使用Wireshark追踪分析PVS PXE启动数据包_DHCP_07

说明:

  1. 2.1   传输结束(TFTP)

在这里你会看到TFTP传输结束的标志,在142个数据包的时候,TFTP传输的数据包后面加上了last,表示这是传输的最后一个TFTP数据包。

  1. 2.2   确认完毕(TFTP)

在143数据包这里,目标设备返回了ACK确认包,你会知道的传输已通过验证,服务器发送的最后一个TFTP文打正确验证完成。整个TFTP传输过程完毕。

使用Wireshark追踪分析PVS PXE启动数据包_服务器_08

说明:

  1. 2.1   登陆PVS(UDP)

一旦引导文件下载完毕,根据引导文件里面的配置信息,目标设备会不断发送一系列的数据包到PVS服务器试图请求源数据,同时尝试根据配置信息登录服务器。

使用Wireshark追踪分析PVS PXE启动数据包_服务器_09

说明:

  1. 2.1   地址解析(ARP)

当完成登录过程,目标设备将发送的Streaming Server服务器的IP完成一个ARP请求。查找到StreamingServer服务器的MAC地址信息。在这里StreamingServer服务器和PVS服务器在同一台服务器角色上。

  1. 2.2   流量传输(UDP)

如图,在登陆服务器之后,服务器和目标设备之间的流量继续使用之前的源端口和目标端口进行数据传输。

 

第三阶段:Streaming Pre-BniStack(预启动)

使用Wireshark追踪分析PVS PXE启动数据包_虚拟机_10

使用Wireshark追踪分析PVS PXE启动数据包_DHCP_11

说明:

  1. 3.1   处理流量(UDP)

在这里继续使用UNDI驱动程序来处理流量。(通用网络驱动程序接口(Network Driver Interface),并将派发一对一的包。

上面说得十分不明了,我也不甚明了,那么按照我的理解做下解释。也许大家都知道我们在安装操作系统的时候,其实按照过程是分为两个阶段,一个是预安装阶段,一个正式的安装阶段。

预安装阶段,这个阶段其实是没有开始安装操作系统的,我们需要给安装操作系统的环境做一些配置,比如选择我们需要安装操作系统的语言、输入法、版本和同意许可等等的选项配置。那么类似的,在这个阶段,PVS也不是在启动操作系统,而是在准备启动操作系统之前的一些准备工作,使用UNDI驱动程序进行的,而上面的比喻中,安装操作系统的于按安装阶段出现给我们选择输入法、版本等的界面其实是Windows PE的界面,是微软专门为域安装正版阶段准备的微型界面,UNDI驱动和Windows PE的作用类似。

在此期间,UNDI主要是将目标设备的显示窗口标识出来并加载相应的底层驱动程序。

使用Wireshark追踪分析PVS PXE启动数据包_虚拟机_12

特别需要说明的这一步,出现问题常常和我们的网卡有关系,我们在部署的时候都会将网卡的大数据包卸载关闭,就是为了避免在这一步在UNDI驱动程序和PVS服务器大量交互的过程中引起冲突。

第四阶段:Determining if BNIStack Driver is up(正式启动)

使用Wireshark追踪分析PVS PXE启动数据包_DHCP_13

使用Wireshark追踪分析PVS PXE启动数据包_DHCP_14

说明:

  1. 4.1   正式传输操作系统(UDP)

一旦从UNDI驱动到BNIStack驱动(PVS目标设备的主驱动程序),则目标设备将开始要求更多的数据。这个传输过程将持续到登录界面的窗口。就如我上面的描述安装操作系统类似,到这里就正式的启动操作系统了。

使用Wireshark追踪分析PVS PXE启动数据包_虚拟机_15

注意,上图中出现的目标设备的IP地址请求数据包哪里,这即是从UNDI驱动到BNIStack驱动的标志。

使用Wireshark追踪分析PVS PXE启动数据包_虚拟机_16 

在此期间的问题通常是要么是相关驱动程序要么是服务与底层驱动程序引起的,如XenTools和VMware Tools或防病毒产品,从而引起BNIStack冲突就可能出现的问题。

鉴于Citrix Provisioning Service的实现需要配置DHCP服务器,同时虚拟机启动时发起的广播包对其他终端会造成影响。如果生产环境下的其他PC不小心设置成网卡启动,也会进入PVS的环境中。所以Citrix PVS在实施时都是在隔离环境中进行。

最后附上一副网络上的PVS启动流程图:

使用Wireshark追踪分析PVS PXE启动数据包_DHCP_17