Protocole FTP

Mode passif et mode actif

Analyse du protocole en mode actif

Le tableau brut

Analyse en 4 étapes


Le tableau brut

Dans le tableau ci-dessous, les données transférées sur le port ftp-data (port 20 TCP) sont sur fond coloré, les autres (les données de contrôle) transférées sur le port ftp (port 21 TCP). Ce tableau est complet et comporte aussi les paquets sans données, servant uniquement à l'acquittement des paquets précédents. Vous pouvez trouver le tableau simplifié ici mais sans les explications détaillées de la présente page..

Note : Les ports 20 et 21 UDP sont aussi réservés pour les mêmes usages par l'IANA. En pratique je n'ai jamais vu que des implémentations TCP.

Donc voici le tableau ci-dessous. En 51 paquets, il retrace une connexion FTP complète comportant :

Note : la partie "Données" a été transcrite en libellés clairs et, de plus, redondants avec les information d'adresses IP source et destination. Le but n'était pas de fournir la transcription exacte  de ces données. Elles ont souvent été tronquées au contraire. L'objet de ce tableau est seulement de bien montrer les différentes étapes de la séquence. Si vous souhaitez récupérer les données complètes, vous pouvez les consulter ici en texte brut ou encore là au format d'analyzer (l'analyseur de trame de l'université de Turin) ou encore vous promener dans la version html.

NumHeureSource adPortDestination adPort FlagsLong

Données

