Le protocole FTP (File Transfer Protocol)

Juin 2015

Introduction au protocole FTP


Le protocole FTP (File Transfer Protocol) est, comme son nom l'indique, un protocole de transfert de fichier.

La mise en place du protocole FTP date de 1971, date à laquelle un mécanisme de transfert de fichiers (décrit dans le RFC 141) entre les machines du MIT (Massachussetts Institute of Technology) avait été mis au point. De nombreux RFC ont ensuite apporté des améliorations au protocole de base, mais les plus grandes innovations datent de juillet 1973.

Le protocole FTP est actuellement défini par le RFC 959 (File Transfer Protocol (FTP) - Specifications).

Le rôle du protocole FTP


Le protocole FTP définit la façon selon laquelle des données doivent être transférées sur un réseau TCP/IP.

Le protocole FTP a pour objectifs de :

  • permettre un partage de fichiers entre machines distantes
  • permettre une indépendance aux systèmes de fichiers des machines clientes et serveur
  • permettre de transférer des données de manière efficace

Le modèle FTP


Le protocole FTP s'inscrit dans un modèle client-serveur, c'est-à-dire qu'une machine envoie des ordres (le client) et que l'autre attend des requêtes pour effectuer des actions (le serveur).

Lors d'une connexion FTP, deux canaux de transmission sont ouverts :

  • Un canal pour les commandes (canal de contrôle)
  • Un canal pour les données



Le modèle FTP



Ainsi, le client comme le serveur possèdent deux processus permettant de gérer ces deux types d'information :

  • le DTP (Data Transfer Process) est le processus chargé d'établir la connexion et de gérer le canal de données. Le DTP côté serveur est appelé SERVER-DTP, le DTP côté client est appelé USER-DTP
  • le PI (Protocol Interpreter) est l'interpréteur de protocole permettant de commander le DTP à l'aide des commandes reçues sur le canal de contrôle. Il est différent sur le client et sur le serveur :
    • Le SERVER-PI est chargé d'écouter les commandes provenant d'un USER-PI sur le canal de contrôle sur un port donné, d'établir la connexion pour le canal de contrôle, de recevoir sur celui-ci les commandes FTP de l'USER-PI, d'y répondre et de piloter le SERVER-DTP
    • Le USER-PI est chargé d'établir la connexion avec le serveur FTP, d'envoyer les commandes FTP, de recevoir les réponses du SERVER-PI et de contrôler le USER-DTP si besoin



Lors de la connexion d'un client FTP à un serveur FTP, le USER-PI initie la connexion au serveur selon le protocole Telnet. Le client envoie des commandes FTP au serveur, ce dernier les interprète, pilote son DTP, puis renvoie une réponse standard. Lorsque la connexion est établie, le serveur-PI donne le port sur lequel les données seront envoyées au Client DTP. Le client DTP écoute alors sur le port spécifié les données en provenance du serveur.
Il est important de remarquer que, les ports de contrôle et de données étant des canaux séparés, il est possible d'envoyer les commandes à partir d'une machine et de recevoir les données sur une autre. Ainsi, il est par exemple possible de transférer des données entre deux serveurs FTP en passant par un client pour envoyer les instructions de contrôle et en transférant les informations entre deux processus serveurs connectés sur le bon port.

Transfert de données par FTP entre deux serveurs



Dans cette configuration, le protocole impose que les canaux de contrôle restent ouverts pendant tout le transfert de données. Ainsi un serveur peut arrêter une transmission si le canal de contrôle est coupé lors de la transmission.

Les commandes FTP


