Aplicações e protocolos da camada de aplicação Aplicação: processos distribuídos em comunicação ❍ executam em hospedeiros no “espaço de usuário” ❍ trocam mensagens para implementar aplicação ❍ p.ex., correio, transf. de arquivo, WWW Protocolos da camada de apl. ❍ uma “parte” da aplicação ❍ define mensagens trocadas por apls e ações tomadas ❍ usam serviços providos por protocolos de camadas inferiores Capítulo 2: Camada de Aplicação Antônio Abelém [email protected] 2: Camada de Aplicação programa em execução num hospedeiro. ❒ 2 processos no mesmo hospedeiro se comunicam usando communicação entre processos definida pelo sistema operacional (SO). ❒ 2 processos em hospedeiros distintos se comunicam usando um protocolo da camada de aplicação. ❒ ❍ ❍ 2: Camada de Aplicação 2 Paradigma cliente-servidor (C-S) Apl. de rede típica tem duas partes: cliente and servidor Um agente de usuário (UA) é uma interface entre o usuário e a aplicação de rede. ❍ aplicação transporte rede enlace física aplicação transporte rede enlace física 1 Aplicações de rede: algum jargão ❒ Um processo é um aplicação transporte rede enlace física WWW: browser Correio: leitor/compositor de mensagens streaming audio/video: tocador de mídia 2: Camada de Aplicação 3 Cliente: ❒ inicia contato com o servidor (“fala primeiro”) ❒ tipicamente solicita serviço do servidor ❒ para WWW, cliente implementado no browser; para correio no leitor de mensagens Servidor: ❒ provê ao cliente o serviço requisitado ❒ p.ex., servidor WWW envia página solicitada; servidor de correio entrega mensagens aplicação transporte rede enlace física pedido resposta aplicação transporte rede enlace física 2: Camada de Aplicação 4 De que serviço de transporte uma aplicação precisa? Protocolos da camada de aplicação (cont). Perda de dados API: interface de P: como um processo pode programação de “identificar”o outro aplicações processo com o qual quer se comunicar? ❒ define interface entre ❍ endereço IP do aplicação e camada de hospedeiro do outro transporte processo ❒ socket (= tomada) : API ❍ “número de porta” da Internet permite que o hospedeiro ❍ 2 processos se comunicam enviando dados para um socket ou lendo dados de um socket ❒ algumas apls (p.ex. áudio) podem tolerar algumas perdas ❒ outras (p.ex., transf. de arquivos, telnet) requerem transferência 100% confiável telefonia Internet, jogos interativos) requerem baixo retardo para serem “viáveis” 2: Camada de Aplicação 5 Sensibilidade temporal Banda serviço TCP: ❒ transferência de arqs correio documentos WWW áudio/vídeo de tempo real áudio/vídeo gravado jogos interativos apls financeiras sem perdas sem perdas sem perdas tolerante tolerante tolerante sem perdas elástica elástica elástica áudio: 5Kb-1Mb vídeo:10Kb-5Mb como anterior > alguns Kbps elástica não não não sim, 100’s mseg sim, alguns segs sim, 100’s mseg sim e não 2: Camada de Aplicação 7 6 Serviços providos por protocolos de transporte Internet Requisitos do serviço de transporte de apls comuns Perdas 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 ❒ algumas apls (p.ex., … voltamos mais tarde a este assunto. Aplicação ❒ algumas apls (p.ex., Temporização receptor determine a qual processo deve ser entregue a mensagem 2: Camada de Aplicação Largura de banda orientado a conexão: setup requerido entre cliente, servidor ❒ transporte confiável entre processos remetente e receptor ❒ controle de fluxo: remetente não vai “afogar” receptor ❒ controle de congestionamento: estrangular remetente quando a rede carregada ❒ não provê: garantias temporais ou de banda mínima serviço UDP: ❒ 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 P: Qual é o interesse em ter um UDP? 2: Camada de Aplicação 8 Apls Internet: seus protocolos e seus protocolos de transporte Aplicação Protocolo da camada de apl WWW: algum jargão Protocolo de transporte usado ❒ Página WWW: ❍ correio eletrônico accesso terminal remoto WWW transferência de arquivos streaming multimídia servidor de arquivo remoto telefonia Internet 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 ❒ consiste de “objetos” endereçada por uma URL Quase todas as páginas WWW consistem de: ❍ ❒ página base HTML, e vários objetos referenciados. Agent de usuário para WWW se chama de browser: ❍ ❍ ❒ Servidor para WWW se chama “servidor WWW”: ❍ URL tem duas partes: nome de hospedeiro, e nome de caminho: MS Internet Explorer Netscape Communicator ❍ Apache (domínio público) MS Internet Information Server (IIS) www.univ.br/algum-depto/pic.gif 2: Camada de Aplicação 2: Camada de Aplicação 9 WWW: o protocolo http Mais sobre o protocolo http http: hypertext transfer protocol http: serviço de transporte TCP: ❒ protocolo da camada de aplicação para WWW ❒ modelo cliente/servidor ❍ ped PC executa Explorer htt p ❒ cliente inicia conexão TCP res pos ta htt p 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 ido p htt o Servidor did ttp pe executando ah t s po servidor res WWW da UFPA Mac executa Navigator 2: Camada de Aplicação 11 (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 10 http é “sem estado” ❒ servidor não mantém informação sobre pedidos anteriores do cliente Nota Protocolos que mantêm “estado” são complexos! ❒ história passada (estado) tem que ser guardada ❒ Caso caia servidor/cliente, suas visões do “estado” podem ser inconsistentes, devem ser reconciliadas 2: Camada de Aplicação 12 Exemplo de http Exemplo de http (cont.) Supomos que usuário digita a URL www.algumaUniv.br/algumDepartmento/inicial.index (contém texto, referências a 10 imagens jpeg) 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 1a. Cliente http inicia conexão TCP a servidor http (processo) a www.algumaUniv.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 tempo TCP . 1b. servidor http no hospedeiro www.algumaUniv.br espera por conexão TCP na porta 80. “aceita” conexão, avisando ao cliente 6. Passos 1 a 5 repetidos para cada um dos 10 objetos jpeg tempo 3. servidor http recebe mensagem de pedido, formula mensagem de resposta contendo objeto solicitado (algumDepartmento/inicial.index), envia mensagem via socket 2: Camada de Aplicação Conexões não persistente and persistente 14 formato de mensagem http: pedido Persistente ❒ default for HTTP/1.1 ❒ na mesma conexão TCP: servidor analisa pedido, responde, analisa novo pedido,.. ❒ Cliente envia pedidos para todos objetos referenciados assim que recebe o HTML base . A maioria de browsers 1.0 ❒ Menos RTTs and menos usa connexões TCP paralelas. partida lenta. Não persistente ❒ HTTP/1.0 ❒ servidor analisa pedido, responde, e encerra conexão TCP ❒ 2 RTTs para trazer cada objeto (RTT=round trip time) ❒ transferência de cada objeto sofre de partida lenta 2: Camada de Aplicação 2: Camada de Aplicação 13 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 15 Carriage return, line feed indicate fim de mensagem (carriage return (CR), line feed(LF) adicionais) 2: Camada de Aplicação 16 formato de mensagem http: resposta mensagem de pedido http: formato geral linha de status (protocolo, código de status, frase de status) linhas de cabeçalho dados, p.ex., arquivo html solicitado 2: Camada de Aplicação ❒ Meta: não enviar objeto se sucesso, objeto pedido segue mais adiante nesta mensagem cliente já tem (no cache) versão atual ❒ cliente: especifica data da cópia no cache no pedido http objeto pedido mudou de lugar, nova localização especificado mais adiante nesta mensagem (Location:) 400 Bad Request If-modified-since: <date> mensagem de pedido não entendida pelo servidor ❒ servidor: resposta não 404 Not Found ❍ contém objeto se cópia no cache é atual: documento pedido não se encontra neste servidor 505 HTTP Version Not Supported ❍ HTTP/1.0 304 Not Modified versão de http do pedido não usada por este servidor 2: Camada de Aplicação 18 servidor cliente 301 Moved Permanently ❍ 2: Camada de Aplicação Interação usuário-servidor: GET condicional Na primeira linha da mensagem de resposta servidor->cliente. Alguns códigos típicos: 200 OK ❍ dados dados dados dados ... 17 códigos de status da resposta http ❍ 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 19 msg de pedido http If-modified-since: <date> resposta http HTTP/1.0 304 Not Modified objeto não modificado msg de pedido http If-modified-since: <date> resposta http objeto modificado HTTP/1.1 200 OK … <data> 2: Camada de Aplicação 20 Cache WWW (servidor-procurador) Por quê usar cache WWW? Meta: atender pedido do cliente sem envolver servidor de origem ❒ usuário configura browser: acessos WWW via procurador ❒ cliente envia todos pedidos http ao procurador ❍ ❍ se objeto estiver no cache do procurador, este o devolve imediatamente na resposta http senão, solicita objeto do servidor de origem, depois devolve resposta http ao cliente Servidor de origem cliente ped ido Servidorprocurador htt res p pos ta htt p p t t oh tp did ht pe sta o p res p htt ido ttp d pe ah t s po res ped ido htt res p pos ta htt p cliente ❍ Servidor de origem 2: Camada de Aplicação usuário na estação transferência do arquivo Internet pública enlace de accesso 2 Mbps rede da instituição muitas vezes é um gargalo o enlace que liga a rede da instituição ou do provedor à Internet LAN 10 Mbps cache da instituição 2: Camada de Aplicação 21 ftp: o protocolo de transferência de arquivos Interface cliente do usuário FTP FTP Suposição: cache está “próximo” do cliente (p.ex., na mesma rede) ❒ tempo de resposta menor: cache “mais próximo” do cliente ❒ diminui tráfego aos servidores distantes Servidores de origem 22 ftp: conexões separadas p/ controle, dados ❒ cliente ftp contata servidor FTP servidor sistema de arquivos remoto sistema de arquivos local ❒ transferir arquivo de/para hospedeiro remoto ❒ modelo cliente/servidor cliente: lado que inicia transferência (pode ser de ou para o sistema remoto) ❍ servidor: hospedeiro remoto ❒ ftp: RFC 959 ❒ servidor ftp: porta 21 ❍ 2: Camada de Aplicação 23 ftp na porta 21, especificando TCP como protocolo de transporte ❒ são abertas duas conexões TCP paralelas: ❍ controle: troca comandos, respostas entre cliente, servidor. “controle fora da banda” ❍ dados: dados de arquivo de/para servidor ❒ servidor ftp mantém “estado”: directório corrente, autenticação realizada conexão de controle TCP, porta 21 cliente FTP conexão de dados TCP, porta 20 servidor FTP 2: Camada de Aplicação 24 Ftp: comandos, respostas Correio Eletrônico Comandos típicos: Códigos de retorno típicos Três grandes componentes: ❒ enviados em texto ASCII pelo ❒ código e frase de status (como ❒ agentes de usuário (UA) canal de controle ❒ USER nome ❒ PASS senha ❒ LIST devolve lista de arquivos ❒ ❒ no directório corrente ❒ RETR arquivo recupera (lê) ❒ arquivo remoto ❒ STOR arquivo armazena ❒ (escreve) arquivo no hospedeiro remoto para http) 331 Username OK, password required 125 data connection already open; transfer starting 425 Can’t open data connection 452 Error writing file 2: Camada de Aplicação ❒ caixa de correio contém mensagens de chegada (ainda não lidas) p/ usuário ❒ fila de mensagens contém mensagens de saída (a serem enviadas) ❒ protocolo smtp entre servidores de correio para transferir mensagens de correio ❍ cliente: servidor de correio que envia ❍ “servidor”: servidor de correio que recebe servidor de correio agente de usuário SMTP SMTP SMTP servidor de correio agente de usuário SMTP ❒ simple mail transfer protocol: smtp Agente de Usuário SMTP ❒ compor, editar, ler mensagens de correio ❒ p.ex., Eudora, Outlook, elm, Netscape Messenger ❒ mensagens de saída e chegando são armazenadas no servidor agente de usuário servidor de correio SMTP ❒ a.k.a. “leitor de correio” 25 Correio Eletrônico: servidores de correio Servidores de correio ❒ servidores de correio servidor de correio agente de usuário fila de mensagens de saída caixa de correio do usuário servidor de correio agente de usuário agente de usuário agente de usuário agente de usuário 2: Camada de Aplicação 26 Correio Eletrônico: smtp [RFC 821] ❒ usa tcp para a transferência confiável de msgs do correio do cliente ao servidor, porta 25 ❒ transferência direta: servidor remetente ao servidor receptor ❒ três fases da transferência ❍ handshaking (cumprimento) ❍ transferência das mensagens ❍ encerramento ❒ interação comando/resposta ❍ comandos: texto ASCII ❍ resposta: código e frase de status agente de usuário servidor de correio agente de usuário agente de usuário 2: Camada de Aplicação ❒ 27 mensagens precisam ser em ASCII de 7-bits 2: Camada de Aplicação 28 smtp: últimas palavras Interaction smtp típica S: C: S: C: S: C: S: C: S: C: C: C: S: C: S: 220 doces.br HELO consumidor.br 250 Hello consumidor.br, pleased to meet you MAIL FROM: <[email protected]> 250 [email protected]... Sender ok RCPT TO: <[email protected]> 250 [email protected] ... Recipient ok DATA 354 Enter mail, end with "." on a line by itself Voce gosta de chocolate? Que tal sorvete? . 250 Message accepted for delivery QUIT 221 doces.br closing connection 2: Camada de Aplicação ❍ ❍ ❍ To: From: Subject: Comparação com http ❒ http: pull (puxar) ❒ email: push (empurrar) ❒ ambos tem interação comando/resposta, códigos de status em ASCII ❒ http: cada object é encapsulado em sua própria mensagem de resposta ❒ smtp: múltiplos objetos de mensagem enviados numa mensagem de múltiplas partes 2: Camada de Aplicação 30 Formato de uma mensagem: extensões para multimídia ❒ MIME: multimedia mail extension, RFC 2045, 2056 cabeçalho ❒ linhas adicionais no cabeçalho da msg declaram tipo do linha em branco conteúdo MIME versão MIME corpo método usado p/ codificar dados diferentes dos comandos de smtp! tipo, subtipo de dados multimídia, declaração parâmetros ❒ corpo ❍ persistentes ❒ smtp requerque a mensagem (cabeçalho e corpo) sejam em ascii de 7-bits ❒ algumas cadeias de caracteres não são permitidas numa mensagem (p.ex., CRLF.CRLF). Logo a mensagem pode ter que ser codificada (normalmente em base-64 ou “quoted printable”) ❒ servidor smtp usa CRLF.CRLF para reconhecer o final da mensagem 29 Formato de uma mensagem smtp: protocolo para trocar msgs de correio RFC 822: padrão para formato de mensagem de texto: ❒ linhas de cabeçalho, p.ex., ❒ smtp usa conexões a “mensagem”, somente de caracteres ASCII Dados codificados 2: Camada de Aplicação 31 From: [email protected] To: [email protected] Subject: Imagem de uma bela torta MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Type: image/jpeg base64 encoded data ..... ......................... ......base64 encoded data 2: Camada de Aplicação 32 Tipo Multipart Tipos MIME From: [email protected] To: [email protected] Subject: Imagem de uma bela torta MIME-Version: 1.0 Content-Type: multipart/mixed; boundary=98766789 Content-Type: tipo/subtipo; parâmetros Text Audio ❒ subtipos exemplos: plain, ❒ subtipos exemplos : basic html ❒ charset=“iso-8859-1”, ascii Image --98766789 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain (8-bit codificado mu-law), 32kadpcm (codificação 32 kbps) caro Bernardo, Anexa a imagem de uma torta deliciosa. --98766789 Content-Transfer-Encoding: base64 Content-Type: image/jpeg Application ❒ outros dados que precisam ❒ subtipos exemplos : jpeg, gif Video ❒ subtipos exemplos : mpeg, ser processados por um leitor para serem “visualizados” ❒ subtipos exemplos : msword, octet-stream base64 encoded data ..... ......................... ......base64 encoded data --98766789-- quicktime 2: Camada de Aplicação Protocolos de accesso ao correio agente de usuário SMTP SMTP POP3 ou IMAP 2: Camada de Aplicação 33 Protocolo POP3 fase de autorização agente de usuário ❒ comandos do cliente: user: declara nome ❍ pass: senha ❒ servidor responde ❍ +OK ❍ servidor de correio do remetente servidor de correio do receptor ❒ SMTP: entrega/armazenamento no servidor do receptor ❒ protocolo de accesso ao correio: recupera do servidor ❍ ❍ ❍ ❍ POP: Post Office Protocol [RFC 1939] • autorização (agente <-->servidor) e transferência IMAP: Internet Mail Access Protocol [RFC 1730] • mais comandos (mais complexo) • manuseio de msgs armazenadas no servidor HTTP: Hotmail , Yahoo! Mail, Webmail, etc. 2: Camada de Aplicação -ERR fase de transação, cliente: ❒ list: lista números das msgs ❒ retr: recupera msg por 35 número ❒ dele: apaga msg ❒ quit 34 S: C: S: C: S: +OK POP3 server ready user ana +OK pass faminta +OK user successfully logged C: S: S: S: C: S: S: C: C: S: S: C: C: S: list 1 498 2 912 . retr 1 <message 1 contents> . dele 1 retr 2 <message 1 contents> . dele 2 quit +OK POP3 server signing off 2: Camada de Aplicação on 36 Nomes DNS DNS: Domain Name System Domain Name System: Pessoas: muitos identificadores: ❍ ❍ ❍ base de dados distribuída ❒ protocolo de camada de aplicação CPF, nome, no. de Passaporte hospedeiros, roteadores Internet : endereço IP (32 bit) usado p/ endereçar datagramas. “nome”, e.g., marajo.ufpa.br - usado por gente. P: como mapear entre nome e endereço IP? ❒ ❒ implementada através de uma hierarquia servidores de nomes. permite que hospedeiros, roteadores e servidores de nomes se comuniquem para resolver nomes (tradução endereço/nome) ❍ note: função imprescindível da Internet implementada como protocolo de camada de aplicação ❍ complexidade na borda da rede 2: Camada de Aplicação 37 com gov edu Raiz br ... us ... ucla ... com petrobras puc-rio rdc ufrj ... ... inf censud tijuca triton ... bach amazonas tpd ❒ nome-n. ... .nome-2.nome-1 Conceitualmente, o nível mais alto (nome-1) permite duas formas diferentes de nomeação: ❍ Organizacional • com, edu, gov, int, mil, net e org ❍ Geográfica • Código dos países: xx (código ISO de 2 letras - exceto uk ) ❒ Exemplos: ❍ inf.puc-rio.br jb.com.br microsoft.com purdue.edu 2: Camada de Aplicação 38 ❒ Delegação de responsabilidades ❍ Não é apenas uma única entidade que gerencia todos os rótulos na árvore hierárquica ❍ O inter-NIC gerencia o topo da árvore e delega responsabilidades para as sub-árvores restantes (denominadas de zonas) . . . nasa • Organização distribuída da base de dados DNS - Estrutura Hierárquica . Um nome de domínio é uma concatenação de nomes: ecp nilo 2: Camada de Aplicação 39 ❒ O espaço de nomes particionado em zonas ❍ zonas facilitam organização federada e hierárquica de autoridades de gerenciamento do espaço de nomes ❍ zonas delegadas a organizações autorizadas (p.ex: br ⇒ puc-rio ⇒ inf ) 2: Camada de Aplicação 40 Zona x Domínio Zona pucpuc-rio.br Máquina responsável: responsável: vialáctea.rdc.pucvialáctea.rdc.puc-rio.br 139.82.1.2 ele civ Servidores de nomes DNS Por quê não centralizar o ❒ Nenhum servidor mantém todos os mapeamento nomeDNS? para-endereço IP ❒ ponto único de falha servidor de nomes local: ❒ volume de tráfego ❍ cada provedor, empresa tem ❒ base de dados servidor de nomes local (default) centralizada e distante ❍ pedido DNS de hospedeiro vai primeiro ao servidor de nomes ❒ manutenção (da BD) br Zona inf.pucinf.puc-rio.br Máquina responsável: responsável: exu.inf.pucexu.inf.puc-rio.br 139.82.16.3 puc-rio inf rdc bach odudua tpd local ecp triton Domínio puc-rio.br jatoba Não é escalável! nilo servidor de nomes autoritativo: ❍ ❍ 2: Camada de Aplicação p/ hospedeiro: guarda nome, endereço IP dele pode realizar tradução nome/endereço para este nome 2: Camada de Aplicação 41 DNS: Servidores raíz Implementação do DNS ❒ procurado por servidor ❒ A estrutura hierárquica é global e local que não consegue resolver o nome ❒ servidor raíz: ❍ procura servidor autoritativo se mapeamento desconhecido ❍ obtém tradução ❍ devolve mapeamento ao servidor local ❒ ~ uma dúzia de servidores raíz no mundo 42 distribuída entre servidores de nomes ❒ resolução de nomes ⇒ uma pesquisa distribuída ❒ Tipo da pesquisa: recursiva: fornece resultado ❍ iterativa: fornece uma dica ❍ ❒ Uso de cache ❍ guardar respostas localmente ❍ dados marcados com TTL (Time To Live) 2: Camada de Aplicação 43 2: Camada de Aplicação 44 Resolução de Nomes nome lógico nome lógico Módulo de Resolução de Nomes Exemplo simples do DNS hospedeiro tucuxi.ufpa.br requer endereço IP de www.cs.columbia.edu FTP FTP Estabelece conexão com endereço IP Endereço IP Estação Origem ❒ Estação Destino Módulo Resolução de Nomes: consulta arquivos locais ou um serviço de resolução de nomes 2: Camada de Aplicação Exemplo de DNS ❒ pode não conhecer o 7 servidor de nomes autoritativo ❒ pode conhecer contactar para descobrir o servidor de nomes autoritativo servidor local marajo.ufpa.br 1 solicitante 8 solicitante 2 responsabilidade de reolução do nome para o servidor de nomes contatado ❒ carga pesada? www.cs.columbia.edu consulta iterativa: tucuxi.ufpa.br www.cs.columbia.edu 47 responde com o nome de um servidor de contato ❒ “Não conheço este nome, mas pergunte para esse servidor” 46 servidor de nomes raíz consulta iterativa 3 4 7 servidor local marajo.ufpa.br 1 8 ❒ servidor consultado servidor autoritativo cs.columbia.edu servidor autoritativo cs.columbia.edu 2: Camada de Aplicação ❒ transfere a servidor intermediário saell.cc.columbia.edu 5 4 4 6 tucuxi.ufpa.br consulta recursiva: 3 2: Camada de Aplicação 1 DNS: consultas iterativas 6 2 servidor local 45 servidor de nomes raíz Servidor raíz: servidor de nomes intermediário: a quem 3. Servidor raíz contata servidor autoritativo cs.columbia.edu, se necessário IP Inter-Rede 3 5 2. marajo.ufpa.br contata marajo.ufpa.br servidor raíz, se necessário envia datagrama IP p/ end. IP IP 2 1. Contata servidor DNS local, marajo.ufpa.br TCP TCP servidor de nomes raíz solicitante servidor intermediário saell.cc.columbia.edu 5 6 servidor autoritativo cs.columbia.edu tucuxi.ufpa.br www.cs.columbia.edu 2: Camada de Aplicação 48 Resolvedor (“Resolver”) Elementos do DNS ❒ Cliente que acessa o Servidor de Nomes ❍ Funções já contidas nas bibliotecas do sistema ❒ Modelo Cliente-Servidor ❒ Informações (queries) podem ser solicitadas ❒ Parte do cliente ❍ de forma recursiva ou iterativa ❒ Abreviações de nomes Resolvedor (“Resolver”) ❒ Parte do servidor ❍ ❍ Servidor de nomes Se o nome dado pelo usuário não é encontrado, sufixos são agregados para verificar se usuário usou uma abreviação • amazonas=> nilo.ecp.inf.puc-rio.br; nilo.inf.puc-rio.br; nilo.puc-rio.br ❍ Abreviação é facilidade oferecida opcionalmente por clientes • Incorporada ao DNS mas não faz parte do protocolo 2: Camada de Aplicação ❒ resultado ❒ recursiva ❒ Configuração Win2000: ❍ Servidor inf.puc-rio.br dica UNIX: arquivo /etc/resolv.conf nameserver 139.82.16.3 nameserver 139.82.1.2 domain inf.puc-rio.br search inf.puc-rio.br tpd.inf.puc-rio.br ecp.inf.pucrio.br puc-rio.br Servidor puc-rio.br Interativa: fornece uma Cliente (resolvedor) ❒ Servidor raíz Servidor br Recursiva: fornece 50 Resolvedor (“Resolver”) Exemplo de Consultas iterativa 2: Camada de Aplicação 49 Start -> Settings -> Control Panel -> Network -> Protocols -> (Selecionar TCP/IP Protocol) -> Properties -> DNS Servidor local 2: Camada de Aplicação 51 2: Camada de Aplicação 52 Servidor de Nomes Tipos de Servidores ❒ Programas servidores que fornecem ❒ Primário: mantem as tabelas de configuração mapeamento nome ⇒ endereço ❍ de DNS localmente tb. mantêm informação sobre recursos do domínio ❒ Secundário (slave): recebe atualização do ❒ Servidores de nomes mantêm BDs de zonas primário com informação sobre a zona ❒ Servidores replicam BDs para facilitar acesso ❍ ❍ servidor primário mantém BD “autoritativa” da zona secundários carregam suas BDs a partir do primário (transferência de zona) 2: Camada de Aplicação domínios consultados, sem nenhuma informação local 2: Camada de Aplicação 53 54 Redundância no DNS Sub-tipos de Servidores ❒ ❒ Caching-only: Somente realiza cache dos Forwarders - são servidores designados para receber e Servidor Primário + Servidor(es) Secundário(s) tratar todas as consultas para fora do site. Os outros 139.82.1.2 139.82.16.3 inf.pucinf.puc-rio.br servidores primeiro consultam ele. Se após um tempo pucpuc-rio.br máximo este não responder, ai sim eles podem fazer a consulta externa. ❒ Forwarder-only - É o único servidor que pode fazer consultas fora do site. Todos os outros dependem Asa Asaasas asasassa assaasae asae…. …. completamente dele para consultas externas. 2: Camada de Aplicação ... Zona pucpuc-rio.br (original) 55 Asa asas assa asae …. Asa Asaasas asasassa assaasae asae…. …. ... Asa asas assa asae …. Zona inf.pucinf.puc-rio.br (original) Zona inf.pucinf.puc-rio.br (cópia) cópia) Asa Asaasas asasassa assaasae asae…. …. ... Asa asas assa asae …. Asa Asaasas asasassa assaasae asae…. …. ... Asa asas assa asae …. Zona pucpuc-rio.br (cópia) cópia) 2: Camada de Aplicação 56 Servidor de Nomes ❒ Servidor de Nomes (Name ❍ Unix DNS: uso de cache, atualização de dados Server) uma vez um servidor qualquer aprende um mapeamento, ele o coloca em cache local ❍ futuras consultas são resolvidas usando dados da cache ❍ entradas no cache são sujeitas a temporização (desaparecem depois de certo tempo) ttl = time to live (sobrevida) ❒ estão sendo projetados pela IETF mecanismos de atualização/notificação dos dados ❒ • Bind - um dos mais populares • Processo: in.named • Arquivos: named.conf (named.boot), root.servers, arquivos com informações referentes a zona de responsabilidade do servidor ❍ Win2000 • Microsoft DNS Server (Start -> Programs -> Administrative Tools -> DNS Manager) • Base de dados local armazenada em arquivos contidos no diretório \Winnt\system32\Dns ❍ RFC 2136 ❍ http://www.ietf.org/html.charters/dnsind-charter.html ❒ Respostas fornecidas podem ser 2: Camada de Aplicação “autoritativas” ou “não-autoritativas” DNS - Registros mais importantes ❒ 2: Camada de Aplicação 57 Start of Authority (SOA):tem domínio, primário, DNS - Registros mais importantes ❒ configuração ❒ este domínio ❍ ❒ IN NS exu.inf.puc-rio.br exu.inf.puc-rio.br IN A 139.82.16.3 Canonical Name (CNAME): especificar “apelido” ❍ www.inf.puc-rio.br IN CNAME exu.inf.puc-rio.br 2: Camada de Aplicação 3.16.82.139.in-addr.arpa IN PTR exu.inf.puc-rio.br ❒ Host Information (HINFO): detalhes da estação ❒ Mail eXchanger (MX): apelidos para os servidores de e-mail Address (A): mapeamento nome ⇒ endereço ❍ ❒ inf.puc-rio.br Pointer (PTR): mapeamento reverso (end ⇒ nome) ❍ Name Server (NS): indica os servidores para 58 ❍ inf.puc-rio.br IN MX 0 exu.inf.puc-rio.br ❍ inf.puc-rio.br IN MX 10 omega.lncc.br ❒ Servidores de e-mail podem pesquisar registros MX em ordem de prioridade 59 2: Camada de Aplicação 60 DNS: protocolo, mensagens DNS - Ferramentas de Diagnóstico protocolo DNS: mensagens pedido e resposta, ambas com o mesmo formato de mensagem ❒ nslookup ❍ Permite acesso as informações de DNS de um domínio cabeçalho de msg ❒ identification: ID de 16 bit para pedido, resposta ao pedido usa mesmo ID ❒ flags: ❍ pedido ou resposta ❍ recursão desejada ❍ recursão permitida ❍ resposta é autoritativa • Estação responsável pela zona e e-mail do administrador da zona • Servidora de Mail da zona • Mapeamento de nomes em endereços IP e vice-versa • Informações sobre estações (HINFO) • ... 2: Camada de Aplicação 2: Camada de Aplicação 61 62 Observações Relevantes sobre DNS DNS: protocolo, mensagens ❒ Dualidade sobre o protocolo de transporte campos nome, tipo num pedido RRs em resposta ao pedido ❍ consultas normalmente usam UDP (porta 53) ❍ sincronização de BDs usa TCP (porta 53) ❒ Desempenho registros para servidores autoritativos info adicional “relevante” que pode ser usada ❍ acesso lento ao DNS pode atrasar toda comunicação ❍ erros em BDs do DNS podem causar falhas de coms. ❍ acesso ao servidor DNS pode se tornar um gargalo ❍ 2: Camada de Aplicação 63 exemplo: servidor DNS atrás de um roteador congestionado 2: Camada de Aplicação 64 Programação com sockets Programação com sockets usando TCP Meta: aprender a construir aplicação cliente/servidor que se comunica usando sockets socket API Sockets uma interface (uma ❍ ❍ datagrama não confiável fluxo de bytes, confiável “porta”), local ao hospedeiro, criada por e pertencente à aplicação, e controlado pelo SO, através da qual um processo de aplicação pode tanto enviar como receber mensagens para/de outro processo de aplicação (remoto ou local) 2: Camada de Aplicação controlado pelo programador de aplicação controlado pelo sistema operacional socket TCP com buffers, variáveis internet estação ou servidor Cliente deve contactar servidor ❒ Quando cliente cria socket: TCP do cliente estabelece conexão ❒ processo servidor deve antes ao servidor TCP estar em execução ❒ Quando contactado pelo cliente, ❒ servidor deve antes ter servidor TCP cria socket novo criado socket (porta) que processo servidor poder se aguarda contato do cliente comunicar com o cliente Cliente contacta servidor por: ❍ permite que o servidor ❒ criar socket TCP local ao converse com múltiplos cliente clientes ❒ especificar endereço IP, ponto de vista da aplicação número de porta do processo TCP provê transferência servidor confiável, ordenada de bytes (“tubo”) entre cliente e servidor 67 socket TCP com buffers, variáveis controlado pelo programador de aplicação controlado pelo sistema operacional estação ou servidor 2: Camada de Aplicação 65 Programação com sockets usando TCP 2: Camada de Aplicação processo processo 66 Programação com sockets usando TCP Exemplo de apl cliente-servidor: ❒ cliente lê linha da entrada padrão (fluxo doUsuário), envia para servidor via socket (fluxo paraServidor) ❒ servidor lê linha do socket ❒ servidor converte linha para letra maiúscula, devolve para o cliente ❒ cliente lê linha modificada do socket (fluxo doServidor), imprime-a Input stream: sequence of bytes into process Output stream: sequence of bytes out of process doUsuário doServidor 1981 ❒ explicitamente criados, usados e liberados por apls ❒ paradigma cliente/servidor ❒ dois tipos de serviço de transporte via API Sockets paraServidor ❒ apareceu em BSD4.1 UNIX, Socket: uma porta entre o processo de aplicação e um protocolo de transporte fim-a-fim (UDP ou TCP) Serviço TCP: transferência confiável de bytes de um processo para outro socket do cliente 2: Camada de Aplicação 68 Interações cliente/servidor com socket: TCP Servidor (executa em idHosp) Exemplo: cliente Java (TCP) Cliente import java.io.*; import java.net.*; class ClienteTCP { cria socket, porta=x, para receber pedido: socketRecepção = ServerSocket () aguarda chegada de setup pedido de conexão socketConexão = socketRecepção.accept() TCP da conexão public static void main(String argv[]) throws Exception { String frase; String fraseModificada; cria socket, abre conexão a idHosp, porta=x socketCliente = Socket() Cria fluxo de entrada Envia pedido usando socketCliente lê pedido de socketConexão escreve resposta para socketConexão Cria socket de cliente, conexão ao servidor lê resposta de socketCliente fecha socketConexão fecha socketCliente 2: Camada de Aplicação Create output stream attached to socket BufferedReader doUsuario = new BufferedReader(new InputStreamReader(System.in)); Socket socketCliente = new Socket(”idHosp", 6789); DataOutputStream paraServidor = new DataOutputStream(socketCliente.getOutputStream()); 2: Camada de Aplicação 69 Exemplo: cliente Java (TCP), cont. 70 Exemplo: servidor Java (TCP) import java.io.*; import java.net.*; Cria fluxo de entrada ligado ao socket BufferedReader doServidor = new BufferedReader(new InputStreamReader(socketCliente.getInputStream())); frase = doUsuario.readLine(); Envia linha ao servidor Cria socket para recepção na porta 6789 paraServidor.writeBytes(frase + '\n'); fraseModificada = doServidor.readLine(); Lê linha do servidor class servidorTCP { System.out.println(”Do Servidor: " + fraseModificada); socketCliente.close(); Aguarda, no socket para recepção, o contato do cliente Cria fluxo de entrada, ligado ao socket } } 2: Camada de Aplicação 71 public static void main(String argv[]) throws Exception { String fraseCliente; StringfFraseMaiusculas; ServerSocket socketRecepcao = new ServerSocket(6789); while(true) { Socket socketConexao = socketRecepcao.accept(); BufferedReader doCliente = new BufferedReader(new InputStreamReader(socketConexao.getInputStream())); 2: Camada de Aplicação 72 Exemplo: servidor Java (TCP), cont Cria fluxo de saída, ligado ao socket Programação com sockets usando UDP DataOutputStream paraCliente = new DataOutputStream(socketConexão.getOutputStream()); Lê linha do socket fraseCliente= doCliente.readLine(); fraseEmMaiusculas= fraseCliente.toUpperCase() + '\n'; Escreve linha ao socket paraClient.writeBytes(fraseEmMaiusculas); } } } Final do elo while, volta ao início e aguarda conexão de outro cliente cria socket, porta=x, para pedido que chega: socketServidor = DatagramSocket() lê pedido do socketServidor escreve resposa ao socketServidor especificando endereço IP, número de porta do cliente UDP provê transferência não confiável de grupos de bytes (“datagramas”) entre cliente e servidor 2: Camada de Aplicação 73 Interações cliente/servidor com socket: UDP (executa em idHosp) ponto de vista da aplicação UDP: dados transmitidos podem ser recebidos fora de ordem, ou perdidos 2: Camada de Aplicação Servidor UDP: não tem “conexão” entre cliente e servidor ❒ não tem “handshaking” ❒ remetente coloca explicitamente endereço IP e porta do destino ❒ servidor deve extrair endereço IP, porta do remetente do datagrama recebido 74 Exemplo: cliente Java (UDP) Cliente import java.io.*; import java.net.*; cria socket, socketCliente = DatagramSocket() Cria fluxo de enrada cria, endereça (idHosp, porta=x, envia pedido em datagrama usando socketCliente Cria socket de cliente Traduz nome de hospedeiro ao endereço IP usando DNS lê resposa do socketCliente fecha socketCliente class clienteUDP { public static void main(String args[]) throws Exception { BufferedReader do Usuario= new BufferedReader(new InputStreamReader(System.in)); DatagramSocket socketCliente = new DatagramSocket(); InetAddress IPAddress = InetAddress.getByName(”idHosp"); byte[] dadosEnvio = new byte[1024]; byte[] dadosRecebidos = new byte[1024]; String frase = doUsuario.readLine(); dadosEnvio = frase.getBytes(); 2: Camada de Aplicação 75 2: Camada de Aplicação 76 Exemplo: cliente Java (UDP) cont. Cria datagrama com dados para enviar, comprimento, endereço IP, porta Exemplo: servidor Java (UDP) import java.io.*; import java.net.*; DatagramPacket pacoteEnviado = new DatagramPacket(dadosEnvio, dadosEnvio.length, IPAddress, 9876); Envia datagrama ao servidor socketCliente.send(pacoteEnviado); DatagramPacket pacoteRecebido = new DatagramPacket(dadosRecebidos, dadosRecebidos.length); Lê datagrama do servidor Cria socket para datagramas na porta 9876 String fraseModificada = new String(pacoteRecebido.getData()); Aloca memória para receber datagrama System.out.println(”Do Servidor:" + fraseModificada); socketCliente.close(); } Recebe datagrama } 2: Camada de Aplicação 77 Exemplo: servidor Java (UDP), cont String frase = new String(pacoteRecebido.getData()); InetAddress IPAddress = pacoteRecebido.getAddress(); int port = pacoteRecebido.getPort(); String fraseEmMaiusculas = frase.toUpperCase(); dadosEnviados = fraseEmMaiusculas.getBytes(); Cria datagrama p/ enviar ao cliente DatagramPacket pacoteEnviado = new DatagramPacket(dadosEnviados, dadosEnviados.length, IPAddress, porta); Escreve datagrama ao socket socketServidor.send(pacoteEnviado); } } } Fim do elo while, volta ao início e aguarda chegar outro datagrama DatagramSocket socketServidor = new DatagramSocket(9876); byte[] dadosRecebidos = new byte[1024]; byte[] dadosEnviados = new byte[1024]; socketCliente.receive(pacoteRecebido); Obtém endereço IP, no. de porta do remetente class servidorUDP { public static void main(String args[]) throws Exception { 2: Camada de Aplicação 79 while(true) { DatagramPacket pacoteRecebido = new DatagramPacket(dadosRecebidos, dadosRecebidos.length); socketServidor.receive(pacoteRecebido); 2: Camada de Aplicação 78