2b: Camada de Aplicação 1 Capítulo 2: Roteiro r 2.1 Princípios de aplicações de rede r 2.2 A Web e o HTTP r 2.3 Transferência de arquivo: FTP r 2.4 Correio.

Slides:



Advertisements
Apresentações semelhantes
Capítulo 2: Camada de Aplicação
Advertisements

Sockets Marco Antonio – marcoreis.net Arquiteto de Software Dezembro/2007.
Comunicação entre processos distribuídos
DNS e Serviço de Nomes Campus Cachoeiro Curso Técnico em Informática
Peer to Peer Referência:
DNS: Domain Name System
Redes de computadores Prof. Nelson Fonseca 2: Camada de Aplicação.
Capítulo 2: Roteiro 2.1 Princípios dos protocolos da camada de aplicação 2.2 Web e HTTP 2.3 FTP 2.4 Correio Eletrônico SMTP, POP3, IMAP 2.5 DNS 2.6 Compartilhamento.
DNS Introdução.
Camada de Transporte: Portas, Sockets, Aplicações em Rede
Funcionalidades e Protocolos da Camada de Aplicação
Modelo de referência OSI
Aula 9 - Camada de aplicação
Infra-Estrutura de Comunicação (IF678) Aula Prática 02 – CIn/UFPE Davi Duarte Denyson José Eduardo Souza Ivan França Rafael Lima.
REDES DE COMPUTADORES Prof. Deivson
Aula 2 Arquitetura & Protocolos
Funcionalidade e Protocolos da Camada de Aplicação
Programação com sockets
Concorrência e thread Petrônio Júnior(pglj) Márcio Neves(mmn2)
Serviços de Nomes e DNS 1.
Redes de Computadores I Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Davidson Rodrigo Boccardo
Maria Alessandra Dubowski Nascimento
Domain Name System - Sistema de Nomes de Domínios
Infra-Estrutura de Comunicação (IF678) Aula Prática 02 Programação de Sockets TCP e UDP Hugo Simões Original por: Flávio.
Redes de Computadores I Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
ANTONIO LIMEIRA EDUARDO FRANKLIN LUCAS ARANHA RANIERI VALENÇA RODRIGO PIGATTI DNS.
DNS Willamys Araújo 1. Introdução A internet possui uma infinidade de sites e, para acessá-los, você digita um endereço no campo correspondente do seu.
Infra-Estrutura de Comunicação (IF678) Aula Prática 02 Programação de Sockets TCP e UDP CIn/UFPE Bruno Gentilini Eduardo Souza Amora Albuquerque Anália.
Redes de computadores: Aplicações Prof. Dr. Amine BERQIA
TCP/IP.
Capítulo 2: Camada de Aplicação Baseado nos slides de Kurose e Ross 2: Camada de Aplicação1.
Camada de Aplicação Prof. Horácio. Objetivo Apresentar os detalhes específicos dos tipos de aplicação; Apresentar o modelo cliente-servidor; Apresentar.
Tema 07: A camada de aplicação: protocolos HTTP, SMTP, DNS, FTP
© 2010 Pearson Prentice Hall. Todos os direitos reservados.slide 1 Capítulo 2 Camada de aplicação Nota sobre o uso destes slides ppt: Estamos disponibilizando.
© 2010 Pearson Prentice Hall. Todos os direitos reservados.slide 1 Capítulo 2 Camada de aplicação Nota sobre o uso destes slides ppt: Estamos disponibilizando.
Redes de Computadores 2 - Camada de Aplicação (Princípios Básicos) –
Administração e Projeto de Redes Material de apoio Camada de Transporte Cap.4 10/02/2010.
Aula 6.  Conceitos de redes ◦ Protocolo TCPI/IP ◦ Endereçamento ◦ DNS ◦ Gateway ◦ Atribuição dinâmica e estática (DHCP)  Exercícios : Verificar configurações.
Arquitetura em Camadas
2: Application Layer 1 Redes de Computadores DCC/UFJ Capítulo 2 – Camada de Aplicação Material fortemente baseado nos slides do livro: Computer Networking:
2 © 2005 by Pearson Education Prof. Esp Camilo Brotas Ribeiro Redes de Computadores Aula 04 - Camada de Aplicação.
Sistemas Distribuídos Professor: Luiz José Hoffmann Filho
Curso Superior em Redes de Computadores SSH Prof. Sales Filho.
Capítulo 1 Redes de computadores e a Internet Professor: Gustavo Wagner
Redes de Computadores e Aplicações – Camada de aplicação IGOR ALVES.
Educopédia: plataforma de aulas digitais. Rioeduca.net: é o NOVO CANAL DE COMUNICAÇÃO e de INTERAÇÃO de todos os funcionários e alunos da SME/RJ. .
“Características e Limitações”
Redes de Computadores e Aplicações – Camada de Rede (DHCP, NAT, ICMP) IGOR ALVES.
Curso Superior em Redes de Computadores Roteamento IP UNICAST OSPF – Parte 3 Prof. Sales Filho.
Redes de Computadores e Aplicações – Camada de Rede IGOR ALVES.
Internet - Evolução Sofia Margarida Parreira Rodrigues HOME Última página Introdução Internet Service Providers Protocolos Software para Internet Génese.
Sistemas Operacionais de Redes DNS
Curso Superior em Redes de Computadores FTP Prof. Sales Filho.
Redes de Computadores e Aplicações – Camada de Transporte IGOR ALVES.
Curso Superior em Redes de Computadores
Programação para Internet Aula 06 Linguagem Java (Orientação a Objetos – Atributos e Métodos)
Capítulo 2 Redes de computadores e a Internet Camada de aplicação Prof. Gustavo Wagner.
Capítulo 2 Redes de computadores e a Internet Camada de aplicação Prof. Gustavo Wagner.
SISTEMAS OPERACIONAIS MEMÓRIA VIRTUAL. INTRODUÇÃO Memória Virtual é um técnica sofisticada e poderosa de gerenciamento de memória, onde a MP e a MS são.
Capítulo 2 Redes de computadores e a Internet Camada de aplicação Prof. Gustavo Wagner.
Camada 4 A Camada de Transporte
INTERNET Serviços e protocolos Escola Luís de Camões.
Endereçamento IP Básico
Diagramas de Sequência e Comunicação
Curso Superior em Redes de Computadores Camada de Aplicação Prof. Sales Filho.
Redes de Computadores Arquitetura TCP/IP Prof. Alberto Felipe / Ester Ozório.
Redes de Computadores e Aplicações – Modelo OSI IGOR ALVES.
Capítulo 2 Redes de computadores e a Internet Camada de aplicação Prof. Gustavo Wagner.
Transcrição da apresentação:

