A Camada de Aplicação Romildo Martins Bezerra CEFET/BA Redes de Computadores II Afinal, o que faz a camada de aplicação?... 2 Paradigma Cliente/Servidor [4]... 2 Endereçamento... 2 Tipo de Serviço... 2 Serviços da Camada de Transporte e seus protocolos... 2 HTTP - HyperText Transfer Protocol [4]... 2 - File Transfer Protocol... 3 SMTP - Simple Mail Transfer Protocol... 4 TELNET... 4 NTP - Network Time Protocol... 4 Pesquise... 5 Temas para trabalhos... 5 Bibliografia... 5 As notas de aulas são referências para estudo. Portanto não devem ser adotadas como material didático absoluto! Versão 0.1 30/08/2008
Afinal, o que faz a camada de aplicação? Depois de aprendermos a finalidade da camada de enlace, rede e transporte e todos os seus serviços oferecidos, nos perguntamos o que faz a camada de aplicação? Paradigma Cliente/Servidor [4] É um modelo computacional que separa clientes e servidores, sendo interligados entre si geralmente utilizando-se uma rede de computadores. Cada instância de um cliente pode enviar requisições de dado para algum dos servidores conectados e esperar pela resposta. Por sua vez, algum dos servidores disponíveis pode aceitar tais requisições, processá-las e retornar o resultado para o cliente. Endereçamento Como visto nas camadas de enlace, rede e transporte, a comunicação entre hosts utiliza o conceito de endereçamento. O mecanismo de endereçamento da camada de aplicação não utiliza necessariamente uma representação numérica, podendo utilizar uma representação textual como http://www.romildo.net As aplicações fazem uso deste endereço amigável, pois estão diretamente em contato com o usuário. Você já imaginou decorar todos os IPs da internet? Será que um endereço só está relacionado com um IP? Tipo de Serviço A camada de aplicação foi feita para oferecer serviços diferentes aos usuários, permitindo uma interface mais amigável sem qualquer preocupação com as camadas inferiores. Exemplos de serviços, veremos a seguir. Serviços da Camada de Transporte e seus protocolos O objetivo é identificar e entender o funcionamento de alguns dos protocolos/serviços da camada de aplicação, como: HTTP - HyperText Transfer Protocol [4] O HyperText Transfer Protocol (HTTP) é um protocolo de aplicação responsável pelo tratamento de pedidos/respostas entre cliente e servidor. Ele surgiu da necessidade de distribuir informações pela Internet e para que essa distribuição fosse possível foi necessário criar uma forma padronizada de comunicação entre os clientes e os servidores da Web e entendida por todos os computadores ligados à Internet. No HTTP/1.1, versão atual do protocolo descrito na RFC 2616, foi desenvolvido um conjunto de implementações adicionais ao HTTP/1.0, como por exemplo: o uso de conexões persistentes; o uso de servidores proxy que permitem uma melhor organização da cache; novos métodos de requisições; O HTTP utiliza o modelo cliente-servidor, como a maioria dos protocolos de rede, baseando-se no paradigma de requisição e resposta. Um programa requisitante (cliente) estabelece uma conexão com um outro programa receptor (servidor) e envia-lhe uma requisição, contendo a URL, a versão do protocolo, uma mensagem MIME (padrão utilizado para codificar dados em formato de textos ASCII para serem transmitidos pela Internet) contendo os modificadores da requisição, informações sobre o cliente e, possivelmente, o conteúdo no corpo da mensagem. O servidor responde com uma linha de status incluindo sua versão de protocolo e um código de operação bem sucedida ou um código de erro, seguido pelas informações do servidor, metainformações da entidade e possível conteúdo no corpo da mensagem. Após o envio da resposta pelo servidor, encerra-se a conexão estabelecida. O protocolo HTTP opera sobre o protocolo TCP/IP para estabelecer um mecanismo de serviço com estrutura requisição/resposta. Uma das características peculiares de HTTP é a composição flexível do cabeçalho, composto por diversas linhas, o que permite sua utilização como integrador de diversos formatos e não apenas de documentos HTML. Um cabeçalho HTTP é composto por uma linha contendo a especificação do serviço e recurso associado, seguida por linhas contendo parâmetros. Um exemplo de requisição gerada por um cliente HTTP é: 2
GET http://www.romildo,net/ Accept: text/html, image/gif, image/jpeg User-Agent: Mozilla/5.1 para a qual o cabeçalho da resposta pode ser: HTTP/1.1 200 OK Date: Wed, 25 Mar 2008 20:20:20 GMT Server: Apache/2.0 Connection: close Content-Type: text/html Content-length: 648 - File Transfer Protocol Segundo a Wikipédia, significa File Transfer Protocol (Protocolo de Transferência de Arquivos), e é uma forma bastante rápida e versátil de transferir arquivos sendo uma das mais usadas na internet. O é um protocolo simples e antigo, não sendo projetado para garantir segurança. Diferentemente dos outros protocolos usados na Internet, o usa no mínimo duas conexões durante uma sessão: uma conexão half-duplex para controle e uma conexão full-duplex para transferência de dados. Para isso, utiliza as portas 20 e 21. A porta 21 é utilizada para estabelecer e manter a comunicação entre o cliente e o servidor (Control Channel). É ela quem verifica se a conexão com o servidor ainda existe. Já a porta 20 é utilizada para a transferência dos dados (arquivos), propriamente dita (Data Channel). É nela que é feito o controle do fluxo e integridade dos dados. Para utilizar o, a estação cliente realiza uma conexão com o servidor na porta 21. Após a conexão estabelecida, para cada arquivo transferido estabelece-se uma nova conexão, chamada de conexão de dados. Por padrão, a porta TCP 21 é usada no servidor para controlar a conexão, mas a conexão de dados pode ser realizada de utilizando dois métodos: Modo ativo - O cliente envia um comando PORT ao servidor na conexão do controle e esse comando solicita ao servidor que estabeleça uma conexão de dados da porta TCP 20 no servidor até o cliente com a porta TCP especificada pelo comando PORT. Cliente 1543 21 1549 20 Servidor Para estabelecer uma conexão, o cliente conecta ao servidor na porta 21 através de sua porta 1543. O cliente envia PORT 1549 (por exemplo) O servidor conecta à porta 1549 através de sua porta 20 Figura 02 Modo Ativo Modo passivo O cliente envia um comando PASV e o servidor responde com uma de suas portas temporárias usadas como a porta do servidor na conexão de dados. Depois que um comando de conexão de dados é emitido pelo cliente, o servidor se conecta ao cliente usando a porta imediatamente acima da porta do cliente na conexão do controle. Cliente 1543 21 1549 1729 Servidor Para estabelecer uma conexão, o cliente conecta ao servidor na porta 21 através de sua porta 1543. O cliente envia PASV eo servidor responde indicando sua porta 1729 (por exemplo) O clinete conexta à porta 1729 através de sua porta 1549 (Poe exemplo) Figura 03 Modo Passivo Recomendamos uma reflexão quanto à segurança deste protocolo. 3
SMTP - Simple Mail Transfer Protocol O Simple Mail Transfer Protocol (SMTP) é o protocolo padrão da arquitetura TCP/IP para envio de e-mails. O SMTP Utiliza a porta 25 e tem funcionamento muito simples, pois as mensagens e seus anexos são lidas como texto simples e os arquivos anexos são remontados de acordo com as informações lidas no cabeçalho. Vale ressaltar que o SMTP é um protocolo de envio apenas, ou seja, O SMTP não permite que um usuário descarregue as mensagens de um servidor. Para isso, é necessário um cliente de email com suporte ao protocolo POP3 ou IMAP, que é o caso da maioria dos clientes atuais. Após o estabelecimento de uma conexão entre emissor (cliente) e receptor (servidor), o exemplo seguinte ilustra uma sessão SMTP. Na conversação seguinte, "C:" designa as mensagens do cliente, e "S:" as mensagens do servidor. Na maioria dos computadores uma conexão pode ser estabelecida usando o comando telnet no emissor, por exemplo: telnet www.example.com 25 Passos da conexão SMTP S: 220 www.example.com ESMTP Postfix C: HELO mydomain.com S: 250 Hello mydomain.com C: MAIL FROM: sender@mydomain.com S: 250 Ok C: RCPT TO: friend@example.com S: 250 Ok C: DATA S: 354 End data with <CR><LF>.<CR><LF> C: Subject: test message C: From: sender@mydomain.com C: To: friend@example.com C: C: Hello, C: This is a test. C: Goodbye. C:. S: 250 Ok: queued as 12345 C: quit S: 221 Bye A partir daí uma seqüência de comandos é esperada para que a conexão SMTP tenha sucesso. TELNET Telnet é um protocolo cliente-servidor baseado em TCP usado para permitir a comunicação entre computadores ligados numa rede com o objetivo de efetuar login/acesso remoto. Por questões de segurança, este protocolo é substituído pelo SSH, cujo conteúdo é encriptado antes de ser enviado. A preocupação com segurança é o fator que está colocando o TELNET em desuso, uma vez que todas as comunicações entre o cliente e o servidor podem ser vistas, já que são em texto plano, incluindo a senha, com um simples sniffer como o Wireshark. È utilizando hoje apenas para teste de conexões em serviços (veja exemplo no SMTP). NTP - Network Time Protocol Infelizmente os relógios dos computadores são imprecisos e não sincronizados. Aplicações de tempo real, banco de dados distrinuídos e serviços que utilizam sincronização de informações devem ser capaz de garantir as propriedades necessárias ao relógio do computador para o bom funcionamento das aplicações. O NTP é um protocolo para sincronização dos relógios dos computadores baseado no UDP, ou seja, ele define um jeito para um grupo de hosts conversar e acertar seus relógios, baseados numa fonte confiável de tempo. Os servidores NTP formam uma topologia hierárquica, dividida em camadas ou estratos (strata) numerados de 0 a 16. O estrato 0 representa a referência primária (relógio atômico) de tempo mas é um host da rede de servidores NTP. Assim estrato 0, fornece o tempo correto para o estrato 1, que por sua vez fornece o tempo para o estrato 2 e assim por diante. O NTP é então, simultaneamente, servidor (fornece o tempo) e cliente Figura 04 Hierarquia do NTP (consulta o tempo), formando uma topologia em árvore. O funcionamento do NTP pode parecer simples, mas os algoritmos de sincronização de relógio (ou cálculo de deslocamento de hora) e a troca de mensagens não são triviais. Focaremos a camada de aplicação através de práticas no laboratório e atividades em grupo. 4
Pesquise 1. Estude os métodos de conexão e o formado da mensagem HTTP 2. Como funciona um servidor PROXY 3. Reflita sobre a segurança do protocolo. 4. Compare o SSH com o TELNET. 5. O funcionamento do protocolo DNS. Temas para trabalhos 1. Programação de Servidor Web [2] 2. Programação de Algoritmo de janelas deslizantes. 3. Implantação de servidores HTTP, e DNS Bibliografia [1] FOROUZAN, B.A. Comunicação de Dados e Redes de Computadores. 3ª Edição. Bookman. 2006. [2] KUROSE, J. Redes de Computadores e a Internet. 3ª Edição. Addison-Wesley, 2006. [3] COMER, D. E. Redes de Computadores e a Internet. 4ª Edição. Bookman. 2007. [4] http://pt.wikipedia.org/wiki/http - Wikipedia. 5