Camada de Aplicação Parte 2 – Kurose

Propaganda
Capítulo 2: Roteiro
r
r
r
r
r
2.1 Princípios de
aplicações de rede
2.2 A Web e o HTTP
2.3 Transferência de
arquivo: FTP
2.4 Correio Eletrônico
na Internet
2.5 DNS: o serviço de
diretório da Internet
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
r
2b: Camada de Aplicação
1
DNS: Domain Name System
Pessoas: muitos
identificadores:
m
CPF, nome, no. da
Identidade
hospedeiros, roteadores
Internet :
m
m
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:
r
r
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)
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
2
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
Apelidos para
servidores de e-mail
r Distribuição de carga
r
m
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!
Servidores Web replicados:
conjunto de endereços IP
para um nome canônico
2b: Camada de Aplicação
3
Base de Dados Hierárquica e
Distribuída
Root DNS Servers
com DNS servers
yahoo.com
amazon.com
DNS servers DNS servers
org DNS servers
pbs.org
DNS servers
edu DNS servers
poly.edu
DNS servers
umass.edu
DNS servers
Cliente quer IP para www.amazon.com; 1a 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 www.amazon.com
2b: Camada de Aplicação
4
DNS: Servidores raiz
r
r
procurado por servidor local que não consegue resolver o
nome
servidor raiz:
m procura servidor oficial se mapeamento desconhecido
m obtém tradução
m devolve mapeamento ao servidor local
a Verisign, Dulles, VA
c Cogent, Herndon, VA (also Los Angeles)
d U Maryland College Park, MD
k RIPE London (also Amsterdam,
g US DoD Vienna, VA
Frankfurt)
h ARL Aberdeen, MD
i
Autonomica, Stockholm
j Verisign, ( 11 locations)
(plus 3 other locations)
m WIDE Tokyo
e NASA Mt View, CA
f Internet Software C. Palo Alto,
CA (and 17 other locations)
b USC-ISI Marina del Rey, CA
l ICANN Los Angeles, CA
13 servidores de
nome raiz em
todo o mundo
2b: Camada de Aplicação
5
Servidores TLD e Oficiais
r
Servidores Top-level domain (TLD) :
m
m
m
r
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
NIC.br (Registro .br) para domínio .br
Servidores oficiais:
m
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).
Podem ser mantidos pelas organizações ou pelo provedor de
acesso
2b: Camada de Aplicação
6
Domínios
Registrados
por DPN
(Domínio de
Primeiro Nível)
28/09/09
2b: Camada de Aplicação
7
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
8
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”
servidor raiz
2
3
servidor TLD
4
5
servidor local
dns.poly.edu
1
8
7
6
servidor oficial
dns.cs.umass.edu
solicitante
cis.poly.edu
gaia.cs.umass.edu
2b: Camada de Aplicação
9
Exemplo de resolução
servidor DNS raiz
de nome pelo DNS
consulta recursiva:
r
r
2
transfere a
7
responsabilidade de
resolução do nome
para o servidor de
nomes contatado
servidor DNS local
dns.poly.edu
carga pesada?
1
solicitante
3
6
servidor TLD
5
4
8
servidor DNS oficial
dns.cs.umass.edu
cis.poly.edu
gaia.cs.umass.edu
2b: Camada de Aplicação
10
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
http://www.ietf.org/html.charters/dnsext-charter.html
2b: Camada de Aplicação
11
Registros DNS
DNS: BD distribuído contendo registros de recursos (RR)
formato RR: (nome,
r
Tipo=A
m
m
r
valor, tipo, sobrevida)
r
nome é nome de hospedeiro
valor é o seu endereço IP
m
Tipo=NS
m
m
nome é domínio (p.ex.
foo.com.br)
valor é endereço IP de
servidor oficial de nomes
para este domínio
Tipo=CNAME
m
r
nome é nome alternativo
(alias) para algum nome
“canônico” (verdadeiro)
valor é o nome
canônico
Tipo=MX
m
m
nome é domínio
valor é nome do servidor de
correio para este domínio
2b: Camada de Aplicação
12
DNS: protocolo e mensagens
protocolo DNS: mensagens de pedido e resposta,
ambas com o mesmo formato de mensagem
cabeçalho de msg
r
r
identificação: ID de 16 bit
para pedido, resposta ao
pedido usa mesmo ID
flags:
m pedido ou resposta
m recursão desejada
m recursão permitida
m resposta é oficial
2b: Camada de Aplicação
13
DNS: protocolo e mensagens
2b: Camada de Aplicação
14
Inserindo registros no DNS
Exemplo: acabou de criar a empresa “Network
Utopia”
r Registra o nome netutopia.com.br em uma entidade
registradora (e.x., Registro.br)
r
m
m
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
r Como as pessoas vão obter o endereço IP do seu
site?
r
2b: Camada de Aplicação
15
Capítulo 2: Roteiro
r
r
r
r
r
2.1 Princípios de
aplicações de rede
2.2 A Web e o HTTP
2.3 Transferência de
arquivo: FTP
2.4 Correio Eletrônico
na Internet
2.5 DNS: o serviço de
diretório da Internet
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
r
2b: Camada de Aplicação
16
Arquitetura P2P pura
r
r
r
r
sem servidor sempre ligado
sistemas finais arbitrários se
comunicam diretamente
pares estão conectados de par-par
forma intermitente e mudam
seus endereços IP
Três tópicos:
m
m
m
Distribuição de arquivos
Busca de informações
Estudo de caso: Skype
2b: Camada de Aplicação
17
Distribuição de Arquivo: C/S x P2P
Pergunta: Quanto tempo leva para distribuir um
arquivo de um servidor para N pares?
us: banda de upload
do servidor
Servidor
Arquivo,
tamanho F
us
dN
uN
u1
d1
u2
ui: banda de upload
do par i
d2
di: banda de
download do par i
Rede (com
banda abundante)
2b: Camada de Aplicação
18
Tempo de distribuição do arquivo: C/S
r servidor envia
seqüencialmente N
cópias:
m
Tempo = NF/us
r cliente i leva F/di
Servidor
F
us
dN
u1 d1 u2
d2
Rede (com
banda abundante)
uN
para o download
Tempo para distribuir F
para N clientes usando
abordagem cliente/servidor
= dcs = max { NF/us, F/min(di)
i
}
cresce linearmente com N
(para grandes N)
2b: Camada de Aplicação
19
Tempo de distribuição do arquivo: P2P
servidor deve enviar
uma cópia: F/us
r cliente i leva F/di para o
download
r NF bits devem ser
baixados (agregado)
r
r
Servidor
F
u1 d1 u2
us
dN
d2
Rede (com
banda abundante)
uN
taxa de upload mais rápida: us +
Su
i
dP2P = max { F/us, F/min(d
i) , NF/(us +
i
Su ) }
i
2b: Camada de Aplicação
20
Cliente/Servidor x P2P: exemplo
Taxa de upload do cliente= u, F/u = 1 hora, us = 10u, dmin ≥ us
Minimum Distribution Time
3.5
P2P
Client-Server
3
2.5
2
1.5
1
0.5
0
0
5
10
15
20
25
30
35
N
2b: Camada de Aplicação
21
Distribuição de arquivo: BitTorrent
r
Distribuição de arquivo P2P
torrente: grupo de
pares trocando
pedaços de um arquivo
tracker: registra pares
Participantes de uma torrente
obtém lista
dos pares
troca de
pedaços
peer
2b: Camada de Aplicação
22
BitTorrent (1)
r
r
r
r
r
arquivo dividido em pedaços de
256KB.
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”)
enquanto faz o download, par carrega pedaços para
outros pares
Pares podem entrar e sair
quando o par obtém todo o arquivo, ele pode
(egoisticamente) sair ou permanecer
2b: Camada de Aplicação
(altruisticamente)
23
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
r
Reavalia os 4 mais a cada 10 segs
a cada 30 segs: seleciona
aleatoriamente outro par,
começa a enviar pedaços
m
m
o par recém escolhido pode se
unir aos 4 mais
“optimistically unchoke”
2b: Camada de Aplicação
24
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!
2b: Camada de Aplicação
25
P2P: busca por informação
Índice no sistema P2P: mapeia informação à localização de um par
(localização = endereço IP & número de porta).
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.
2: Application Layer
26
Compartilhamento de arquivos
P2P
r Alice escolhe um dos
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.
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
27
P2P: diretório centralizado
Projeto original do
Napster
Bob
servidor de diretório
centralizado
1
1) Quando um parceiro
conecta ele informa ao
servidor central o seu:
m
m
endereço IP
conteúdo
2) Alice consulta sobre a
música “Hey Jude”
3) Alice solicita o arquivo a
Bob
parceiros
1
3
1
2
1
Alice
2b: Camada de Aplicação
28
P2P: problemas com diretório
centralizado
Ponto único de falha
r Gargalo de
desempenho
r Violação de Direitos
Autorais
r
a transferência de arquivo
é descentralizada, mas a
localização do conteúdo é
altamente centralizada.
2b: Camada de Aplicação
29
Inundação de consultas
r
Completamente
distribuído
m
Sem servidor central
Protocolo de domínio
público
r Vários clientes
Gnutella implementam
o protocolo
r
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
30
Inundação de consulta
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
Transferência arq:
HTTP
Consulta
Item achado
Consulta
Item achado
Escalabilidade:
Inundação com
escopo limitado
2b: Camada de Aplicação
31
Gnutella: junção do Par
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!
1.
2b: Camada de Aplicação
32
Overlay Hierárquico
r
Cada parceiro é um
líder de grupo ou está
alocado a um líder de
grupo
m
m
r
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 relationships
in overlay network
2b: Camada de Aplicação
33
Estudo de caso P2P: Skype
Skype clients (SC)
r
r
r
r
inerentemente P2P:
comunicação entre pares
de usuários.
protocolo proprietário da
camada de aplicação
(inferido através de
engenharia reversa)
overlay hierárquico com
SNs
Índice mapeia nomes dos
usuários a endereços IP;
distribuído através dos
SNs
Skype
login server
Supernode
(SN)
2: Application Layer
34
Pares como intermediários
(relays)
r
Problema quando tanto
Alice como Bob estão
atrás de “NATs”.
m
r
O NAT impede que um
par externo inicie uma
chamada com um par
interno
Solução:
m
m
m
Intermediário é escolhido,
usando os SNs de Alice e de
Bob.
Cada par inicia sessão com o
intermediário
Pares podem se comunicar
através de NATs através do
intermediário
2: Application Layer
35
Capítulo 2: Roteiro
r
r
r
r
r
2.1 Princípios de
aplicações de rede
2.2 A Web e o HTTP
2.3 Transferência de
arquivo: FTP
2.4 Correio Eletrônico
na Internet
2.5 DNS: o serviço de
diretório da Internet
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
r
2b: Camada de Aplicação
36
Programação com sockets
Meta: aprender a construir aplicações cliente/servidor
que se comunicam usando sockets
socket
API Sockets
uma interface (uma
r
r
r
r
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
m
m
datagrama não confiável
fluxo de bytes, confiável
“porta”), local ao
hospedeiro, criada por e
pertencente à aplicação, e
controlado pelo SO,
através da qual um
processo de aplicação
pode tanto enviar como
receber mensagens
para/de outro processo
de aplicação
(remoto ou local)
2b: Camada de Aplicação
37
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
desenvolvedor de
aplicação
controlado
pelo sistema
operacional
processo
processo
socket
TCP com
buffers,
variáveis
estação ou
servidor
internet
socket
TCP com
buffers,
variáveis
controlado pelo
desenvolvedor de
aplicação
controlado
pelo sistema
operacional
estação ou
servidor
2b: Camada de Aplicação
38
Programação com sockets usando TCP
Cliente deve contactar servidor r
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
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)
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
39
Comunicação entre sockets
2b: Camada de Aplicação
40
Jargão para Fluxo (Stream)
r
r
r
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
41
Programação com sockets usando TCP
2.
3.
4.
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
input
stream
Processo
Process
cliente
Fluxo de saída:
Seqüência de bytes
transmitidos pelo
processo
output
stream
monitor
Fluxo de entrada:
Seqüência de
bytes recebidos
pelo processo
inFromServer
1.
outToServer
Exemplo de apl. clienteservidor:
inFromUser
keyboard
input
stream
Socket
clientSocket
cliente TCP
to network
TCP
socket
from network
2b: Camada de Aplicação
42
Interações cliente/servidor usando o TCP
Servidor (executa em nomeHosp)
Cliente
cria socket,
porta=x, para
receber pedido:
socketRecepção =
ServerSocket ()
aguarda chegada de
setup
pedido de conexão
socketConexão =
socketRecepção.accept()
lê pedido de
socketConexão
escreve resposta
para socketConexão
fecha
socketConexão
TCP
da conexão
cria socket,
abre conexão a nomeHosp, porta=x
socketCliente =
Socket()
Envia pedido usando
socketCliente
lê resposta de
socketCliente
fecha
socketCliente
2b: Camada de Aplicação
43
Exemplo: cliente Java (TCP)
import java.io.*;
import java.net.*;
class ClienteTCP {
public static void main(String argv[]) throws Exception
{
String frase;
String fraseModificada;
Cria
fluxo de entrada
Cria
socket de cliente,
conexão ao servidor
Cria
fluxo de saída
ligado ao socket
BufferedReader doUsuario =
new BufferedReader(new InputStreamReader(System.in));
Socket socketCliente = new Socket(”nomeHosp", 6789);
DataOutputStream paraServidor =
new DataOutputStream(socketCliente.getOutputStream());
2b: Camada de Aplicação
44
Exemplo: cliente Java (TCP), cont.
Cria
fluxo de entrada
ligado ao socket
BufferedReader doServidor =
new BufferedReader(new
InputStreamReader(socketCliente.getInputStream()));
frase = doUsuario.readLine();
Envia linha
ao servidor
paraServidor.writeBytes(frase + '\n');
Lê linha
do servidor
fraseModificada = doServidor.readLine();
System.out.println(”Do Servidor: " + fraseModificada);
socketCliente.close();
}
}
2b: Camada de Aplicação
45
Exemplo: servidor Java (TCP)
import java.io.*;
import java.net.*;
class servidorTCP {
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
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()));
2b: Camada de Aplicação
46
Exemplo: servidor Java (TCP), cont
Cria fluxo
de saída, ligado
ao socket
DataOutputStream paraCliente =
new DataOutputStream(socketConexão.getOutputStream());
Lê linha
do socket
fraseCliente= doCliente.readLine();
fraseEmMaiusculas= fraseCliente.toUpperCase() + '\n';
Escreve linha
ao socket
paraCliente.writeBytes(fraseEmMaiusculas);
}
}
}
Final do laço while,
volta ao início e aguarda
conexão de outro cliente
2b: Camada de Aplicação
47
Capítulo 2: Roteiro
r
r
r
r
r
2.1 Princípios de
aplicações de rede
2.2 A Web e o HTTP
2.3 Transferência de
arquivo: FTP
2.4 Correio Eletrônico
na Internet
2.5 DNS: o serviço de
diretório da Internet
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
r
2b: Camada de Aplicação
48
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
ponto de vista da aplicação
UDP provê transferência
não confiável de grupos
de bytes (“datagramas”)
entre cliente e servidor
UDP: dados transmitidos
podem ser recebidos fora
de ordem, ou perdidos
2b: Camada de Aplicação
49
Interações cliente/servidor usando o UDP
Servidor (executa em nomeHosp)
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
Cliente
cria socket,
socketCliente =
DatagramSocket()
cria, endereça (nomeHosp, porta=x,
envia pedido em datagrama
usando socketCliente
lê resposta do
socketCliente
fecha
socketCliente
2b: Camada de Aplicação
50
Exemplo: Cliente Java (UDP)
UDP
2b: Camada de Aplicação
51
Exemplo: cliente Java (UDP)
import java.io.*;
import java.net.*;
Cria
fluxo de entrada
Cria
socket de cliente
Traduz nome de
hospedeiro ao
endereço IP
usando DNS
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();
2b: Camada de Aplicação
52
Exemplo: cliente Java (UDP) cont.
Cria datagrama com
dados para enviar,
comprimento,
endereço IP, porta
Envia datagrama
ao servidor
DatagramPacket pacoteEnviado =
new DatagramPacket(dadosEnvio, dadosEnvio.length,
IPAddress, 9876);
socketCliente.send(pacoteEnviado);
DatagramPacket pacoteRecebido =
new DatagramPacket(dadosRecebidos, dadosRecebidos.length);
Lê datagrama
do servidor
socketCliente.receive(pacoteRecebido);
String fraseModificada =
new String(pacoteRecebido.getData());
System.out.println(“Do Servidor:" + fraseModificada);
socketCliente.close();
}
}
2b: Camada de Aplicação
53
Servidor UDP
2b: Camada de Aplicação
54
Exemplo: servidor Java (UDP)
import java.io.*;
import java.net.*;
Cria socket
para datagramas
na porta 9876
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];
Aloca memória para
receber datagrama
Recebe
datagrama
while(true)
{
DatagramPacket pacoteRecebido =
new DatagramPacket(dadosRecebidos,
dadosRecebidos.length);
socketServidor.receive(pacoteRecebido);
2b: Camada de Aplicação
55
Exemplo: servidor Java (UDP), cont
String frase = new String(pacoteRecebido.getData());
Obtém endereço
IP, no. de porta
do remetente
InetAddress IPAddress = pacoteRecebido.getAddress();
int porta = pacoteRecebido.getPort();
String fraseEmMaiusculas = frase.toUpperCase();
dadosEnviados = fraseEmMaiusculas.getBytes();
Cria datagrama p/
enviar ao cliente
DatagramPacket pacoteEnviado =
new DatagramPacket(dadosEnviados,
dadosEnviados.length, IPAddress, porta);
Escreve
datagrama
no socket
socketServidor.send(pacoteEnviado);
}
}
}
Fim do laço while,
volta ao início e aguarda
chegar outro datagrama
2b: Camada de Aplicação
56
Capítulo 2: Roteiro
r
r
r
r
r
2.1 Princípios de
aplicações de rede
2.2 A Web e o HTTP
2.3 Transferência de
arquivo: FTP
2.4 Correio Eletrônico
na Internet
2.5 DNS: o serviço de
diretório da Internet
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
r
2b: Camada de Aplicação
57
Servidor Web Simples
r Funções do servidor Web:
m
m
m
m
m
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
58
Servidor Web Simples
Contém a classe
StringTokenizer que é
usada para examinar
o pedido
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
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());
2b: Camada de Aplicação
59
Servidor Web Simples, cont
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
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);
2b: Camada de Aplicação
60
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");
Transmissão do
cabeçalho da resposta
HTTP.
outToClient.write(fileInBytes, 0, numOfBytes);
connectionSocket.close();
}
else System.out.println("Bad Request Message");
}
}
2b: Camada de Aplicação
61
Capítulo 2: Resumo
Nosso estudo sobre aplicações de rede está agora
completo!
r
Arquiteturas de aplicações
m
m
m
r
r
cliente-servidor
P2P
híbrido
Requisitos de serviço das
aplicações:
m
r
Protocolos específicos:
m
m
m
m
r
HTTP
FTP
SMTP, POP, IMAP
DNS
Programação socket
confiabilidade, banda, atraso
Modelos de serviço de
transporte da Internet
m
m
orientado à conexão,
confiável: TCP
não confiável, datagramas:
UDP
2b: Camada de Aplicação
62
Capítulo 2: Resumo
Mais importante: aprendemos sobre protocolos
r
troca típica de mensagens
pedido/resposta
m
m
r
cliente solicita info ou serviço
servidor responde com dados,
código de status
formatos de mensagens:
m
m
cabeçalhos: campos com info
sobre dados (metadados)
dados: info sendo comunicada
r
r
r
r
r
msgs de controle vs. dados
m 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
63
Download