52
2b: Camada de Aplicação 1 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ção1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

Embed Size (px)

Citation preview

Page 1: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 1

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

Page 2: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 2

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

Page 3: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 3

DNS (cont.)

Serviços DNS 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!

Page 4: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 4

Root DNS Servers

com DNS servers org DNS servers edu DNS servers

poly.eduDNS servers

umass.eduDNS servers

yahoo.comDNS servers

amazon.comDNS servers

pbs.orgDNS servers

Base de Dados Hierárquica e Distribuída

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

Page 5: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 5

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

13 servidores de nome raiz em todo o mundo

a Verisign, Dulles, VAc Cogent, Herndon, VA (also Los Angeles)d U Maryland College Park, MDg US DoD Vienna, VAh ARL Aberdeen, MDj Verisign, ( 11 locations)

b USC-ISI Marina del Rey, CAl ICANN Los Angeles, CA

e NASA Mt View, CAf 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

Page 6: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 6

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

Page 7: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 7

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.

Page 8: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 8

solicitantecis.poly.edu

gaia.cs.umass.edu

servidor raiz

servidor local dns.poly.edu

1

23

4

5

6

servidor oficialdns.cs.umass.edu

78

servidor TLD

Exemplo de DNS

Hospedeiro em cis.poly.edu quer endereço IP para gaia.cs.umass.edu

Page 9: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 9

DNS: tipos de consultas

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”

1

2 3

6

8 7

9

10

consulta interativa

servidor de nomes raiz

servidor localpitomba.ic.uff.br

servidor intermediário

servidor oficialcs.columbia.edu

solicitantemanga.ic.uff.br

www.cs.columbia.edu

consulta recursiva

4

5

servidor TLD

saell.cc.columbia.edu

Page 10: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 10

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

Page 11: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 11

Registros DNSDNS: BD distribuído contendo registros de recursos (RR)

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)

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=MX nome é domínio valor é nome do servidor

de correio para este domínio

Page 12: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 12

DNS: protocolo e mensagensprotocolo 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

Page 13: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 13

DNS: protocolo e mensagens

campos de nome, e de tipo num pedido

RRs em respostaao pedido

registros para outrosservidores oficiais

info adicional “relevante” que

pode ser usada

Page 14: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 14

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?

Page 15: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 15

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

Page 16: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 16

Compartilhamento de arquivos P2PExemplo 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.

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!

Page 17: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 17

P2P: diretório centralizado

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

servidor de diretóriocentralizado

parceiros

Alice

Bob

1

1

1

12

3

Page 18: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 18

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.

Page 19: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 19

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

Page 20: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 20

Gnutella: protocolo

Consulta

Item achado

Consulta

Consulta

Item achado

Consulta

Consulta

Item ach

ado

Transferência arq:HTTP

Mensagem de consulta enviada pelas conexões TCP existentes Pares repassem mensagem de consulta Resposta sobre item encontrado enviada pelo caminho reverso

Escalabilidade:Inundação com escopo limitado

Page 21: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 21

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!

Page 22: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 22

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

ordinary peer

group-leader peer

neighoring re la tionshipsin overlay network

Page 23: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 23

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

Page 24: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 24

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

Page 25: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 25

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

Page 26: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 26

Programação com sockets

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

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

Page 27: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 27

Programação com sockets usando TCPSocket: 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 combuffers,

variáveis

socket

controlado peloprogramador de

aplicação

controladopelo sistemaoperacional

estação ouservidor

processo

TCP combuffers,

variáveis

socket

controlado peloprogramador deaplicação

controladopelo sistemaoperacional

estação ouservidor

internet

Page 28: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 28

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)

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

Page 29: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 29

Comunicação entre sockets

Page 30: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 30

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.

Page 31: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 31

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 socket3. servidor converte linha

para letras maiúsculas, devolve para o cliente

4. cliente lê linha modificada do socket (fluxo doServidor), imprime-a

outT

oSer

ver

to network from network

inFr

omS

erve

r

inFr

omU

ser

keyboard monitor

Process

clientSocket

inputstream

inputstream

outputstream

TCPsocket

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

Page 32: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 32

Interações cliente/servidor usando o TCP

