Some time ago I heard about TFTP – something I’ve never encountered before. TFTP is an acronym for Trivial File Transfer Protocol. Yes, like FTP, just Trivial. TFTP is a much watered down version of FTP – its only command is to transfer a file from a place to a place – no directory listing, deleting, renaming, user authentication. What is it useful for, one may wonder.
Well, not every computer is a PC. In recent years more and more small embedded devices are becoming networked, and one of the best forms of networking is TCP / UDP / IP – the same set of protocols the Internet works on.
TFTP works on top of UDP, as opposed to FTP which works on TCP. UDP is a far simpler protocol than TCP, since it is a “send and forget” concept, without ensuring the correct arrival of data, in order, like TCP does. As a result, it is much easier to implement which leads to an implementation with a smaller footprint, and this is important for embedded devices. TFTP itself is also much simpler than FTP. It ensures the correct transfer of data by employing a simple stop and wait protocol on top of UDP. I assume that it also makes it slower than FTP on non-congested networks, since FTP’s reliability is achieved on the TCP level which works in selective repeat. However, simplicity is often more important than performance, especially for embedded devices with small amounts of ROM.
So TFTP is perfect for embedded devices to transfer data to and from each other (and PCs) in a reliable, quick way (UDP / IP on Ethernet is far faster than serial RS232 / RS485 communication, the most common interconnection method of embedded devices).
The research into TFTP led me through a few interesting sources of information, on Wikipedia, HowStuffWorks and RFCs. RFC 1180 is especially helpful – it’s a tutorial written in a very readable style that explains the basics of IP, ARP, routing tables and TCP / UDP. RFC 1350 describes TFTP. RFC 1123 is a thorough collection of all Internet related protocols with cross references to other relevant RFCs.
The TCP / UDP / IP network stack is one of the nicest examples of sound engineering, and IMHO it is beneficial to get at least a superficial understanding of how these things work under the hood.