O protocolo File Transfer Protocol

Novembro 2017

O que é o protocolo FTP

O protocolo FTP (File Transfer Protocol) é, como o seu nome indica, um protocolo de transferência de arquivos. A implementação do protocolo FTP data de 1971, na mesma época em que um mecanismo de transferência de arquivos (descrito no RFC 141) entre as máquinas do MIT (Massachussetts Institute of Technology) foi criado. Em seguida, vários RFC trouxeram melhorias ao protocolo básico, mas as maiores inovações datam de julho de 1973. Atualmente, o protocolo FTP é definido pelo RFC 959.

Como funciona o protocolo FTP

O protocolo FTP define a maneira pela qual os dados devem ser transferidos numa rede TCP/IP. Ele tem como objetivos o compartilhamento de arquivos entre dispositivos remotos, a independência dos sistemas de arquivos das máquinas dos clientes e do servidor e a transferência dos dados de maneira eficaz.

O modelo do serviço FTP

O protocolo FTP inscreve-se num modelo cliente-servidor, ou seja, uma máquina envia ordens (o cliente) e a outra espera pedidos para efetuar ações (o servidor). Em uma conexão FTP, dois canais de transmissão estão abertos: um canal para os comandos (canal de controle) e um canal para os dados:

O modelo FTP

Assim, o cliente, tal como o servidor, possui dois processos que permitem gerenciar estes dois tipos de informação:
O DTP (Data Transfer Process) é o processo encarregado de estabelecer a conexão e gerenciar o canal de dados. O DTP servidor chama-se SERVER-DTP e o DTP cliente, USER-DTP.
O PI (Protocol Interpreter) é o intérprete de protocolo que permite comandar o DTP com a ajuda de comandos recebidos no canal de controle. Ele é diferente no cliente e no servidor:
O SERVER-PI se encarrega de ouvir os comandos que proveem de um USER-PI no canal de controle em uma determinada porta, de estabelecer a conexão para o canal de controle, de receber nele os comandos FTP do USER-PI e de responder e pilotar o SERVER-DTP.
O USER-PI se encarrega de estabelecer a conexão com o servidor FTP, de enviar os comandos FTP, de receber as respostas do SERVER-PI e de controlar o USER-DTP, se necessário.

Durante a conexão de um cliente FTP com um servidor FTP, o USER-PI inicia a conexão com o servidor de acordo com o protocolo Telnet. O cliente envia comandos FTP para o servidor, que os interpreta, pilota o seu DTP e devolve uma resposta padrão. Quando a conexão é estabelecida, o SERVER-PI dá a porta para onde os dados serão enviados ao cliente DTP.


Em seguida, o cliente DTP ouve os dados provenientes do servidor na porta especificada. É importante observar que, como as portas de controle e de dados são canais separados, é possível enviar os comandos por uma máquina e receber os dados por outra. Por exemplo, é possível transferir dados entre dois servidores FTP passando por um cliente para enviar as instruções de controle e transferindo as informações entre dois processos de servidores conectados na porta certa:

Transferência de dados pelo FTP entre dois servidores

Nesta configuração, o protocolo determina que os canais de controle permaneçam abertos durante toda a transferência de dados. Assim, um servidor pode parar uma transmissão se o canal de controle for cortado durante a transmissão.

Quais são os comandos FTP

Todas as comunicações efetuadas pelo canal de controle seguem as recomendações do protocolo Telnet. Assim, os comandos FTP são cadeias de caracteres Telnet (em código NVT-ASCII) terminadas pelo código de fim de linha Telnet (ou seja, a sequência <CR>+<LF> - quebra de linha - seguida pelo caractere <CRLF> - Line Feed). Se o comando FTP admitir uma configuração, esta será separada do comando por um espaço (<SP>). Os comandos FTP permitem especificar a porta utilizada, o modo de transferência dos dados, a estrutura dos dados e a natureza da ação a ser realizada (Retrieve, List, Store, etc.).

Podemos distinguir três tipos de comandos FTP: comandos de controle de acesso, de configuração de transferência e de serviço FTP:

