Protocolo de Transferência de Arquivos (doinglês:File Transfer Protocol, abreviadoFTP) é umprotocolo padrão/genérico independente de hardware sobre um modo de transferirarquivos/ficheiros e também é umprograma de transferência. (Servidor FTP, neste caso, tradicionalmente aparece em letras minúsculas, por influência do programa de transferência de arquivos doUnix).
A transferência de dados emredes de computadores envolve normalmente transferência de arquivos e acesso a sistemas de arquivos remotos (com a mesma interface usada nos arquivos locais). O FTP é baseado noTCP, mas é anterior à pilha de protocolosTCP/IP, sendo posteriormente adaptado a este. É o padrão da pilha para transferir arquivos.
O protocolo é especificado naRFC 959, resumida logo a seguir.[1]
Umcliente realiza uma conexãoTCP para aporta 21 doservidor. Essa conexão, chamada deconexão de controle, permanece aberta ao longo da sessão enquanto uma segunda conexão, chamadaconexão de dados, é estabelecida na porta 20 do servidor e em alguma porta do cliente (estabelecida no diálogo entre ambos) como requisitado para a transferência de arquivos. A conexão de controle é utilizada para administração da sessão (comandos, identificação)[2] entre cliente e servidor utilizando um protocolo semelhante ao Telnet. Por exemplo, "RETR filename" iria transferir o arquivo especificado de um servidor para um cliente. Devido a essa estrutura de duas portas, FTP é considerado out-of-band, ao contrário de protocolos in-band, tal comoHTTP.[2]
O servidor responde na conexão de controle com três dígitos de código de estado em ASCII com uma mensagem de texto opcional. Por exemplo, "200" ou "200 OK" significa que o último comando obteve sucesso. Os números representam o número do código e o texto opcional representa as explicações ou parâmetros necessários.[3] Uma transferência de arquivo em progresso, sobre uma conexão de dados, pode ser abortada utilizando uma mensagem de interrupção enviada sobre a conexão de controle.
FTP pode ser executado em modo ativo ou passivo, os quais determinam como a conexão de dados é estabelecida. No modo ativo, o cliente envia para o servidor o endereço IP e o número da porta na qual ele irá ouvir e então o servidor inicia a conexão TCP. Em situações onde o cliente está atrás de um firewall e inapto para aceitar entradas de conexões TCP, o modo passivo pode ser utilizado. O cliente envia um comando PASV para o servidor e recebe um endereço IP e um número de porta como resposta, os quais o cliente utiliza para abrir a conexão de dados com o servidor.[1] Ambos os modos foram atualizados em Setembro de 1998 para adicionar suporte ao IPv6 e feitas algumas mudanças no modo passivo, tornando-o modo passivo estendido.[4]
Durante a transferência de dados sobre a rede, quatro representações de dados podem ser utilizadas[5]:
ModoASCII: usado para texto. 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. Como consequência, 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, 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).
ModoEBCDIC: 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.
Para arquivos texto, são fornecidas opções para diferentes controles de formato e estrutura de registros. Esses recursos foram projetados para suporte à formataçãoTelnet ouASA.
A transferência de dados pode ser feita em qualquer um dos três modos a seguir:[3]
Modo fluxo: dado é enviado como um fluxo contínuo, liberando FTP de fazer algum processamento. Ao invés disso, todo processamento é deixado para o TCP. Nenhum indicador de fim de arquivo é necessário, a menos que o dado esteja dividido dentro de registros.
Modo de bloco: FTP quebra o dado dentro de vários blocos( bloco de cabeçalho, contagem de byte e campo de dado) e então passa-o para o TCP.[5]
Modo comprimido: dado é comprimido utilizando um algoritmo simples.
A transferência de arquivos dá-se entre um computador chamado "cliente" (aquele que solicita a conexão para a transferência de dados) e um servidor (aquele que recebe a solicitação de transferência).O utilizador, através de software específico, pode selecionar quais arquivos enviar ou receber do servidor. Para existir uma conexão ao servidor,caso o servidor exija, o utilizador informa um nome de utilizador (ouusername, em inglês) e uma senhapassword, bem como o nome correto do servidor ou seu endereço IP. Se os dados foram informados corretamente, a conexão pode ser estabelecida.
O acesso a servidores FTP pode ocorrer de dois modos: através de uma interface ou através da linha de comando, tanto usuários LINUX como usuários Windows podem acessar através dos dois modos. O modo linha de comando está presente em qualquer distribuição LINUX-like e Windows, através do telnet.
A partir de qualquernavegador credenciado (Internet Explorer, Firefox, ou mesmo no Windows Explorer), conforme a norma RFC1738[6] também é possível aceder a um servidor FTP digitando na barra de endereço:
ftp://[username]:[password]@[servidor]
ou
ftp://[username]:[password]@[servidor]:[porta]
Um servidor FTP é o servidor que oferece um serviço de acesso a um disco rígido ou servidor de arquivos criados através de um protocolo FTP. É ele que armazena as informações ou dados enviados por um usuário e que estarão acessíveis por qualquer membro da internet.
Servidores FTP são muito usados quando se trabalha com grandes volumes de dados compartilhados pela rede. E eles são bastante úteis para gerenciar essas informações entre diversos clientes que solicitam o acesso a eles.
O protocolo subjacente ao FTP pode rodar nos modos interativo oubatch. O cliente FTP fornece uma interface interativa, enquanto que o MIME e o HTTP usam-no diretamente. O protocolo permite a gravação e obtenção de arquivos, a listagem da pasta e a alteração da pasta de trabalho.
Os servidores de FTP raramente mudam, mas novos clientes FTP aparecem com bastante regularidade. Estes clientes variam no número de comandos que implementam, a maioria dos clientes FTP comerciais implementam apenas um pequeno subgrupo de comandos FTP. Mesmo que o FTP seja um protocolo orientado a linha de comandos, a nova geração dos clientes FTP esconde esta orientação numambiente gráfico, muitas vezes, muito desenvolvido.
A interface cliente do FTP doBSDUNIX é um padrão por si mesma, possuindo muitos comandos arcaicos comotenex oucarriage control, que hoje não têm uso. Os comandos mais usados são ocd,dir,ls,get eput.
O FTP tem particularidades que são hoje pouco comuns. Depois da ativação doftp, é estabelecida uma conexão ao host remoto. Esta conexão envolve o uso da conta do usuário no host remoto, sendo que alguns servidores FTP disponibilizamanonymous FTP.
Certos comandos são os que fazem a transferência bidirecional de arquivos, são eles:
get do servidor FTP para o host local (mget para mais que um arquivo)
put para o servidor FTP a partir do host local (mput para mais que um arquivo)
Nota: alguns comandos podem não funcionar com o usuário sendoanonymous, pois tal conta tem limitações de direitos a nível dosistema operacional.
A sintaxe dos nomes dos arquivos pode ser incompatível entre diferentes Sistemas Operacionais. OUNIX usa 128 caracteres, maiúsculas e minúsculas, enquanto que oDOS usa 8 + 3 caracteres e apenas maiúsculas. Certos nomes não podem ser usados em alguns sistemas. Devido a isto tudo o BSD ftp define regras para a tradução de nomes.
O FTP permite dois modos de transferência de mensagens FTP:texto (com traduções apropriadas) oubinário (sem tradução). Cada mensagem do servidor inclui um identificadordecimal de 3 dígitos (exemplo: 226 Transfer complete). Estas mensagens podem ser vistas ou não, usando para isso o modoverbose ouquiet, respectivamente.
O servidor remoto aceita umaconexão de controle do cliente local. O cliente envia comandos para o servidor e a conexão persiste ao longo de toda a sessão (tratando-se assim de um protocolo que usa o TCP).
O servidor cria umaconexão de dados para a transferência de dados, sendo criada uma conexão para cada arquivo transferido. Estes dados são transferidos do servidor para o cliente e vice e versa.
Os comandos estão separados dos dados e o cliente pode enviar comandos durante a transferência de dados. O encerramento da conexão indica o fim do arquivo.
Os comandos abaixo podem ser executados no FTP através da linha de comando. Os comandos do FTP podem ser abreviados, desde que não formem expressões ambíguas.
Os comandos podem estar abreviados. 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-semdelete.
debug: Estabelece a modalidade de depuração.
dir: Mostra o conteúdo do diretório servidor atual.
disconnect: Semelhante abye.
get: Obtêm um arquivo do servidor. Para mais de um arquivo usa-semget.
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.Para mais de uma pasta usa-se*mls.
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-semput.
pwd: Mostra o diretório de trabalho.
quit: Finaliza a sessão FTP.
quote: Envia subcomandos do servidor FTP, como se encontram no servidor.
recv: Similar aget.
remotehelp: Solicita ajuda do servidor FTP remoto.
rename: Renomeia um arquivo.
send: Semelhante aput.
status: Obtem informações de estado do servidor.
trace: Demonstra o caminho percorrido pelo arquivo na transferência.