2b: Camada de Aplicação 1 Capítulo 2: Roteiro r 2.1 Princípios de aplicações de rede r 2.2 A Web e o HTTP r 2.3 Transferência de arquivo: FTP r 2.4 Correio Eletrônico na Internet r 2.5 DNS: o serviço de diretório da Internet r 2.6 Aplicações P2P r 2.7 Programação de sockets com TCP r 2.8 Programação de sockets com UDP r 2.9 Construindo um servidor Web simples

2b: Camada de Aplicação 2 DNS: Domain Name System Pessoas: muitos identificadores: m CPF, nome, no. da Identidade hospedeiros, roteadores Internet : m endereço IP (32 bit) - usado p/ endereçar datagramas m “nome”, ex., jambo.ic.uff.br - usado por gente P: como mapear entre nome e endereço IP? Domain Name System: r base de dados distribuída implementada na hierarquia de muitos servidores de nomes r protocolo de camada de aplicação permite que hospedeiros, roteadores, servidores de nomes se comuniquem para resolver nomes (tradução endereço/nome) m nota: função imprescindível da Internet implementada como protocolo de camada de aplicação m complexidade na borda da rede

2b: Camada de Aplicação 3 DNS (cont.) Serviços DNS r Tradução de nome de hospedeiro para IP r Apelidos para hospedeiros (aliasing) m Nomes canônicos e apelidos r Apelidos para servidores de r Distribuição de carga m Servidores Web replicados: conjunto de endereços IP para um nome canônico Por que não centralizar o DNS? r ponto único de falha r volume de tráfego r base de dados centralizada e distante r manutenção (da BD) Não é escalável!

2b: Camada de Aplicação 4 Root DNS Servers com DNS servers org DNS serversedu DNS servers poly.edu DNS servers umass.edu DNS servers yahoo.com DNS servers amazon.com DNS servers pbs.org DNS servers Base de Dados Hierárquica e Distribuída Cliente quer IP para 1 a aprox: r Cliente consulta um servidor raiz para encontrar um servidor DNS.com r Cliente consulta servidor DNS.com para obter o servidor DNS para o domínio amazon.com r Cliente consulta servidor DNS do domínio amazon.com para obter endereço IP de