1 15h:16m:26s:638640 192.168.0.2041387195.98.246.3021 SYN0Requête client connexion TCP 21
2 15h:16m:26s:682210 195.98.246.3021192.168.0.2041387 ACK SYN0Serveur Ok
3 15h:16m:26s:682418 192.168.0.2041387195.98.246.3021 ACK0Client Ok
4 15h:16m:26s:736941 195.98.246.3021192.168.0.2041387 ACK PUSH897Serveur envoie bannière accueil
5 15h:16m:26s:805630 192.168.0.2041387195.98.246.3021 ACK PUSH16Client commande USER
6 15h:16m:26s:834280 195.98.246.3021192.168.0.2041387 ACK PUSH70Serveur accepte client
7 15h:16m:26s:841053 192.168.0.2041387195.98.246.3021 ACK PUSH5Client commande PWD
8 15h:16m:26s:869706 195.98.246.3021192.168.0.2041387 ACK PUSH34Serveur donne répertoire accueil
9 15h:16m:26s:873616 192.168.0.2041387195.98.246.3021 ACK PUSH6Client requête SYST
10 15h:16m:26s:899473 195.98.246.3021192.168.0.2041387 ACK PUSH19Serveur envoie info système
11 15h:16m:26s:906751 192.168.0.2041387195.98.246.3021 ACK PUSH8Client requête TYPE A
12 15h:16m:26s:934011 195.98.246.3021192.168.0.2041387 ACK PUSH23Serveur Ok pour ASCII
13 15h:16m:26s:938897 192.168.0.2041387195.98.246.3021 ACK PUSH26Client veut PORT 192,1 68,0,204,5,108 (=1388)
14 15h:16m:26s:972442 195.98.246.3021192.168.0.2041387 ACK PUSH29Serveur Ok pour le port client
15 15h:16m:26s:976306 192.168.0.2041387195.98.246.3021 ACK PUSH6Client veut LIST du répertoire
16 15h:16m:27s:197804 195.98.246.3021192.168.0.2041387 ACK0(6) 
17 15h:16m:32s:997726 195.98.246.3020192.168.0.2041388 SYN0Serveur initie connexion TCP-DATA 1388
18 15h:16m:32s:998042 192.168.0.2041388195.98.246.3020 ACK SYN0Client Ok
19 15h:16m:33s:049376 195.98.246.3020192.168.0.2041388 ACK0Serveur Ok
20 15h:16m:33s:052204 195.98.246.3021192.168.0.2041387 ACK PUSH29Serveur info connexion port 1388
21 15h:16m:33s:076338 195.98.246.3020192.168.0.2041388 ACK PUSH859Serveur répond à LIST
lrwxr-xr-x 1 0 0 19 Jan 28 12:53 Abuledu -> pub/Mirror/Abuledu/..lrwxr-xr-x 1 0 0 21 Jan 28 12:52 Debian -> pub/Mirror/debian-cd/
lrwxr-xr-x 1 0 0 18 Jan 22 09:01 OpenBSD -> pub/Mirror/OpenBSD..-rw-r--r-- 1 0 0 744 Mar 7 15:30 README
lrwxr-xr-x 1 0 0 15 Jan 27 14:56 SLIS -> pub/Mirror/SLIS..lrwxr-xr-x 1 0 0 19 Jan 27 14:56 SambaEdu -> pub/Mirror/SambaEdu
lrwxr-xr-x 1 0 0 15 Jan 27 15:48 Slcd -> pub/Mirror/Slcd..lrwxr-xr-x 1 0 0 23 Jan 28 13:08 debian-educ -> pub/Mirror/debian-educ/
dr-xr-xr-x 5 0 0 512 Mar 7 15:30 pub..drwxr-xr-x 5 0 0 512 Mar 7 15:28 sms..drwxr-xr-x 3 0 0 512 Mar 7 15:42 tice..
22 15h:16m:33s:077288 195.98.246.3020192.168.0.2041388 ACK FIN0 
23 15h:16m:33s:077546 192.168.0.2041388195.98.246.3020 ACK0 
24 15h:16m:33s:159341 192.168.0.2041388195.98.246.3020 ACK FIN0 
25 15h:16m:33s:181523 195.98.246.3020192.168.0.2041388 ACK0 
26 15h:16m:33s:234974 192.168.0.2041387195.98.246.3021 ACK0 
27 15h:16m:33s:260857 195.98.246.3021192.168.0.2041387 ACK PUSH40Serveur info
226-Option s: -l ..226 11 matches total
28 15h:16m:33s:435263 192.168.0.2041387195.98.246.3021 ACK0 
29 15h:16m:36s:150051 192.168.0.2041387195.98.246.3021 ACK PUSH8Client requête TYPE I.
30 15h:16m:36s:200464 195.98.246.3021192.168.0.2041387 ACK PUSH30Serveur Ok pour 8-bit binaire
31 15h:16m:36s:205819 192.168.0.2041387195.98.246.3021 ACK PUSH26Client veut PORT 192,1 68,0,204,5,109 (=1389)
32 15h:16m:36s:236657 195.98.246.3021192.168.0.2041387 ACK PUSH29Serveur Ok pour le port client
33 15h:16m:36s:240679 192.168.0.2041387195.98.246.3021 ACK PUSH13Client requête fichier
RETR README
34 15h:16m:36s:264995 195.98.246.3020192.168.0.2041389 SYN0Serveur initie connexion TCP-DATA 1389
35 15h:16m:36s:265309 192.168.0.2041389195.98.246.3020 ACK SYN0Client Ok
36 15h:16m:36s:288669 195.98.246.3020192.168.0.2041389 ACK0Serveur Ok
37 15h:16m:36s:291699 195.98.246.3021192.168.0.2041387 ACK PUSH29Serveur info connexion port 1389
38 15h:16m:36s:311345 195.98.246.3020192.168.0.2041389 ACK PUSH744Serveur envoie le fichier
############## ##############################################"
Serveur FTP de l'acad.mie de Cr.teil
############################################################"
Derni.re r.organisation de l'arborescence : 26 F.vrier 2003..Mirror .------> OpenBSD....Debian-cd
. .SLIS... .SambaEdu.. . .SLCD... .Debian-educ... .AbulEdu... ..applications .-----> openoffice .......--> 1.0.1..... .--> 1.0.2. .--> Dictionaries..pedagogie.----->.B2i...tice..----->.reseaux.. .......-->.ARCHIVES......-->.GestionReseau......-->.NOVELL......-->.Win95-98......-->.WinNT......-->.cablage
.-->.crinet......-->.depot......-->.divers......-->.internet
-->.logiciels......-->.outils......-->.peda......-->.strasbourg.sms..---->.grisms....liste....rnrsms.
39 15h:16m:36s:312339 195.98.246.3020192.168.0.2041389 ACK FIN0 
40 15h:16m:36s:312464 192.168.0.2041389195.98.246.3020 ACK0 
41 15h:16m:36s:439549 192.168.0.2041387195.98.246.3021 ACK0 
42 15h:16m:36s:465402 195.98.246.3021192.168.0.2041387 ACK PUSH95Serveur info
226-File s uccessfully transferred..226 0.019 seconds (measured here), 38.49 Kbytes per second..
43 15h:16m:36s:470765 192.168.0.2041389195.98.246.3020 ACK FIN0 
44 15h:16m:36s:493494 195.98.246.3020192.168.0.2041389 ACK0 
45 15h:16m:36s:639836 192.168.0.2041387195.98.246.3021 ACK0 
46 15h:16m:38s:312403 192.168.0.2041387195.98.246.3021 ACK PUSH6Client requête QUIT
47 15h:16m:38s:365956 195.98.246.3021192.168.0.2041387 ACK PUSH99Serveur Ok 
221-Goodby e. You uploaded 0 and downloaded 1 kbytes...221 Logout - CPU time spent: 0.000 seconds...
48 15h:16m:38s:367978 195.98.246.3021192.168.0.2041387 ACK FIN0(6) 
49 15h:16m:38s:368174 192.168.0.2041387195.98.246.3021 ACK0 
50 15h:16m:38s:369674 192.168.0.2041387195.98.246.3021 ACK FIN0 
51 15h:16m:38s:405609 195.98.246.3021192.168.0.2041387 ACK0(6) 

