En mode passif FTP, j'ai lu que le serveur envoie un numéro de port aléatoire au client où il peut établir un canal de données.
Le client établit ensuite un canal de données à partir de son numéro de port aléatoire vers ce numéro de port envoyé par le serveur.
Ma question est pourquoi le serveur envoie-t-il un numéro de port aléatoire au client? Pourquoi le client ne peut-il pas établir directement un canal de données vers le port numéro 20 côté serveur?
Réponses:
C'est ainsi que le protocole FTP a été conçu pour fonctionner en mode passif. Ce n'était probablement pas une bonne idée, car je ne pense pas que ce modèle ait été répété à nouveau dans aucun autre protocole (et c'est encore plus vrai pour le mode actif FTP).
Sur le port de connexion de données, il n'y a pas de protocole. Tout ce que le serveur sait - la seule chose qui contient des informations sur cette connexion - est le numéro de port auquel vous vous connectez.
Si vous deviez vous connecter au même port à chaque fois, le serveur ne pourrait pas savoir pour quel fichier vous vous connectez. Le numéro de port sert de lien entre une demande de transfert sur la connexion de contrôle et une connexion de données - le numéro de port est contenu dans la réponse à la
PASV
commande.Si deux clients devaient demander un transfert en même temps, lorsque le serveur accepte une connexion sur un seul port, le serveur ne serait pas en mesure de dire quel fichier transférer. Bien sûr, le serveur pourrait utiliser une IP cliente pour la décision (en fait, de nombreux serveurs FTP valident que l'IP client correspond à l'IP utilisée sur la connexion de contrôle, pour des raisons de sécurité).
Mais cela ne fonctionnerait pas pour:
Copié en partie de ma réponse à Pourquoi le mode passif FTP nécessite-t-il une plage de ports par opposition à un seul port? sur Server Fault.
la source
Habituellement, le serveur n'envoie pas de port aléatoire mais libre à partir d'une plage / d'un pool défini (par installation) - pour le client, cela semble aléatoire. Ce port doit être transféré au niveau du pare-feu, ce qui nécessite de définir une plage.
Malheureusement, FTP est ancien. Je suppose que les anciens serveurs ne pouvaient pas distinguer les sessions de données de plusieurs clients, sauf par port. En règle générale, il est préférable de passer à des protocoles plus à jour où tout est parfaitement mis en paquets dans une seule session de socket.
la source