FTP: Um Protocolo da Camada de Aplicação Baseado no TCP – Parte I
Esta série de tutoriais apresenta um estudo sobre o protocolo FTP (File Transfer Protocol). Os tutoriais
foram escritos pelo colaborador angolano do portal Teleco Paulo Francisco António, em ortografia angolana.
Este tutorial parte I apresenta detalhes da transferência de arquivos (cliente-servidor e servidor-servidor), da
interface de usuários, do FTP anónimo, dos filtros de pacotes, e dos servidores de FTP e sua configuração.
Paulo Francisco António
Curso Médio de Telecomunicações, no Instituto Nacional de Telecomunicações (ITEL). Actualmente é
Estudante de Engenharia Informática da Universidade Católica de Angola.
Trabalhou na Teta & Teta Informática e Consultoria Lda., como Operador Profissional de Computador, na
escanagem, correcção e reintrodução de dados dos Diários da República para inserção no programa de
Gestão da Legislação Angolana para o BNA-LEXMAN durante 3 anos.
Também trabalhou como colaborador na Área Técnica da Empresa Teta & Teta Informática e Consultaria
Lda., em Montagem e Manutenção de PC’s.
Actualmente trabalha na Biblioteca da Universidade Católica de Angola (BUCAN) como Técnico de
Porbase.
Email: [email protected]
Categoria: Banda Larga
Nível: Introdutório
Enfoque: Técnico
Duração: 15 minutos
Publicado em: 28/01/2008
1
FTP I: Introdução
O TCP é um dos protocolos mais versáteis da Internet dada as suas funcionalidades, sendo considerado
como um sistema de 4 camadas.
A camada de aplicação lida com detalhes de aplicações particulares. Existem muitas aplicações TCP/IP que
quase sempre todas as implementações proporcionam, tais como: Telnet para acesso remoto, FTP para
transferência de ficheiros e SNMP que permite recolher informação sobre todos os componentes que estão
na rede como switches, routers, bridges e os computadores ligados em rede.
Neste trabalho debruçar-me-ei especificamente sobre o FTP (protocolo de transferência de ficheiros).
Historicamente bem mais antigo, o FTP surgiu com o sistema operacional Unix no início dos anos 70, e ainda
é bastante utilizado pois o servidor é de fácil instalação e manutenção.
O FTP é uma aplicação frequentemente usada, sendo padrão da Internet para transferência de ficheiros.
Devemos ser cautelosos de modos a diferenciar entre o protocolo de transferência, que é o que o FTP
proporciona e o acesso a ficheiros, o que é proporcionado por aplicações como NFS (Network File System –
Sistema de Arquivos em Rede).
A transferência de ficheiro fornecida pelo FTP copia um ficheiro completo de um sistema para outro. Para
usar FTP é necessário uma conta de login num servidor, ou deve-se usar FTP com um servidor que permite
FTP Anónimo.
Como o telnet, FTP foi concebido desde o princípio para trabalhar entre hosts diferentes, executando
sistemas operativos diferentes, usando conjunto de caracteres. Todavia, o telnet alcançou heterogeneidade.
O protocolo de transferência de arquivos da internet, FTP (File Transfer Protocol), foi desenvolvido com o
objectivo de transferir arquivos de maneira eficiente e confiável entre dois computadores na rede, e através
disto incentivar o compartilhamento de arquivos entre diferentes maquinas, escondendo do usuário as
diferenças dos sistemas de arquivos entre as maquinas. A RFC 959 é actualmente o documento oficial que
dita seus padrões.
Outrossim neste opúsculo abordarei de forma exaustiva o FTP e todas as questões atinentes a transferência
de arquivos na web.
Neste tutorial parte I abordarei:
O FTP e as suas especificidades;
O tipos de Conexão: de controlo e de dados;
Os principais comandos;
A Comunicação, apresentando com detalhes:
A Comunicação sobre a conexão de controlo;
A Comunicação sobre a conexão de dados;
Os Tipos de arquivo;
A Estrutura de dados;
Os Modos de transmissão.
A Transferência do arquivo.
2
FTP I: Especificidades e Conexão
O FTP e as suas Especificidades
O protocolo de transferência de arquivos FTP (File Transfer Protocol) é o mecanismo padrão oferecido pela
internet para copiar um arquivo de um host para outro. O processo de transferência de arquivos entre
computadores é a tarefa mais comum que se espera de um ambiente de rede ou de uma internetworking.
Embora a transferência de arquivos entre sistemas possa parecer simples e directa, alguns problemas podem
ser tratados com antecedência. Por exemplo, os dois sistemas podem utilizar diferentes convenções de
nomes, ou ainda, os dois sistemas podem ter diferentes formas de representar texto e dados, ou então, os
dois sistemas podem ter diferentes estruturas de directório. Todos esses problemas foram resolvidos pelo
FTP de uma forma simples e elegante.
O FTP difere de outras aplicações cliente-servidor por que ele estabelece duas conexões entre um cliente e
um servidor. Uma conexão é utilizada para a transferência de dados propriamente dita e a outra é usada para
informação de controlo (comandos e respostas). A separação entre comandos e transferência de dados
melhora a eficiência do FTP.
A conexão de controlo usa regras de comunicação muito simples. Nessas regras, precisamos transferir uma
única linha de comando ou uma única linha de resposta por vez. Por outro lado, a conexão de dados usa
regras muito mais complexas, devido à variedade de tipos de dados transferidos.
O FTP usa dois números de porta TCP conhecidos: a porta 21 é usada para o controle da conexão e a porta
20 é usada na transferência de dados [1].
FTP usa os serviços TCP, pois precisa de duas conexões TCP. A porta 21 é usada para conexão de controlo
e a porta 20 é usada na conexão de dados.
A figura 1 ilustra o modelo FTP básico. O cliente possui três componentes: interface do usuário, processo de
controlo e processo de transferência de dados. Já o servidor possui dois componentes: processo de controlo e
processo de transferência de dados. A conexão de dados é feita entre processos de transferência de dados.
Figura 1: FTP.
A conexão de controlo é mantida durante toda interacção entre sessões FTP. A transferência de dados é
aberta e, em seguida, fechada para cada arquivo transferido. Ela é aberta toda vez que são usados comandos
envolvidos na transferência de arquivos e é fechada quando o arquivo é transferido.
3
Em outras palavras, quando um usuário inicia uma sessão FTP, a conexão de controlo é aberta. Enquanto a
conexão de controlo estiver aberta, a conexão de dados pode ser aberta e fechada diversas vezes, para
transferência múltipla de arquivos.
Conexão
As duas conexões FTP, controle e dados, usam estratégias e números de portas diferentes.
Conexão de controlo
A conexão de controlo é criada do mesmo modo que outros programas aplicativos descritos antes. A
conexão permanece aberta durante todo o processo. O tipo de serviço usado pelo IP nessa conexão é o
minimize delay (minimiza atrasos), porque esta é uma conexão interactiva entre um usuário (pessoa) e um
servidor. O usuário digita os comandos e espera que a resposta chegue, sem atrasos significativos.
Conexão de dados
A conexão de dados usa a porta número 20 no lado do servidor. A conexão de dados é aberta quando dados
estão prontos para serem transferidos e é fechada quando ela não é mais necessária. Uma conexão de dados
pode ser aberta e fechada inúmeras vezes durante uma sessão; ao contrário do controle da conexão que é
aberto uma única vez. O tipo de serviço usado pelo IP nessa conexão é o maximize throughput (maximiza
throughput).
[1] FOUROZAN, Behrouz A. Comunicação de Dados e Redes de Computadores, 3ª ed, Bookman, São
Paulo, 2007. p. 631.
4
FTP I: Comandos
O FTP se baseia no envio de comandos, os quais sempre geram uma resposta por parte do servidor. Para
enviar um comando, basta enviar o texto do comando pela conexão de controlo, seguido de um Line Feed
(ASCII 10 - 0x0A).
Após o envio do comando, o servidor efectuará as acções correspondentes a ele, e dará uma resposta de
acordo com a situação. O texto da resposta é apenas para um usuário humano, e pode variar de servidor para
servidor. Para processamento, deve-se usar o código de retorno. A resposta do servidor possui sempre o
seguinte formato:
220<Espaço>Resposta do Servidor<LineFeed>
Onde 220 é o código de retorno. Em seguida vem um espaço em branco (ASCII 32 - 0x20) e o texto da
resposta, seguido por um Line Feed (ASCII 10 - 0x0A).
Caso a resposta ocupe mais de uma linha, a resposta vem no seguinte formato:
220-<Espaço>Resposta (Linha 1)<LineFeed>
220-<Espaço>Resposta (Linha 2)<LineFeed>
:::
<Linhas intermediárias seguindo o mesmo formato da primeira>
:::
220<Espaço>Resposta (Última Linha)<LineFeed>
Neste formato, todas as linhas, com excepção da última, possuem um hífen (ASCII 45 - 0x2D)
imediatamente após o código de retorno, excepto a última, que não possui hífen justamente para sinalizar
que é a última linha da resposta.
Portanto, quando for enviado um comando e o código de retorno da resposta for seguido de um hífen,
deve-se continuar aguardando dados do servidor até que venha uma linha cujo código não tenha hífen.
Principais Comandos
Os principais comandos do FTP são:
USER
Determina o nome de usuário com o qual deve-se logar no servidor. Para login anónimo, deve-se usar o
nome de usuário 'anonymous'. Exemplos:
USER MyUserName
USER anonymous
Este comando normalmente gera uma resposta "331 Password required for MyUserName", indicando que
deve-se enviar um comando PASS, de modo a completar o login.
PASS
5
Informa a senha que deve ser usada no login. Para login anónimo, é o endereço de e-mail do usuário, mas
normalmente usa-se "[email protected]". Exemplos:
Cliente -> USER davi
Servidor -> 331 Password required for davi.
Cliente -> PASS senha
Servidor -> 230 Login successful.
CWD
Muda a pasta actual no servidor (Change Working Directory). Exemplo:
Cliente -> CWD /etc/conf/
Servidor -> 250 CWD command successful.
PWD
Exibe a pasta atual no servidor (Print Working Directory). Exemplo:
Cliente -> PWD
Servidor -> 257 "/etc/conf" is current directory.
CDUP
Equivale a "CWD ..". Sobe um nível na árvore de diretórios. Exemplo:
Cliente -> PWD
Servidor -> 257 "/etc/conf" is current directory.
Cliente -> CDUP
Servidor -> 250 CDUP command successful.
Cliente -> PWD
Servidor -> 257 "/etc" is current directory.
SYST
Retorna o tipo de sistema operacional no servidor (System Type).
Cliente -> SYST
Servidor -> 215 UNIX Type: L8
PORT
Informa ao servidor a porta em que será feita a próxima conexão de dados.
Cliente -> PORT 192,168,0,113,6,255
Servidor -> 200 PORT command successful.
Neste comando, deve-se passar 6 valores separados pro vírgula. Os 4 primeiros são os dígitos do IP, que no
exemplo é 192.168.0.113. Os outros dois valores representam a porta TCP em que será feita a conexão. Para
6
calcular esses dígitos, suponhamos que a porta será 0x1234. Basta separar os dois bytes que compõem este
valor e convertê-los para decimal: 0x12, 0x34, ou seja, 18 e 52, portanto, o nosso PORT seria: "PORT
192,168,0,113,18,52".
Depois de enviar este comando, deve-se enviar um comando que necessite de uma conexão de dados, e
preparar uma conexão para ficar "escutando" na porta indicada, até que o servidor se conecte a ela. No
comando PORT deve-se especificar uma porta que não esteja sendo utilizada, do contrário não será possível
"escutar" nela, aguardando a conexão do servidor. Se você preferir que o servidor especifique a porta, use o
comando PASV:
PASV
Retorna a porta na qual deve ser feita a próxima conexão de dados. Exemplo:
Cliente -> PASV
Servidor -> 227 Entering Passive Mode (192,168,0,1,10,45)
Os bytes retornados nos parênteses são: os quatro primeiros são o IP, os outros dois são a porta. Para obter o
número da porta, pegue o primeiro valor, multiplique por 256 e some ao segundo. Neste caso (10,45) a porta
seria 2605 (10*256 + 45). Depois de enviar este comando, deve-se enviar um comando que necessite de
uma conexão de dados, tal como LIST, ou STOR, e em seguida, criar a conexão de dados na porta
especificada.
Lembre-se que a única forma de sinalizar o final do envio de dados pela conexão de dados é fechando-a.
7
FTP I: Comunicação
O cliente e o servidor FTP, os quais rodam em computadores diferentes, devem se comunicar. Estes dois
computadores usam sistemas operacionais diferentes; o mesmo ocorrendo com conjunto de caracteres,
estrutura e formato de arquivo que, em geral, são diferentes. O FTP deve fazer a compatibilidade entre todas
essas heterogeneidades.
O FTP possui duas abordagens, uma para conexão de controlo e a outra para a conexão de dados. Falarei
sobre cada abordagem separadamente.
Comunicação sobre a Conexão de Controlo
O FTP usa a mesma abordagem que o SMTP para se comunicar através da conexão de controlo. O FTP usa
o conjunto de caracteres ASCII (veja figura 2). A comunicação acontece através de uma sequência de
comandos e respostas. Este método simples é adequado para a conexão de controlo porque podemos enviar
um comando (resposta) por vez.
Todo comando ou resposta ocupa uma única linha (curta), então não precisamos nos preocupar com o
formato ou estrutura do arquivo. Cada linha é encerrada com dois caracteres (carriage return e line feed) no
final.
Figura 2: Usando a conexão de controlo.
Comunicação sobre a Conexão de Dados
O propósito e a implementação da conexão de dados são diferentes daqueles abordados na conexão de
controlo. O facto básico é: queremos transferir arquivos através da conexão de dados. O cliente deve definir
o tipo de arquivo a ser transferido, a estrutura de dados e o modo de transmissão.
Além disso, a transmissão deve ser preparada pela conexão de controlo antes que um arquivo possa ser
transferido através da conexão de dados. O problema da heterogeneidade é resolvido definindo três atributos
de comunicação: tipo de arquivo, estrutura de dados e modo de transmissão (veja figura 3).
Figura 3: Usando a conexão de dados.
8
Tipo de Arquivo
O FTP pode transferir, através da conexão de dados, um dos seguintes tipos de arquivos:
ASCII [2]: este é o formato padrão para transferência de arquivos texto. Cada carácter é codificado
usando ASCII. Assim, o transmissor converte os arquivos do formato original em caracteres ASCII e o
receptor converte novamente os caracteres ASCII para o formato original.
EBCDIC: se uma ou duas extremidades da conexão usarem codificação EBCDIC (usada nos
mainframes IBM) o arquivo poderá ser transferido usando essa codificação.
Imagem: este é o formato padrão para a transferência de arquivos binários. O arquivo é enviado como
um fluxo contínuo de bits sem qualquer tipo de interpretação ou codificação. Este formato é usado
principalmente para transferir arquivos binários, tal como programas compilados ou imagens
codificadas em 0s e 1s.
Se o arquivo estiver codificado em ASCII ou EBCDIC, outro atributo deve ser adicionado para definir a
qualidade de impressão do arquivo.
1.Nonprint: este é o formato padrão para a transferência de um arquivo texto. O arquivo não contém
especificações verticais para impressão. Isto significa que o arquivo não pode ser impresso sem um
processamento adicional porque não há caracteres intelegíveis para serem interpretados pelo movimento
vertical do mecanismo de impressão. Este formato é usado pelos arquivos que serão armazenados e
processados no futuro.
2.TELNET: neste formato, o arquivo contém caracteres ASCII verticais tal como o CR (Carriage Return),
LF (Line Feed), NL (New Line), VT (Vertical Tab). O arquivo é imprimível após a transferência.
Estrutura de Dados
O FTP pode transferir arquivos através da conexão de dados usando uma das seguintes interpretações da
estrutura dos dados:
Arquivos (padrão): o arquivo não tem estrutura. Ele é transmitido com um fluxo contínuo de bytes.
Registos: O arquivo é dividido em registos ou estruturas em C. Esse tipo pode ser usado somente com
arquivos texto.
Páginas: O arquivo é dividido em páginas, cada qual devidamente numerada e identificada com
cabeçalho. As páginas podem ser armazenadas ou acessadas, aleatória ou sequencialmente.
Modos de Transmissão
O FTP pode transferir um arquivo através da conexão de dados usando um dos seguintes modos de
transmissão:
Cadeias: este é o modo padrão. Os dados são entregues do FTP para o TCP como uma cadeia
contínua de bytes. O TCP é responsável pela separação dos dados em segmentos de tamanho
apropriado. Se os dados são simplesmente uma cadeia de bytes (estrutura de arquivo), não é
necessária identificação de fim de linha. Nesse caso, a indicação de fim de linha é o fechamento da
conexão de dados pelo transmissor. Se os dados são divididos em registos, cada registo será
acompanhado do caractere EOR (End-of-Record) e o fim de arquivo terá o EOF (End-of-File), ambos
de 1 byte de tamnho.
Bloco: dados podem ser entregues do FTP ao TCP em blocos. Nesse caso, cada bloco é precedido de
9
um cabeçalho de 3 bytes. O primeiro byte é denominado descripter block (bloco descritor); outros dois
bytes definem o tamanho do bloco, em bytes.
Compressão: Se o arquivo é muito grande, os dados podem ser comprimidos antes de serem enviados.
O método de compressão usado normalmente toma unidade de dados que aparecem consecutivamente
e os substituem por uma única ocorrência, seguido do número de repetições. Em um arquivo texto, há
muitos espaços vazios. Em um arquivo binário, caracteres nulos são normalmente comprimidos.
[2] MORIMOTO, Carlos E. Dicionário de Termos de Informática, McGraw-Hill, São Paulo, 2000. p. 77 American Standard Code for Information Interchange, é ainda o código de caracteres de texto mais usado.
Cada caractere de texto ASCII ocupa 8 bits de dados (1 byte), o suficiente para 256 combinações diferentes,
que incluem caracteres, números e símbolos diversos.
Na gíria, "ASCII" também é usado em relação a um arquivo de texto puro, sem formatação. Mais detalhes
sobre o padrão ASCII podem ser vistos em: http://www.jimprice.com/jim-asc.htm. O padrão mais actual que
vem substituindo o ASCII gradualmente é o Unicode, onde são usados 2 bytes para cada caracter,
permitindo o suporte a 65.000 caracteres e símbolos diferentes. A vantagem do Unicode é conter caracteres
de várias línguas: Japonês, Chinês, etc.
10
FTP I: Transferência do Arquivo
A transferência do arquivo ocorre na fase da conexão de dados, sobre o controle dos comandos enviados
pela conexão de controlo. Entretanto, lembre-se que a transferência de arquivos no FTP significa uma das
três opções (veja figura 4).
Figura 4: Transferência de arquivo.
Um arquivo é baixado do servidor para o cliente. Isto é denominado downloading de arquivo.
Um arquivo do cliente é copiado no servidor. Isto é denominado uploading de arquivo.
Uma lista de directório ou nomes de arquivos é enviada do servidor para o cliente.
Observe que o FTP trata uma lista de directório ou nomes de arquivos como um arquivo comum.
Exemplo 1
A figura 5 mostra um exemplo de armazenamento de arquivo.
1. A conexão de controlo é criada, muitos comandos e respostas de controlo são trocados.
2. Os dados são transferidos, registo por registo.
3. Poucos comandos e respostas são trocados para fechamento da conexão.
Figura 5: Exemplo 1.
11
FTP I: Considerações Finais
Neste tutorial parte I foram apresentados o FTP e as suas especificidades, os tipos de conexão, os principais
comandos, a comunicação, de forma detalhada, e como se processa a transferência do arquivo.
No tutorial parte II serão apresentados a transferência de dados, com detalhes para os casos cliente-servidor
e servidor-servidor, a interface do usuário, o uso do FTP anónimo e sua configuração, os uso dos filtros de
pacotes, e os servidores FTP e a sua configuração.
Referências
FOUROZAN, Behrouz A. Comunicação de Dados e Redes de Computadores. 3ª ed. São Paulo: Bookman,
2007.
MONTEIRO, Edmundo, e BOAVIDA, Fernando. Engenharia de Redes Informáticas. 2ª ed. Lisboa: FCA,
2000.
GOUVEIA, José. Hardware para PCs e Redes. Lisboa: FCA, 1999.
JÚNIOR, José Helvécio Teixeira e Outros. Redes de Computadores: Serviços, Administração e
Segurança. São Paulo: Makron Books, 1999.
ZACKER, Craig. Redes de Computadores: Configuração e Manutenção e Expansão. São Paulo: Makron
Books, 2000.
GOUVEIA, José, e MAGALHÃES, Alberto. Redes de Computadores: Curso Completo. 3ª ed. Lisboa:
FCA, 2005.
STEVENS, W. Richard. TCP/IP Illustrated: The Protocols. Massachusetts: Addison-Wesley, 1994.
KOMAR, Brian. Sam Teach Yourself: TCP/IP Network Administration in 21 days. Indiana: Sams, 1998.
BLANK, Andrew G. TCP/IP Jumpstart. San Francisco: Sybex, 1990.
TANEMBAUM, Andrew S. Redes de Computadores. 3ª ed. São Paulo: Campus, 1999.
MORIMOTO, Carlos E. Dicionário de Termos de Informática, McGraw-Hill, São Paulo, 2000
TUTORIAIS. FTP Site Authentication in IIS 6.0 [LINK].
TUTORIAIS. Configuring FTP Site Properties [LINK].
12
FTP I: Teste seu Entendimento
1. Qual é o RFC que actualmente dita os padrões do FTP?
RFC 1000.
RFC 959.
RFC 670.
2. O que difere o FTP de outras aplicações cliente-servidor?
Estabelecimento de duas conexões entre um cliente e um servidor.
Celeridade na transferência dos dados.
Somente copia uma parte do ficheiro.
3. Quantos tipos de conexões usa o FTP?
Dois: conexão de dados e conexão de controlo.
Um: conexão total.
Três: conexão virtual, conexão lógica e conexão de transferência de caracteres.
4. O processo de baixar um arquivo do servidor para o cliente chama-se:
Downloading.
Overloading.
Overhead.
13
Download

FTP: Um Protocolo da Camada de Aplicação Baseado no