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.

Slides:



Advertisements
Apresentações semelhantes
Parte 2: Camada de Aplicação
Advertisements

Capítulo 2: Camada de Aplicação
Sockets Marco Antonio – marcoreis.net Arquiteto de Software Dezembro/2007.
Comunicação entre processos distribuídos
Bruno Rafael de Oliveira Rodrigues
Servidor de s e Protocolo SMTP
DNS e Serviço de Nomes Campus Cachoeiro Curso Técnico em Informática
Peer to Peer Referência:
DNS: Domain Name System
Capítulo 2: Camada de Aplicação
Redes de computadores Prof. Nelson Fonseca 2: Camada de Aplicação.
Capítulo 2: Camada de Aplicação
Streams Java.
DNS Introdução.
26/09/2005 LCMI - DAS - UFSC 1 Introdução aos Sockets Java Fábio Favarim DAS – Departamento de Automação e Sistemas UFSC – Universidade.
1 Introdução aos Sockets (Java) Tiago Semprebom DAS – Departamento de Automação e Sistemas UFSC – Universidade Federal de Santa Catarina.
Capítulo 2: Camada de Aplicação
Camada de Transporte: Portas, Sockets, Aplicações em Rede
Capítulo 2 Camada de aplicação
Funcionalidades e Protocolos da Camada de Aplicação
Modelo de referência OSI
Prof. Marcelo Diniz Fonte:
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.
DNS (Domain Name System) Sistema de Nomes de Domínios
Streams –input e output
REDES DE COMPUTADORES Prof. Deivson
Aula 2 Arquitetura & Protocolos
Capítulo 2: Camada de Aplicação
Funcionalidade e Protocolos da Camada de Aplicação
Programação com sockets
Protocolo SMTP e POP O que é SMTP?
Comunicação Entre Processos Sockets - Java
2 © 2005 by Pearson Education  2.1 Princípios de aplicações de rede  2.2 Web e HTTP  2.3 FTP  2.4 Correio eletrônico  SMTP, POP3, IMAP  2.5.
Comunicação entre Processos - Sockets. Conceitos Básicos Sockets são uma forma de IPC ( InterProcess Communication ) fornecida pela 4.3 BSD que fornecem.
Faculdade de Tecnologia SENAI de Desenvolvimento Gerencial
Concorrência e thread Petrônio Júnior(pglj) Márcio Neves(mmn2)
Serviços de Nomes e DNS 1.
Infra-Estrutura de Comunicação (IF678) Aula Prática CIn/UFPE Rafael Lucena Roberta Mota Rubens Lopes Rodolfo Santos João Pedro Cordeiro.
Profa. Patrícia A. Jaques
Implementando comunicação em JAVA via Sockets Alcides Calsavara - Leonardo R. Nunes -
Arquitetura de Redes de Computadores – Luiz Paulo Maia Camada de Aplicação1 Arquitetura de Redes de Computadores Camada de Aplicação.
Redes de Computadores I Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Davidson Rodrigo Boccardo
Maria Alessandra Dubowski Nascimento
Falso, HTTP usa TCP. 1) HTTP usa arquitetura cliente servidor, aceitando conexões UDP na porta 80.
7 © 2005 by Pearson Education SIP  Session Initiation Protocol  Desenvolvido pelo IETF Visão de longo prazo do SIP  Todas chamadas telefônicas.
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 -
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.
Programação Distribuída em Java Aula Na aula passada vimos Domain Name Server –Funcionamento básico O pacote java.net –Sua finalidade A classe InetAddress.
Redes de computadores: Aplicações Prof. Dr. Amine BERQIA
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
Redes de Computadores Camada de Aplicação.
Administração e Projeto de Redes Material de apoio Camada de Transporte Cap.4 10/02/2010.
Protocolos de Comunicação e Passagem de Mensagens
Arquitetura em Camadas
Redes de Computadores e Aplicações – Camada de aplicação IGOR ALVES.
Sistemas Operacionais de Redes DNS
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.
Capítulo 2 Redes de computadores e a Internet Camada de aplicação Prof. Gustavo Wagner.
Curso Superior em Redes de Computadores Camada de Aplicação Prof. Sales Filho.
Capítulo 2 Redes de computadores e a Internet Camada de aplicação Prof. Gustavo Wagner.
Transcrição da apresentaçã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 de arquivos P2P 2.7 Programação de Sockets com TCP 2.8 Programação de Sockets com UDP 2.9 Construindo um servidor Web 2b: Camada de Aplicação

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

