En el modo pasivo FTP, leí que el servidor envía un número de puerto aleatorio al cliente donde puede establecer un canal de datos.
Luego, el cliente establece un canal de datos desde su número de puerto aleatorio a este número de puerto enviado por el servidor.
Mi pregunta es ¿por qué el servidor envía un número de puerto aleatorio al cliente? ¿Por qué el cliente no puede establecer directamente un canal de datos al puerto número 20 en el lado del servidor?
Respuestas:
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:
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.
fuente
Por lo general, el servidor no envía un puerto aleatorio, sino uno libre de un rango / grupo definido (por instalación); para el cliente, esto parece aleatorio. Este puerto debe reenviarse al firewall que requiere definir un rango.
Desafortunadamente, FTP es antiguo. Supongo que los servidores antiguos no podían distinguir las sesiones de datos de varios clientes excepto por puerto. En general, es mejor pasar a protocolos más actualizados donde todo está perfectamente empaquetado dentro de una sola sesión de socket.
fuente