2b: Camada de Aplicação 5 DNS: Servidores raiz r procurado por servidor local que não consegue resolver o nome r servidor raiz: m procura servidor oficial se mapeamento desconhecido m obtém tradução m devolve mapeamento ao servidor local 13 servidores de nome raiz em todo o mundo a Verisign, Dulles, VA c Cogent, Herndon, VA (also Los Angeles) d U Maryland College Park, MD g US DoD Vienna, VA h ARL Aberdeen, MD j Verisign, ( 11 locations) b USC-ISI Marina del Rey, CA l ICANN Los Angeles, CA e NASA Mt View, CA f Internet Software C. Palo Alto, CA (and 17 other locations) i Autonomica, Stockholm (plus 3 other locations) k RIPE London (also Amsterdam, Frankfurt) m WIDE Tokyo

2b: Camada de Aplicação 6 Servidores TLD e Oficiais r Servidores Top-level domain (TLD) : m servidores DNS responsáveis por domínios com, org, net, edu, etc, e todos os domínios de países como br, uk, fr, ca, jp. m Network Solutions mantém servidores para domínio.com m NIC.br (Registro.br) para domínio.br r Servidores oficiais: m servidores DNS das organizações, provendo mapeamentos oficiais entre nomes de hospedeiros e endereços IP para os servidores da organização (e.x., Web e correio). m Podem ser mantidos pelas organizações ou pelo provedor de acesso

Domínios Registrados por DPN (Domínio de Primeiro Nível) 28/09/09 2b: Camada de Aplicação 7

8 Servidor de Nomes Local r Não pertence necessariamente à hierarquia r Cada ISP (ISP residencial, companhia, universidade) possui um. m Também chamada do “servidor de nomes default” r Quanto um hospedeiro faz uma consulta DNS, a mesma é enviada para o seu servidor DNS local m Atua como um intermediário, enviando consultas para a hierarquia.

2b: Camada de Aplicação 9 solicitante cis.poly.edu gaia.cs.umass.edu servidor raiz servidor local dns.poly.edu servidor oficial dns.cs.umass.edu 7 8 servidor TLD Exemplo de resolução de nome pelo DNS r Hospedeiro em cis.poly.edu quer endereço IP para gaia.cs.umass.edu consulta interativa: r servidor consultado responde com o nome de um servidor de contato r “Não conheço este nome, mas pergunte para esse servidor”

2b: Camada de Aplicação 10 consulta recursiva: r transfere a responsabilidade de resolução do nome para o servidor de nomes contatado r carga pesada? Exemplo de resolução de nome pelo DNS solicitante cis.poly.edu gaia.cs.umass.edu servidor DNS raiz servidor DNS local dns.poly.edu servidor DNS oficial dns.cs.umass.edu 7 8 servidor TLD 3

2b: Camada de Aplicação 11 DNS: uso de cache, atualização de dados r uma vez que um servidor qualquer aprende um mapeamento, ele o coloca numa cache local m entradas na cache são sujeitas a temporização (desaparecem depois de um certo tempo) m Servidores TLD tipicamente armazenados no cache dos servidores de nomes locais Servidores raiz acabam não sendo visitados com muita freqüência r estão sendo projetados pela IETF mecanismos de atualização/notificação dos dados m RFCs 2136, 3007, 4033/4/5 m

2b: Camada de Aplicação 12 Registros DNS DNS: BD distribuído contendo registros de recursos (RR) r Tipo=NS  nome é domínio (p.ex. foo.com.br)  valor é endereço IP de servidor oficial de nomes para este domínio formato RR: (nome, valor, tipo, sobrevida) r Tipo=A  nome é nome de hospedeiro  valor é o seu endereço IP r Tipo=CNAME  nome é nome alternativo (alias) para algum nome “canônico” (verdadeiro)  valor é o nome canônico r Tipo=MX  nome é domínio  valor é nome do servidor de correio para este domínio

2b: Camada de Aplicação 13 DNS: protocolo e mensagens protocolo DNS: mensagens de pedido e resposta, ambas com o mesmo formato de mensagem cabeçalho de msg r identificação: ID de 16 bit para pedido, resposta ao pedido usa mesmo ID r flags: m pedido ou resposta m recursão desejada m recursão permitida m resposta é oficial

2b: Camada de Aplicação 14 DNS: protocolo e mensagens

2b: Camada de Aplicação 15 Inserindo registros no DNS r Exemplo: acabou de criar a empresa “Network Utopia” r Registra o nome netutopia.com.br em uma entidade registradora (e.x., Registro.br) m Tem de prover para a registradora os nomes e endereços IP dos servidores DNS oficiais (primário e secundário) m Registradora insere dois RRs no servidor TLD.br: (netutopia.com.br, dns1.netutopia.com.br, NS) (dns1.netutopia.com.br, , A) r Põe no servidor oficial um registro do tipo A para e um registro do tipo MX para netutopia.com.br r Como as pessoas vão obter o endereço IP do seu site?

