# Entorno de ejecución de prearranque

Preboot eXecution Environment (PXE) (Entorno de ejecución de prearranque), es un entorno para arrancar e instalar el sistema operativo en computadoras a través de una red, de manera independiente de los dispositivos de almacenamiento de datos disponibles (como discos duros) o de los sistemas operativos instalados.
PXE fue introducido como parte del framework Wired for Management por Intel y fue descrito en la especificación (versión 2.1) publicada por Intel y Systemsoft el 20 de septiembre de 1999. PXE utiliza varios protocolos de red como IP, UDP, DHCP y TFTP, y conceptos como Globally Unique Identifier (GUID), Universally Unique Identifier (UUID) y Universal Network Device Interface (UNDI).
El término cliente PXE sólo se refiere al papel que la máquina juega en el proceso de arranque mediante PXE. Un cliente PXE puede ser un servidor, una computadora de mesa, portátil o cualquier otra máquina que esté equipada con código de arranque PXE.

## Funcionamiento

El firmware del cliente trata de encontrar un servicio de redirección PXE en la red para recabar información sobre los servidores de arranque PXE disponibles. Tras analizar la respuesta, el firmware solicitará al servidor de arranque apropiado el file path de un network bootstrap program (NBP), lo descargará en la memoria RAM del computador mediante TFTP, probablemente lo verificará, y finalmente lo ejecutará. Si se utiliza un único NBP para todos los clientes PXE se puede especificar mediante BOOTP sin necesidad de un proxy DHCP, pero aún será necesario un servidor TFTP.

## Disponibilidad

PXE fue diseñado para funcionar sobre diferentes arquitecturas. La versión 2.1 de la especificación asigna identificadores de arquitectura a seis tipos distintos de sistemas, incluyendo IA-64 y DEC Alpha. Aunque la especificación sólo soporta completamente IA-32. Intel incluyó PXE en la EFI para IA-64, creando un estándar de facto con esta implementación.

## Protocolo

El protocolo PXE consiste en una combinación de los protocolos DHCP y TFTP con pequeñas modificaciones en ambos. DHCP es utilizado para localizar el servidor de arranque apropiado, con TFTP se descarga el programa inicial de bootstrap y archivos adicionales.
Para iniciar una sesión de arranque con PXE el firmware envía un paquete de tipo DHCPDISCOVER extendido con algunas opciones específicas de PXE al puerto 67/UDP (puerto estándar del servicio DHCP). Estas opciones indican que el firmware es capaz de manejar PXE, pero serán ignoradas por los servidores DHCP estándar.

### Proxy DHCP

Si un servicio de redirección PXE (Proxy DHCP) recibe un paquete DHCPDISCOVER extendido, responde con un paquete de difusión DHCPOFFER extendido con opciones PXE al puerto 68/UDP. Este paquete se difundirá hasta que la mayoría de los clientes PXE se autoconfiguren mediante DHCP. Los clientes se identificarán con su GUID/UUID.
Un paquete DHCPOFFER extendido contiene:
* un campo PXE Discovery Control para indicar si se debe utilizar Multicasting, Broadcasting, o Unicasting para contactar con los servidores de arranque PXE
* una lista con las direcciones IP de los servidores de arranque PXE
* un menú en el que cada entrada representa un servidor de arranque PXE
* un prompt que indica al usuario que pulse <F8> para ver el menú de arranque
* un tiempo de espera que lanza la primera opción del menú de arranque cuando expira
El servicio de proxy DHCP debe ejecutarse sobre el mismo servidor que el servicio estándar de DHCP. Puesto que ambos servicios no pueden compartir el puerto 67/UDP, el Proxy DHCP se ejecuta sobre el puerto 4011/UDP y espera que los paquetes DHCPDISCOVER extendidos de los clientes PXE sean paquetes DHCPREQUEST. El servicio estándar DHCP debe enviar una combinación especial de opciones PXE en su paquete DHCPOFFER, de forma que los clientes PXE sepan que deben buscar un proxy DHCP en el mismo servidor, en el puerto 4011/UDP.

### Servidor de arranque

Para contactar con cualquier servidor de arranque PXE el firmware debe obtener una dirección IP y el resto de información de un único paquete DHCPOFFER extendido. Tras elegir el servidor de arranque PXE apropiado el firmware envía un paquete DHCPREQUEST extendido mediante multicast o unicast al puerto 4011/UDP o broadcast al puerto 67/UDP. Este paquete contiene el servidor de arranque PXE y la capa de arranque PXE, permitiendo ejecutar múltiples tipos de servidores de arranque mediante un único daemon (o programa) de arranque. El paquete DHCPREQUEST extendido también puede ser un paquete DHCPINFORM.
Si un servidor de arranque PXE recibe un paquete DHCPREQUEST extendido como el descrito anteriormente y si está configurado para el tipo de servidor de arranque PXE y la arquitectura de cliente solicitados, debe responder devolviendo un paquete DHCPACK extendido son opciones específicas de PXE.
El contenido más importante de un paquete DHCPACK extendido es:
* el file path completo para descargar el NBP vía TFTP
* el tipo de servidor de arranque PXE y la capa de arranque PXE
* la configuración multicast TFTP, si debe utilizarse multicast TFTP
Un servidor de arranque PXE debe soportar Boot Integrity Services (BIS). BIS permite al cliente PXE verificar los NBPs descargados mediante un archivo de checksum que es descargado desde el mismo servidor de arranque que el NBP.

### Network bootstrap program

Tras recibir el paquete DHCPACK solicitado, el Network Bootstrap Program es descargado y ejecutado en la RAM del cliente. Tiene acceso a las APIs del firmware PXE (Pre-boot, UDP, TFTP, Universal Network Device Interface, UNDI).