# Trivial File Transfer Protocol

In informatica e telecomunicazioni Trivial File Transfer Protocol (TFTP) è un protocollo di trasferimento file di livello applicativo molto semplice, con le funzionalità di base del FTP la cui prima definizione risale al 1980. Rientra nella famiglia di protocolli TCP/IP ed è stato progettato con dimensioni ridotte per essere facile da implementare. Motivo per cui descrive solo i metodi di lettura e scrittura per file o e-mail. Altre operazioni non sono sempre possibili con TFTP, come l’assegnazione dei permessi tramite chmod, al contrario di quanto avviene con il protocollo FTP. La porta utilizzata da TFTP è la 69.
Essendo così semplice, è stato possibile implementarlo facilmente con un contenuto utilizzo di risorse. TFTP è stato quindi utile per l'avvio di computer che, come i router, non hanno dispositivi a memoria di massa. È ancora usato per trasferire piccoli file fra host di una rete, come nel caso di un terminale X Window System o altri thin client.
TFTP è basato su una parte del precedente protocollo EFTP, che è stato parte della suite di protocolli PUP (PARC Universal Packet).
La versione originale di TFTP, prima della RFC 1350, aveva un problema particolarmente grave, chiamato Sorcerer's Apprentice Syndrome (Sindrome dell'apprendista stregone, da una parte del film Fantasia), caso nel quale entrambi gli endpoint della comunicazione vanno in timeout simultaneamente e ripetono l'invio messaggio.

## Informazioni tecniche

Alcuni dettagli sul TFTP:
* usa l'UDP (porta 69) come protocollo di trasporto (a differenza del FTP che usa il TCP sulla porta 21);
* non supporta la navigazione tra le directory;
* non possiede meccanismi di autenticazioni o cifratura;
* può essere usato per leggere o scrivere file da un server remoto;
* supporta tre differenti modalità di trasferimento, "netascii", "octet" e "mail", dei quali i primi due corrispondono alle modalità "ASCII" e "image" (binario) del protocollo FTP; la terza è obsoleta e raramente usata;
* ha un limite di dimensione dei file di 32 MB.
Poiché TFTP utilizza UDP, è necessario creare un supporto per trasporto e sessione. Ogni file trasferito via TFTP costituisce uno scambio indipendente. Ogni trasferimento è attuato in passi distinti, con sempre un pacchetto (che sia un blocco di dati o un acknowledgement) in trasmissione nella rete.
Per via della mancanza di sicurezza, è pericoloso usare TFTP su Internet; perciò è usato generalmente solo nelle reti locali private.
La negoziazione delle opzioni fu aggiunta nel protocollo successivamente (con la RFC 2347), e le opzioni così negoziate possono modificare il protocollo (in particolare usare blocchi di dimensione maggiore), pur non trasformandolo sostanzialmente.

### Dettagli sulla sessione TFTP

* L'host A invia un pacchetto RRQ (read request) o WRQ (write request) all'host B, contenente il nome del file e la modalità di trasferimento.
* B risponde con un ACK (acknowledgement) packet, che serve anche a dire ad A quale porta sull'host B dovrà usare per i restanti pacchetti.
* L'host di origine invia dei pacchetti DATA numerati all'host di destinazione, tutti tranne l'ultimo contenenti un blocco di dati completo. L'host di destinazione risponde con un pacchetto ACK numerato per ogni pacchetto DATA.
* Il pacchetto DATA finale deve contenere un blocco di dati non pieno ad indicare che si tratta dell'ultimo. Se la dimensione del file trasferito è un multiplo esatto della dimensione dei blocchi, la sorgente invia un ultimo pacchetto di dati contenente 0 byte di dati.