Retry without duplicating the file
03TFTP supplies its own one-block-at-a-time acknowledgment and retry behavior. UDP itself does not promise delivery or duplicate protection.
A delayed duplicate ACK 1 does not trigger another DATA 2. The sender still waits for ACK 2 or its retry timer.
Source for this drawing: RFC 1350 · Read RFC section 2 ↗
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.
RFC 1350 directs readers to these host requirements: DATA senders must not resend on duplicate ACKs; implementations must use an adaptive timeout. These are earlier referenced requirements, not a later version of TFTP.
Read the updated RFC section ↗Repeat a lost exchange, not the already-written file bytes.
- Send the next data block only after the current one is acknowledged. Block numbers start at 1 and increase for each new data block; retransmissions keep the same block number.
- The data sender keeps its unacknowledged block and a retry timer. A repeated DATA block can cause another ACK, but is not appended to the file again.
- RFC 1123 §4.2.3.1 requires the Sorcerer’s Apprentice fix: the DATA sender MUST NOT resend its current DATA on a duplicate ACK. §4.2.3.2 requires an adaptive timeout; at least exponential backoff is necessary.
Example is an upload of at least 1024 bytes in octet mode. ACK 1 is lost, then a delayed duplicate ACK 1 arrives while block 2 is outstanding. The diagram distinguishes a sender timeout from receipt of an old ACK. No universal timeout seconds or retry limit is invented. Uppercase requirements here are explicitly sourced to RFC 1123, which RFC 1350 references.
Read the RFC section ↗