2b: Camada de Aplicação 16 Capítulo 2: Roteiro r 2.1 Princípios de aplicações de rede r 2.2 A Web e o HTTP r 2.3 Transferência de arquivo: FTP r 2.4 Correio Eletrônico na Internet r 2.5 DNS: o serviço de diretório da Internet r 2.6 Aplicações P2P r 2.7 Programação de sockets com TCP r 2.8 Programação de sockets com UDP r 2.9 Construindo um servidor Web simples

2b: Camada de Aplicação 17 Arquitetura P2P pura r sem servidor sempre ligado r sistemas finais arbitrários se comunicam diretamente r pares estão conectados de forma intermitente e mudam seus endereços IP r Três tópicos: m Distribuição de arquivos m Busca de informações m Estudo de caso: Skype par-par

2b: Camada de Aplicação 18 Distribuição de Arquivo: C/S x P2P Pergunta: Quanto tempo leva para distribuir um arquivo de um servidor para N pares? usus u2u2 d1d1 d2d2 u1u1 uNuN dNdN Servidor Rede (com banda abundante) Arquivo, tamanho F u s : banda de upload do servidor u i : banda de upload do par i d i : banda de download do par i

2b: Camada de Aplicação 19 Tempo de distribuição do arquivo: C/S usus u2u2 d1d1 d2d2 u1u1 uNuN dNdN Servidor Rede (com banda abundante) F r servidor envia seqüencialmente N cópias: m Tempo = NF/u s r cliente i leva F/d i para o download cresce linearmente com N (para grandes N) = d cs = max { NF/u s, F/min(d i ) } i Tempo para distribuir F para N clientes usando abordagem cliente/servidor

2b: Camada de Aplicação 20 Tempo de distribuição do arquivo: P2P r servidor deve enviar uma cópia: F/u s r cliente i leva F/d i para o download r NF bits devem ser baixados (agregado)  taxa de upload mais rápida: u s +  u i d P2P = max { F/u s, F/min(d i ), NF/(u s +  u i ) } i usus u2u2 d1d1 d2d2 u1u1 uNuN dNdN Servidor Rede (com banda abundante) F

2b: Camada de Aplicação 21 Cliente/Servidor x P2P: exemplo Taxa de upload do cliente= u, F/u = 1 hora, u s = 10u, d min ≥ u s

2b: Camada de Aplicação 22 Distribuição de arquivo: BitTorrent tracker: registra pares Participantes de uma torrente torrente: grupo de pares trocando pedaços de um arquivo obtém lista dos pares troca de pedaços peer rDistribuição de arquivo P2P

2b: Camada de Aplicação 23 BitTorrent (1) r arquivo dividido em pedaços de 256KB. r par que se une à torrente: m não tem nenhum pedaço, mas irá acumulá-los com o tempo m registra com o tracker para obter lista dos pares, conecta a um subconjunto de pares (“vizinhos”) r enquanto faz o download, par carrega pedaços para outros pares r Pares podem entrar e sair r quando o par obtém todo o arquivo, ele pode (egoisticamente) sair ou permanecer (altruisticamente)

BitTorrent (2) Obtendo Pedaços r num determinado instante, pares distintos possuem diferentes subconjuntos dos pedaços do arquivo r periodicamente, um par (Alice) pede a cada vizinho a lista de pedaços que eles possuem r Alice envia pedidos para os pedaços que ainda não tem m Primeiro os mais raros Enviando pedaços: toma lá, dá cá! r Alice envia pedaços para quatro vizinhos que estejam lhe enviando pedaços na taxa mais elevada m Reavalia os 4 mais a cada 10 segs r a cada 30 segs: seleciona aleatoriamente outro par, começa a enviar pedaços m o par recém escolhido pode se unir aos 4 mais m “optimistically unchoke” 2b: Camada de Aplicação 24

2b: Camada de Aplicação 25 BitTorrent: toma lá, dá cá! (1) Alice “optimistically unchokes” Bob (2) Alice se torna um dos quatro melhores provedores de Bob; Bob age da mesma forma (3) Bob se torna um dos quatro melhores provedores de Alice Com uma taxa de upload mais alta, pode encontrar melhores parceiros de troca e obter o arquivo mais rapidamente!

2: Application Layer 26 P2P: busca por informação Compartilhamento de arquivos (ex: e-mule) r O índice registra dinamicamente as localizações dos arquivos compartilhados pelos pares r Pares devem informar ao índice os conteúdos que possuem r Pares buscam no índice para descobrir onde pode encontrar os arquivos. Mensagens instantâneas r O índice mapeia os nomes de usuários a locais. r Quando o usuário inicia uma aplicação de MI, ele deve informar ao índice qual é a sua localização atual. r Pares buscam no índice o endereço IP de um contato. Índice no sistema P2P: mapeia informação à localização de um par (localização = endereço IP & número de porta).