Analyse en 4 étapes

Etape 1 : établissement de la connexion à la demande du client
NumSource adPortDestination adPort FlagsLong

Données

1 192.168.0.2041387195.98.246.3021 SYN0Requête client connexion TCP 21
2 195.98.246.3021192.168.0.2041387 ACK SYN0Serveur Ok
3 192.168.0.2041387195.98.246.3021 ACK0Client Ok

Le client envoie un paquet SYN, le serveur répond par SYN/ACK et le client confirme par ACK. Ceci est une séquence très classique d'établissement de connexion TCP. Ensuite le serveur envoie ou non une bannière d'accueil (paquet 4, ici) ; cela dépend de la configuration du serveur. Tout ceci se passe sur le port de contrôle FTP (TCP 21).

Etape 2 : authentification
NumSource adPortDestination adPort FlagsLong

Données

5 192.168.0.2041387195.98.246.3021 ACK PUSH16Client commande USER
6 195.98.246.3021192.168.0.2041387 ACK PUSH70Serveur accepte client
7 192.168.0.2041387195.98.246.3021 ACK PUSH5Client commande PWD
8 195.98.246.3021192.168.0.2041387 ACK PUSH34Serveur donne répertoire accueil

Le client envoie la commande USER (paquet 5) avec son nom de connexion, ou anonymous pour une connexion anonyme (ce qui était le cas ici). Le serveur répond tout de suite (paquet 6), ici, car il accepte la commande USER seule. D'autres serveurs requièrent l'envoi d'un mot de passe après la commande USER même pour le compte anonyme. Simplement, le mot de passe envoyé n'a pas d'importance (la nétiquette prévoit de fournir son adresse e-mail). Tout est une question de configuration et de type de serveur. Ici le client envoie tout de même la commande mot de passe (paquet 7) et le serveur répond en indiquant quel est le répertoire courant (paquet 8).

Dans l'exemple ci-dessus, la connexion est suivie d'une demande de renseignement sur le type du système, envoyée par le client (paquets 9 et 10).

Etape 3 : requête de données

Elle commence par une commande client précisant le type de transfert qui va être demandé. Ici il désire un transfert ASCII ce qui va impliquer la prise en charge correcte des retours à la ligne quel que soit les systèmes source et destination.

11 192.168.0.2041387195.98.246.3021 ACK PUSH8Client requête TYPE A
12 195.98.246.3021192.168.0.2041387 ACK PUSH23Serveur Ok pour ASCII

Attention c'est ce qui suit qui va caractériser l'usage du mode actif. Le client va d'abord indiquer au serveur le port sur lequel il veut être contacté pour le transfert de données (ici le 1388).

13 192.168.0.2041387195.98.246.3021 ACK PUSH26Client veut PORT 192,1 68,0,204,5,108 (=1388)
14 195.98.246.3021192.168.0.2041387 ACK PUSH29Serveur Ok pour le port client

Ensuite le client envoie sa requête de données (ci-dessous il demande la liste du répertoire courant). Le paquet de réponse 15 ne contient aucune donnée TCP il ne sert qu'à acquitter le précédent.

