Title: Cap
1Capí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
2DNS 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
3DNS (cont.)
- 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!
- 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
4Base 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
5DNS 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
6Servidores 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
7Servidor 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.
8Exemplo de DNS
servidor raiz
2
- Hospedeiro em cis.poly.edu quer endereço IP para
gaia.cs.umass.edu
3
servidor TLD
4
5
6
7
1
8
servidor oficial dns.cs.umass.edu
solicitante cis.poly.edu
gaia.cs.umass.edu
9DNS tipos de consultas
servidor de nomes raiz
consulta interativa
- 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
servidor TLD
2
3
4
5
6
9
saell.cc.columbia.edu
consulta recursiva
7
8
1
10
servidor oficial cs.columbia.edu
solicitante manga.ic.uff.br
www.cs.columbia.edu
10DNS 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.h
tml
11Registros DNS
- DNS BD distribuído contendo registros de
recursos (RR)
- TipoCNAME
- nome é nome alternativo (alias) para algum nome
canônico (verdadeiro) - valor é o nome canônico
- TipoA
- nome é nome de hospedeiro
- valor é o seu endereço IP
- TipoNS
- nome é domínio (p.ex. foo.com.br)
- valor é endereço IP de servidor oficial de nomes
para este domínio
- TipoMX
- nome é domínio
- valor é nome do servidor de correio para este
domínio
12DNS 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
13DNS 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
14Inserindo 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?
15Capí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
16Compartilhamento 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.
17P2P 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
18P2P 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.
19Inundaçã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 lt 10
vizinhos na rede sobreposta
20Gnutella protocolo
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
Consulta
Item achado
Consulta
Consulta
Item achado
Consulta
Item achado
Escalabilidade Inundação com escopo limitado
Consulta
21Gnutella 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!
22Explorando 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
23KaZaA 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
24Truques 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
25Capí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
26Programação com sockets
Meta aprender a construir aplicações
cliente/servidor que se comunicam usando 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
27Programaçã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 peloprogramador de aplicação
controlado peloprogramador de aplicação
controladopelo sistemaoperacional
controladopelo sistemaoperacional
internet
estação ou servidor
estação ou servidor
28Programaçã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)
TCP provê transferência confiável, ordenada de
bytes (tubo) entre cliente e servidor
29Comunicação entre sockets
30Jargã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.
31Programaçã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
32Interações cliente/servidor usando o TCP
Servidor (executa em nomeHosp)
Cliente
33Exemplo 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
34Exemplo 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
35Exemplo 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
36Exemplo servidor Java (TCP), cont
DataOutputStream paraCliente
new DataOutputStream(socketConexão.getOut
putStream()) fraseCliente
doCliente.readLine()
fraseEmMaiusculas fraseCliente.toUpperCase()
'\n' paraClient.writeBytes(fraseEmMa
iusculas)
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
37Capí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
38Programaçã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
39Interações cliente/servidor usando o UDP
Servidor (executa em nomeHosp)
40Exemplo 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
41Exemplo 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 byte1024 byte
dadosRecebidos new byte1024 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
42Exemplo 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(p
acoteEnviado) DatagramPacket
pacoteRecebido new DatagramPacket(dado
sRecebidos, 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
43Servidor UDP
44Exemplo 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 byte1024 byte
dadosEnviados new byte1024
while(true)
DatagramPacket pacoteRecebido new
DatagramPacket(dadosRecebidos, dadosRecebidos.l
ength) socketServidor.receive(pacot
eRecebido)
Cria socket para datagramas na porta 9876
Aloca memória para receber datagrama
Recebe datagrama
45Exemplo servidor Java (UDP), cont
String frase new String(pacoteRecebid
o.getData()) InetAddress IPAddress
pacoteRecebido.getAddress() int
porta pacoteRecebido.getPort()
String fraseEmMaiusculas frase.toUpperCase()
dadosEnviados fraseEmMaiusculas.getB
ytes() 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
46Capí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
47Servidor 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.
48Servidor 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())
49Servidor 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)
50Servidor 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")
51Capítulo 2 Resumo
- Nosso estudo sobre aplicações de rede está agora
completo!
- Protocolos específicos
- HTTP
- FTP
- SMTP, POP, IMAP
- DNS
- Programação socket
- 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
52Capí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