2b: Camada de Aplicação 27 Compartilhamento de arquivos P2P Exemplo r Alice executa aplicação cliente P2P no seu notebook r Periodicamente ela se conecta à Internet e recebe um novo endereço IP a cada conexão r Pede a música “Hey Jude” r A aplicação apresenta uma lista de outros parceiros que possuem uma cópia de Hey Jude. r Alice escolhe um dos parceiros, Bob. r O arquivo é copiado do PC de Bob para o notebook de Alice: HTTP r Enquanto Alice está baixando a música, outros usuários podem estar pegando arquivos do seu computador. r O parceiro de Alice é tanto um cliente Web como um servidor Web temporário. Todos os parceiros são servidores = altamente escalável!

2b: Camada de Aplicação 28 P2P: diretório centralizado Projeto original do Napster 1) Quando um parceiro conecta ele informa ao servidor central o seu: m endereço IP m conteúdo 2) Alice consulta sobre a música “Hey Jude” 3) Alice solicita o arquivo a Bob servidor de diretório centralizado parceiros Alice Bob

2b: Camada de Aplicação 29 P2P: problemas com diretório centralizado r Ponto único de falha r Gargalo de desempenho r Violação de Direitos Autorais a transferência de arquivo é descentralizada, mas a localização do conteúdo é altamente centralizada.

2b: Camada de Aplicação 30 Inundação de consultas r Completamente distribuído m Sem servidor central r Protocolo de domínio público r Vários clientes Gnutella implementam o protocolo Rede sobreposta: grafo r Aresta entre pares X e Y se existe uma conexão TCP r Todos os pares ativos e arestas formam a rede de sobreposição r Aresta não é um enlace físico r Um par vai estar conectado tipicamente com < 10 vizinhos na rede de sobreposição

2b: Camada de Aplicação 31 Inundação de consulta Consulta Item achado Consulta Item achado Consulta Item achado Transferência arq: HTTP r Mensagem de consulta enviada pelas conexões TCP existentes r Pares repassem mensagem de consulta r Resposta sobre item encontrado enviada pelo caminho reverso Escalabilidade: Inundação com escopo limitado

2b: Camada de Aplicação 32 Gnutella: junção do Par 1. Um par X se juntando deve encontrar algum outro par na rede Gnutella: usa lista de pares candidatos 2. X tenta criar conexões TCP com os pares na lista seqüencialmente até estabelecer conexão com Y 3. X envia mensagem Ping para Y; Y repassa a mensagem Ping 4. Todos os pares recebendo a mensagem Ping respondem com uma mensagem Pong 5. X recebe várias mensagens Pong. Ele pode então estabelecer conexões TCP adicionais Saída do par: veja problema no livro texto!

2b: Camada de Aplicação 33 Overlay Hierárquico r Cada parceiro é um líder de grupo ou está alocado a um líder de grupo m Conexão TCP entre cada par e o seu líder de grupo m Conexões TCP entre alguns pares de líderes de grupos r O líder de um grupo mantém registro sobre o conteúdo de todos os seus filhos

2: Application Layer 34 Estudo de caso P2P: Skype r inerentemente P2P: comunicação entre pares de usuários. r protocolo proprietário da camada de aplicação (inferido através de engenharia reversa) r overlay hierárquico com SNs r Índice mapeia nomes dos usuários a endereços IP; distribuído através dos SNs Skype clients (SC) Supernode (SN) Skype login server

2: Application Layer 35 Pares como intermediários (relays) r Problema quando tanto Alice como Bob estão atrás de “NATs”. m O NAT impede que um par externo inicie uma chamada com um par interno r Solução: m Intermediário é escolhido, usando os SNs de Alice e de Bob. m Cada par inicia sessão com o intermediário m Pares podem se comunicar através de NATs através do intermediário

2b: Camada de Aplicação 36 Capítulo 2: Roteiro r 2.1 Princípios de aplicações de rede r 2.2 A Web e o HTTP r 2.3 Transferência de arquivo: FTP r 2.4 Correio Eletrônico na Internet r 2.5 DNS: o serviço de diretório da Internet r 2.6 Aplicações P2P r 2.7 Programação de sockets com TCP r 2.8 Programação de sockets com UDP r 2.9 Construindo um servidor Web simples

