Así fue diseñado el protocolo FTP para funcionar en modo pasivo. Probablemente no fue una buena idea, ya que no creo que este modelo se haya vuelto a repetir en ningún otro protocolo (y eso es aún más cierto sobre el modo activo FTP).
En el puerto de conexión de datos, no hay protocolo. Todo lo que el servidor sabe, lo único que contiene información en esa conexión, es el número de puerto al que se conecta.
Si tuviera que conectarse al mismo puerto cada vez, el servidor no podría decir para qué archivo se está conectando. El número de puerto sirve como enlace entre una solicitud de transferencia en la conexión de control y una conexión de datos; el número de puerto está contenido en la respuesta al PASV
comando.
Si dos clientes solicitaran una transferencia al mismo tiempo, cuando el servidor acepta una conexión en un solo puerto, el servidor no podría decir qué archivo transferir. Por supuesto, el servidor podría usar una IP del cliente para la decisión (en realidad, muchos servidores FTP validan que la IP del cliente coincida con la IP utilizada en la conexión de control, por seguridad).
Pero esto no funcionaría para:
- Múltiples conexiones desde la misma máquina (la mayoría de los clientes FTP admiten transferencias / colas paralelas y en realidad puede ejecutar múltiples clientes FTP diferentes en una máquina);
- Conexión desde diferentes máquinas dentro de la misma red (corporativa), ya que tienen la misma IP externa.
Parcialmente copiado de mi respuesta a ¿Por qué el modo pasivo FTP requiere un rango de puertos en lugar de un solo puerto? en la falla del servidor.