O protocolo FTP (File Transfer Protocol)

Abril 2015

Introdução ao protocolo FTP

O protocolo FTP (File Transfer Protocol) é, como o seu nome o indica, um protocolo de transferência de ficheiro.

A aplicação do protocolo FTP data de 1971, na mesma data em que um mecanismo de transferência de ficheiros (descrito no RFC 141) entre as máquinas do MIT (Massachussetts Institute of Technology) foi criado. Numerosos RFC trouxeram seguidamente melhorias ao protocolo básico, mas as maiores inovações datam de Julho de 1973.

O protocolo FTP actualmente é definido pelo RFC 959 (File Transfer Protocol (FTP) - Especificações).

O papel do protocolo FTP

O protocolo FTP define a maneira segundo a qual os dados devem ser transferidos numa redeTCP/IP.

O protocolo FTP tem como objectivos:

  • permitir uma partilha de ficheiros entre máquinas distantes
  • permitir uma independência dos sistemas de ficheiros das máquinas clientes e servidor
  • permitir transferir dados de maneira eficaz

O modelo 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 efectuar acções (o servidor).

Aquando de uma conexão FTP, dois canais de transmissão estão abertos :

  • Um canal para os comandos (canal de controlo)
  • Um canal para os dados



Le modèle FTP



Assim o cliente, tal como o servidor, possui dois processos que permitem gerir estes dois tipos de informação:

  • O DTP (Data Transfer Process) é o processo encarregado de estabelecer a conexão e gerir o canal de dados. O DTP do lado do servidor chama-se SERVER-DTP, o DTP lado cliente é denominado 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 controlo. É diferente no cliente e no servidor:
    • O SERVER-PI está encarregado de ouvir os comandos que provêm de uma PI no canal de controlo numa porta dada, estabelecer a conexão para o canal de controlo, receber neste os comandos FTP da GASTAR-PI, responder-lhes e pilotar o SERVER-DTP
    • O USER-PI está encarregado de estabelecer a conexão com o servidor FTP, enviar os comandos FTP, receber as respostas do SERVER-PI e de controlar USER-DTP se necessário.



Aquando da conexão de um cliente FTP a um servidor FTP, o USER-PI inicia a conexão ao servidor de acordo com o protocolo Telnet. O cliente envia comandos FTP ao servidor, este último interpreta, pilota o seu DTP, seguidamente devolve uma resposta standard. Quando a conexão é estabelecida, o servidor-Pi dá a porta para a qual os dados serão enviados ao Cliente DTP. O cliente DTP ouve então na porta especificada os dados provenientes do servidor.
É importante observar que, sendo as portas de controlo e de dados canais separados, é possível enviar os comandos a partir de uma máquina e receber os dados a partir de outra. Assim, é por exemplo possível transferir dados entre dois servidores FTP passando por um cliente para enviar as instruções de controlo e transferindo as informações entre dois processos servidores conectados na porta certa.

Transfert de données par FTP entre deux serveurs



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

Os comandos FTP

Todas as comunicações efectuadas pelo canal de controlo 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 (quer dizer, a sequência <CR>+<LF>, Carriage Return (regresso carro) seguido do carácter Line Feed, notado <CRLF>).
Se o comando FTP admitir um parâmetro, este é separado do comando por um espaço (<SP>).

Os comandos FTP permitem precisar:

  • A porta utilizada
  • O modo de transferência dos dados
  • A estrutura dos dados
  • A natureza da acção a efectuar (Retrieve, List, Store,…)



Distingue-se três tipos de comandos FTP:

  • Os comandos de controlo de acesso
  • Os comandos de parametrizaçaõ de transferência
  • Os comandos de serviço FTP




Comando de controlo de acesso
ComandoDescrição
USERCadeia de caracteres que permitem identificar o utilizador. A identificação do utilizador é necessária para estabelecer uma comunicação no canal de dados
PASSCadeia de caracteres que especificam a palavra-passe do utilizador. Este comando deve ser imediatamente precedido do comando USER. Cabe ao cliente esconder a afixação deste comando por razões de segurança
ACCTcadeia de caracteres que representam a conta (account) do utilizador. Este comando não é geralmente necessário. Aquando da resposta à aceitação da palavra-passe, se a resposta for 230 esta fase não for necessária; se a resposta for 332, é.
CWDChange Working Directory : este comando permite alterar o directório corrente. Este comando necessita o caminho de acesso ao directório a atingir como argumento
CDUPChange to Parent Directory :este comando permite subir ao directório parente. Foi introduzido para remediar os problemas de nomeação de directório parente de acordo com o sistema (geralmente “. ”)
SMNTStructure Mount :
REINReinitialize :
QUITComando permitindo terminar a sessão corrente. O servidor espera até terminar a transferência corrente se for caso disso, seguidamente fornece uma resposta antes de fechar a conexão