Toutes les communications effectuées sur le canal de contrôle suivent les recommandations du protocole Telnet. Ainsi les commandes FTP sont des chaînes de caractères Telnet (en code NVT-ASCII) terminées par le code de fin de ligne Telnet (c'est-à-dire la séquence <CR>+<LF>, Carriage Return (retour chariot) suivi du caractère Line Feed, notée <CRLF>).
Si la commande FTP admet un paramètre, celui-ci est séparé de la commande par un espace (<SP>).

Les commandes FTP permettent de préciser :

  • Le port utilisé
  • Le mode de transfert des données
  • La structure des données
  • La nature de l'action à effectuer (Retrieve, List, Store, ...)



On distingue trois types de commandes FTP :

  • Les commandes de contrôle d'accès
  • Les commandes du paramétrage de transfert
  • Les commandes de service FTP




Commande de contrôle d'accès
CommandeDescription
USERChaîne de caractères permettant d'identifier l'utilisateur. L'identification de l'utilisateur est nécessaire pour établir une communication sur le canal de données
PASSChaîne de caractères spécifiant le mot de passe de l'utilisateur. Cette commande doit être immédiatement précédée de la commande USER. Il revient au client de masquer l'affichage de cette commande pour des raisons de sécurité
ACCTChaîne de caractères représentant le compte (account) de l'utilisateur. Cette commande n'est généralement pas nécessaire. Lors de la réponse à l'acceptation du mot de passe, si la réponse est 230 cette phase n'est pas nécessaire, si la réponse est 332, elle l'est
CWDChange Working Directory : cette commande permet de changer le répertoire courant. Cette commande nécessite le chemin d'accès au répertoire à atteindre comme argument
CDUPChange to Parent Directory : cette commande permet de remonter au répertoire parent. Elle a été introduite pour remédier aux problèmes de nommage de répertoire parent selon les système (généralement "..")
SMNTStructure Mount :
REINReinitialize :
QUITCommande permettant de terminer la session en cours. Le serveur attend de finir le transfert en cours le cas échéant, puis de fournir une réponse avant de fermer la connexion




Commande de paramètres de transfert
CommandeDescription
PORTChaîne de caractères permettant de préciser le numéro de port à utiliser
PASVCommande permettant d'indiquer au serveur DTP de se mettre en attente une connexion sur un port spécifique choisi aléatoirement parmi les ports disponibles. La réponse à cette commande est l'adresse IP de la machine et le port.
TYPECette commande permet de préciser le type de format dans lequel les données seront envoyées
STRUCaractère Telnet précisant la structure du fichier (F pour File, R pour Record, P pour Page)
MODECaractère Telnet précisant le mode de transfert des données (S pour Stream, B pour Block, C pour Compressed)




Commande de service FTP
CommandeDescription
RETRCette commande (RETRIEVE) demande au serveur DTP une copie du fichier dont le chemin d'accès est passé en paramètre.
STORCette commande (store) demande au serveur DTP d'accepter les données envoyées sur le canal de données et de les stocker dans le fichier portant le nom passé en paramètre. Si le fichier n'existe pas, le serveur le crée, sinon il l'écrase
STOUCette commande est identique à la précédente, si ce n'est qu'elle demande au serveur de créer un fichier dont le nom est unique. Le nom du fichier est retourné dans la réponse
APPEGrâce à cette commande (append) les données envoyées sont concaténées dans le fichier portant le nom passé en paramètre s'il existe déjà, dans le cas contraire il est créé
ALLOCette commande (allocate) demande au serveur de prévoir un espace de stockage suffisant pour contenir le fichier dont le nom est passé en argument.
RESTCette commande (restart) permet de reprendre un transfert là où il s'était arrêté. Pour cela cette commande envoie en paramètre le marqueur représentant la position dans le fichier à laquelle le transfert avait été interrompu. Cette commande doit être immédiatement suivie d'une commande de transfert.
RNFRCette commande (rename from) permet de renommer un fichier. Elle indique en paramètre le nom du fichier à renommer et doit être immédiatement suivie de la commande RNTO
RNTOCette commande (rename to) permet de renommer un fichier. Elle indique en paramètre le nom du fichier à renommer et doit être immédiatement précédée de la commande RNFR
ABORCette commande (abort) indique au serveur DTP d'abandonner tous les transferts associés à la commande précédente. Si aucune connexion de données n'est ouverte, le serveur DTP ne fait rien, sinon il la ferme. Le canal de contrôle reste par contre ouvert.
DELECette commande (delete) permet de supprimer le fichier dont le nom est passé en paramètre. Cette commande est irrémédiable, seule une confirmation au niveau du client peut être faite.
RMDCette commande (remove directory) permet de supprimer un répertoire. Elle indique en paramètre le nom du répertoire à supprimer
MKDCette commande (make directory) permet de créer un répertoire. Elle indique en paramètre le nom du répertoire à créer
PWDCette commande (print working directory) permet de renvoyer le chemin complet du répertoire courant
LISTCette commande permet de renvoyer la liste des fichiers et répertoires présents dans le répertoire courant. Cette liste est envoyée sur le DTP passif. Il est possible de passer en paramètre de cette commande un nom de répertoire, le serveur DTP enverra la liste des fichiers dans le répertoire passé en paramètre
NLSTCette commande (name liste) permet d'envoyer la liste des fichiers et répertoires dans le répertoire courant
SITECette commande (site parameters) permet au serveur de proposer des services spécifiques, non définis dans le protocole FTP
SYSTCette commande (system) permet d'envoyer des informations sur le serveur distant
STATCette commande (status) permet d'émettre l'état du serveur, par exemple pour connaître la progression d'un transfert en cours. Cette commande accepte en argument un chemin d'accès, elle retourne alors les mêmes informations que LIST mais sur le canal de contrôle
HELPCette commande permet de connaître l'ensemble des commandes comprises par le serveur. Les informations sont retournées sur le canal de contrôle
NOOPCette commande (no operations) sert uniquement à obtenir une commande OK du serveur. Elle peut servir uniquement pour ne pas être déconnecté après un temps d'inactivité trop élevé

Les réponses FTP


Les réponses FTP permettent d'assurer la synchronisation entre client et serveur FTP. Ainsi à chaque commande envoyée par le client, le serveur effectuera éventuellement une action et renverra systématiquement une réponse.

Les réponses sont constituées d'un code à 3 chiffres indiquant la façon suivant laquelle la commande envoyée par le client a été traitée. Toutefois, ce code à 3 chiffres étant difficilement lisible par un humain, il est accompagné d'un texte (chaîne de caractères Telnet séparée du code numérique par un espace).

Les codes de réponse sont constitués de 3 chiffres dont voici les significations :

  • Le premier chiffre indique le statut de la réponse (succès ou échec)
  • Le second chiffre indique ce à quoi la réponse fait référence
  • Le troisième chiffre donne une signification plus spécifique (relative à chaque deuxième chiffre)




Premier chiffre
ChiffreSignificationDescription
1yzRéponse préliminaire positiveL'action demandée est en cours de réalisation, une seconde réponse doit être obtenue avant d'envoyer une deuxième commande
2yzRéponse positive de réalisationL'action demandée a été réalisée, une nouvelle commande peut être envoyée
3yzRéponse intermédiaire positiveL'action demandée est temporairement suspendue. Des informations supplémentaires sont attendues de la part du client
4yzRéponse négative de réalisationL'action demandée n'a pas eu lieu car la commande n'a temporairement pas été acceptée. Le client est prié de réessayer ultérieurement
5yzRéponse négative permanenteL'action demandée n'a pas eu lieu car la commande n'a pas été acceptée. Le client est prié de formuler une requête différente




Second chiffre
ChiffreSignificationDescription
x0zSyntaxeL'action possède une erreur de syntaxe, ou bien il s'agit d'une commande non comprise par le serveur
x1zInformationIl s'agit d'une réponse renvoyant des informations (par exemple pour une réponse à une commande STAT)
x2zConnexionsLa réponse concerne le canal de données
x3zAuthentification et comptesLa réponse concerne le login (USER/PASS) ou la demande de changement de compte (CPT)
x4zNon utilisé par le protocole FTP
x5zSystème de fichiersLa réponse concerne le système de fichiers distant

Plus d'informations


Pour en savoir plus sur le protocole FTP, n'hésitez pas à consulter les documents suivants :

Pour une lecture illimitée hors ligne, vous avez la possibilité de télécharger gratuitement cet article au format PDF :
Le-protocole-ftp-file-transfer-protocol .pdf

Réalisé sous la direction de , fondateur de CommentCaMarche.net.


A voir également


FTP protocol (File Transfer Protocol)
FTP protocol (File Transfer Protocol)
Protocolo FTP (Protocolo de transferencia de archivos)
Protocolo FTP (Protocolo de transferencia de archivos)
Das FTP Protokoll (File Transfer Protocol)
Das FTP Protokoll (File Transfer Protocol)
Il protocollo FTP (File Transfer Protocol)
Il protocollo FTP (File Transfer Protocol)
O protocolo FTP (File Transfer Protocol)
O protocolo FTP (File Transfer Protocol)
Ce document intitulé «  Le protocole FTP (File Transfer Protocol)  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.