# Redes de computadores/FTP
## História

O primeiro protocolo a definir mecanismos para transferência de arquivos foi proposto em 1971, desenvolvido para ser implementado em hosts do M.I.T. Em 1972, com a especificação RFC 354, o File Transfer Protocol – FTP é então usado como o protocolo de transferência de arquivos da rede ARPAnet. Seu objetivo era transferir dados confiavelmente e eficientemente, além de permitir o uso de armazenamento remoto de arquivos.
A partir de então, foram feitas algumas correções de erros, aprimorados pontos que demandavam mais ênfase e adicionadas funcionalidades. Em 1973, como RFC 454, foi publicado o documento oficial do FTP, permanecendo a estrutura original já concebida, mas incluindo mudanças importantes.Nos anos que se seguiram, vários comentários, discussões e pequenas revisões foram publicados.
Em 1980, motivado pela transição do protocolo NCP para o TCP da rede ARPAnet, o FTP foi então especificado para ser usado com o protocolo TCP. O último documento de especificação deste protocolo é o RFC 959.

## FTP

Os objetivos do FTP são: promover o compartilhamento de arquivos, programas de computadores e/ou dados; promover o acesso a computadores remotos; blindar o usuário da variação dos tipos de sistema de armazenamento de arquivos entre os diversos hosts e finalmente, transferir dados de forma confiável e eficiente. Apesar do FTP poder ser usado diretamente pelo usuário em um terminal, ele foi projetado para ser usado por programas principalmente.
É um dos protocolos mais usados para se transferir arquivos na Internet. Envolve tanto transferência de arquivos quanto acesso a sistemas de arquivos remotos. Independe do hardware ou do sistema operacional e utiliza conexão TCP para estabelecimento da conexão entre cliente e servidor. Faz uso de duas conexões paralelas para transferir um arquivo: uma conexão de controle (informações de usuário e senha, comandos como GET ou PUT etc.) e uma conexão de dados (usada para enviar, efetivamente, o arquivo). Devido a essa característica, dizemos que este protocolo possui controle fora da Banda. A conexão de controle é dita persistente, ou seja, uma vez estabelecida a sessão, ela permanece ativa durante toda a conexão. Já a conexão de dados é dita não persistente, ou seja, a cada nova transferência, estabelece-se uma conexão, que é fechada após o término da tarefa.

## Comandos FTP

No RFC 959 são definidos 33 comandos, que podem ser utilizados por um usuário em um terminal, embora seja mais comum que as aplicações tenham interfaces que blindem o usuário destas linhas de comando. As instruções são no formato ASCII, de 7 bits, em caracaters maiúsculos, com ou sem argumentos. Alguns dos comandos mais comuns são USER username, PASS password, RETR filename etc. Os nomes são auto-explicativos. USER é usado para o usuário especificado no argumento se conectar ao servidor FTP. RETR é usado para recuperar um arquivo, especificado pelo argumento filename, e assim sucessivamente. Outros comandos são mostrados na tabela abaixo:
| Comando | Descrição |
| ascii | Transfere arquivos no modo ASCII. Neste modo, há conversão de formatos, caso os sistemas operacionais envolvidos sejam diferentes. |
| BIN | Transfere arquivos no modo binário, não alterando nenhum bit do arquivo |
| LR ou DIR | Listam o conteúdo do diretório atual |
| CD | Permite mudar o diretório remoto |
| GET | Transfere um arquivo da máquina remota para a local. Para transferir mais de um arquivo usa-se mget |
| HASH | Imprime "#" a cada 1024 bytes transferidos. É importante para a visualização do progresso de transferencia de arquivos |
| PUT | Transfere um arquivo da máquina local para a remota. Para transferir mais de um arquivo usa-se mput |
| QUIT ou BYE | Levam ao encerramento da conexão de controle levando ao término da conexão do FTP |