Comando de parâmetros de transferência
ComandoDescrição
PORTCadeia de caracteres que permitem precisar o número de porta a utilizar
PASVComando permitindo indicar ao servidor DTP para 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 precisar o tipo de formato em que os dados serão enviados
STRUCarácter Telnet precisando a estrutura do ficheiro (F para File, R para Record, P para Page)
MODECarácter Telnet precisando 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 ficheiro cujo caminho de acesso passou em parâmetro.
STOREste comando (store) pede ao servidor DTP que aceite os dados enviados sobre o canal de dados e que os armazene no ficheiro que leva o nome passado em parâmetro. Se o ficheiro não existir, o servidor cria-o, se não esmaga-o
STOUEste comando é idêntico ao precedente, mas pede ao servidor que crie um ficheiro cujo nome é único. O nome do ficheiro é devolvido na resposta
APPE

Graças a este comando (append) os dados enviados são concatenados no ficheiro que leva o nome passado em parâmetro , se ele já existir; no caso contrário, é criado.

 

ALLO

Este comando (allocate) pede ao servidor que preveja um espaço de armazenamento suficiente para conter o ficheiro cujo nome passou em argumento.

RESTEste comando (restart) permite retomar uma transferência onde tinha parado. Para isso, este comando envia em parâmetro o indicador que representa a posição no ficheiro onde a transferência tinha sido interrompida. Este comando deve ser imediatamente seguido de um comando de transferência.
RNFREste comando (rename from) permite rebaptizar um ficheiro. Indica em parâmetro o nome do ficheiro a rebaptizar e deve ser imediatamente seguido do comando RNTO
RNTOEste comando (rename to) permite rebaptizar um ficheiro. Indica em parâmetro o nome do ficheiro a rebaptizar 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, se não fecha-a. Em contrapartida, o canal de controlo permanece aberto.
DELEEste comando (delete) permite suprimir o ficheiro cujo nome passou em parâmetro. Este comando é irremediável, só uma confirmação a nível do cliente pode ser feita.
RMDEste comando (remove directory) permite suprimir um directório. Indica em parâmetro o nome do directório a suprimir
MKDEste comando (make directory) permite criar um directório. Indica em parâmetro o nome do directório a criar
PWD Este comando (print working directory) permite reenviar o caminho completo do directório corrente
LISTEste comando permite reenviar a lista dos ficheiros e directórios presentes no directório corrente. Esta lista é enviada para o DTP passivo. É possível passar em parâmetro deste comando um nome de directório, o servidor DTP enviará a lista dos ficheiros no directório passado em parâmetro
NLSTEste comando (name liste) permite enviar a lista dos ficheiros e directórios no directório corrente
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 distante
STATEste comando (status) permite emitir o estado do servidor, por exemplo para conhecer a progressão de uma transferência corrente. Este comando aceita em argumento um caminho de acesso, reenvia então as mesmas informações que LIST mas sobre o canal de controlo
HELPEste comando permite conhecer o conjunto das encomendas compreendidas pelo servidor. As informações são voltadas sobre o canal de controlo
NOOPEste comando (no operations) serve unicamente para obter um comando OK do servidor. Pode servir unicamente para não ser desligada após um tempo de inactividade demasiado longo

As respostas FTP

As respostas FTP permitem garantir a sincronização entre cliente e servidor FTP. Assim, a cada comando enviada pelo cliente, o servidor efectuará eventualmente uma acção e reenviará sistematicamente uma resposta.

As respostas são constituídas por um código de 3 números que indicam a maneira segundo a qual 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, cujos significados são os seguintes:

  • O primeiro número indica o estatuto da resposta (sucesso ou falha)
  • O segundo número indica a que é que a resposta se refere
  • O terceiro número dá um significado mais específico (relativo a cada segundo número)




Primeiro número
NúmeroSignificadoDescrição
1yzResposta preliminar positivaA acção pedida está curso, uma segunda resposta deve ser obtida antes de enviar um segundo comando
2yzResposta positiva de realizaçãoA acção pedida foi realizada, um novo comando pode ser enviado
3yzResposta intermédia positivaA acção pedida está temporariamente suspensa. Informações suplementares são esperadas por parte do cliente
4yzResposta negativa de realizaçãoA acção pedida não teve lugar porque o comando temporariamente não foi aceite. O cliente deve experimentar de novo mais tarde
5yzResposta negativa permanenteA acção pedida não teve lugar porque o comando não foi aceite. O cliente deve formular um pedido diferente




Segundo número
NúmeroSignificadoDescrição
x0zSintaxeA acção possui um erro de sintaxe, ou trata-se de um comando não percebido pelo servidor
x1zInformaçãoTrata-se de uma resposta que devolve informações (por exemplo, para uma resposta a um comando STAT)
x2zConexõesA resposta refere-se ao canal de dados
x3zAutenticação e contasA resposta refere-se à ligação (USER/PASS) ou ao pedido de mudança de conta (CPT)
x4z Não utilizado pelo protocolo FTP 
x5zSistema de ficheiros A resposta refere-se ao sistema de ficheiros distante

Mais informações

Para saber mais sobre o protocolo FTP, não hesite em consultar os seguintes documentos:

Para uma leitura offline, é possível baixar gratuitamente este artigo no formato PDF:
O-protocolo-ftp-file-transfer-protocol.pdf

A ver igualmente


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)
Este documento, intitulado « O protocolo FTP (File Transfer Protocol) »a partir de Kioskea (pt.kioskea.net) está disponibilizado sob a licença Creative Commons. Você pode copiar, modificar cópias desta página, nas condições estipuladas pela licença, como esta nota aparece claramente.