O FTP (Protocolo de transferência de arquivos) é um protocolo utilizado para transferência de dados da camada de aplicação, através de uma interface que o usuário se identifica, envia e recebe arquivos para um servidor FTP. Como o protocolo HTTP o FTP utiliza conexão TCP para se conectar com o servidor mas com uma diferença importante, o FTP utiliza duas conexões TCPs paralelas para transmitir um arquivo, uma conexão de controle e uma conexão de dados.

A conexão de controle é utilizada para trocar informações como as de usuário e senha, mudança de diretórios,inserir e apagar arquivos. A conexão de dados serve para enviar os arquivos solicitado pelo cliente. Por este motivo dizemos que o FTP possui informações de controle fora da banda, diferente do HTTP que possui informações de controle na banda, na mesma conexão TCP.

Ao iniciar uma sessão TFP o cliente inicia primeiramente uma conexão de controle com o servidor na porta 21, por onde envia informações de usuário e senha e comandos para mudar diretório. Com a verificação positiva do usuário o servidor mantem a conexão de controle aberta e aguarda as solicitações, quando o cliente solicita um arquivo o servidor abre uma conexão de dados com o cliente através da porta 20 que fechada logo após o envio do mesmo. Se durante a sessão o cliente solicitar outro arquivo o FTP abrirá outra conexão TCP, ou seja o FPT manter uma conexão não persistente na conexão de dados e uma conexão persistente na conexão de controle. Durante uma sessão FTP o servidor mantem informações de estado do cliente, monitorando seu tráfego na árvore de diretório e associa cada sessão TCP a um cliente especifico, por este motive é considerado uma protocolo de estado, diferente do protocolo HTTP que não monitora o cliente e por isso é considerado um protocolo sem estado.

Seque abaixo uma tabala com os comandos mais comuns de um cliente FPT:

Comando Função
User name Usado para envia r a identificação do usuário ao servidor
PASS password Usado para enviar a senha do usuário do servidor
LIST Usado para solicitar a lista de arquivos do diretório atual, que é enviada pela conexão de dados (não persistente)
RETR filename Usado para extrair um arquivo do servidor
STOR filename Usado para inserir um arquivo no diretório atual do servidor

Segue abaixo uma tabela com algumas mensagens de resposta do servidor FTP:

Código Mensagem
331 Nome do usuário OK, senha requisitada.
125 Conexão de dados já aberta: Iniciando transferência
425 Não é possível abrir conexão de dados
452 Erro ao escrever o arquivo

OBS:

O fato do protocolo FTP ser um protocolo de estado limita sua capacidade máxima de sessões simultâneas no servidor. Já o protocolo HTTP por não ser uma aplicação de estado suporta muito mais sessões simultâneas.