RFC 1350 / START HERE
TFTP, before the details
TFTP means Trivial File Transfer Protocol. Revision 2 names this RFC’s TFTP specification, not a file format.
TFTP reads or writes a file over UDP, the User Datagram Protocol. The sender sends one numbered block, waits for an acknowledgment, and retries when needed.
The idea in one picture
Ask for a file
Send one block
Acknowledge it
A simplified picture of the idea; the chapters explain the actual mechanisms.
Why it exists
Its small design suits constrained boot and local file-transfer services. RFC 1350 defines the base 512-byte blocks; later RFCs add negotiated options. TFTP has no user login, directory listing or built-in access-control mechanism.
A familiar example
A device can fetch a boot file from a carefully restricted local server. This guide uses fictional packets and ports to explain the transfer; successful delivery does not prove who sent the file or make it confidential.
Helpful background
You can start here without reading another RFC. If these ideas are unfamiliar, these short introductions may help.
What you’ll learn next
Begin with chapter one, or choose a topic.
- Start a read or a writeThe client requests a file using UDP, the User Datagram Protocol. Transfer identifiers (TIDs) are UDP port numbers, not user identities.→
- Read the packet bytesA two-byte opcode selects a request, data, acknowledgment or error. Zero bytes terminate request strings; they are not printed characters.→
- Retry without duplicating the fileTFTP supplies its own one-block-at-a-time acknowledgment and retry behavior. UDP itself does not promise delivery or duplicate protection.→
- Finish even at an exact block boundaryThe final DATA packet has fewer than 512 data bytes. A file whose size is an exact multiple of 512 therefore needs an extra empty DATA block.→
- Reject stray traffic and respect the limitsMost errors stop a transfer. A packet from an unexpected transfer port is the exception: reject that packet without killing the valid transfer.→
This introduction explains RFC 1350 (1992). Read the original RFC ↗