Distinguish a size query from an empty file
05A zero in the read request asks a question. A zero in the server’s OACK reports an empty file; ordinary TFTP still sends a final DATA packet.
Client ACK 1 acknowledges actual DATA 1. The chosen successful empty-file exchange is complete; OACK alone did not transfer it.
Source for this drawing: RFC 2349 · Read RFC source: Transfer Size · p.3 ↗
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.
Terms in this drawing
Related RFCs and changes
“Updates” changes part of an earlier RFC. “Obsoletes” replaces it. This list shows selected related documents.
tsize=0 in RRQ requests the size; tsize=0 in the reply can report an empty file. The actor and phase determine the meaning.
- tsize=0 in RRQ requests the size; tsize=0 in the reply can report an empty file. The actor and phase determine the meaning.
- A final DATA packet has fewer data octets than the blocksize, including zero (RFC1350 §6).
- A DATA packet with zero data still has its opcode and block-number header. Its ACK is not a new empty file.
Chosen successful exchange, not a timeout/retry or packet-parser implementation. ACK 0 confirms read options; ACK 1 acknowledges file DATA 1. No DATA block 0 is invented.
Read the RFC section ↗