Nesse artigo, demonstraremos o funcionamento do protocolo FTP. O FTP é tido como padrão na indústria, para transferência de arquivos entre um cliente e servidor. Pode ser utilizado através de diversos programas desenvolvidos e nos repositórios existentes da Web.
Conteúdo
Qual a porta de FTP, e como ele funciona?
Em resumo, o protocolo FTP usa as portas 20 e 21.
Quando um cliente forma uma conexão inicial com o servidor, o cliente usa um número de porta de e protocolo aleatório e localmente atribuído e contata o servidor em uma porta conhecida (Porta 21).
Contudo, um servidor que usa apenas uma porta de protocolo pode aceitar conexões de muitos clientes, porque o TCP usa os dois lados para identificar uma conexão.
A pergunta que surge é: “Quando os processos de controle criam uma nova conexão TCP para uma determinada transferência de dados, que números de porta de protocolo eles usam?“. Obviamente, eles não podem usar o mesmo par de números de porta usados na conexão de controle.
Em vez disso, o cliente obtém uma porta não usada em sua máquina, e então envia o número de porta através da conexão de controle e espera que o servidor forme uma conexão TCP com a porta especificada.
Ou seja, quando forma uma conexão de dados, o cliente FTP se torna um servidor e o servidor se torna um cliente! Interessantemente, quando forma uma conexão de dados, o servidor FTP usa uma porta bem conhecida, a porta reservada para transferência de dados FTP (Porta 20).
Conexão de controle
Além de passar comandos do usuário para o servidor FTP, se usa a conexão de controle para permitir que os processos de controle do cliente e do servidor coordenem seu uso das portas de protocolo TCP dinamicamente atribuídas, e a criação dos processos de transferência de dados que usam essas portas.
FTP Passivo e Ativo
Como o projeto FTP original não funciona bem com firewalls de segurança e sistemas NAT, uma extensão foi acrescentada. Mais conhecida como FTP passivo, então a extensão permite que um cliente inicie cada conexão de transferência de dados, o que significa que o FTP pode ser usado através de um firewall ou sistema NAT sem ser um caso especial. Portanto, a maioria dos servidores e cliente FTP aceita a extensão de FTP passivo.
Formato da transferência
Que formato o FTP deve usar para a transferência de dados através da conexão de controle? Embora pudessem ter inventado uma nova especificação, os projetistas do FTP não o fizeram. Em vez disso, eles permitem que o FTP use o protocolo de terminal virtual de rede TELNET.
Diferentemente do protocolo TELNET completo, o FTP não permite negociação de opção. Ou seja, o FTP usa apenas a definição NVT básica. Isso torna o gerenciamento de uma de controle FTP muito mais simples do que o gerenciamento de uma conexão TELNET.
E apesar de suas limitações, usar a definição TELNET em vez de criar uma nova definição ajuda a simplificar o FTP consideravelmente.
Comandos e modos do FTP
Durante a transferência de dados sobre a rede, quatro representações de dados podem ser utilizadas:
- Modo ASCII: usado para texto. O dado é convertido, se necessário, da representação de caracteres do host remetente para 8-bit em ASCII antes da transmissão, e (novamente, se necessário) para a representação de caracteres do host destinatário. Portanto, esse modo é inapropriado para arquivos que contenham dados numéricos em binário, ponto flutuante ou forma decima codificada em binário;
- Modo imagem (normalmente chamada de modo binário): a máquina remetente envia cada arquivo byte a byte e como tal, então ,o destinatário armazena o fluxo de bytes conforme ele os recebe (o suporte ao modo imagem tem sido recomendado para todas as implementações de FTP);
- Modo EBCDIC: utilizado para texto simples entre hosts utilizando o conjunto de caracteres EBCDIC.
- Modo local: permite que dois computadores com configurações idênticas enviem dados em um formato proprietário sem a necessidade de convertê-los para ASCII.
Comandos do console
Os comandos podem ser executados no FTP através da linha de comando ou observados no Filezilla e também podem ser abreviados, desde que não formem expressões ambíguas. Nesse sentido, seguem os comandos:
!:
Executa o comando na máquina local.?:
Semelhante a help.append:
Adiciona dados a um arquivo existente.ascii:
Configura o tipo de transferência de arquivos para ASCII.bell:
Emite um bip quando um comando é executado.binary:
Configura o tipo de transferência de arquivos para binário.bye:
Encerra a sessão FTP.cd:
Seguido de caminho/diretório muda para o diretório informado.delete:
Apaga um arquivo. Para mais de um arquivo usa-se mdelete.debug:
Estabelece a modalidade de depuração.dir:
Mostra o conteúdo do diretório servidor atual.disconnect:
Semelhante a bye.get:
Obtêm um arquivo do servidor. Desde modo, para mais de um arquivo usa-se mget.glob:
Seleciona a expansão para nomes de arquivo.hash:
Demonstra cada bloco do arquivo durante a transferência. Cada bloco compõe-se de 1024 bytes.help:
Lista sumariamente todos comandos disponíveis.literal:
Permite enviar comandos arbitrários.ls:
Mostra uma lista abreviada do conteúdo do diretório servidor.mkdir:
Cria um diretório ou subdiretório no servidor.prompt:
Ativa/desativa o modo interativo.put
Envia um arquivo ao servidor. Para enviar mais de um arquivo usa-se mput.pwd:
Mostra o diretório de trabalho.quit:
Finaliza a sessão FTP.quote:
Envia subcomandos do servidor FTP.recv:
Similar aget.remotehelp:
Solicita ajuda do servidor FTP remoto.rename:
Renomeia um arquivo.send:
Semelhante a put.Status:
Obtem informações de estado do servidor.trace:
Demonstra o caminho percorrido pelo arquivo na transferência.Type:
Especifica o tipo de representação.user:
verbose:
Camadas e respostas FTP
Encerraremos esta seção com uma breve discussão sobre alguns dos comandos mais comuns do FTP e suas respostas. Ou seja, os comandos, do cliente para o servidor, e as respostas do servidor para o cliente, são enviados por meio da conexão de controle no formato ASCII de 7 bits.
Assim, tal como comandos HTTP, comandos FTP também podem ser lidos pelas pessoas. Consequentemente usa-se para separar comandos sucessivos, um “carriage return” e um “line feed” que encerram cada um.
Comandos
Os caracteres ASCII maiúsculos constituem os comandos, alguns com argumentos opcionais. Portanto alguns dos comandos mais comuns são descritos a seguir:
• USER e PASS: O servidor recebe esse conjunto de caracteres, relacionado ao username, juntamente com o comando de password;
• LIST: lista com todos os arquivos existentes no atual diretório remoto. Ou seja, uma conexão de dados recebe a lista de arquivos (nova e não persistente), e não pela conexão TCP de controle;
• RETR filename: comando para extrair (isto é, obter) um arquivo do diretório atual do hospedeiro remoto. Ou seja, ativa o hospedeiro remoto para que abra uma conexão de dados e envia o arquivo requisitado por essa conexão;
• STOR filename: comando para armazenar (isto é, inserir) um arquivo no diretório atual do hospedeiro remoto. Há, em particular, uma correspondência direta entre o comando que o usuário gera e o comando FTP enviado pela conexão de controle. Isto é, uma resposta segue cada comando, onde o servidor cliente o processa.
Respostas do protocolo FTP
As respostas são números de três dígitos com uma mensagem opcional após o número. Elas são similares aos códigos de status HTTP. Os código de resposta FTP são os seguintes:
110 Reiniciar resposta do marcador.
120 Serviço pronto em nnn minutos.
125 Conexão de dados já aberta; ou transferência iniciando.
150 Status do arquivo ok; Isto é, prestes a abrir conexão de dados.
200 Comando ok.
202 Comando não implementado, supérfluo neste site.
211 Status do sistema ou resposta de ajuda do sistema.
212 Status do diretório.
213 Status do arquivo.
214 Mensagem de ajuda. Sobre como usar o servidor ou o significado de um comando não padrão em particular. Ou seja, esta resposta é útil apenas para o utilizador humano.
215 Tipo de sistema NAME. Isto é, o NAME é um nome de sistema oficial da lista no documento de números atribuídos.
220 Serviço pronto para novo utilizador.
221 Conexão de controle de fechamento de serviço. Dessa forma, desconectado, se apropriado.
225 Conexão de dados aberta; isto é ,nenhuma transferência em andamento.
226 Fechar a ligação de dados. Ação de arquivo pedida com êxito (por exemplo, transferência de arquivos ou interrupção de arquivos).
227 Entrando no modo passivo (h1, h2, h3, h4, p1, p2).
230 Usuário conectado, continue.
250 Ação de arquivo solicitada ok, isto é , concluída.
257 “PATHNAME” criado.
Mensagens de falha
331 Nome de usuário ok, ou precisa de senha.
332 Preciso de conta para login.
350 Ação de arquivo solicitada pendente de mais informações.
421 Serviço não disponível, a fechar a ligação de controle. Nesse sentido, poderá ser uma resposta a qualquer comando se o serviço souber que tem de desligar.
425 Não é possível abrir a conexão de dados.
426 Conexão fechada; Mas também transferência abortada.
450 Ação de arquivo pedida não efetuada. Semelhantemente a arquivo indisponível (por exemplo, arquivo ocupado).
451 Ação solicitada abortada: erro local no processamento.
452 Ação solicitada não tomada. Espaço de armazenamento insuficiente no sistema.
500 Erro de sintaxe, comando não reconhecido. Isto é, poderá incluir erros como a linha de comandos demasiadamente longas.
501 Erro de sintaxe em parâmetros ou argumentos.
502 Comando não implementado.
503 Má sequência de comandos.
504 Comando não implementado.
Referências bibliográficas
Network Working Group J. Postel Request for Comments: 959 J. Reynolds
Interconexão com redes TCP/IP 5ª edição: Douglas Comer