Comprendre l'informatique
Le protocoles 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 machine distante
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
Ainsi, le client comme le serveur possède 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.
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
USER Chaîne de caractère permettant d'identifier l'utilisateur.
L'identification de l'utilisateur est nécessaire pour établir
une communication sur le canal de données
PASS Chaîne de caractère 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é
ACCT Chaîne de caractère 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
CWD Change 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
CDUP Change 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 "..")
SMNT Structure Mount :
REIN Reinitialize :
QUIT Commande 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
PORT Chaîne de caractère permettant de préciser le
numéro de port à utiliser
PASV Commande 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.
TYPE Cette commande permet de préciser le type de format dans lequel
les données seront envoyées
STRU Caractère Telnet précisant la structure du fichier
(F pour File, R pour Record, P pour Page)
MODE Caractère Telnet précisant le mode de transfert des
données (S pour Stream, B pour Block, C pour Compressed)
Commande de paramètres de transfert
RETR Cette commande (RETRIEVE) demande au serveur DTP une copie du fichier
dont le chemin d'accès est passé en paramètre.
STOR Cette 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
STOU Cette 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
APPE Grâ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éé
ALLO Cette commande (allocate) demande au serveur de prévoir un
espace de stockage suffisant pour contenir le fichier dont le nom est
passé en argument.
REST Cette 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 suivi
d'une commande de transfert.
RNFR Cette 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
RNTO Cette 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
ABOR Cette 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.
DELE Cette 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.
RMD Cette commande (remove directory) permet de supprimer un répertoire.
Elle indique en paramètre le nom du répertoire à
supprimer
MKD Cette commande (make directory) permet de créer un répertoire.
Elle indique en paramètre le nom du répertoire à
créer
PWD Cette commande (print working directory) permet de renvoyer le chemin
complet du répertoire courant
LIST Cette 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
NLST Cette commande (name liste) permet d'envoyer la liste des fichiers
et répertoires dans le répertoire courant
SITE Cette commande (site parameters) permet au serveur de proposer des
services spécifiques, non définis dans le protocole FTP
SYST Cette commande (system) permet d'envoyer des informations sur le
serveur distant
STAT Cette 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
HELP Cette commande permet de connaître l'ensemble des commandes
comprises par le serveur. Les informations sont retournées sur
le canal de contrôle
NOOP Cette 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ère Telnet séparée
du code numérique par un espace).
|