Por alguma razão, não importa quantas vezes eu tente, depois que um cliente envia o comando PASV (que é recebido corretamente pelo servidor), a resposta do servidor (227 Inserindo Modo Passivo) não retorna ao cliente. Cheguei a analisar o tráfego de clientes e servidores com o Wireshark para descobrir isso. O que é especialmente estranho é que o último pacote enviado pelo servidor tenha exatamente as mesmas configurações de TCP que qualquer outro pacote enviado com sucesso até o momento. Está tudo indo para o mesmo cliente, na mesma porta, e ainda por algum motivo essa resposta nunca chega. Estou completamente chocado quanto ao porquê.
Aqui estão as capturas de tela das interações entre cliente e servidor:
Captura de cliente
Comovocêpodever,elenuncarecebeoACKparaseucomandoPASV.Eletentamaisumavezedepoisdesiste.
Capturadeservidor
Como você pode ver, ele recebe o comando PASV e envia uma resposta, mas nunca chega ao cliente. Recebe a retransmissão mais tarde e envia a resposta mais 3 vezes, mas novamente nunca passa. Então desconecta.
Não consigo imaginar como é possível que todos os outros pacotes TCP passem de servidor para cliente sem problemas, mas esse pacote TCP em particular não. Os cabeçalhos TCP são idênticos para todos os pacotes de e para o servidor respectivamente, então, pelo que entendi, todos os roteadores, firewalls, ISPs, etc. devem tratá-los igualmente, a menos que sejam sniffing de pacotes.