DNS (cont.) Serviços DNS Serviços DNS Roda sobre UDP e usa a porta 53 Tradução de nome de hospedeiro para IP Apelidos para hospedeiros (aliasing) Nomes canônicos e apelidos Apelidos para servidores de e-mail Distribuição de carga Servidores Web replicados: conjunto de endereços IP para um nome canônico Serviços DNS Roda sobre UDP e usa a porta 53 RFCs 1034, 1035 Atualizado em outras RFCs Por que não centralizar o DNS? ponto único de falha volume de tráfego base de dados centralizada e distante manutenção (da BD) Não é escalável! 2b: Camada de Aplicação

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

DNS: Servidores raiz procurado por servidor local que não consegue resolver o nome servidor raiz: procura servidor oficial se mapeamento desconhecido obtém tradução devolve mapeamento ao servidor local 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 13 servidores de nome raiz em todo o mundo 2b: Camada de Aplicação

Servidores TLD e Oficiais Servidores Top-level domain (TLD) : 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. Network Solutions mantém servidores para domínio com FAPESP (Registro .br) para domínio br Servidores oficiais: 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). Podem ser mantidos pelas organizações ou pelo provedor de acesso 2b: Camada de Aplicação

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

Exemplo de DNS servidor raiz 2 Hospedeiro em cis.poly.edu quer endereço IP para gaia.cs.umass.edu 3 servidor TLD 4 5 servidor local dns.poly.edu 7 6 1 8 servidor oficial dns.cs.umass.edu solicitante cis.poly.edu gaia.cs.umass.edu 2b: Camada de Aplicação

DNS: tipos de consultas servidor de nomes raiz consulta recursiva: transfere a responsabilidade de resolução do nome para o servidor de nomes contatado carga pesada? consulta interativa: servidor consultado responde com o nome de um servidor de contato “Não conheço este nome, mas pergunte para esse servidor” consulta interativa servidor TLD 2 3 4 5 6 servidor intermediário servidor local pitomba.ic.uff.br 9 saell.cc.columbia.edu consulta recursiva 8 7 1 10 servidor oficial cs.columbia.edu solicitante manga.ic.uff.br www.cs.columbia.edu 2b: Camada de Aplicação

DNS: uso de cache, atualização de dados uma vez que um servidor qualquer aprende um mapeamento, ele o coloca numa cache local entradas na cache são sujeitas a temporização (desaparecem depois de um certo tempo) Servidores TLD tipicamente armazenados no cache dos servidores de nomes locais Servidores raiz acabam não sendo visitados com muita freqüência estão sendo projetados pela IETF mecanismos de atualização/notificação dos dados RFC 2136 http://www.ietf.org/html.charters/dnsind-charter.html 2b: Camada de Aplicação

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

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

DNS: protocolo e mensagens campos de nome, e de tipo num pedido RRs em resposta ao pedido registros para outros servidores oficiais info adicional “relevante” que pode ser usada 2b: Camada de Aplicação

Inserindo registros no DNS Exemplo: acabou de cria a empresa “Network Utopia” Registra o nome netutopia.com.br em uma entidade registradora (e.x., Registro .br) Tem de prover para a registradora os nomes e endereços IP dos servidores DNS oficiais (primário e secundário) Registradora insere dois RRs no servidor TLD .br: (netutopia.com.br, dns1.netutopia.com.br, NS) (dns1.netutopia.com.br, 212.212.212.1, A) Põe no servidor oficial um registro do tipo A para www.netutopia.com.br e um registro do tipo MX para netutopia.com.br Como as pessoas vão obter o endereço IP do seu site? 2b: 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 de arquivos P2P 2.7 Programação de Sockets com TCP 2.8 Programação de Sockets com UDP 2.9 Construindo um servidor Web 2b: Camada de Aplicação

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

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

P2P: problemas com diretório centralizado Ponto único de falha Gargalo de desempenho 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

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

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

