A bit of history
The PXE standard has been around for a long time, TFTP even longer. The protocol was really designed to get small payloads down over shaky networks that operated at 10Mb/s at best. With the Gigabit network now being the standard, and more and more moving into WIFI, ADSL, Cable etc,   PXE and its protocols are clearly outdated. Transfer speeds are low and things generally don’t work too well over high latency and/or low bandwidth links due to the content size required in today’s environment. A typical x64 boot image is well over 300 MegaBytes today, a size which the poor old TFTP protocol was never designed to handle.

The original TFTP protocol had a transfer file size limit of 512 bytes/block x 65535 blocks – totaling 32 MB. In 1998 this limit was extended to 1468 bytes/block x 65535 blocks, a heady 93 MB – by TFTP Blocksize Option RFC 2348. If IP fragmentation is not an option the maximum block size is the size of an Ethernet MTU (1500) minus the headers of TFTP (4 bytes), UDP (8 bytes) and IP (20 bytes) = 1468 bytes/block.

Today most servers and clients support TFTP block number roll-over (block counter going back to 0 after 65535) which gives an essentially unlimited transfer file size.

Since TFTP utilizes UDP, it has to supply its own transport and session support. Each file transferred via TFTP constitutes an independent exchange. Classically, this transfer is performed in lock-step, with only one packet (either a block of data, or an ‘acknowledgement’) alternatively in flight on the network at any time. Due to this single data block strategy instead of sending a fluid amount of data blocks before to pause the transfer waiting for an acknowledge (windowing), TFTP provides low throughput specially over high latency links. Microsoft introduced windowed TFTP in Windows 2008 as part of their Windows Deployment Services (WDS) and in January 2015 TFTP WindowSize Option RFC 7440 was published. This substantially improves performance for things like PXE booting.

Although attempts have been made to make the TFTP protocol better it is still a very basic protocol which doesn’t handle packet loss and latency well. For the larger payloads for todays environment a better protocol is required..

Enter iPXE and HTTP

iPXE is the leading Open Source network boot firmware, which offers a small footprint (75KB for BIOS and about 128KB for EFI) boot loader, which allows the system to switch to a better suited protocol for high speed/high latency/high packet loss environments. In a typical environment iPXE will be downloaded using PXE & TFTP and then BOOM! You can switch to the HTTP protocol with BranchCache awareness so that local cached content can be utilized straight away. This makes iPXE hugely powerful and efficient in today’s demanding deployment scenarios.

iPXE also offers you the ability to:

  • boot from a web server via HTTP
  • boot from an iSCSI SAN
  • boot from a Fibre Channel SAN via FCoE
  • boot from an AoE SAN
  • boot from a wireless network
  • boot from a wide-area network (or the Cloud)
  • boot from an Infiniband network
  • control the boot process with a script
  • boot from USB media or USB Ethernet adapters

You can use iPXE to replace the existing PXE ROM on your network card, or you can chainload into iPXE to obtain the features of iPXE without the hassle of reflashing.

BUT! The main reason that we love iPXE is that iPXE is free, open-source software licensed under the GNU GPL(with some portions under GPL-compatible licences), and is included in products from several network card manufacturers and OEMs. Want to know more about iPXE? Pop over to the iPXE website.