Exposés des élèves du cours de deuxième année de l'Ecole des Mines de Nancy RESEAUX 1996/1997
Protocoles Réseaux d'Internet, par Stéphane HENRY et Yann HIROU


FTP
(File Transfer Protocol)



PRÉSENTATION

FTP est le protocole qui définit les transferts de donnés sur un réseau. On l'utilise en général à partir de logiciels aux noms évocateurs, qui s'appellent directement FTP, ou bien qui contiennent FTP dans leur nom. Les objectifs de ce protocole sont de permettre un partage de fichiers ou programmes sur des machines distantes, de permettre des modifications àdistance sur des fichiers, et de transférer des données via un réseau. Bien qu'utilisable par un utilisateur directement depuis un terminal, FTP est pratiquement toujours utilisé par l'intermédiaire de programmes. Ce protocole a été mis en pace dès 1971.

VOCABULAIRE

DTP
Data Transfer System. C'est le processus qui établit et gère la connection pour les données. Il peut être soit actif, soit passif.
PI
Protocol Interpreter. Les parties clients et serveur ont des rôles différents.
Le serveur écoute sur le port 21, attend des connections de clients, pui établit une connection de contrôle de la communication. Il recoit les commandes FTP standard émises par le client PI, renvoie des réponses, et dirige le serveur DTP.
La partie client initialise la connection de contrôle entre lui et le serveur FTP, envoie les commandes FTP, et dirige le client DTP si ce process fait partie du transfert de fichier demandé.

LE MODÈLE FTP

CLIENT-SERVEUR

Voici un schéma décrivant le principe d'une connection FTP entre un client et un serveur.

Dans ce modèle, le client PI initialise la connection. La connection de contrôle suit le protocole Telnet. Lors de l'initialisation par l'utilisateur, des commandes FTP sont générées par le client PI et transmises au serveur via cette connection. Cette étape peut être court-circuitée en générant soi-même les commandes FTP après s'être connecté sur le port 21 du serveur. Des réponses standard sont renvoyées par le serveur PI au client PI à chaque étape.
Les commandes FTP précisent les paramètres pour la connection pour les données (le port utilisé, le mode de transfert, le type de représentation, la structure) ainsi que la nature de l'action (store, retrieve, append, delete,...). Le client DTP écoute sur le port spécifié pour les données, et le serveur initialise la connection et le transfert des données en accord avec les paramètres spécifiés. Il est à noter que le port de reception des données nčest pas nécéssairement sur la même machine que celle qui a émise les commandes via la connection de contrôle, mais l'utilisateur du client FTP doit s'assurer de l'écoute du port pour le transfert de données. La connection pour les données peut être utilisée simultanément en émission et en réception.

SERVEUR-SERVEUR

Dans certaines situations un utilisateur peut vouloir connecter directement deux serveurs FTP (pour la mise à jour de sites mirroirs, par exemple). Dans ces circonstances les informations de contrôle sont passées par le client PI mais les données sont transmises directement dčun serveur à l'autre.

Le protocole impose que la connection de contrôle soit ouverte pendant que le transfert de données a lieu. C'est à lčutilisateur qu'incombe la tâche de fermer la connection de contrôle. Si cette connection est fermée sans commande spécifique, le serveur abandonne le transfert des données.

LES COMMANDES FTP

Il existe plusieurs types de commandes qui peuvent être envoyées sur la connection de contrôle. En voici un descriptif complet.

CONTRÔLE D'ACCÈS

