Ativo e passivo são os dois modos em que o FTP pode ser executado. O FTP usa dois canais entre cliente e servidor, o canal de comando e o canal de dados, que são conexões TCP separadas. O canal de comando é para comandos e respostas, o canal de dados é para a transferência de arquivos. É uma maneira bacana de enviar comandos para o servidor sem precisar aguardar a conclusão da transferência de dados atual.
No modo ativo, o cliente estabelece o canal de comando (da porta do cliente X
para a porta do servidor 21
(b) ), mas o servidor estabelece o canal de dados (da porta do servidor 20
(b) para a porta do cliente Y
, onde Y
foi fornecido pelo cliente).
No modo passivo, o cliente estabelece os dois canais. Nesse caso, o servidor informa ao cliente qual porta deve ser usada para o canal de dados.
O modo passivo é geralmente usado em situações em que o servidor FTP não consegue estabelecer o canal de dados. Uma das principais razões para isso é firewalls de rede. Embora você possa ter uma regra de firewall que permita abrir os canais de FTP para ftp.microsoft.com
, os servidores da Microsoft podem não ter a capacidade de abrir o canal de dados de volta pelo firewall.
O modo passivo resolve isso abrindo os dois tipos de canal do lado do cliente. Para tornar isso mais claro:
Modo ativo:
- O cliente abre o canal de comando da porta do cliente 2000 (a) para a porta do servidor 21 (b) .
- O cliente envia
PORT 2001
(a) para o servidor e o servidor confirma no canal de comando. - O servidor abre o canal de dados da porta do servidor 20 (b) para a porta do cliente 2001 (a) .
- O cliente confirma no canal de dados.
Modo passivo:
- O cliente abre o canal de comando da porta do cliente 2000 (a) para a porta do servidor 21 (b) .
- O cliente envia
PASV
para o servidor no canal de comando. - O servidor envia de volta (no canal de comando)
PORT 1234
(a) depois de iniciar a escuta nessa porta. - O cliente abre o canal de dados do cliente 2001 (a) para a porta do servidor 1234 (a) .
- O servidor reconhece no canal de dados.
Neste ponto, os canais de comando e dados estão abertos.
(a) Observe que a seleção de portas no lado do cliente depende do cliente, já que a seleção da porta do canal de dados do servidor no modo passivo está no servidor.
(b) Além disso, note que o uso das portas 20 e 21 é apenas uma convenção (embora strong). Não há nenhum requisito absoluto para que essas portas sejam usadas, embora o cliente e o servidor tenham que concordar em quais portas estão sendo usadas. Vi implementações que tentam se esconder dos clientes usando portas diferentes (em vão, na minha opinião).
Resposta original de stackoverflow