Cap - PowerPoint PPT Presentation

1 / 52
About This Presentation
Title:

Cap

Description:

Title: Part I: Introduction Author: Don Towsley Last modified by: Luiz Magalhaes Created Date: 10/8/1999 7:08:27 PM Document presentation format: Apresenta o na tela – PowerPoint PPT presentation

Number of Views:66
Avg rating:3.0/5.0
Slides: 53
Provided by: DonT203
Category:
Tags: cap | gnutella

less

Transcript and Presenter's Notes

Title: Cap


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

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

3
DNS (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

4
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

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

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.

8
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
6
7
1
8
servidor oficial dns.cs.umass.edu
solicitante cis.poly.edu
gaia.cs.umass.edu
9
DNS 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
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.h
    tml

11
Registros 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

12
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

13
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
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?

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

16
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.

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

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.

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 lt 10
    vizinhos na rede sobreposta

20
Gnutella 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
21
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!

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

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

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

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

26
Programaçã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

27
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 peloprogramador de aplicação
controlado peloprogramador de aplicação
controladopelo sistemaoperacional
controladopelo sistemaoperacional
internet
estação ou servidor
estação ou servidor
28
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)

TCP provê transferência confiável, ordenada de
bytes (tubo) entre cliente e servidor
29
Comunicação entre sockets
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.

31
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
32
Interações cliente/servidor usando o TCP
Servidor (executa em nomeHosp)
Cliente
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())

Cria fluxo de entrada
Cria socket de cliente, conexão ao servidor
Cria fluxo de saída ligado ao socket
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()

Cria fluxo de entrada ligado ao socket
Envia linha ao servidor
Lê linha do servidor
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 socket para recepção na porta 6789
Aguarda, no socket para recepção, o contato do
cliente
Cria fluxo de entrada, ligado ao socket
36
Exemplo 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
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

38
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

39
Interações cliente/servidor usando o UDP
Servidor (executa em nomeHosp)
40
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
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 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
42
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(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
43
Servidor UDP
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 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
45
Exemplo 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
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

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.

48
Servidor Web Simples
import java.io. import java.net. import
java.util. class WebServer    public static
void main(String argv) throws Exception   
      String requestMessageLine       String
fileName       ServerSocket listenSocket new
ServerSocket(6789)       Socket connectionSocket
listenSocket.accept() BufferedReader
inFromClient          new BufferedReader(new
InputStreamReader(               
connectionSocket.getInputStream()))      
DataOutputStream outToClient          new
DataOutputStream(               
connectionSocket.getOutputStream())
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)
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")

51
Capí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

52
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
Write a Comment
User Comments (0)
About PowerShow.com