Free — no signup required

TFTP: The Protocol of Last Resort

2 min read

Why Trivial?

The PXE code burned into a NIC's firmware must be extremely small — often just a few kilobytes — to fit cheaply on the chip. Implementing a full TCP stack with connection handshakes, flow control, and retransmission logic, plus HTTP parsing, requires far more code than fits.

TFTP (Trivial File Transfer Protocol) solves this by stripping everything away. It runs over UDP (connectionless, no handshake) and operates with a single, simple rule: send one 512-byte block, wait for an acknowledgment, send the next block.

What TFTP deliberately omits:

Feature HTTP/FTP TFTP
Authentication Yes None
Directory listing Yes None
Error recovery Robust Minimal
Transport TCP UDP
Typical speed Fast Slow
Code complexity High Very low

TFTP listens on UDP port 69. This port must be open on any firewall between the provisioning server and the bare metal machines. A blocked UDP/69 is one of the most common reasons PXE boot silently fails.

TFTP in Practice

A TFTP daemon like tftpd-hpa serves files from a single configured root directory — the bootloader (pxelinux.0 or ipxe.efi) and its supporting files live there, and nowhere else. The NIC requests pxelinux.0 by name. TFTP serves it from this directory with no authentication and no directory traversal — it can only serve files that exist directly in its configured root.

Key Point: TFTP's role is intentionally narrow: deliver the first-stage bootloader to a machine that has no OS. Once that bootloader is running, it immediately hands off to faster protocols. You should never use TFTP to transfer large files like OS kernels — that is what iPXE and HTTP are for.

This is one of 18 chapters

Every chapter is free — Kubernetes, Terraform, SRE, distributed systems, and more — with fast daily review built in.

Sign up free