Gnutella: junção do Par Um par X se juntando deve encontrar algum outro par na rede Gnutella: usa lista de pares candidatos X tenta criar conexões TCP com os pares na lista seqüencialmente até estabelecer conexão com Y X envia mensagem Ping para Y; Y repassa a mensagem Ping Todos os pares recebendo a mensagem Ping respondem com uma mensagem Pong 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

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

KaZaA: Consulta Cada arquivo possui um hash e um descritor O cliente envia palavras-chave para o seu líder de grupo O líder de grupo responde com os itens encontrados Para cada item: metadados, hash, endereço IP Se o líder de grupo repassa a consulta para outros líderes, eles respondem com os itens encontrados O cliente seleciona arquivos para download Requisições HTTP usando hash com identificador são enviadas para os pares que possuem os arquivos desejado 2b: Camada de Aplicação

Truques do KaZaA Limitações na quantidade de uploads simultâneos Enfileiramento de requisições Prioridades para incentivar disponibilização de conteúdo Download em paralelo 2b: 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 de arquivos P2P 2.7 Programação de Sockets com TCP 2.8 Programação de Sockets com UDP 2.9 Construindo um servidor Web 2b: Camada de Aplicação

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

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

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

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

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

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 letras maiúsculas, devolve para o cliente cliente lê linha modificada do socket (fluxo doServidor), imprime-a Processo cliente Fluxo de entrada: Seqüência de bytes recebidos pelo processo Fluxo de saída: Seqüência de bytes transmitidos pelo processo Socket cliente TCP 2b: Camada de Aplicação

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

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

Exemplo: cliente Java (TCP), cont. Cria fluxo de entrada ligado ao socket 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(); } Envia linha ao servidor Lê linha do servidor 2b: Camada de Aplicação

Exemplo: servidor Java (TCP) import java.io.*; import java.net.*; class servidorTCP { 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())); 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

Exemplo: servidor Java (TCP), cont DataOutputStream paraCliente = new DataOutputStream(socketConexão.getOutputStream()); fraseCliente= doCliente.readLine(); fraseEmMaiusculas= fraseCliente.toUpperCase() + '\n'; paraClient.writeBytes(fraseEmMaiusculas); } Cria fluxo de saída, ligado ao socket Lê linha do 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

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 de arquivos P2P 2.7 Programação de Sockets com TCP 2.8 Programação de Sockets com UDP 2.9 Construindo um servidor Web 2b: Camada de Aplicação

Programação com sockets usando UDP 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 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

Interações cliente/servidor usando o UDP Servidor (executa em nomeHosp) 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 fecha socketCliente lê resposta do socketCliente escreve resposta ao socketServidor especificando endereço IP, número de porta do cliente 2b: Camada de Aplicação

Exemplo: Cliente Java (UDP) Processo cliente Entrada: recebe pacote (o TCP recebeu uma “seqüência de bytes”) Saída: transmite pacote (o TCP enviou uma “seqüência de bytes”) socket cliente UDP 2b: Camada de Aplicação

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

Exemplo: cliente Java (UDP) cont. Cria datagrama com dados para enviar, comprimento, endereço IP, porta 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(); } Envia datagrama ao servidor Lê datagrama do servidor 2b: Camada de Aplicação

Servidor UDP 2b: Camada de Aplicação

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

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 Cria datagrama p/ enviar ao cliente Escreve datagrama no socket Fim do laço while, volta ao início e aguarda chegar outro datagrama 2b: 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 de arquivos P2P 2.7 Programação de Sockets com TCP 2.8 Programação de Sockets com UDP 2.9 Construindo um servidor Web 2b: Camada de Aplicação

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

Servidor Web Simples Contém a classe StringTokenizer que é usada para examinar o pedido 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()); Primeira linha da mensagem de pedido HTTP e Nome do arquivo solicitado Aguarda conexão do cliente Cria fluxo de Entrada Cria fluxo de Saída 2b: Camada de Aplicação

Servidor Web Simples, cont Lê a primeira linha do pedido HTTP que deveria ter o seguinte formato: GET file_name HTTP/1.0       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); 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

Servidor Web Simples, cont Inicia a construção da mensagem de resposta outToClient.writeBytes( "HTTP/1.0 200 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. 2b: Camada de Aplicação

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

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