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.
- Premier chiffre
- 1yz : réponse préliminaire positive
- L'action demandée est en cours dčinitialisation;
attendre une nouvelle réponse avant de lancer une
nouvelle commande.
- 2yz : réponse positive de réalisation
- L'action demandée a bien été
effectuée. En attente d'une nouvelle commande.
- 3yz : réponse intermédiaire positive
- La commande a été acceptée, mais
l'action demandée est suspendue en attendant des
informations supplémentaires.
- 4yz : réponse négative de réalisation
- La commande n'a pas été acceptée et
l'action demandée n'a pas eu lieu, mais les conditions
d'erreur ne sont que temporaires et la commande va pouvoir
être envoyée à nouveau.
- 5yz : réponse négative permanente
- La commande n'est pas acceptée, l'action
demandée n'a pas lieu, mais ici on recommande au process
client de ne pas renouveler sa demande formulée de la
même manière.
- Deuxième chiffre
- x0z : Syntaxe
- Cette réponse indique une erreur de syntaxe, une
commande syntaxiquement correcte mais ne correspondant à
aucune catégorie fonctionnelle, une commande non
implémentée ou superflue.
- x1z : Information
- Réponses donnant des informations, par exemple
réponses à des commandes STAT ou HELP.
- x2z : Connections
- Réponses concernant la connection de données.
- x3z : Autentification et comptes
- Réponses des phases de login et de changement de
comptes.
- x4z : Non spécifié pour le moment
-
- x5z : Système de fichiers
- Indique le statut du serveur de fichiers vis à vis
du transfert demandé ou d'une autre action sur le
système de fichiers.
- Troisième chiffre
Le troisième chiffre donne une graduation plus fine dans la
signification de chacune des catégories
spécifiée à l'aide du second chiffre.
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 NT

Exposé suivant : Le
réseau Ethernet