File Transfer Protocol (FTP) and Trivial File Transfer Protocol (TFTP) are two popular file transfer
protocols used in TCP/IP networks. Most end users use FTP, but Cisco router and switch administrators
often use TFTP. FTP is a TCP-based application that has many options and features, including the capability
to change directories, list files using wildcard characters, transfer multiple files with a single command, and
use a variety of character sets or file formats. When a user, called a FTP client, attempts to connect to an
FTP server, a TCP connection is established to the FTP server's well-known port 21. The user is required to
enter a username and password, which the server uses to authenticate the files available to that user for read
and write permissions. This security is based on the file security on the server's platform. All the commands
used to control the transfer of a file are sent across this connection. At this point, the user has a variety of
commands available to enable settings for transfer, change directories, list files, etc. However, whenever a
get (mget for multiple files) or put (or mput for multiple files) command is entered, or the equivalent
button is clicked on the user interface, a file is transferred. The data is transferred over a separate FTP data
connection, another TCP connection, established to well-known port 20. This prevents a file transfer from
impacting on the control connection.
Trivial File Transfer Protocol (TFTP) is a more basic file transfer protocol that use a small set of features,
takes little memory to load, and little time to program. TFTP uses User Datagram Protocol (UDP), so there
is no connection establishment and no error recovery by the transport layer. However, TFTP uses
application layer recovery by embedding a small header between the UDP header and the data. This header
includes codes along with a numbering scheme that numbers 512-byte blocks of data. The TFTP application
uses these block numbers to acknowledge receipt and resend the data. TFTP sends one block and waits on
an acknowledgment before sending another block.