TFTP Options and Option Negotiation
(Page 2 of 4)
TFTP Option Negotiation Process
The client begins the negotiation by sending a modified TFTP Read Request or Write Request message. In addition to the normal information that appears in this message (see the next topic), a list of options may also be included. Each is specified with an Option Code and an Option Value. The names and values are expressed as ASCII strings, terminated by a null character (zero byte). Multiple options may be specified in the request message.
The server receives the request containing the options, and if it supports the option extension, processes them. It then returns a special Option Acknowledgment (OACK) message to the client, where it lists all the options that the client specified that the server recognizes and accepts. Any options that the client requested but the server rejects, it does not include in this option acknowledgment. The client may only use the options that the server accepts. If the client rejects the server's response, it may send back an error message (with error code 8) upon receipt of the unacceptable OACK message.
The server may specify an alternative value in its response for certain options, if it recognizes the option but doesn't like the clients suggested value. Obviously, if the server doesn't support options at all, it will ignore the client's option requests, and respond back with a data message (for a read) or a regular acknowledgment (for a write) as in normal TFTP.
If the server did send an OACK, the client then proceeds to send messages using the regular messaging exchange described in the previous section. In the case of a write, the option acknowledgment replaces the regular acknowledgment in the message dialog. In the case of a read, the option acknowledgment is the server's first message instead of the first data block that it would normally send. TFTP doesn't allow the same device to send two datagrams in a row, so there needs to be a reply from the client before that first block can be sent. The client does this by sending a regular acknowledgment with a block number of 0 in it the same form of acknowledgment a server normally sends for a write.
Phew, that's confusing. For review, let's take a look at each of the four possible cases (read and write, with and without options).
Home - Table Of Contents - Contact Us
The TCP/IP Guide (http://www.TCPIPGuide.com)
Version 3.0 - Version Date: September 20, 2005
© Copyright 2001-2005 Charles M. Kozierok. All Rights Reserved.
Not responsible for any loss resulting from the use of this site.