Alguém pode simplesmente explicar as diferenças entre o FTP no modo passivo (PASV) e o FTP no modo passivo estendido (EPSV)?
Alguém pode simplesmente explicar as diferenças entre o FTP no modo passivo (PASV) e o FTP no modo passivo estendido (EPSV)?
Respostas:
A única diferença é que eles PORT/PASV
são limitados ao IPv4 , enquanto EPRT/EPSV
trabalham com qualquer protocolo de rede (embora apenas o IPv6 seja usado na prática).
Os comandos padrão PORT
(ativo) e PASV
(passivo) no protocolo de controle FTP trocam informações de endereço e porta como seis casas decimais de 1 byte , das quais a outra extremidade precisa reconstruir um endereço IP de quatro bytes e um número de porta TCP de dois bytes.
PORT <address[4]>,<port[2]>
PORT 132,235,1,2,24,131
Mas então outros protocolos começaram a aparecer. O IPv4 estava prestes a ser substituído pelo "IPng", que tinha várias propostas de substituição concorrentes (OSI CLNP, TUBA, SIP, SIPP, CATNIP - em vários momentos da história), algumas com tamanhos de endereço de host mais curtos, mais longos e até variáveis , até que o IPv6 com endereços de 16 bytes finalmente seja definido.
Apenas enviar mais bytes não teria funcionado - não se esperava que servidores e clientes conhecessem o protocolo certo com base apenas no tamanho do endereço. (Por exemplo, e se você tiver um protocolo com endereço de 16 bytes + porta de 4 bytes, outro com endereço de 12 bytes + porta de 12 bytes?)
Além disso - embora isso tenha sido menos importante há 20 anos - atualmente, existem milhões de dispositivos NAT na Internet, que inspecionam e gerenciam conexões de controle FTP para que o host "externo" veja apenas endereços IPv4 globais, mesmo que o "interno" host enviou um local RFC1918. Mesmo sem o NAT, os firewalls com estado geralmente assistem aos comandos de controle para permitir automaticamente uma conexão de dados sem regras manuais.
Basicamente, isso significa que simplesmente o envio de mais números com PORT
ou PASV
é garantido para muitas pessoas. Talvez alguns firewalls silenciosamente interpretem mal alguns bytes de endereço como a porta e descartem silenciosamente o restante; outros podem interromper a conexão ou simplesmente travar.
Para evitar vários problemas como o acima, novos comandos tiveram que ser introduzidos para suporte a multiprotocolo no FTP.
Em 1993, a RFC 1639 (originalmente RFC 1545 ) introduziu o "endereço longo" LPRT
e osLPSV
comandos, que eram como PORT
& PASV
mas com um comprimento de endereço variável ; eles incluíram o identificador de tipo de protocolo também. (Porém, não mudou a sintaxe - endereço IPv6: a porta seria simplesmente enviada como 21 números em vez de seis.)
LPRT <protocol>,<addr-length>,<address...>,<port-length>,<port...>
LPRT 4,4,132,235,1,2,2,24,131
LPRT 6,16,16,128,0,0,0,0,0,0,0,8,8,0,32,12,65,122,2,20,162
No entanto, isso ainda não resolveu alguns dos problemas, como solicitar que um servidor use um protocolo diferente do da conexão de controle. A RFC também rapidamente ficou desatualizada; quando o IPv6 foi lançado apenas um ano depois, não pôde ser usado com o LPRT porque não havia um identificador de protocolo LPRT atribuído a ele (apenas para as várias propostas iniciais).
Para corrigir isso, o RFC 2428 em 1998 adicionou EPRT
e EPSV
, também conhecido como "porta estendida" e "passiva estendida" , que também possuía um método para negociar um protocolo que ambas as extremidades suportam. Os comandos "estendidos" também enviam endereços em formato legível por humanos - para IPv6, isso significa usar notação hexa e dois pontos, em vez de uma série de números decimais separados.
EPRT x<protocol>x<address>x<port>x
EPRT |1|132.235.1.2|6275|
EPRT |2|1080::8:800:200C:417A|5282|
Em conclusão, o suporte ao IPv6 é a única diferença.
EPSV
resposta não inclui o endereço IP (que PASV
resposta faz). Isso evita problemas comuns quando o servidor FTP localizado atrás de um NAT não sabe seu endereço IP externo e confunde o cliente FTP enviando seu endereço interno.
A diferença entre ativo e passivo já está respondida. Passivo estendido (EPSV) é apenas passivo com IPv4 e IPv6, porque a sintaxe da resposta ao PASV era específica para o IPv4 e, portanto, era necessário um novo comando para o IPv6. Mesmo com EPTR vs. PORT no modo ativo. Existe um comportamento ligeiramente diferente com o EPRT e o EPSV, pois eles podem conter apenas a porta, não o IP e a porta como PORT e PASV. Assim, a transferência de dados só pode ser feita entre os sistemas que possuem a conexão de controle. Com o PORT e o PASV, é possível criar uma conexão de dados entre outros sistemas (embora hoje seja considerado um design ruim e um risco de segurança).