Visual RFC.
ALL RFCs / RFC 2347
Read the RFC ↗
RFC 2347 / TFTP OPTION NEGOTIATION

Use the acknowledged subset, not the whole wish list

02

OACK means Option Acknowledgment. It contains opcode 6 followed by accepted option/value pairs; it does not repeat the filename or mode.

RFC 2347 · Negotiation Protocol · p.3EXAMPLE
4 / 4
Use the acknowledged subset, not the whole wish listSeparate unrequested-tsize OACK violates server rule; client chooses recommended ERROR 8 termination.Client requests; server returns an accepted subsetClientServerInvalid OACK adds unrequested tsizeServer must not initiate that optionclient ERROR code 8Client follows the should: terminate this transferBlksize may decrease; timeout must echo its request (option-specific)
04
Reject an unrequested option

Separate invalid-server comparison: OACK adds tsize even though the request did not contain tsize. The client follows the RFC’s should by sending ERROR code 8; this transfer terminates.

Source for this drawing: RFC 2347 · Read RFC source: Negotiation Protocol · p.3 ↗

Protocol participantThreat or exceptionProtocol controlSimplified drawings · precise section references
New to this? Start hereA quick picture + helpful background

A message needs an address.

Think of a packet as a small addressed envelope. Devices pass it onward; transport protocols decide what delivery promises an application gets.

Helpful first, if these ideas are unfamiliar

These pictures are analogies to help you learn. The linked RFC explains the actual rules.

Related RFCs and changes

“Updates” changes part of an earlier RFC. “Obsoletes” replaces it. This list shows selected related documents.

What changed
RFC 2347 negotiation frameworkRFC 2348 / RFC 2349 option definitions

Accepted values are option-specific. Blksize can decrease; timeout must echo the request. Negotiation is not a universal numeric-minimum rule.

Read the updated RFC section ↗
KEY POINT

Only the client initiates option negotiation. The server must not include an option in OACK that the client did not request.

  • Only the client initiates option negotiation. The server must not include an option in OACK that the client did not request.
  • The server may acknowledge supported options whose values it accepts. Unsupported options should be omitted, not cause an ERROR just because they are unsupported. Unacknowledged options must be ignored by both peers as though never requested.
  • Alternative or invalid values follow the individual option specification. In this example RFC 2348 permits blksize 512 in response to 1024, while RFC 2349 timeout must match the requested value. Do not apply one option’s rule to every option.
  • A client receiving an unrequested option should send ERROR code 8 and terminate. This is distinct from the server’s must-not-add rule. A client that otherwise rejects OACK sends ERROR code 8 and terminates too.
DETAILS

Fictional picnic.txt in octet mode; chosen sizes and values are examples. Comparisons reset state. This RFC uses lowercase must/should/may; those distinctions are retained. No real files or UDP transfers are used.

Read the RFC section ↗

All chapters in RFC 2347

Drawing view

Scroll the drawing to see every part. Playback controls stay above it.

RFC 9700 / CHAPTERS

Chapters

For full details, tables, algorithms, and exceptions, read the original RFC.

RFC status and corrections ↗