aguarda chegada de pedido de conexãosocketConexão =socketRecepção.accept()

cria socket,porta=x, parareceber pedido:

socketRecepção = ServerSocket ()

cria socket,abre conexão a nomeHosp, porta=xsocketCliente =

Socket()

fechasocketConexão

lê resposta desocketCliente

fechasocketCliente

Servidor (executa em nomeHosp) Cliente

Envia pedido usandosocketClientelê pedido de

socketConexão

escreve resposta para socketConexão

TCP setup da conexão

Page 33: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 33

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());

Criafluxo de entrada

Criasocket de cliente,

conexão ao servidor

Criafluxo de saída

ligado ao socket

Page 34: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 34

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(); } }

Criafluxo de entradaligado ao socket

Envia linhaao servidor

Lê linhado servidor

Page 35: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 35

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 socketpara recepçãona porta 6789

Aguarda, no socketpara recepção, o

contato do cliente

Cria fluxo deentrada, ligado

ao socket

Page 36: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 36

Exemplo: servidor Java (TCP), cont

DataOutputStream paraCliente = new DataOutputStream(socketConexão.getOutputStream());

fraseCliente= doCliente.readLine();

fraseEmMaiusculas= fraseCliente.toUpperCase() + '\n';

paraClient.writeBytes(fraseEmMaiusculas); } } }

Lê linhado socket

Cria fluxode saída, ligado

ao socket

Escreve linhaao socket

Final do laço while,volta ao início e aguardaconexão de outro cliente

Page 37: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 37

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

Page 38: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 38

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

Page 39: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 39

Interações cliente/servidor usando o UDP

fechasocketCliente

Servidor (executa em nomeHosp)

lê resposta dosocketCliente

cria socket,socketCliente = DatagramSocket()

Cliente

cria, endereça (nomeHosp, porta=x,envia pedido em datagramausando socketCliente

cria socket,porta=x, parapedido que chega:socketServidor = DatagramSocket()

lê pedido dosocketServidor

escreve resposta ao socketServidorespecificando endereçoIP, número de porta do cliente

Page 40: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 40

Exemplo: Cliente Java (UDP)

sendP

ack

et

to network from network

rece

iveP

ack

et

inF

rom

Use

r

keyboard monitor

Process

clientSocket

UDPpacket

inputstream

UDPpacket

UDPsocket

Saída: transmite pacote (o TCP enviou uma “seqüência de bytes”)

Entrada: recebe pacote (o TCP recebeu uma “seqüência de bytes”)

Processo cliente

socket cliente UDP

Page 41: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 41

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();

Criafluxo de entrada

Cria socket de cliente

Traduz nome de hospedeiro ao

endereço IP usando DNS

Page 42: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 42

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, portaEnvia datagrama

ao servidor

Lê datagramado servidor

Page 43: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 43

Servidor UDP

Page 44: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 44

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 socketpara datagramas

na porta 9876

Aloca memória parareceber datagrama

Recebedatagrama

Page 45: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 45

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

Escrevedatagrama

no socket

Fim do laço while,volta ao início e aguardachegar outro datagrama

Cria datagrama p/ enviar ao cliente

Page 46: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 46

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

Page 47: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 47

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.

Page 48: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 48

Servidor Web Simplesimport 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ãodo cliente

Primeira linha da mensagemde pedido HTTP e

Nome do arquivo solicitado

Cria fluxo de Entrada

Cria fluxo de Saída

Page 49: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 49

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 dopedido 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 doarquivo e constrói um vetor

de bytes do mesmo tamanho

Page 50: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 50

Servidor Web Simples, cont

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.

Inicia a construção damensagem de resposta

Page 51: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 51

Capítulo 2: Resumo

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

Nosso estudo sobre aplicações de rede está agora completo!

Protocolos específicos: HTTP FTP SMTP, POP, IMAP DNS

Programação socket

Page 52: 2b: Camada de Aplicação1 Capítulo 2: Roteiro r 2.1 Princípios dos protocolos da camada de aplicação r 2.2 Web e HTTP r 2.3 FTP r 2.4 Correio Eletrônico

2b: Camada de Aplicação 52

Capítulo 2: Resumo

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

Mais importante: aprendemos sobre protocolos

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”