Skip to content

ProGen18/TFTP-protocole

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TFTP — Implémentation du protocole en C

Langage Licence Statut Contexte Étapes RFC

Implémentation complète du protocole TFTP (Trivial File Transfer Protocol) en C, incluant les extensions bigfile (RFC 2347) et fenêtre glissante windowsize (RFC 7440).


Contexte universitaire

Ce projet a été réalisé par Stéphane Talab et Mathis Piault en Licence 3 Informatique (UFR des Sciences) dans le cadre de la SAÉ Réseau et Système 2026"Concevoir un protocole de communication entre un serveur et des clients".

L'objectif était d'implémenter TFTP from scratch en C, sans bibliothèque réseau tierce, en couvrant cinq étapes progressives :

Étape Contenu Rendu
1 Client TFTP (RRQ / WRQ, timeouts, retransmissions) 29 janvier
2 Serveur simple (RRQ / WRQ, gestion d'erreurs, interopérabilité) 29 janvier
3 Serveur multi-clients — thread par client et select() 19 février
4 Extension bigfile + rédaction d'un RFC 11 mars
5 (bonus) Option windowsize (RFC 7440) 11 mars

Architecture

.
├── client.c                  # Client TFTP (RRQ / WRQ + options)
├── SERVEUR/
│   ├── serveur_thread.c      # Serveur multithreadé — un thread par client
│   └── serveur_select.c      # Serveur monothreadé — multiplexage select()
├── tftp.h                    # Structures de paquets et constantes RFC
└── bin/                      # Binaires compilés (généré à la compilation)

Les deux versions serveur ont été développées et comparées. Le serveur thread alloue un thread POSIX par connexion entrante avec mutex sur les accès fichiers concurrents. Le serveur select gère toutes les connexions dans une boucle d'événements unique, sans contention mémoire.


Compilation et exécution

Compilation

mkdir -p bin
gcc -o bin/client client.c -I. -lpthread
gcc -o bin/serveur_thread SERVEUR/serveur_thread.c -I. -lpthread
gcc -o bin/serveur_select SERVEUR/serveur_select.c -I. -lpthread

Serveur (choisir une version)

./bin/serveur_thread 6969
./bin/serveur_select 6969

Client

./bin/client <ip> <port> <get|put> <fichier> [windowsize]

Extensions RFC implémentées

Fenêtre glissante — windowsize (RFC 7440) (étape 5, bonus)

Envoie plusieurs blocs avant d'attendre un ACK, ce qui réduit la latence sur les transferts longs.

# Transférer un fichier avec une fenêtre de 64 blocs
./bin/client 127.0.0.1 6969 put grosfichier.bin 64

L'option est négociée à la requête initiale. Si le serveur ne la supporte pas, le client bascule automatiquement sur le mode bloc-par-bloc standard.

Gros fichiers — bigfile (RFC 2347) (étape 4)

TFTP standard (RFC 1350) limite les transferts à ~32 Mo via des numéros de blocs sur 16 bits. L'option bigfile lève cette contrainte.

# Générer un fichier de test de 500 Mo
dd if=/dev/urandom of=grosfichier.bin bs=1M count=500

# Envoyer
./bin/client 127.0.0.1 6969 put grosfichier.bin

# Récupérer
./bin/client 127.0.0.1 6969 get grosfichier.bin

L'option est négociée automatiquement par le client via un OACK serveur. En l'absence de réponse OACK, le client reste en mode 16 bits standard.


Références

About

Client et serveur TFTP from scratch en C, avec gestion multi-clients, transfert de gros fichiers et fenêtre glissante. Projet universitaire L3.

Topics

Resources

Stars

Watchers

Forks

Contributors

Languages