2b: Camada de Aplicação 37 Programação com sockets API Sockets r apareceu no BSD4.1 UNIX em 1981 r são explicitamente criados, usados e liberados por apls r paradigma cliente/servidor r dois tipos de serviço de transporte via API Sockets m datagrama não confiável m fluxo de bytes, confiável uma interface (uma “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) socket Meta: aprender a construir aplicações cliente/servidor que se comunicam usando sockets

2b: Camada de Aplicação 38 Programação com sockets usando TCP 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 processo TCP com buffers, variáveis socket controlado pelo desenvolvedor de aplicação controlado pelo sistema operacional estação ou servidor processo TCP com buffers, variáveis socket controlado pelo desenvolvedor de aplicação controlado pelo sistema operacional estação ou servidor internet

2b: Camada de Aplicação 39 Cliente deve contactar servidor r processo servidor deve antes estar em execução r servidor deve antes ter criado socket (porta) que aguarda contato do cliente Cliente contacta servidor para: r criar socket TCP local ao cliente r especificar endereço IP, número de porta do processo servidor r Quando cliente cria socket: TCP cliente cria conexão com TCP do servidor r Quando contatado pelo cliente, o TCP do servidor cria socket novo para que o processo servidor possa se comunicar com o cliente m permite que o servidor converse com múltiplos clientes m Endereço IP e porta origem são usados para distinguir os clientes (mais no cap. 3) TCP provê transferência confiável, ordenada de bytes (“tubo”) entre cliente e servidor ponto de vista da aplicação Programação com sockets usando TCP

2b: Camada de Aplicação 40 Comunicação entre sockets

2b: Camada de Aplicação 41 Jargão para Fluxo (Stream) r Um fluxo (stream) é uma seqüência de caracteres que fluem de ou para um processo. r Um fluxo de entrada é conectado a alguma fonte de entrada para o processo, por exemplo, teclado ou socket. r Um fluxo de saída é conectado a uma fonte de saída, por exemplo, um monitor ou um socket.

2b: Camada de Aplicação 42 Programação com sockets usando TCP Exemplo de apl. cliente- servidor: 1. cliente lê linha da entrada padrão (fluxo doUsuário ), envia para servidor via socket (fluxo paraServidor ) 2. servidor lê linha do socket 3. servidor converte linha para letras maiúsculas, devolve para o cliente 4. cliente lê linha modificada do socket (fluxo doServidor ), imprime-a Fluxo de entrada: Seqüência de bytes recebidos pelo processo Fluxo de saída: Seqüência de bytes transmitidos pelo processo Processo cliente Socket cliente TCP

2b: Camada de Aplicação 43 Interações cliente/servidor usando o TCP aguarda chegada de pedido de conexão socketConexão = socketRecepção.accept() cria socket, porta= x, para receber pedido: socketRecepção = ServerSocket () cria socket, abre conexão a nomeHosp, porta= x socketCliente = Socket() fecha socketConexão lê resposta de socketCliente fecha socketCliente Servidor (executa em nomeHosp ) Cliente Envia pedido usando socketCliente lê pedido de socketConexão escreve resposta para socketConexão TCP setup da conexão

