Protocole FTP
Protocole FTP
Protocole FTP
Titre du document
Sommaire
1. Introduction..........................................................................................2
2. TERMINOLOGIE......................................................................................2
3. Le modèle ftp........................................................................................5
4. Relations entre FTP et Telnet...................................................................6
5. Transfert de fichiers................................................................................6
5.1. Commandes ftp................................................................................7
5.1.1. Commandes de contrôle d'accès....................................................7
5.1.2. Commandes de paramétrage du transfert.......................................9
5.1.3. Commandes de service ftp..........................................................11
5.1.4. Réponses ftp.............................................................................16
5.1.5. Codes de réponse par groupes de fonctions...................................19
5.1.6. Scénario ftp typique...................................................................23
1.Introduction
Le protocole FTP (File Transfer Protocol) est, comme son nom l'indique, un
protocole de transfert de fichier.
Le protocole FTP définit la façon selon laquelle des données doivent être
transférées sur un réseau TCP/IP.
2.TERMINOLOGIE
Canal de contrôle
Canal de données
Une connexion bidirectionnelle (full duplex) sur laquelle les données sont
transférées, dans un mode et sous un type particuliers. Les données transférées
peuvent être une partie d'un fichier, un fichier entier, ou plusieurs fichiers. Cette
connexion s'établit entre un SERVER-DTP et un USER-DTP, ou entre deux
SERVER-DTPs.
Chemin d'accès
Le chemin d'accès est défini comme la chaîne de caractères qui doit être
présentée par un utilisateur à un système de fichier pour localiser une ressource.
Le chemin d'accès contient normalement une indication de l'unité logique et/ou
des noms de répertoires, et enfin un nom de fichier. FTP ne spécifie aucune
convention particulière pour le chemin d'accès. Chaque utilisateur devra se
conformer aux conventions utilisées sur les systèmes de fichiers impliqués dans
le transfert.
Commandes FTP
Contrôle d'accès
Correction d'erreur
DTP
PI
Processus SERVER-FTP
Processus USER-FTP
Réponse
SERVER-DTP
Le processus qui transmet les données, dans son état "actif" normal, établit le
canal de données sur le port "en écoute". Il établit des paramètres pour le
transfert et le stockage, et transfère les données sur commande de son PI. Le
DTP peut entrer dans un état "passif" pour attendre, plutôt qu'initier une
communication.
SERVER-PI
Tailles de mots
Deux tailles de mots intéressent FTP: la taille des mots logiques du fichier, et la
taille utilisée pour la transmission des données. La taille d'un mot pour le
transfert est toujours de 8 bits. Cette taille de transfert n'est pas nécessairement
l'unité d'enregistrement logique du fichier dans le système, ni la taille des unités
logiques permettant l'interprétation des structures de données.
Utilisateur (USER)
Une personne ou un processus sous contrôle d'une personne désirant obtenir des
fichiers distants par transfert. L'utilisateur "humain" peut directement agir en
interactivité avec un processus SERVER-FTP, mais le passage par un processus
USER-FTP est conseillé dans la mesure où le protocole FTP a été conçu sur un
concept d'automate.
USER-DTP
USER-PI
Une autre situation peut consister en un utilisateur qui souhaite transférer des
fichiers entre deux hôtes, les deux étant des hôtes distants différents de celui de
l'utilisateur. L'utilisateur établit alors un canal de contrôle vers chacun des deux
serveurs et utilise ces canaux pour créer un canal de données entre ces deux
hôtes.
De cette façon, les informations de contrôle passent par le USER-PI bien que les
données soient transmis ente deux processus serveurs de transfert. Ce qui suit
est un modèle de cette interaction entre serveurs.
Figure 2
Le protocole demande à ce que les canaux de contrôle soient ouvert tant que
dure le transfert de données. Il est de la responsabilité de l'utilisateur de
demander la fermeture des canaux de contrôle lorsque l'utilisation du service FTP
est terminée. C'est néanmoins le processus serveur qui prend en charge la
rupture. Le serveur peut arrêter un transfert de données si le canal de contrôle
est coupé sans commande préalable.
5.Transfert de fichiers
Le canal de communication entre le USER-PI et le SERVER-PI est établi comme
une connexion TCP entre l'utilisateur et le port standard FTP du serveur.
L'interpréteur de protocole est responsable de l'émission des commandes FTP et
de l'interprétation des réponses; le SERVER-PI interprète les commandes, envoie
les réponses, et pilote le DTP pour établir le canal de données et transférer les
fichiers. Si le correspondant du processus de transfert (le processus passif) est
un USER-DTP, alors celui-ci est lui-même piloté par l'intermédiaire de
l'interpréteur de protocole de l'hôte USER-FTP; s'il s'agit d'un second SERVER-
DTP, alors son contrôle se fait via son propre PI sur commande du USER-PI. Les
réponses FTP sont décrites dans la section suivante. Dans la description des
quelques commandes de la section présente, il nous est apparu utile d'être
explicite sur les réponses à attendre.
Les commandes FTP sont des chaînes de caractères "Telnet" terminées par le
"code de fin de ligne Telnet". Les codes de commande sont eux-mêmes des
caractères alphabétiques suivis du caractère <SP> (Espace) si d'autres
paramètres suivent, et Telnet-EOL dans le cas contraire. Les codes et
sémantique des commandes sont décrites dans cette section; la syntaxe détaillée
est décrite dans la Section traitant des Commandes, les séquences de réponse
sont explicitées dans la Section traitant du Séquencement des Commandes et
Réponses, et les scénarios illustrant l'usage typique d'une commande sont
donnés en Section traitant des Scénarios FTP Typiques.
(Sur certains serveurs, cette procédure n'est pas indispensable, mais son
activation ne produira pas d'effets inattendus).
PASSWORD (PASS)
MOT DE PASSE
Le champ argument est une chaîne Telnet indiquant le mot de passe attribué à
cet utilisateur. Cette commande doit immédiatement suivre la commande
précédente, et, sur certains sites, complète les données d'identification de
l'utilisateur pour lui permettre un accès au système de fichiers. Comme le mot de
passe est une information dite "sensible", il est préférable de le "masquer" lors
de son entrée, voire d'en éviter l'impression en clair à l'écran. Cependant, il
apparaît que le serveur n'a aucun moyen de s'opposer à sa divulgation. Il est
donc de la responsabilité des USER-FTP d'éviter le stockage explicite du mot de
passe et son affichage.
ACCOUNT (ACCT)
COMPTE UTILISATEUR
Des codes de réponse existent pour différencier ces cas pour un automate :
lorsque l'infirmation de compte est requise à l'ouverture de session, la réponse à
une commande PASSword exécutée avec succès est de code 332. Dans l'autre
cas où le compte utilisateur n'est pas requis à l'ouverture de session, la réponse
donnée à une commande PASSword concluante est de code 230; enfin, si le
compte utilisateur est requis à la suite d'une commande exécutée plus loin dans
le processus, le serveur répondra par un code 332 ou 532 suivant que la
commande précédente est complétée (attente de la commande ACCounT) ou
respectivement avortée.
Il s'agit d'un cas particulier de la commande CWD, et est définie pour simplifier
l'implémentation de programmes transférant des structures entières de
répertoires entre des systèmes d'exploitation utilisant des syntaxes différentes
pour l'accès au répertoire père. Les codes de réponse attendus sont identiques à
ceux attendus pour la commande CWD. Voir l'Appendice II pour plus de détails.
REINITIALIZE (REIN)
REINITIALISATION
Cette commande tue une connexion USER, libérant toute les ressources
d'entrées/sorties et les informations de session, sauf pour l'opération de transfert
en cours qui est achevée normalement. Tous les paramètres sont rétablis dans
leurs valeurs par défaut et le canal de contrôle est laissé ouvert. L'état obtenu
est identique à l'état dans lequel serait un canal de contrôle juste après son
établissement. Une commande USER est en général attendue.
LOGOUT (QUIT)
FERMETURE DE SESSION
Cette commande termine une session USER et si aucun transfert n'est en cours,
ferme le canal de contrôle. Si un fichier est en cours de transfert, la connexion
restera ouverte jusqu'à recevoir le code de résultat de l'opération, puis sera
fermée par le serveur. Un processus utilisateur qui transfère des fichiers
multiples pour des USER distincts sans être obligé de couper puis de rouvrir à
chaque fois une nouvelle session, utilisera plutôt une commande REIN.
Tous les paramètres de transfert ont des valeurs par défaut, et l'usage des
commandes de paramétrage du transfert ne sont à utiliser que dans le cas ou
des valeurs non standard sont requises pour la connexion. Les valeurs "par
défaut" sont usuellement les dernières utilisées, ou, si aucune n'a été spécifiée,
la valeur par défaut "standard". Ceci implique que le serveur doit se "rappeler"
des valeurs par défaut applicables. Ces commandes peuvent apparaître dans
n'importe quel ordre, mais doivent toujours précéder les requêtes de service FTP.
Les commandes suivantes spécifient les paramètres de transfert :
PORT h1,h2,h3,h4,p1,p2
dans laquelle h1 contient les 8 bits de poids fort de l'adresse Internet de l'hôte
spécifié.
PASSIVE (PASV)
MODE PASSIF
A - ASCII | | N - Non-print
|-><-| T - Telnet format effectors
E - EBCDIC | | C - Carriage Control (ASA)
I - Image
L <byte size> - taille d'octet logique locale
L'argument est donné sous forme d'un caractère Telnet unique spécifiant la
structure de fichier conformément à la Section traitant des Représentations de
Données et Stockage.
Les codes suivant sont actuellement réservés pour l'encodage des structures :
L'argument est donné sous forme d'un caractère Telnet unique spécifiant les
modes de transfert de données décrits dans la Section traitant des Modes de
Transmission.
S - flux (stream)
B - Bloc
C - Compressé
RETRIEVE (RETR)
TRANSMISSION
STORE (STOR)
ENREGISTREMENT
ALLOCATE (ALLO)
ALLOCATION
Cette commande peut être nécessaire sur certains serveurs pour réserver un
espace de stockage suffisant pour permettre le stockage des données à
transférer. L'argument est un entier donnant la taille en octets à réserver (la
taille est relative à l'octet logique). Pour des fichiers transférés en mode
enregistrement ou par pages, un nombre maximal d'enregistrement ou une taille
maximale de page (comptée en octets logiques) peut être nécessaire; ces
valeurs sont indiquées par l'usage d'un deuxième paramètre entier décimal. Ce
second argument est optionnel, et doit être séparé du premier, lorsqu'utilisé, par
les trois caractères Telnet <SP> R <SP>. Cette commande doit être usuellement
suivie d'une commande STORe ou APPEnd. La commande ALLO doit être traitée
comme une commande NOOP (no operation) par tous les serveurs ne nécessitant
pas une prédéclaration de la taille de fichiers à enregistrer, ceux qui nécessitent
seulement une mention de la taille maximale d'enregistrement ou de taille
maximale de page peuvent accepter une absence de valeur pour le premier
paramètre, ou ignoreront la valeur si spécifiée.
RESTART (REST)
REPRISE
Cette commande indique l'ancien chemin d'accès complet du fichier qui doit être
renommé. Cette commande doit être immédiatement suivie d'une commande
"rename to" spécifiant le nouveau nom du fichier en question.
RENAME TO (RNTO)
RENOMMER VERS...
ABORT (ABOR)
AVORTEMENT
Dans le second cas, le serveur interrompt le service FTP en cours, coupe le canal
de données, et renvoie un code 426 pour indiquer que la dernière commande
s'est achevée anormalement. Le serveur envoie à la suite un code 226, indiquant
que la commande d'avortement elle-même s'est bien déroulée.
DELETE (DELE)
SUPPRESSION
Cette commande provoque la création d'un répertoire (si le chemin est absolu)
ou d'un sous répertoire du répertoire courant (si le chemin est relatif) selon le
chemin spécifié. Voir l'appendice II.
LIST (LIST)
CATALOGUE DU REPERTOIRE COURANT
Cette commande provoque l'émission par le serveur d'une liste de fichiers au DTP
passif. Si le chemin mentionné spécifie un répertoire ou tout autre groupe de
fichiers, le serveur répondra par une liste des fichiers dans ce répertoire ou ce
groupe. Si le chemin spécifie un fichier normal, alors les informations système
relatives à ce fichier seront renvoyées. Une absence d'argument indique par
défaut le répertoire courant. La réponse est transférée via le canal de données
pour les types ASCII ou EBCDIC. (l'utilisateur doit s'assurer que le type est
effectivement ASCII ou EBCDIC). Comme les informations relatives à un fichier
peuvent varier grandement en forme et présentation entre divers systèmes,
celles-ci seront généralement peu exploitable par un automate. Elles sont
cependant fort utiles pour un utilisateur humain.
Cette commande provoque l'envoi par le serveur d'un catalogue succinct d'un de
ses répertoires vers l'utilisateur. Le chemin spécifié doit décrire un répertoire
valide ou tout autre descripteur d'un ensemble de fichiers; un argument omis
désigne le répertoire courant. Le serveur répondra par une liste de noms de
fichiers à l'exclusion de toute autre information. Les données sont transférées en
ASCII ou EBCDIC sur le canal de données sous forme d'une suite de noms de
chemins d'accès valides séparés par des <CRLF> ou <NL>. (Encore une fois,
l'utilisateur doit s'assurer que le paramètre TYPE est correct). Cette commande a
été implémentée pour permettre à des processus automatiques de pouvoir
récupérer cette liste pour traitement ultérieur. Un cas typique est
l'implémentation d'une fonction de téléchargement de fichiers multiples.
Cette commande est utilisée par le serveur pour proposer des services
spécifiques à ce système qui sont indispensables pour le transfert de fichiers
mais insuffisamment universels pour justifier l'attribution d'une commande dans
le protocole. La nature de ces services, et leur syntaxe devra être fournie par
chaque service les utilisant, en réponse d'une commande HELP SITE.
SYSTEM (SYST)
SYSTEME
STATUS (STAT)
STATUT
Cette commande provoque l'envoi d'un message d'état (statut) de réponse sur le
canal de contrôle. Cette commande peut être utilisée en cours de transfert (avec
les signaux IP et Synch de Telnet - voir la Section traitant des commandes FTP)
auquel cas le serveur doit répondre avec l'état de la transaction en cours, ou bine
elle peut être envoyée entre deux transferts. Dans ce dernier cas, la commande
devra être utilisée avec un argument. Si cet argument est un chemin d'accès, la
commande résultante équivaut à une commande "list" à l'exception près que la
réponse sera transmise par le canal de connexion au lieu du canal de données. Si
un chemin partiel est donné, Le serveur répondra par une liste de noms de
fichiers ou d'attributs associés à cette spécification. Si aucun argument n'est
donné, le serveur renverra une information générale concernant le processus
serveur FTP. Ceci pourra inclure l'ensemble des paramètres de connexion
actuellement utilisé ainsi que l'état de toutes les connexions.
HELP (HELP)
AIDE
NOOP (NOOP)
PAS D'ACTION
Les réponses à des commandes FTP sont destinées à assurer une certaine
synchronisation des actions impliquées dans un processus de transfert de
fichiers, et garantir que le processus utilisateur puisse toujours connaître l'état
du serveur. Chaque commande suscite au moins une réponse, mais plusieurs
réponses peuvent être données; dans ce dernier cas, les multiples réponses
devront être aisément différentiables. De plus, certaines commandes peuvent
être émises groupées en séquence, comme USER, PASS et ACCT, ou RNFR et
RNTO. Les réponses témoignent de l'existence d'états intermédiaires si toutes les
commandes passées sont exécutées avec succès. L'échec d'une seule étape
nécessitera de recommencer toute la procédure.
Une réponse FTP répond consiste en un nombre à trois chiffres (transmis sous
forme de trois caractères alphanumériques) suivis d'un texte. Le code numérique
est à destination d'automates pour renseigner des dispositions à prendre et de
l'état suivant de celui-ci; le texte est plutôt destiné à l'utilisateur humain. Les
trois digits du code sont sensés contenir suffisamment d'information pour que le
processus utilisateur (USER-PI) n'ait pas nécessité d'examiner la partie texte de
la réponse, laquelle peut être soit éliminée, soit transférée à l'interface
utilisateur, selon la nécessité. En particulier, le texte émis peut varier de serveur
à serveur, et un automate pourrait donc avoir des difficultés à analyser tous les
messages possibles.
Une réponse est définie comme contenant le code à 3-digits, suivi d'un Espace
<SP>, suivie par une ligne de texte (lorsqu'une longueur maximale de réponse a
été définie auparavant), et terminée par le code de fin-de-ligne Telnet. Il y aura
des cas cependant, ou le texte sera plus long qu'une simple ligne. Dans ce cas, le
texte entier aurait pu être mis entre crochets de sorte que le processus
utilisateur puisse savoir quand s'arrête la lecture du texte (c-à-d. arrête l'analyse
de l'entrée du canal de contrôle) pour passer à d'autres tâches. Ceci implique
l'utilisation d'un format particulier sur la première ligne pour indiquer que
d'autres lignes suivent, et un autre format particulier sur la dernière. Au moins
une de ces lignes doit présenter le code de réponse. Pour satisfaire tous les avis
sur le problème, il a été décidé que le code serait identique sur la première et la
dernière ligne.
Ainsi, le format d'une réponse multilignes est tel que la première ligne débute
par le code exact de la réponse, suivi d'un tiret "-" (Hyphénation ou "moins"),
suivi du texte de la première ligne. La dernière ligne commencera par le même
code, suivi immédiatement d'un Espace <SP>, éventuellement du texte, terminé
par le code de fin-de-ligne Telnet.
Par exemple:
123-First line
Second line
234 A line beginning with numbers
Les trois digits de la réponse ont chacun une signification particulière. Ceci
permet d'implémenter des traitements à réponse du plus simple au plus
complexe dans l'USER-PI. Le premier digit indique si la commande se termine en
succès, échec, ou est incomplète. (Rapport au diagramme d'état), un
interpréteur de protocole simpliste pourra déterminer une stratégie d'action à
lancer (telles que se retirer, tenter de nouveau, etc.) en se bornant à examiner
ce digit. Un processus utilisateur désireux de savoir de quelle nature est l'erreur,
(ex. erreur du système de fichiers, erreur de syntaxe dans la commande) pourra
examiner le second digit, le troisième étant réservé au degré le plus fin de
signalisation (ex., une commande RNTO sans commande RNFR antérieure).
La commande a été refusée, et l'action n'a pas été exécutée, mais la condition
d'erreur invoquée est de nature temporaire, impliquant que la même commande
peut être tentée à nouveau. Dans le cas d'une séquence de commandes
groupées, l'utilisateur reprendra toute la séquence depuis son début. Le contexte
du terme "transitoire" reste cependant difficile à expliciter, en particulier lorsque
deux sites distincts (SERVER- et processus USER) doivent s'accorder sur son
interprétation. Chaque réponse de la classe 4yz peut correspondre à un contexte
de durée différent, mais le but de cette classe est de signaler au processus
utilisateur la possibilité de tenter l'opération encore une fois. Une règle
d'implémentation pour savoir si une réponse doit entrer ou doit être fournie dans
la classe 4yz ou 5yz (Négative définitive) est la suivante : une réponse sera de
classe 4yz si la commande peut être répétée avec une chance de succès, A
L'IDENTIQUE, et sans aucune modification des paramètres USER ou SERVER (c-
à-d., la commande est écrite strictement comme la première; l'utilisateur ne
change pas ses droits d'accès, ne change pas de compte ni de session; le serveur
ne change pas d'implémentation).
La commande a été refusée, et l'action n'a pas été exécutée. Le serveur notifie
par là au processus utilisateur qu'il sera vain de retenter la même commande
(dans la même séquence). Certaines conditions d'erreur "permanentes" pourront
toutefois être corrigées, et la commande pourra être relancée par une action
explicite de l'utilisateur humain, soit après correction de la commande, soit après
changement de ses droits, soit après intervention de l'opérateur du serveur.
x0z Syntaxe
x1z Information
x2z Connexions
Le troisième digit permet de qualifier encore plus finement les réponses dans
chacune des catégories données par le deuxième digit. La liste des réponses
donnée ci-après le montre. Notez que le contenu informationnel du texte ci-
dessous est une "recommandation", et est nature à interprétation en fonction du
serveur qui l'émet. Les codes de réponse, par opposition, doivent suivre à la
lettre les spécifications indiquées; c'est-à-dire que les implémentations des
serveurs ne doivent jamais inventer de nouveaux codes, même si les situations
dans lesquelles ils peuvent être sont légèrement différentes que celles définies;
elles devront impérativement choisir le code correspondant à la situation la plus
proche.
Une commande telle que TYPE ou ALLO dont l'exécution complète n'est pas de
nature à apporter une information utile pour le processus utilisateur
provoqueront le retour d'une réponse de code 200. Lorsque la commande en
question n'est pas implémentée par un processus SERVER-FTP particulier (cette
fonction n'a pas de signification dans ce contexte particulier de serveur, par
exemple, la commande ALLO sur un site TOPS20), ce dernier devra de
préférence répondre par un code positif de sorte que l'utilisateur puisse
poursuivre sa procédure. Une réponse de code 202 sera utilisé dans ce cas,
associé par exemple au texte suivant: "Allocation non nécessaire." Si, par contre,
la commande est générale, mais non implémentée par le site serveur, un code
502 sera répondu. Une version affinée de cette réponse est le code 504 qui
précise que cette commande est implémentée, mais l'un au moins des
paramètres associés ne l'est pas.
500 Erreur de syntaxe, commande non reconnue. Inclut le cas d'une ligne de
commande trop longue.
110 Réponse à marqueur de reprise. Dans ce cas, le texte doit être exact et n'est
pas "adaptable" par des implémentations "locales"; il DOIT indiquer: MARK yyyy
= mmmm où yyyy est le marqueur du flux de données USER-DTP, et mmmm le
marqueur équivalent côté serveur (noter l'espace indispensable entre les
marqueurs et le "=").
421 Service non disponible, canal de contrôle fermé. Répondu à toute commande
lorsque la fermeture imminente du service est prévue.
450 Service fichier non traité. Fichier non disponible (ex., fichier verrouillé par un
autre utilisateur).
550 Service fichier non traité. Fichier non accessible (ex., fichier non trouvé,
accès refusé).
110 Réponse à marqueur de reprise. Dans ce cas, le texte doit être exact et n'est
pas "adaptable" par des implémentations "locales"; il DOIT indiquer: MARK yyyy
= mmmm où yyyy est le marqueur du flux de données USER-DTP, et mmmm le
marqueur équivalent côté serveur (noter l'espace indispensable entre les
marqueurs et le "=").
421 Service non disponible, canal de contrôle fermé. Répondu à toute commande
lorsque la fermeture imminente du service est prévue.
450 Service fichier non traité. Fichier non disponible (ex., fichier verrouillé par un
autre utilisateur).
500 Erreur de syntaxe, commande non reconnue. Inclut le cas d'une ligne de
commande trop longue.
550 Service fichier non traité. Fichier non accessible (ex., fichier non trouvé,
accès refusé).
Sources de référence
Citer les auteurs et les sources de référence utilisées pour l’élaboration du
support