USER NAME (USER)
L'argument est une chaîne Telnet identifiant l'utilisateur. C'est cette identification qui est requise par le serveur pour pouvoir accéder à son système de fichiers. Cette commande va être la première transmise après que les connections de contrôle aient été établies. Certains serveurs acceptent la commande USER en cours d'utilisation afin de changer les droits d'accès aux diférents fichiers. Cela réinitialise la phase de login, mais sans changer les paramètres de transfert, et tous les transferts en cours sont achevés sous l'ancienne identité.
PASSWORD (PASS)
L'argument est une chaîne Telnet spécifiant le mot de passe de l'utilisateur. Cette commande doit être précédée immédiatement par la commande d'identification de l'utilisateur (USER), et, pour certains sites, elle complète l'identification de l'utilisateur. Pour des problèmes de sécurité il est préférable de masquer ce mot de passe lors de la frappe. Le serveur ne peut pas assurer cela, c'est au client à le faire.
ACCOUNT (ACCT)
L'argument est une chaîne Telnet spécifiant le compte de l'utilisateur. Cette commande n'est pas nécéssaire, en effet certains sites associent un compte à chaque login, et des comptes pour des accès spécifiques, comme par exemple l'ajout de fichiers sur le site. Dans l'avenir cette commande pourra intervenir à tout moment lors de la connection, et non plus uniquement lors de la séquence de login.
Des codes spécifiques de réponse existent liés à cette commande. La réponse à une acceptation de mot de passe sera la numéro 332 si la phase ACCOUNT est nécéssaire, et 230 si elle ne l'est pas. Si l'information ACCOUNT est nécéssaire ultérieurement, alors le code envoyé sera le code 332 ou 532.
CHANGE WORKING DIRECTORY (CWD)
Cette commande permet à l'utilisateur de se promener dans l'arborescence sans avoir à se délogguer et à se relogguer. Les paramètres de transfert restent inchangés, et l'argument est un chemin dčaccès au répertoire souhaité.
CHANGE TO PARENT DIRECTORY (CDUP)
Cette commande est un cas particulier de la commande CWD, et est inclue pour faciliter l'implémentation de programmes de transfert d'arborescences entre des systèmes utilisant des syntaxes différentes pour désigner le répertoire parent. Les codes des réponses sont identiques à ceux de la commande CWD.
STRUCTURE MOUNT (SMNT)
Cette commande autorise l'utilisateur à monter des structures de données de fichiers systèmes sans modifier son login ou son compte d'accès. Les paramètres de transfert restent inchangés. Lčargument est le chemin d'accès désignant un répertoire, ou bien un groupe de fichiers dépendants du système.
REINITIALIZE (REIN)
Cette commande achève la commande USER, annulant toutes les informations dčentrées- sorties et de compte, excepté les transferts en cours qui sont autorisés à s'achever. Tous les paramètres sont résumés aux paramètres par défaut, et la connection est laissée ouverte. Cet état est identique à celui dans lequel se trouve l'utilisateur juste après sa connection. Une commande USER est nécéssaire pour continuer.
LOGOUT (QUIT)
Cette commande termine une session, et si aucun transfert n'est en cours, le serveur ferme la connection de contrôle. Si un transfert est en cours, la connection va rester ouverte pour permettre lčenvoi dčune réponse, puis va la fermer. Si un process transfert des fichiers sous différentes identités d'utilisateurs, la commande REIN devra être utilisée plutôt que la commmande QUIT. Si une fermeture inopinnée de la connection de contrôle survient, le serveur va effectuer les commandes ABOR (commande d'abandon) et QUIT.

PARAMÈTRES DE TRANSFERT

DATA PORT (PORT)
L'argument est un numéro de port machine pour pouvoir établir la connection pour les données. Les ports client et serveur sont définis par défaut, cette commande n'est donc pas nécéssaire.
PASSIVE (PASV)
Cette commande indique au serveur DTP qu'il doit écouter sur un certain port de données qui n'est pas le port défini par défaut, et qu'il doit attendre une connection plutôt que dčen initialiser une autre. La réponse inclut la machine et le port que le serveur écoute.
REPRESENTATION TYPE (TYPE)
Cet argument spécifie le type de représentation utilisé pour les données. Le format pas défaut est ASCII Non-print.
FILE STRUCTURE (STRU)
L'argument est un simple caractère Telnet spécifiant la structure du fichier: F(file), R(record structure), P(page structure).
TRANSFERT MODE (MODE)
L'argument est un simple caractère Telnet spécifiant le mode de transfert des données: S(stream), B(block), C(compressed).

SERVICES FTP

RETRIEVE (RETR)
Cette commande fait transférer au serveur DTP une copie du fichier précisé dans le chemin d'accès, vers soit le serveur, soit le client DTP, en fonction de ce qui se trouve à l'autre bout de la connection.
STORE (STOR)
Le serveur DTP accepte les données transférées et les stocke comme fichiers sur son site. Si le fichier existe déjà, il l'écrase, sinon il le créé.
STORE UNIQUE (STOU)
Cette commande est comme la précédente, sauf qu'il est demandé au serveur DTP de créer le fichier avec un nom unique dans le répertoire, pour éviter tout écrasement. La réponse inclut le nom du fichier créé.
APPEND (APPE)
Si le fichier transféré existe déjà, alors les données transmises lui sont concaténées. Dans le cas contraire, il est créé.
ALLOCATE (ALLO)
Cette commande permet au serveur de réserver de l'espace de stockage pour le fichier qu'il va recevoir.
RESTART (REST)
L'argument représente le marqueur auquel le transfert doit être repris. Cette commande ne cause pas de transfert, mais positionne le fichier au marqueur indiqué. Cette commande doit être immédiatement suivie par la commande FTP appropriée pour continuer le transfert.
RENAME FROM (RNFR)
Pour renommer un fichier. Indique le chemin dčaccès à ce fichier. Doit être suivie par RNTO.
RENAME TO (RNTO)
Précise le nouveau nom du fichier sélectionné avec le commande RNFR.
ABORT (ABOR)
Indique au serveur DTP qučil doit abandonner la commande FTP précédente, et tous les transferts de données associés. Rien ne se passe s'il n'y a pas de connection de données actives. S'il y en a une, elle est fermée, mais la connection de contrôle reste en service.
DELETE (DELE)
Efface le fichier précisé dans le chemin d'accès. Si on souhaite effectuer une demande de confirmation, elle doit être faite au niveau du client FTP et non au niveau du serveur.
REMOVE DIRECTORY (RMD)
Efface le répertoire précisé.
MAKE DIRECTORY (MKD)
Création du répertoire dont on indique le chemin d'accès.
PRINT WORKING DIRECTORY (PWD)
Renvoie le nom du répertoire courrant.
LIST (LIST)
Le serveur va envoyer une liste en réponse, mais il va l'envoyer sur le DTP passif. Si le chemin d'accès indique un répertoire ou d'autres groupes de fichiers, le serveur va transférer la liste des fichiers dans le répertoire précisé. Si le chemin d'accès est un fichier, alors les données sont envoyées dans le fichier.
NAME LIST (NLST)
Renvoie un listing du contenu du répertoire courant vers l'utilisateur.
SITE PARAMETERS (SITE)
Cette commande est utilisée par le serveur pour proposer des services spécifiques à son système qui sont essentielles pour le transfert, mais pas suffisament universelles pour être incluses dans le protocole FTP. La nature de ces services et la spécification de leur syntaxe est précisée par la commande HELP SITE.
SYSTEM (SYST)
Cette commande permet de connaître le système sous lequel tourne le serveur.
STATUS (STAT)
Cette commande demande au serveur son statut. Elle peut être envoyée en cours de transfert, auquel cas le serveur va répondre sur l'état du transfert en cours, ou bien entre deux transferts, auquel cas la commande devra avoir des arguments. Si l'argument est un chemin dčaccès, alors la commande sera analogue à la commande LIST, à ceci près que les informations circuleront sur la connection de contrôle.
HELP (HELP)
Cette commande demande au serveur l'ensemble des informations le concernant, les informations étant renvoyées sur la connection de contrôle. Il est fortement conseillé de rendre cette commande accessible à tout moment, y compris avant de recevoir la commande USER permettant d'identifier l'utilisateur.
NOOP (NOOP)
Cette commande n'affecte aucun paramètre ni aucune commande précédemment saisie. Elle ne spécifie aucune action autre que le retour par le serveur d'une réponse OK.

LES RÉPONSES FTP

Les réponses sont là pour s'assurer de la synchronisation entre le client et le serveur. Toute commande génère au moins une réponse, et dans le cas où il y en a plusieurs, elles doivent pouvoir se distinguer sans anbiguité. Les réponses sont composées d'un numéro à 3 chiffres, utile pour les programmes, et d'un texte, pour lčutilisateur humain.
Voici la signification des codes renvoyés par le serveur.

EXEMPLE

Faites donc l'essai vous-mêmes. La pluspart des logiciels FTP clients affichent les commandes envoyées ainsi que les réponses recues, alors entrainez-vous sur un serveur FTP anonyme (par exemple ftp.inria.fr, où vous pouvez trouver le rfc 959 concernant FTP qui se trouve dans le répertoire rfc/rfc9xx/), histoire de voir que tout ce qu'on vient de vous raconter est plus ou moins vrai...

EXCUSES

Voilà raconté de facon un peu plus longue que prévue comment fonctionne le protocole FTP, quelles sont ses principales commandes, etc... Si vous voulez en savoir plus, n'hésitez pas à consulter le rfc 959, dont nous avons extrait (et traduit!) tout ce que vous venez de lire... Toutes nos excuses à messieurs Postel et Reynolds pour nous être contentés de reproduire ici leur oeuvre, et qui plus est sans leur permission. Mais vu qu'ils précisent "Distribution of this memo is unlimited", ils ne devraient pas trop nous en tenir rigueur...


Dernière mise à jour : 21 juillet1997


Exposé précédent : Windows NTExposé suivant : Le réseau Ethernet