Les grandes lignes du protocole FTP
  
  - 
    2 modèles de fonctionnement:
    
      - 
	transferts entre une machine serveur et la machine de l'utilisateur
	
	  
 
- 
	transferts entre deux machines serveurs contrôlées depuis la
	machine de l'utilisateur
	
	  
 
     
 
- 
    le transfert de données est caractérisé par 3 aspects
    (les valeurs par défaut sont marquées en
    gras+italique):
    
      - 
	le mode de transfert
	
	  - 
	    Stream: les données sont transmises comme une séquence
	    d'octets
	  
- 
	    Block: les données sont transmises par blocs de taille variable;
	    chaque bloc commence par un descripteur suivi d'une valeur de 16 bits indiquant
	    le nombre d'octets de donnée. Permet d'insérer des points de
	    reprise pour relancer le transfert à partir d'un de ces points en
	    cas de rupture de connexion.
	  
- 
	    Compressed: plusieurs octets consécutifs identiques peuvent
	    être encodés sur 2 octets (facteur de répétition
	    + valeur à répéter). Ce mode comporte tous les
	    possibilités du mode block.
	
 
- 
	la structure du fichier
	
	  - 
	    File: pas de structure à proprement parler. Le fichier
	    est une simple séquence d'octets. Pour du texte, les lignes sont
	    délimitées par <CRLF>.
	  
- 
	    Record: le fichier est composé d'une séquence
	    d'enregistrements (généralement un par ligne)
	  
- 
	    Page: généralement quand le fichier est destiné
	    à une imprimante.
	
 
- 
	le type de représentation de l'information
	
	  - 
	    ASCII: représentation par défaut. Le transfert
	    se fait dans une représentation normalisée NVT-ASCII (NVT=
	    Network Virtual Terminal). Il y a conversion entre la représentation
	    interne et la représentation NVT-ASCII s'il y a lieu.
	  
- 
	    EBCDIC: le transfert se fait en représentation EBCDIC 8 bits.
	    Cette représentation n'est généralement employée
	    que si la représentation interne sur les deux machines est aussi EBCDIC,
	    pour éviter des conversions inutiles.
	  
- 
	    Image: les données sont considérées comme une
	    suite de bits contigus transférés par groupes de 8 bits.
	  
- 
	    Local: les données sont transférées en bytes
	    "logiques" de n bits (n étant fourni en paramètre).
	  
- 
	    pour les types ASCII et EBCDIC, 3 formats de contrôle
	    de l'avancement vertical peuvent être spécifiés:
	    
	      - 
		Non Print: pas d'information sur l'avancement vertical
	      
- 
		Telnet: des caractères de contrôle (<CR>,
		<LF>, <VT>, <FF>) permettent de contrôler l'avance
		verticale, quand le fichier est destiné à une imprimante.
	      
- 
		Carriage: convention du FORTRAN, selon laquelle le premier caractère
		de chaque ligne n'est pas imprimé, mais sert plutôt à
		contrôler l'avancement vertical.
		
	     
 
 
 
- 
    côté serveur, le port de contrôle par défaut est
    le port 21et le port de transfert de données est le port
    20.
  
- 
    côté utilisateur, tout se fait par défaut sur le même
    port, qui est déterminé lors de la connexion initiale.
    
   
- 
    la connexion est démarrée par l'utilisateur, sur le port de
    contrôle du serveur.
  
- 
    à la suite d'une commande de transfert, le serveur établit
    une connexion sur le port de données du client
  
- 
    en mode stream, la fin des données est indiquée par
    la fermeture de la connexion de données -> peu fiable puisqu'on
    ne peut pas différencier fin de transfert et rupture inopinée
    de connexion.
  
- 
    les modes block et compressed permettent une procédure
    de redémarrage à partir de points de reprise définis
    par l'envoyeur du fichier.
    
   
- 
    le serveur répond à chaque commande par un code de 3 chiffres,
    suivi d'un texte destiné à un humain. Le premier chiffre indique
    la catégorie de la réponse (positive préliminaire, positive
    finale, positive intermédiaire, négative transitoire,
    négative permanente), le deuxième chiffre indique ce qui est
    concerné par la réponse (syntaxe, information, connexions,
    système de fichiers) et le troisième chiffre donne la signification
    précise de la réponse.
  
- 
    après l'envoi d'une commande, le client doit toujours attendre un
    code réponse avant d'envoyer une autre commande ou des données.
    
   
- 
    pour transférer entre deux serveurs, il faut:
    
      - 
	mettre un des deux en mode passif, à l'aide de la commande
	PASV (qui retourne l'adresse IP et le numéro de port sur
	lequel ce serveur passif s'est mis en attente d'une connexion), puis lui
	envoyer une commande de réception de fichier STOR,
      
- 
	indiquer à l'autre serveur (actif) l'adresse IP et le numéro
	de port utilisé par le serveur passif, à l'aide de la commande
	PORT,
      
- 
	envoyer au serveur actif la commande de transfert RETR.
    
 
- 
    si les serveurs ne sont pas correctement configurés, ce mécanisme
    peut servir à contourner des mesures de restriction d'accès,
    ou à envoyer de manière détournée des informations
    (courrier électronique ou message de forum de discussion) en rendant
    difficile la détermination de la source d'information (c.f.
    The FTP Bounce Attack). En effet, la commande
    PORT permet d'indiquer sur quel port d'une machine à distance
    le transfert de fichier aura lieu. Si ce port est un des ports par défaut
    employé par un protocole Internet et que le fichier est conçu
    pour correspondre à des commandes dans ce protocole, le transfert
    de fichier peut résulter en une opération toute autre qu'un
    simple transfert de fichier. Par exemple, si la commande PORT est
    utilisée pour diriger les données sur le port 25 d'un serveur
    SMTP, le transfert de fichier peut résulter en l'envoi d'un
    message de courrier électronique.
  
- 
    il existe des versions sécurisées de serveurs FTP
    qui empèchent dans une grande mesure ce genre d'utilisation
    détournée.
  
  
   Bertrand Ibrahim
  Bertrand Ibrahim 
   
  
  Dernière modification: 29.12.00
Site Hosting: Bronco