Note : le nombre (6) indique qu'il y a 6 octets de "données" après l'en-tête TCP pour que le paquet ait bien la longueur minimum requise. C'est ce qu'on appelle du bourrage. Cela ne correspond à aucune donnée réelle.

15 192.168.0.2041387195.98.246.3021 ACK PUSH6Client veut LIST du répertoire
16 195.98.246.3021192.168.0.2041387 ACK0(6) 

Attention voilà la caractéristique du FTP en mode actif. Regardez bien ci-dessous c'est le serveur qui va initier la connexion TCP pour le transfert de données sur le port 20 (ftp-data).

17 195.98.246.3020192.168.0.2041388 SYN0Serveur initie connexion TCP-DATA 1388
18 192.168.0.2041388195.98.246.3020 ACK SYN0Client Ok
19 195.98.246.3020192.168.0.2041388 ACK0Serveur Ok

Puis indiquer sur le port de contrôle (21) que la connexion a bien été établie sur le port demandé par le client.

20 195.98.246.3021192.168.0.2041387 ACK PUSH29Serveur info connexion port 1388

Ensuite il expédie les données sur cette connexion établie sur son port 20 (ftp-data).

21 195.98.246.3020192.168.0.2041388 ACK PUSH859Serveur répond à LIST
lrwxr-xr-x 1 0 0 19 Jan 28 12:53 Abuledu -> pub/Mirror/Abuledu/..lrwxr-xr-x 1 0 0 21 Jan 28 12:52 Debian -> pub/Mirror/debian-cd/
lrwxr-xr-x 1 0 0 18 Jan 22 09:01 OpenBSD -> pub/Mirror/OpenBSD..-rw-r--r-- 1 0 0 744 Mar 7 15:30 README
lrwxr-xr-x 1 0 0 15 Jan 27 14:56 SLIS -> pub/Mirror/SLIS..lrwxr-xr-x 1 0 0 19 Jan 27 14:56 SambaEdu -> pub/Mirror/SambaEdu
lrwxr-xr-x 1 0 0 15 Jan 27 15:48 Slcd -> pub/Mirror/Slcd..lrwxr-xr-x 1 0 0 23 Jan 28 13:08 debian-educ -> pub/Mirror/debian-educ/
dr-xr-xr-x 5 0 0 512 Mar 7 15:30 pub..drwxr-xr-x 5 0 0 512 Mar 7 15:28 sms..drwxr-xr-x 3 0 0 512 Mar 7 15:42 tice..

Les paquets suivants terminent la connexion de données entre le port 20 du serveur et le port 1388 du client (paquets 22 à 25).

22 195.98.246.3020192.168.0.2041388 ACK FIN0 
23 192.168.0.2041388195.98.246.3020 ACK0 
24 192.168.0.2041388195.98.246.3020 ACK FIN0 
25 195.98.246.3020192.168.0.2041388 ACK0 

Suit l'expédition d'un compte-rendu d'exécution de la commande du serveur vers le client.

27 195.98.246.3021192.168.0.2041387 ACK PUSH40Serveur info
226-Option s: -l ..226 11 matches total

La même séquence recommence (paquets 29 à 45) pour le téléchargement d'un fichier. Notez le changement de port demandé par le client : 1389 cette fois. Le client impliqué (WS_FTP95 LE version 5.08) utilise visiblement des séquences de numéros de ports successifs.


Etape 4 : quitter la session FTP

La session FTP se termine avec la commande QUIT (paquet 46) suivie des paquets de fin de connexion TCP sur le port de contrôle FTP (TCP 21).

46 192.168.0.2041387195.98.246.3021 ACK PUSH6Client requête QUIT
47 195.98.246.3021192.168.0.2041387 ACK PUSH99Serveur Ok 
221-Goodby e. You uploaded 0 and downloaded 1 kbytes...221 Logout - CPU time spent: 0.000 seconds...
48 195.98.246.3021192.168.0.2041387 ACK FIN0(6) 
49 192.168.0.2041387195.98.246.3021 ACK0 
50 192.168.0.2041387195.98.246.3021 ACK FIN0 
51 195.98.246.3021192.168.0.2041387 ACK0(6) 

Voilà c'est fini.

Pour résumer les notions importantes du FTP en mode actif.


mailto:etienne.durup@free.fr

Dernière mise à jour : 09.03.2003