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