No modo passivo de FTP, li que o servidor envia um número de porta aleatório ao cliente, onde pode estabelecer um canal de dados.
Em seguida, o cliente estabelece um canal de dados do seu número de porta aleatório para esse número de porta enviado pelo servidor.
Minha pergunta é por que o servidor envia um número de porta aleatório para o cliente? Por que o cliente não pode estabelecer diretamente um canal de dados para a porta número 20 no lado do servidor?
Respostas:
Foi assim que o protocolo FTP foi projetado para funcionar no modo passivo. Provavelmente não foi uma boa ideia, pois não acho que esse modelo tenha sido repetido novamente em qualquer outro protocolo (e isso é verdade ainda mais no modo ativo de FTP).
Na porta de conexão de dados, não há protocolo. Tudo o que o servidor sabe - a única coisa que carrega informações nessa conexão - é o número da porta à qual você se conecta.
Se você se conectar à mesma porta todas as vezes, o servidor não poderá informar para qual arquivo você está se conectando. O número da porta serve como um link entre uma solicitação de transferência na conexão de controle e uma conexão de dados - o número da porta está contido na resposta ao
PASV
comando.Se dois clientes solicitarem uma transferência ao mesmo tempo, quando o servidor aceitar uma conexão em uma única porta, o servidor não poderá informar qual arquivo transferir. Obviamente, o servidor pode usar um IP do cliente para a decisão (na verdade, muitos servidores FTP validam que o IP do cliente corresponde ao IP usado na conexão de controle, por segurança).
Mas isso não funcionaria para:
Parcialmente copiado da minha resposta para Por que o modo passivo FTP requer um intervalo de portas em oposição a apenas uma porta? na falha do servidor.
fonte
Normalmente, o servidor não envia uma porta aleatória, mas livre de um intervalo / pool definido (por instalação) - para o cliente isso parece aleatório. Essa porta precisa ser encaminhada no firewall, o que requer a definição de um intervalo.
Infelizmente, o FTP é antigo. Eu acho que os servidores antigos não conseguiam distinguir as sessões de dados de vários clientes, exceto por porta. Geralmente, é melhor seguir para protocolos mais atualizados, onde tudo está perfeitamente empacotado em uma única sessão de soquete.
fonte