# Preboot Execution Environment

Preboot Execution Environment (PXE), ovvero ambiente di esecuzione pre-boot, in informatica, indica un metodo per eseguire il boot di un computer utilizzando una connessione di rete ethernet ed il supporto di un server, senza bisogno di una unità di memoria di massa.
Fu introdotto come parte del framework Wired for Management di Intel, ed è descritto nella specifica pubblicata da Intel e Systemsoft il 20 settembre 1999. Nel 2010 ne venne creata una implementazione open source denominata iPXE.

## Caratteristiche
### Funzionamento

Può essere considerato uno dei modi per caricare il sistema operativo su un calcolatore. Quando è presente la funzionalità PXE, il BIOS presenta all'utente la possibilità di scegliere, tra i possibili dispositivi da cui caricare il sistema operativo, il boot da rete. Se viene selezionata questa opzione, il firmware PXE utilizza DHCP per configurare un indirizzo IP sulla scheda di rete ed individuare un server ("boot server") da cui scaricare via TFTP un file, immagazzinandolo nella memoria RAM. Questo file viene poi eseguito, provvedendo ad avviare un sistema operativo.
Nella modalità di funzionamento prevista dallo standard, il server DHCP non fornisce direttamente il boot server, ma agisce da "PXE redirection service", ovvero redirige il client ai server PXE disponibili. I server PXE sono server DHCP modificati, che utilizzano la porta UDP 4011, e forniscono al client l'indirizzo IP del boot server ed il nome del network bootstrap program (NBP) da scaricare.
Nella pratica, normalmente il firmware PXE è in grado di ricevere direttamente dal server DHCP i parametri necessari per identificare il boot server e il file da scaricare, ed è quindi possibile configurare un normale server DHCP per fornire i parametri necessari al boot via PXE.

### Protocolli di rete

Utilizza molteplici protocolli di rete:
* IP
* UDP
* DHCP
* TFTP
Inoltre, utilizza concetti come GUID/UUID e Universal Network Device Interface ed estende il firmware del client PXE (il computer che viene avviato via PXE) con ulteriori Application programming interface. Questa voce descrive la modalità di funzionamento prevista nella specifica, ma anche alcune varianti comunemente implementate.

### Piattaforme supportate

PXE è stato progettato per essere utilizzabile su molte architetture. La specifica v2.1 definisce identificatori di architettura per 6 tipi di sistemi, compresi IA64 Itanium architecture e Alpha. Tuttavia, la specifica copre completamente solo Intel 32 Bit (IA-32). Intel ha incluso PXE nella Extensible Firmware Interface per IA-64, creando uno standard de facto con la sua implementazione.

### Uso del DHCP

Il client PXE si identifica come tale verso il server DHCP, inserendo nel pacchetto DHCPDISCOVER, il parametro Class Id con un valore della forma
Se è disponibile a ottenere i parametri di boot direttamente dal server DHCP, richiede i seguenti parametri:
Il server DHCP decide se inviare i parametri necessari al boot da rete, e quali parametri inviare, sulla base dei dati presenti nella richiesta DHCP. Ad esempio, può essere necessario fornire a calcolatori differenti diversi boot file.
In particolare, il formato dell'opzione Class Id è costruito per codificare in modo standard i dati necessari ad identificare un client.

### Menù PXE

Il protocollo PXE permette inoltre al server DHCP di inviare al client gli elementi per offrire all'utente un menù con diverse opzioni di boot. Questo menù viene implementato dal firmware PXE, e permette di proseguire nel processo di boot con diversi server o file a seconda delle scelte dell'utente.

## Scaricamento del Network Bootstrap Program

Dopo aver identificato il boot server da usare ed il nome del file da scaricare, il firmware PXE scaricherà questo file via TFTP, memorizzandolo nella propria RAM, ne verificherà la correttezza e lo eseguirà. A questo punto il compito del PXE in senso stretto è finito, ed è l'NBP a prendere il controllo del calcolatore.

### Multicast

Il protocollo PXE prevede la possibilità di far scaricare l'NBP in modalità multicast, in modo da ridurre il carico sulla rete e sul server nel caso molti client tentino di avviarsi contemporaneamente.

## Il Network Bootstrap Program

In pratica, spesso l'NBP è in effetti un boot loader, ovvero un programma che a sua volta scarica via TFTP il kernel del sistema operativo e possibilmente un "initial ramdisk", ovvero l'immagine di un filesystem che viene copiata in memoria RAM (detta comunemente initrd).
L'immagine di disco contenuta nell'initrd potrà accedere ad ulteriori componenti attraverso la rete, ad esempio montare un filesystem di rete, come NFS o CIFS, se lo scopo è realizzare una installazione diskless, oppure scaricare moduli di un programma di installazione e sistema operativo da installare via FTP o HTTP, se lo scopo è installare un nuovo sistema operativo.

### Menù del bootloader

Il booloader può offrire all'utente un menù con diverse opzioni di boot, e/o la possibilità di modificare i parametri passati al sistema operativo, ed implementare diversi modi di scaricare il resto del sistema operativo.

## Applicazioni ed utilizzo

Il boot via PXE viene utilizzato nei seguenti scenari:
* installazione via rete di un sistema operativo, che viene installato in modo tradizionale, ovvero sulla memoria di massa, senza dover acquistare o masterizzare un cd-rom, e funziona anche in assenza delle periferiche spesso usate a questo scopo (lettore cd-rom, memorie USB, possibilmente anche monitor e tastiera)
* possibilità di caricare su un calcolatore un sistema operativo diverso da quello normalmente usato, ad esempio per riparare una installazione malfunzionante o per utilizzarlo per funzioni particolari.
* restore completo di un calcolatore da un backup.
* network computing, ovvero utilizzo primario di un sistema operativo caricato dalla rete.

## Sicurezza

PXE eredita tutte le debolezze di DHCP, ma ne amplifica la portata, in quanto al protocollo viene demandata non solo l'assegnazione di un indirizzo IP, ma la selezione di un sistema operativo da eseguire, che avrà il controllo completo dell'hardware.
Se non è garantita la sicurezza fisica del calcolatore, e quindi è possibile che estranei lo colleghino a reti diverse da quella prevista, lasciare abilitata l'opzione di boot via PXE è equivalente a permettere l'avvio da dispositivi rimovibili: avendo accesso alla console e la possibilità di riavviare il calcolatore un estraneo potrà avviare un sistema operativo di propria scelta, con il quale tra l'altro avrà libero accesso a tutti i dati memorizzati sulla memoria di massa del calcolatore.
Inoltre, visto che è possibile che su una rete venga installato un server DHCP malevolo, tale server può anche offrire ad eventuali client PXE un sistema operativo malevolo. Per questo motivo, su un calcolatore che dovrebbe eseguire un sistema operativo dalla propria memoria di massa, l'opzione di boot via PXE dovrebbe essere disabilitata.
Un client PXE dovrebbe assicurarsi che l'immagine che avvia venga da una sorgente di fiducia. Il protocollo prevede funzionalità in questo senso.
Se l'NBP contiene dati sensibili, come ad esempio password o chiavi crittografiche per accedere ad altri servizi, è possibile che un estraneo collegato abusivamente alla rete ne ottenga una copia, pertanto bisogna assicurarsi che tale file venga inviato solo a client di fiducia.