2b: Camada de Aplicação 44 Exemplo: cliente Java (TCP) import java.io.*; import java.net.*; class ClienteTCP { public static void main(String argv[]) throws Exception { String frase; String fraseModificada; BufferedReader doUsuario = new BufferedReader(new InputStreamReader(System.in)); Socket socketCliente = new Socket(”nomeHosp", 6789); DataOutputStream paraServidor = new DataOutputStream(socketCliente.getOutputStream()); Cria fluxo de entrada Cria socket de cliente, conexão ao servidor Cria fluxo de saída ligado ao socket

2b: Camada de Aplicação 45 Exemplo: cliente Java (TCP), cont. BufferedReader doServidor = new BufferedReader(new InputStreamReader(socketCliente.getInputStream())); frase = doUsuario.readLine(); paraServidor.writeBytes(frase + '\n'); fraseModificada = doServidor.readLine(); System.out.println ( ”Do Servidor: " + fraseModificada ) ; socketCliente.close(); } Cria fluxo de entrada ligado ao socket Envia linha ao servidor Lê linha do servidor

2b: Camada de Aplicação 46 Exemplo: servidor Java (TCP) import java.io.*; import java.net.*; class servidorTCP { public static void main(String argv[]) throws Exception { String fraseCliente; String FraseMaiusculas; ServerSocket socketRecepcao = new ServerSocket(6789); while(true) { Socket socketConexao = socketRecepcao.accept(); BufferedReader doCliente = new BufferedReader(new InputStreamReader(socketConexao.getInputStream())); Cria socket para recepção na porta 6789 Aguarda, no socket para recepção, o contato do cliente Cria fluxo de entrada, ligado ao socket

2b: Camada de Aplicação 47 Exemplo: servidor Java (TCP), cont DataOutputStream paraCliente = new DataOutputStream(socketConexão.getOutputStream()) ; fraseCliente= doCliente.readLine(); fraseEmMaiusculas= fraseCliente.toUpperCase() + '\n'; paraCliente.writeBytes(fraseEmMaiusculas); } Lê linha do socket Cria fluxo de saída, ligado ao socket Escreve linha ao socket Final do laço while, volta ao início e aguarda conexão de outro cliente

2b: Camada de Aplicação 48 Capítulo 2: Roteiro r 2.1 Princípios de aplicações de rede r 2.2 A Web e o HTTP r 2.3 Transferência de arquivo: FTP r 2.4 Correio Eletrônico na Internet r 2.5 DNS: o serviço de diretório da Internet r 2.6 Aplicações P2P r 2.7 Programação de sockets com TCP r 2.8 Programação de sockets com UDP r 2.9 Construindo um servidor Web simples

2b: Camada de Aplicação 49 Programação com sockets usando UDP UDP: não tem “conexão” entre cliente e servidor r não tem “handshaking” r remetente coloca explicitamente endereço IP e porta do destino r servidor deve extrair endereço IP, porta do remetente do datagrama recebido UDP: dados transmitidos podem ser recebidos fora de ordem, ou perdidos UDP provê transferência não confiável de grupos de bytes (“datagramas”) entre cliente e servidor ponto de vista da aplicação

2b: Camada de Aplicação 50 Interações cliente/servidor usando o UDP fecha socketCliente Servidor (executa em nomeHosp ) lê resposta do socketCliente cria socket, socketCliente = DatagramSocket() Cliente cria, endereça ( nomeHosp, porta=x, envia pedido em datagrama usando socketCliente cria socket, porta= x, para pedido que chega: socketServidor = DatagramSocket() lê pedido do socketServidor escreve resposta ao socketServidor especificando endereço IP, número de porta do cliente

2b: Camada de Aplicação 51 Exemplo: Cliente Java (UDP) UDP

2b: Camada de Aplicação 52 Exemplo: cliente Java (UDP) import java.io.*; import java.net.*; class clienteUDP { public static void main(String args[]) throws Exception { BufferedReader doUsuario= new BufferedReader(new InputStreamReader(System.in)); DatagramSocket socketCliente = new DatagramSocket(); InetAddress IPAddress = InetAddress.getByName(”nomeHosp"); byte[] dadosEnvio = new byte[1024]; byte[] dadosRecebidos = new byte[1024]; String frase = doUsuario.readLine(); dadosEnvio = frase.getBytes(); Cria fluxo de entrada Cria socket de cliente Traduz nome de hospedeiro ao endereço IP usando DNS

2b: Camada de Aplicação 53 Exemplo: cliente Java (UDP) cont. DatagramPacket pacoteEnviado = new DatagramPacket(dadosEnvio, dadosEnvio.length, IPAddress, 9876); socketCliente.send(pacoteEnviado); DatagramPacket pacoteRecebido = new DatagramPacket(dadosRecebidos, dadosRecebidos.length); socketCliente.receive(pacoteRecebido); String fraseModificada = new String(pacoteRecebido.getData()); System.out.println(“Do Servidor:" + fraseModificada); socketCliente.close(); } Cria datagrama com dados para enviar, comprimento, endereço IP, porta Envia datagrama ao servidor Lê datagrama do servidor

2b: Camada de Aplicação 54 Servidor UDP

2b: Camada de Aplicação 55 Exemplo: servidor Java (UDP) import java.io.*; import java.net.*; class servidorUDP { public static void main(String args[]) throws Exception { DatagramSocket socketServidor = new DatagramSocket(9876); byte[] dadosRecebidos = new byte[1024]; byte[] dadosEnviados = new byte[1024]; while(true) { DatagramPacket pacoteRecebido = new DatagramPacket(dadosRecebidos, dadosRecebidos.length); socketServidor.receive(pacoteRecebido); Cria socket para datagramas na porta 9876 Aloca memória para receber datagrama Recebe datagrama

2b: Camada de Aplicação 56 Exemplo: servidor Java (UDP), cont String frase = new String(pacoteRecebido.getData()); InetAddress IPAddress = pacoteRecebido.getAddress(); int porta = pacoteRecebido.getPort(); String fraseEmMaiusculas = frase.toUpperCase(); dadosEnviados = fraseEmMaiusculas.getBytes(); DatagramPacket pacoteEnviado = new DatagramPacket(dadosEnviados, dadosEnviados.length, IPAddress, porta); socketServidor.send(pacoteEnviado); } Obtém endereço IP, no. de porta do remetente Escreve datagrama no socket Fim do laço while, volta ao início e aguarda chegar outro datagrama Cria datagrama p/ enviar ao cliente

2b: Camada de Aplicação 57 Capítulo 2: Roteiro r 2.1 Princípios de aplicações de rede r 2.2 A Web e o HTTP r 2.3 Transferência de arquivo: FTP r 2.4 Correio Eletrônico na Internet r 2.5 DNS: o serviço de diretório da Internet r 2.6 Aplicações P2P r 2.7 Programação de sockets com TCP r 2.8 Programação de sockets com UDP r 2.9 Construindo um servidor Web simples

2b: Camada de Aplicação 58 Servidor Web Simples r Funções do servidor Web: m Trata apenas um pedido HTTP por vez m Aceita e examina o pedido HTTP m Recupera o arquivo pedido do sistema de arquivos do servidor m Cria uma mensagem de resposta HTTP consistindo do arquivo solicitado precedido por linhas de cabeçalho m Envia a resposta diretamente ao cliente.

2b: Camada de Aplicação 59 Servidor Web Simples import java.io.*; import java.net.*; import java.util.*; class WebServer { public static void main(String argv[]) throws Exception { String requestMessageLine; String fileName; ServerSocket listenSocket = new ServerSocket(6789); Socket connectionSocket = listenSocket.accept(); BufferedReader inFromClient = new BufferedReader(new InputStreamReader( connectionSocket.getInputStream())); DataOutputStream outToClient = new DataOutputStream( connectionSocket.getOutputStream()); Contém a classe StringTokenizer que é usada para examinar o pedido Aguarda conexão do cliente Primeira linha da mensagem de pedido HTTP e Nome do arquivo solicitado Cria fluxo de Entrada Cria fluxo de Saída

2b: Camada de Aplicação 60 Servidor Web Simples, cont requestMessageLine = inFromClient.readLine(); StringTokenizer tokenizedLine = new StringTokenizer(requestMessageLine); if (tokenizedLine.nextToken().equals("GET")){ fileName = tokenizedLine.nextToken(); if (fileName.startsWith("/") == true ) fileName = fileName.substring(1); File file = new File(fileName); int numOfBytes = (int) file.length(); FileInputStream inFile = new FileInputStream ( fileName); byte[] fileInBytes = new byte[]; inFile.read(fileInBytes); Lê a primeira linha do pedido HTTP que deveria ter o seguinte formato: GET file_name HTTP/1.0 Examina a primeira linha da mensagem para extrair o nome do arquivo Associa o fluxo inFile ao arquivo fileName Determina o tamanho do arquivo e constrói um vetor de bytes do mesmo tamanho

2b: Camada de Aplicação 61 Servidor Web Simples, cont outToClient.writeBytes( "HTTP/ Document Follows\r\n"); if (fileName.endsWith(".jpg")) outToClient.writeBytes("Content-Type: image/jpeg\r\n"); if (fileName.endsWith(".gif")) outToClient.writeBytes("Content-Type: image/gif\r\n"); outToClient.writeBytes("Content-Length: " + numOfBytes + "\r\n"); outToClient.writeBytes("\r\n"); outToClient.write(fileInBytes, 0, numOfBytes); connectionSocket.close(); } else System.out.println("Bad Request Message"); } Transmissão do cabeçalho da resposta HTTP. Inicia a construção da mensagem de resposta

2b: Camada de Aplicação 62 Capítulo 2: Resumo r Arquiteturas de aplicações m cliente-servidor m P2P m híbrido r Requisitos de serviço das aplicações: m confiabilidade, banda, atraso r Modelos de serviço de transporte da Internet m orientado à conexão, confiável: TCP m não confiável, datagramas: UDP Nosso estudo sobre aplicações de rede está agora completo! r Protocolos específicos: m HTTP m FTP m SMTP, POP, IMAP m DNS r Programação socket

2b: Camada de Aplicação 63 Capítulo 2: Resumo r troca típica de mensagens pedido/resposta m cliente solicita info ou serviço m servidor responde com dados, código de status r formatos de mensagens: m cabeçalhos: campos com info sobre dados (metadados) m dados: info sendo comunicada Mais importante: aprendemos sobre protocolos r msgs de controle vs. dados m na banda, fora da banda r centralizado vs. descentralizado r s/ estado vs. c/ estado r transferência de msgs confiável vs. não confiável r “complexidade na borda da rede”