Comando de controle de acesso
ComandoDescrição
USERCadeia de caracteres que permitem identificar o usuário. A identificação do usuário é necessária para estabelecer uma comunicação no canal de dados
PASSCadeia de caracteres que especificam a senha do usuário. Este comando deve ser imediatamente precedido do comando USER. Cabe ao cliente esconder a exibição deste comando por razões de segurança
ACCTCadeia de caracteres que representam a conta (account) do usuário. Geralmente, este comando não é necessário. Na resposta à aceitação da senha, se a resposta for 230 esta fase não é necessária; se a resposta for 332, ela é
CWDChange Working Directory: este comando permite alterar o diretório em andamento. Ele requer o caminho de acesso ao diretório a ser alcançado como argumento
CDUPChange to Parent Directory: este comando permite chegar ao diretório parente. Ele foi introduzido para remediar os problemas de nomeação de diretório parente de acordo com o sistema (geralmente “. ”)
SMNTStructure Mount
REINReinitialize (Reinicializar)
QUITComando permitindo terminar a sessão em curso. Neste caso, o servidor espera até terminar a transferência atual e, em seguida, dá uma resposta antes de fechar a conexão


Comando de configurações de transferência
ComandoDescrição
PORTCadeia de caracteres que permitem especificar o número da porta a ser usada
PASVComando permitindo indicar ao servidor DTP de esperar uma conexão numa porta específica escolhida aleatoriamente entre as portas disponíveis. A resposta a este comando é o endereço IP da máquina e a porta
TYPEEste comando permite especificar o tipo de formato no qual os dados serão enviados
STRUCaractere Telnet especificando a estrutura do arquivo (F para ‘File’, R para ‘Record’, P para ‘Page’)
MODECaractere Telnet especificando o modo de transferência dos dados (S para ‘Stream’, B para ‘Block’, C para ‘Compressed’)


Comando de serviço FTP
ComandoDescrição
RETREste comando (RETRIEVE) pede ao servidor DTP uma cópia do arquivo cujo caminho de acesso passou como parâmetro
STOREste comando (‘store’) pede ao servidor DTP que aceite os dados enviados no canal de dados e que os armazene no arquivo que leva o nome passado como parâmetro. Se o arquivo não existir, o servidor vai criá-lo ou esmagá-lo
STOUEste comando é idêntico ao precedente, mas pede ao servidor que crie um arquivo cujo nome é único. O nome do arquivo retorna na resposta
APPEGraças a este comando (append), os dados enviados são concatenados no arquivo que leva o nome passado como parâmetro, se ele já existir; caso contrário, ele é criado
ALLOEste comando (allocate) pede ao servidor que preveja um espaço de armazenamento suficiente para conter o arquivo cujo nome passou como argumento
RESTEste comando (restart) permite retomar uma transferência onde ela parou. Para isso, este comando envia como parâmetro o indicador que representa a posição no arquivo onde a transferência tinha sido interrompida. Este comando deve ser imediatamente seguido de um comando de transferência
RNFREste comando (rename from) permite renomear um arquivo. Ele indica como parâmetro o nome do arquivo a ser renomeado e deve ser imediatamente seguido do comando RNTO
RNTOEste comando (rename to) permite renomear um arquivo. Ele indica como parâmetro o nome do arquivo a ser renomeado e deve ser imediatamente precedido pelo comando RNFR
ABOREste comando (abort) diz ao servidor DTP para abandonar todas as transferências associadas ao comando precedente. Se nenhuma conexão de dados estiver aberta, o servidor DTP não faz nada ou a fecha. Por outro lado, o canal de controle permanece aberto
DELEEste comando (delete) permite excluir o arquivo cujo nome passou como parâmetro. Este comando é irremediável, só uma confirmação a nível do cliente pode ser feita
RMDEste comando (remove directory) permite excluir um diretório. Ele indica como parâmetro o nome do diretório a ser excluído
MKDEste comando (make directory) permite criar um diretório. Ele indica como parâmetro o nome do diretório a ser criado
PWD Este comando (print working directory) permite reenviar o caminho completo do diretório atual
LISTEste comando permite reenviar a lista dos arquivos e diretórios presentes no diretório atual. Esta lista é enviada para o DTP passivo. É possível passar como parâmetro deste comando um nome de diretório, o servidor DTP enviará a lista dos arquivos no diretório passado como parâmetro
NLSTEste comando (name liste) permite enviar a lista dos arquivos e diretórios no diretório atual
SITEEste comando (site parameters) permite ao servidor propor serviços específicos, não definidos no protocolo FTP
SYSTEste comando (system) permite enviar informações para o servidor remoto
STATEste comando (status) permite emitir o estado do servidor para, por exemplo, conhecer a progressão de uma transferência em curso. Este comando aceita como argumento um caminho de acesso e reenvia as mesmas informações que o LIST, mas pelo canal de controle
HELPEste comando permite conhecer o conjunto das comandos compreendidos pelo servidor. As informações retornam pelo canal de controle
NOOPEste comando (no operations) serve unicamente para obter um comando OK do servidor. Ele pode servir para não ser desconectado após um tempo de inatividade longo

