Redes de Computadores II Prof. Celio Trois www.inf.ufsm.br/~trois/redes2 Camada de Aplicação Conceitos e Definições Aplicações de Rede Uma aplicação é um programa executado em um computador hospedeiro. Aplicações no mesmo hospedeiro podem se comunicar usando processos de comunicação definidos pelo sistema operacional (SO). Aplicações em hospedeiros distintos se comunicam usando um protocolo da camada de aplicação, normalmente esta comunicação dar-se-á através da rede. Aplicações e Protocolos da Camada de Aplicação Aplicação de rede: processos distribuídos que se comunicam executam em hospedeiros no “espaço de usuário” utilizam a rede como forma de comunicação ex.: correio, transf. de arquivo, navegação web Protocolos da camada de apl. uma “parte” da aplicação define mensagens trocadas por apls e ações tomadas ex.: smtp, ftp, http usam serviços providos por protocolos de camadas inferiores aplicação transporte rede enlace física aplicação transporte rede enlace física aplicação transporte rede enlace física Protocolos da Camada de Aplicação API Define interface entre aplicação e camada de transporte API : socket 2 processos se comunicam enviando dados para um socket ou lendo dados de um socket Como um processo pode “identificar” o outro processo com o qual quer se comunicar? Endereço IP do hospedeiro do outro processo porta” - permite que o hospedeiro receptor determine a qual processo deve ser entregue a mensagem Paradigma Cliente-Servidor Apl. de rede típica tem duas partes: cliente e servidor Cliente: inicia contato com o servidor tipicamente solicita serviço do servidor ex.: cliente utilizando um browser Servidor: provê ao cliente o serviço requisitado ex.: servidor web envia página solicitada aplicação transport e rede enlace física pedido resposta aplicação transporte rede enlace física De que serviço de transporte uma aplicação precisa? Perda de dados Latência Largura de banda De que serviço de transporte uma aplicação precisa? Perda de dados algumas apls (p.ex. áudio) podem tolerar algumas perdas outras (p.ex., transf. de arquivos, telnet) requerem transferência 100% confiável Latência algumas apls (p.ex., telefonia Internet, jogos interativos) requerem baixo retardo para serem “viáveis” Largura de banda algumas apls (p.ex., multimídia) requerem quantia mínima de banda para serem “viáveis” outras apls (“apls elásticas”) conseguem usar qq quantia de banda disponível Requisitos do serviço de transporte de apls comuns Aplicação transferência de arqs correio documentos WWW áudio/vídeo de tempo real áudio/vídeo gravado jogos interativos apls financeiras Perdas Banda sem perdas sem perdas sem perdas tolerante elástica elástica elástica áudio: 5Kb-1Mb vídeo:10Kb-5Mb como anterior > alguns Kbps elástica tolerante tolerante sem perdas Sensibilidade temporal não não não sim, 100 mseg sim, alguns segs sim, 100 mseg sim e não Serviços providos por protocolos de transporte Internet Serviço TCP: Orientado a conexão: setup requerido entre cliente, servidor Transporte confiável entre processos remetente e receptor Controle de fluxo: remetente não vai sobrecarregar receptor Controle de congestionamento: estrangular remetente quando a rede carregada Não provê: garantias temporais ou de banda mínima Serviço UDP: Não orientado à conexão: transferência de dados não confiável entre processos remetente e receptor não provê: setup da conexão, confiabilidade, controle de fluxo, controle de congestionamento, garantias temporais ou de banda mínima Apls Internet: seus protocolos e seus protocolos de transporte Aplicação correio eletrônico accesso terminal remoto WWW transferência de arquivos streaming multimídia servidor de arquivo remoto telefonia Internet Protocolo da camada de apl Protocolo de transporte usado smtp [RFC 821] telnet [RFC 854] http [RFC 2068] ftp [RFC 959] proprietário (p.ex. RealNetworks) NSF proprietário (p.ex., Vocaltec) TCP TCP TCP TCP TCP ou UDP TCP ou UDP tipicamente UDP WWW Página WWW: consiste de “objetos” endereçada por uma URL Quase todas as páginas WWW consistem de: página base HTML vários objetos referenciados URL tem duas partes (obrigatórias): nome de hospedeiro, e nome de caminho: www.ufsm.br/algum-depto/pic.gif Agente de Usuário (AU) para WWW se chama de browser: MS Internet Explorer Netscape Communicator Mozilla Firefox Servidor para WWW se chama “servidor WWW”: Apache (domínio público) MS Internet Information Server (IIS) URIs e URLs URIs são conhecidas por muitos nomes: Endereços WWW, Identificadores Documento Universal, Identificadores de Recursos Universal, e, finalmente, a combinação de Uniform Resource Locator (URL) e Names (URN). URIs são simplesmente strings formatadas que identificam - através do nome, localização, ou qualquer outra característica um recurso de rede. URI – RFC 2068 pg 19 e 20 Uniform Resource Identifiers URI = ( absoluteURI | relativeURI ) [ "#" fragment ] absoluteURI relativeURI net_path abs_path rel_path = scheme ":" *( uchar | reserved ) = net_path | abs_path | rel_path = "//" net_loc [ abs_path ] = "/" rel_path = [ path ] [ ";" params ] [ "?" query ] path = fsegment *( "/" segment ) fsegment = 1*pchar segment = *pchar params param = param *( ";" param ) = *( pchar | "/" ) http_URL host port scheme net_loc = 1*( ALPHA | DIGIT | "+" | "-" | "." ) = *( pchar | ";" | "?" ) query fragment = *( uchar | reserved ) = *( uchar | reserved ) pchar = uchar | ":" | "@" | "&" | "=" | "+" uchar = unreserved | escape unreserved = ALPHA | DIGIT | safe | extra | national escape reserved extra safe unsafe national = "%" HEX HEX = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" = "!" | "*" | "'" | "(" | ")" | "," = "$" | "-" | "_" | "." = CTL | SP | <"> | "#" | "%" | "<" | ">" = <any OCTET excluding ALPHA, DIGIT, reserved, extra, safe, and unsafe> = "http:" "//" host [ ":" port ] [ abs_path ] = <A legal Internet host domain name or IP address (in dotted-decimal form), as defined by Section 2.1 of RFC 1123> = *DIGIT URL – RFC 1738 Uniform Resource Locators URL = <scheme>:<scheme-specific-part> scheme ftp, http, etc. scheme-specific-part //<user>:<password>@<host>:<port>/<url-path> WWW: protocolo http http: hypertext transfer protocol protocolo da camada de aplicação para WWW modelo cliente/servidor cliente: browser que pede, recebe, “visualiza” objetos WWW servidor: servidor WWW envia objetos em resposta a pedidos http1.0: RFC 1945 http1.1: RFC 2068 ped ido htt PC executa res p pos Explorer ta htt p ttp h ido ttp Servidor d h e p executando sta o p servidor res WWW do NCSA Mac executa Navigator Mais sobre o protocolo http http: serviço de transporte TCP: cliente inicia conexão TCP (cria socket) ao servidor, porta 80 servidor aceita conexão TCP do cliente mensagens http (mensagens do protocolo da camada de apl) trocadas entre browser (cliente http) e servidore WWW (servidor http) encerra conexão TCP Protocolos que mantêm “estado” são complexos! história passada (estado) http é “sem estado” tem que ser guardada servidor não mantém informação Caso caia servidor/cliente, sobre pedidos anteriores do cliente suas visões do “estado” podem ser inconsistentes, devem ser reconciliadas Exemplo de http Supomos que usuário digita a URL portal.redes.ufsm.br/index.html 1a. Cliente http inicia conexão TCP ao servidor http (processo) no endereço portal.redes.ufsm.br. Porta 80 é padrão para servidor http. 2. Cliente http envia mensagem de pedido de http (contendo URL) através do socket da conexão TCP 1b. Servidor http no hospedeiro portal.redes.ufsm.br espera por conexão TCP na porta 80. “aceita” conexão, avisando ao cliente 3. servidor http recebe mensagem de pedido, formula mensagem de resposta contendo objeto solicitado (/index.html), envia mensagem via socket tempo Exemplo de http (cont.) 4. Servidor http encerra conexão 5. Cliente http recebe mensagem de resposta contendo arquivo html, visualiza html. Analisando arquivo html, encontra 10 objetos jpeg referenciados 6. Passos 1 a 5 repetidos para cada um dos 10 objetos jpeg tempo TCP. Conexões não persistente and persistente Persistente Não persistente default para HTTP/1.1 HTTP/1.0 na mesma conexão TCP: servidor analisa pedido, servidor analisa pedido, responde, and encerra responde, analisa novo conexão TCP pedido,.. 2 RTTs para trazer cada Cliente envia pedidos objeto para todos objetos (RTT=round trip time) referenciados assim que transferência de cada recebe o HTML base. objeto sofre de “partida lenta” A maioria de browsers 1.0 usa connexões TCP paralelas. formato de mensagem http: pedido Dois tipos de mensagem http: pedido, resposta mensagem de pedido http: ASCII (formato legível por pessoas) linha do pedido (comandos GET, POST, HEAD) GET /somedir/page.html HTTP/1.0 User-agent: Mozilla/4.0 Accept: text/html, image/gif,image/jpeg linhas do Accept-language:fr cabeçalho Carriage return, line feed indicate fim de mensagem (carriage return (CR), line feed(LF) adicionais) mensagem de pedido http: formato geral formato de mensagem http: resposta linha de status (protocolo, código de status, frase de status) linhas de cabeçalho dados, p.ex., arquivo html solicitado HTTP/1.0 200 OK Date: Thu, 06 Aug 1998 12:00:15 GMT Server: Apache/1.3.0 (Unix) Last-Modified: Mon, 22 Jun 1998 …... Content-Length: 6821 Content-Type: text/html dados dados dados dados ... códigos de status da resposta http Na primeira linha da mensagem de resposta servidor->cliente. Alguns códigos típicos: 200 OK sucesso, objeto pedido segue mais adiante nesta mensagem 301 Moved Permanently objeto pedido mudou de lugar, nova localização especificado mais adiante nesta mensagem (Location:) 400 Bad Request mensagem de pedido não entendida pelo servidor 404 Not Found documento pedido não se encontra neste servidor 505 HTTP Version Not Supported versão de http do pedido não usada por este servidor Experimente você com http (do lado cliente) 1. Use cliente telnet para seu servidor WWW favorito: telnet www.ufsm.br 80 Abre conexão TCP para a porta 80 Qualquer coisa digitada é enviada para a porta 80 do www.ufsm.br 2. Digite um pedido GET http: GET /~trois/index.html HTTP/1.0 3. Examine a mensagem de resposta enviado pelo servidor http ! Digitando isto (deve teclar ENTER duas vezes), está enviando este pedido GET mínimo (porém completo) ao servidor http Alguma informação sobre HTML (HyperText Markup Language) HTML: uma linguagem simples para hipertexto começou como versão simples de SGML construção básica: cadéias de texto anotadas Construtores de formato operam sobre cadéias <b> .. </b> bold (negrito) <H1 ALIGN=CENTER> ..título centrado .. </H1> <BODY bgcolor=white text=black link=red ..> .. </BODY> vários formatos listas de bullets, listas ordenadas, listas de definição tabelas frames Encadeamento de referências Referências <A HREF=LinkRef> ... </A> a componentes do documento local <A HREF=“importante”> clique para uma dica </A> a documentos no servidor local <A HREF=“../index.htm”> voltar ao sumário </A> a documentos em outros servidores <A HREF=“http://www.uff.br”> saiba sobre a UFF </A> Multimídia imagem embutida: <IMG SRC=“eclipse”> imagem externa: <A HREF=“eclipse.gif”> imagem maior </A> vídeo Mpeg <A HREF=“ByeByeBrasil.mpg”> um bom filme </A> som <A HREF=“http://www.sons.br/aniv.au”> feliz niver </A>