Aller au contenu principal

2. Aperçu du protocole (Overview of the Protocol)

Tout transfert commence par une demande de lecture ou d'écriture d'un fichier, qui sert également de demande de connexion. Si le serveur accorde la demande, la connexion est ouverte et le fichier est envoyé en blocs de longueur fixe de 512 octets. Chaque paquet de données contient un bloc de données, et doit être acquitté par un paquet d'acquittement avant que le paquet suivant puisse être envoyé. Un paquet de données de moins de 512 octets signale la terminaison d'un transfert. Si un paquet est perdu dans le réseau, le destinataire prévu expirera et peut retransmettre son dernier paquet (qui peut être des données ou un acquittement), provoquant ainsi la retransmission par l'expéditeur du paquet perdu. L'expéditeur doit garder un seul paquet sous la main pour la retransmission, puisque l'acquittement verrouillé garantit que tous les paquets plus anciens ont été reçus. Notez que les deux machines impliquées dans un transfert sont considérées comme des expéditeurs et des récepteurs. L'un envoie des données et reçoit des acquittements, l'autre envoie des acquittements et reçoit des données.

La plupart des erreurs entraînent la terminaison de la connexion. Une erreur est signalée en envoyant un paquet d'erreur. Ce paquet n'est pas acquitté et n'est pas retransmis (c'est-à-dire qu'un serveur ou utilisateur TFTP peut se terminer après avoir envoyé un message d'erreur), donc l'autre extrémité de la connexion peut ne pas le recevoir. Par conséquent, les délais d'expiration sont utilisés pour détecter une telle terminaison lorsque le paquet d'erreur a été perdu. Les erreurs sont causées par trois types d'événements : ne pas pouvoir satisfaire la demande (par exemple, fichier non trouvé, violation d'accès, ou aucun utilisateur de ce type), recevoir un paquet qui ne peut pas être expliqué par un délai ou une duplication dans le réseau (par exemple, un paquet incorrectement formé), et perdre l'accès à une ressource nécessaire (par exemple, disque plein ou accès refusé pendant un transfert).

TFTP ne reconnaît qu'une seule condition d'erreur qui ne provoque pas de terminaison, le port source d'un paquet reçu étant incorrect. Dans ce cas, un paquet d'erreur est envoyé à l'hôte d'origine.

Ce protocole est très restrictif, afin de simplifier l'implémentation. Par exemple, les blocs de longueur fixe rendent l'allocation simple, et l'acquittement verrouillé fournit un contrôle de flux et élimine le besoin de réorganiser les paquets de données entrants.