Como são as respostas dos comandos FTP

As respostas FTP garantem a sincronização entre o cliente e o servidor FTP. Assim, a cada comando enviado pelo cliente, o servidor poderá efetuar uma ação e reenviará, sistematicamente, uma resposta.


As respostas são constituídas por um código de 3 números que indicam a maneira como o comando enviado pelo cliente foi tratado. Contudo, este código de 3 números, dificilmente legível por um humano, é acompanhado de um texto (cadeia de caracteres Telnet separada do código numérico por um espaço).

Os códigos de resposta são constituídos por 3 números, cujo primeiro número indica o status da resposta (sucesso ou falha), o segundo indica a quê a resposta se refere e o terceiro dá um significado mais específico (relativo a cada segundo número).

Primeiro número
NúmeroSignificadoDescrição
1yzResposta preliminar positivaA ação pedida está curso de realização, uma segunda resposta deve ser obtida antes de enviar um segundo comando
2yzResposta positiva de realizaçãoA ação pedida foi realizada, um novo comando pode ser enviado
3yzResposta intermédia positivaA ação solicitada está temporariamente suspensa. O cliente está esperando informações adicionais
4yzResposta negativa de realizaçãoA ação solicitada não foi realizada porque o comando não foi aceito temporariamente. O cliente deve tentar mais tarde novamente
5yzResposta negativa permanenteA ação solicitada não foi realizada porque o comando não foi aceito. O cliente deve reformular o seu pedido


Segundo número
NúmeroSignificadoDescrição
x0zSintaxeA ação possui um erro de sintaxe ou trata-se de um comando não compreendido pelo servidor
x1zInformaçãoTrata-se de uma resposta que retorna informações (ex: para uma resposta a um comando STAT)
x2zConexõesA resposta refere-se ao canal de dados
x3zAutenticação e contasA resposta refere-se ao login (USER/PASS) ou ao pedido de mudança de conta (CPT)
x4z Não utilizado pelo protocolo FTP
x5zSistema de arquivos A resposta diz respeito ao sistema remoto de arquivos

Veja também


FTP protocol (File Transfer Protocol)
FTP protocol (File Transfer Protocol)
Protocolo FTP (protocolo de transferencia de archivos)
Protocolo FTP (protocolo de transferencia de archivos)
Das FTP Protokoll (File Transfer Protocol)
Das FTP Protokoll (File Transfer Protocol)
Le protocole FTP (File Transfer Protocol)
Le protocole FTP (File Transfer Protocol)
Il protocollo FTP (File Transfer Protocol)
Il protocollo FTP (File Transfer Protocol)
Última modificação: 6 de abril de 2017 às 17:08 por ninha25.
Este documento, intitulado 'O protocolo File Transfer Protocol ', está disponível sob a licença Creative Commons. Você pode copiar e/ou modificar o conteúdo desta página com base nas condições estipuladas pela licença. Não se esqueça de creditar o CCM (br.ccm.net) ao utilizar este artigo.