Redes de computadores e a Internet
Capítulo 2
Camada
de
aplicação
2
Camada de aplicação
• 2.1 Princípios de aplicações de rede
• 2.2 Web e HTTP
• 2.3 FTP
• 2.4 Correio electrônico
• SMTP, POP3, IMAP
• 2.5 DNS
• 2.6 Compartilhamento de arquivos P2P
• 2.7 Programação de socket com TCP
• 2.8 Programação de socket com UDP
• 2.9 Construindo um servidor Web
© 2005 by Pearson Education
2-2
2
Comunicação de processos
Processo: programa executando num hospedeiro
• Dentro do mesmo hospedeiro: dois processos se comunicam usando
comunicação interprocesso (definido pelo OS)
• Processos em diferentes hospedeiros se comunicam por meio de troca
de mensagens
• Processo cliente: processo que inicia a comunicação
• Processo servidor: processo que espera para ser contatado
Nota: aplicações com arquiteturas P2P possuem processos cliente
e processos servidor no mesmo hospedeiro
© 2005 by Pearson Education
2 - 11
2
Sockets
• Um processo envia/recebe
mensagens para/de seu socket
• O socket é análogo a uma
porta
• O processo de envio empurra
a mensagem para fora da
porta, confiando na infraestrutura de transporte no
outro lado da porta que leva
a mensagem para o socket no
processo de recepção.
• API (application programming interface): (1) escolha do protocolo de
transporte; (2) determinação de alguns parâmetros (tamanhos máximos
de buffer e segmento, marcação de QoS, etc)
© 2005 by Pearson Education
2 - 12
2
Processos de endereçamento
• Um hospedeiro possui um único endereço IP de 32 bits por interface de
rede e pode hospedar vários processos
•
Endereço IP é exclusivo
• Para endereçar um processo de forma exclusiva usa-se um
identificador que inclui o endereço IP e o número da porta associada
ao processo no hospedeiro
•
Portas conhecidas e reservadas IANA — Internet Assigned Numbers
Authority
• Servidor HTTP: 80
• Servidor de Correio: 25
• (mais detalhes serão mostrados mais tarde)
© 2005 by Pearson Education
2 - 13
2
Aplicação e protocolos de transporte da Internet
Aplicação
e-mail
acesso de terminais remotos
Web
transferência de arquivos
streaming multimídia
servidor de arquivos remoto
telefonia Internet
© 2005 by Pearson Education
Protocolo de
aplicação
Protocolo de
transporte
smtp [RFC 821]
telnet [RFC 854]
http [RFC 2068]
ftp [RFC 959]
RTP ou proprietário
(ex.: RealNetworks)
NSF
RTP ou proprietário
(ex.: Vocaltec)
TCP
TCP
TCP
TCP
TCP ou UDP
2 - 19
TCP ou UDP
tipicamente UDP
2
Camada de aplicação
• 2.1 Princípios de aplicações de rede
• 2.2 Web e HTTP
• 2.3 FTP
• 2.4 Correio electrônico
• SMTP, POP3, IMAP
• 2.5 DNS
• 2.6 Compartilhamento de arquivos P2P
• 2.7 Programação de socket com TCP
• 2.8 Programação de socket com UDP
• 2.9 Construindo um servidor Web
© 2005 by Pearson Education
2 - 20
2
Web e HTTP
Primeiro alguns jargões
• Página Web consiste de objetos
• Objeto pode ser arquivo HTML, imagem JPEG, Java applet, arquivo
de áudio,…
• A página Web consiste de arquivo-HTML base que inclui vários
objetos referenciados
• Cada objeto é endereçado por uma URL (universal resource locator)
• Exemplo de URL:
www.someschool.edu/someDept/pic.gif
Nome do caminho
Nome do hospedeiro
© 2005 by Pearson Education
2 - 21
2
Visão geral do HTTP
HTTP: hypertext transfer protocol
• Protocolo da camada de aplicação
da Web
• Modelo cliente/servidor
• Cliente: browser que solicita,
recebe e apresenta objetos da Web
• Servidor: envia objetos em
resposta a pedidos
• HTTP 1.0: RFC 1945
• HTTP 1.1: RFC 2616, jun/1999
(obsoleta RFC 2068),
atualizada pela RFC 2817 (uso de
transporte seguro TLS com HTTP)
© 2005 by Pearson Education
2 - 22
2
Visão geral do HTTP
Utiliza TCP:
• Cliente inicia conexão TCP (cria socket) para o servidor na porta 80
• Servidor aceita uma conexão TCP do cliente
• Mensagens HTTP (mensagens do protocolo de camada de aplicação) são
trocadas entre o browser (cliente HTTP) e o servidor Web (servidor HTTP)
• A conexão TCP é fechada
HTTP é “stateless”
• O servidor não mantém informação sobre os pedidos passados dos clientes
Protocolos que mantêm informações de “estado” são complexos!
• Histórico do passado (estado) deve ser mantido
• Se o servidor/cliente quebra, suas visões de “estado” podem ser
inconsistentes, devendo ser reconciliadas
© 2005 by Pearson Education
2 - 23
2
Conexões HTTP
HTTP não persistente
• No máximo, um objeto é enviado sobre uma conexão TCP
• O HTTP/1.0 utiliza HTTP não persistente
HTTP persistente
• Conexão é mantida e permite que múltiplos objetos possam ser enviados
• TCP entre o cliente e o servidor
• O HTTP/1.1 utiliza conexões persistentes em seu modo padrão
© 2005 by Pearson Education
2 - 24
2
HTTP não persistente
(contém texto,referências a 10 imagens jpeg)
www.someSchool.edu/someDepartment/home.index
Usuário entra com a URL:
1a. Cliente HTTP inicia conexão
TCP ao servidor HTTP
(processo) em
www.someSchool.edu. Porta
80 é a default para o servidor
HTTP.
2. Cliente HTTP envia HTTP request
message (contendo a URL) para
o socket da conexão TCP
Tempo
© 2005 by Pearson Education
2 - 25
1b. Servidor HTTP no hospedeiro
www.someSchool.edu
esperando pela conexão TCP na
porta 80. “Aceita” conexão,
notificando o cliente
3. Servidor HTTP recebe mensagem
de pedido, forma response
message contendo o objeto
solicitado
(someDepartment/home.index),
envia mensagem para o socket
2
HTTP não persistente
4. Servidor HTTP fecha conexão
TCP.
Tempo
5. Cliente HTTP recebe
mensagem de resposta
contendo o arquivo html,
apresenta o conteúdo html.
Analisando o arquivo html,
encontra 10 objetos jpeg
referenciados
6. Passos 1-5 são repetidos para
cada um dos 10 objetos jpeg.
© 2005 by Pearson Education
2 - 26
2
Modelagem do tempo de resposta
Definição de RRT: tempo para
enviar um pequeno pacote
que vai do cliente para o
servidor e retorna.
Tempo de resposta:
• Um RTT para iniciar (abrir)
a conenexão TCP
• Um RTT para requisição
HTTP e primeiros bytes da
resposta HTTP para
retorno
• Tempo de transmissão de
arquivo
Total = 2RTT+ tempo de transmissão do arquivo
© 2005 by Pearson Education
2 - 27
2
HTTP persistente
Características do HTTP não-persistente:
• Requer 2 RTTs por objeto
• SO deve manipular e alocar recursos do hospedeiro para cada conexão TCP
Mas os browsers freqüentemente abrem conexões TCP paralelas para
buscar objetos referenciados
HTTP persistente
• Servidor deixa a conexão aberta após enviar uma resposta
• Mensagens HTTP subseqüentes entre o mesmo cliente/servidor são
enviadas pela conexão
Persistente sem pipelining (paralelismo):
• O cliente emite novas requisições apenas quando a resposta anterior for
recebida
• Um RTT para cada objeto referenciado
Persistente com pipelining (paralelismo):
• Padrão no HTTP/1.1
• O cliente envia requisições assim que encontra um objeto referenciado
• Tão pequeno como um RTT para todos os objetos referenciados
© 2005 by Pearson Education
2 - 28
2
Mensagem HTTP request
• HTTP request message:
• ASCII (formato legível para humanos)
Linha de requisição
(método, URL, versão)
GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
Linhas de Connection: close
cabeçalho User-agent: Mozilla/4.0
Accept: text/html,image/gif,image/jpeg
Accept-language:fr
Carriage return,
line feed
(extra carriage return, line feed)
indica fim da mensagem
© 2005 by Pearson Education
2 - 29
2
Mensagem HTTP request: formato geral
© 2005 by Pearson Education
2 - 30
2
Tipos de métodos
HTTP/1.0
• GET
• Requisita objeto
• POST
• Fornece dados de entrada para localizar página
• HEAD
• Pede para o servidor deixar o objeto requisitado fora da resposta
HTTP/1.1
• GET, POST, HEAD
• PUT
• Envia o arquivo no corpo da entidade para o caminho especificado
no campo de URL
• DELETE
• Apaga o arquivo especificado no campo de URL
© 2005 by Pearson Education
2 - 31
2
Entrada de formulário
Método Post:
• Apresenta ao servidor os dados de entrada de formulário no corpo da
entidade, o que influencia o objeto a ser retornado
Método URL:
• Utiliza o método GET
• A entrada é enviada no campo de URL da linha de requisição:
www.somesite.com/animalsearch?monkeys&banana
© 2005 by Pearson Education
2 - 32
2
Mensagem HTTP response
Linha de status
(protocolo
código de status
frase de status)
Linhas de
cabeçalho
HTTP/1.0 200 OK
Date: Thu, 06 Aug 1998 12:00:15 GMT
Server: Apache/1.3.0 (Unix)
Last-Modified: Mon, 22 Jun 1998 …...
Content-Length: 6821
Content-Type: text/html
data data data data data ...
Dados, ex.:
arquivo html
© 2005 by Pearson Education
2 - 33
2
Códigos de status das respostas
Na primeira linha da mensagem de resposta servidor cliente.
Alguns exemplos de códigos:
200 OK
• Requisição bem-sucedida, objeto requisitado a seguir nesta mensagem
301 Moved permanently
• Objeto requisitado foi movido, nova localização especificada a seguir nesta
mensagem (Location:)
400 Bad request
• Mensagem de requisição não compreendida pelo servidor
404 Not Found
• Documento requisitado não encontrado neste servidor
505 HTTP version not supported
© 2005 by Pearson Education
2 - 34
2
Estado usuário-servidor: cookies
A maioria dos grandes Web sites utilizam cookies para monitorar os seus
usuários (RFC 2109)
Quatro componentes:
1) Linha de cabeçalho do cookie na mensagem HTTP response
2) Linha de cabeçalho de cookie na mensagem HTTP request
3) Arquivo de cookie mantido no hospedeiro do usuário e manipulado pelo
browser do usuário
4) Banco de dados backend no Web site
Exemplo:
• Susan acessa a Internet sempre do mesmo PC
• Ela visita um site específico de e-commerce pela primeira vez
• Quando a requisição HTTP inicial chega ao site, este cria um ID único e
uma entrada no banco de dados backend para este ID
© 2005 by Pearson Education
2 - 36
Servidor
Cliente
Cookie file
amazon: 1678
ebay: 8734
usual HTTP request msg
usual HTTP response +
Set-cookie: 1678
usual HTTP request msg
cookie: 1678
especificação
do cookie
usual HTTP response msg
Uma semana depois:
Cookie file
amazon: 1678
ebay: 8734
© 2005 by Pearson Education
usual HTTP request msg
cookie: 1678
usual HTTP response msg
2 - 37
sso
ace
o
Cookie file
ebay: 8734
en
de trad
servidor
da a n
do o
cria o ID 1678
s b ba
a c nc
para o usuário
ke o
nd
ac
es
s
2
Cookies: mantendo “estado”
especificação
do cookie
2
Cookies
O que os cookies podem trazer:
• Autorização
• Cartões de compra
• Recomendações
• Estado de sessão do usuário (Web e-mail)
ASIDE
Cookies e privacidade:
• Cookies permitem que sites saibam muito sobre você
• Você pode fornecer nome e e-mail para os sites
• Mecanismos de busca usam redirecionamento e cookies para saberem mais
sobre você
• Companhias de propaganda obtêm informações por meio dos sites
© 2005 by Pearson Education
2 - 38
2
Web caches (proxy server)
Objetivo: atender o cliente sem envolver o servidor Web
originador da informação
• Usuário configura o browser:
acesso Web é feito por meio de
um proxy
• Cliente envia todos os pedidos
HTTP para o Web cache
• Se o objeto existe no Web
cache: Web cache retorna o
objeto
• Ou o Web cache solicita
objeto do servidor original
e então envia o objeto ao
cliente
© 2005 by Pearson Education
2 - 39
2
Mais sobre Web caching
• O cache atua tanto no servidor como no cliente
• Tipicamente, o cache é instalado pelo ISP (universidade, companhia,
ISP residencial)
Por que Web caching?
• Reduz o tempo de resposta para a requisição do cliente.
• Reduz o tráfego num enlace de acesso de uma instituição.
• A densidade de caches na Internet habilita os “fracos” provedores de
conteúdo a efetivamente entregarem o conteúdo (mas fazendo P2P
file sharing)
© 2005 by Pearson Education
2 - 40
2
Exemplo de caching
Suponha:
• Tamanho médio objeto = 100.000 bits
• Taxa média de requisições dos
browsers da instituição para os
servidores de origem = 15/s
• Atraso do roteador institucional para
ir a qualquer servidor de origem e
retornar ao roteador = 2 s
Conseqüências:
• Utilização da LAN = 15%
• Utilização do link de acesso = 100%
• Atraso total = atraso da Internet +
atraso de acesso + atraso da LAN = 2
segundos + minutos + milissegundos
© 2005 by Pearson Education
2 - 41
2
Exemplo de caching
Solução possível
• Aumentar a taxa do enlace de
acesso, para 10 Mbps p.ex.
Conseqüências
• Utilização da LAN = 15%
• Utilização do enlace de acesso
= 15%
• Atraso total = atraso da
Internet + atraso de acesso +
atraso da LAN = 2 segundos +
? ms + ? ms
• Freqüentemente é um
upgrade caro
© 2005 by Pearson Education
10 Mbps
2 - 42
2
Exemplo de caching
Instalação do cache
• Suponha taxa de acertos de 40%
Conseqüência
• 40% das requisições serão satisfeitas
quase que imediatamente
• 60% das requisições serão satisfeitas pelo
servidor de origem
• Utilização do enlace de acesso reduzida
para 60%, resultando em atrasos
insignificantes (como 10 ms)
• Média de atraso total = atraso da
Internet + atraso de acesso + atraso da
LAN = (0.6)*(2.01) segundos + (0,4) *ms
< 1,4 segundos
© 2005 by Pearson Education
2 - 43
2
GET condicional
Servidor
Cliente
• Razão: não enviar objeto se
a versão que o cliente já
possui está atualizada.
HTTP request msg
If-modified-since:
<date>
• Cliente: especifica data da
versão armazenada no
pedido HTTP
• If-modified-since: <date>
HTTP response
HTTP/1.0
304 Not Modified
• Servidor: resposta não
contém objeto se a cópia é
atualizada:
HTTP/1.0 304 Not Modified
HTTP request msg
If-modified-since:
<date>
HTTP response
HTTP/1.1 200 OK
<data>
© 2005 by Pearson Education
2 - 44
Objeto
não
modificado
Objeto
modificado
2
Camada de aplicação
• 2.1 Princípios de aplicações de rede
• 2.2 Web e HTTP
• 2.3 FTP
• 2.4 Correio electrônico
• SMTP, POP3, IMAP
• 2.5 DNS
• 2.6 Compartilhamento de arquivos P2P
• 2.7 Programação de socket com TCP
• 2.8 Programação de socket com UDP
• 2.9 Construindo um servidor Web
© 2005 by Pearson Education
2 - 45
2
FTP: o protocolo de transferência de arquivos
• Transferência de arquivos envolvendo o computador remoto
• Modelo cliente servidor
• Cliente: lado que inicia a transferência (para o recebimento ou envio de arquivos)
• Servidor: hospedeiro remoto
• FTP: RFC 959
• Extensões e atualizações: RFC2228, RFC2640, RFC2773, RFC3659
• FTP servidor: porta 21
© 2005 by Pearson Education
2 - 46
2
FTP: controle separado, conexões de dados
• Ações do cliente FTP
• Contata o servidor FTP na porta TCP/21 para abrir conexão de controle
• Autenticação do cliente ocorre pela conexão de controle
• Seleciona o diretório remoto enviando comandos pela conexão de controle
• Ações do servidor FTP
• Quando recebe um comando para uma transferência de arquivo, abre uma conexão
de dados TCP para o cliente
• Após a transferência de um arquivo, o servidor fecha a conexão
• Servidor abre uma segunda conexão de dados TCP para transferir outro arquivo
• Conexão de controle: “fora da banda”
• Servidor FTP mantém “estado”: diretório atual, autenticação anterior
© 2005 by Pearson Education
2 - 47
2
FTP comandos, respostas
Exemplos de comandos
• Enviados como um texto ASCII sobre canal de controle
•
•
•
•
•
USER username
PASS password
LIST retorna listagem do arquivo no diretório atual
RETR filename recupera (obtém) o arquivo
STOR filename armazena o arquivo no hospedeiro remoto
Exemplos de códigos de retorno
• Código de status e frase (como no HTTP)
•
•
•
•
331
125
425
452
Username OK, password required
data connection already open; transfer starting
Can’t open data connection
Error writing file
© 2005 by Pearson Education
2 - 48
2
Extensões do FTP
• Extensions to FTP (RFC 3659, Mar/07)
–
–
–
–
Listagem de diretórios remotos em formato específico
Reinicialização de interrupção de transferência de dados em modo STREAM
Uso de códigos de caracteres diferentes de ASCII
Define uma estrutura opcional de armazenamento virtual de arquivos (NVFS)
• Novos comandos
– REST (Restart)
– SIZE
• Número de bytes que seriam transferidos no formato atual do arquivo
– MDTM (MODIFICATION TIME)
• Saber quando arquivo no NVFS (network virtual file system) foi modificado,
para identificar segurança ao recomeçar transferências interrompidas, por
exemplo.
– MLST e MLSD (Machine Listing )
• Lista diretórios
© 2005 by Pearson Education
2 - 49
2
Camada de aplicação
• 2.1 Princípios de aplicações de rede
• 2.2 Web e HTTP
• 2.3 FTP
• 2.4 Correio electrônico
• SMTP, POP3, IMAP
• 2.5 DNS
• 2.6 Compartilhamento de arquivos P2P
• 2.7 Programação de socket com TCP
• 2.8 Programação de socket com UDP
• 2.9 Construindo um servidor Web
© 2005 by Pearson Education
2 - 50
2
Correio eletrônico
Três componentes principais:
• Agentes de usuário
• Servidores de correio
• Simple mail transfer protocol: SMTP
Agente de usuário
•“leitor de correio”
• Composição, edição, leitura de
mensagens de correio
• Ex.: Eudora, Outlook, elm, Netscape
Messenger
• Mensagens de entrada e de saída são
armazenadas no servidor
© 2005 by Pearson Education
2 - 51
2
Correio eletrônico: servidores de correio
Servidores de correio
• Caixa postal contém mensagens
que chegaram (ainda não lidas)
para o usuário
• Fila de mensagens contém as
mensagens de correio a serem
enviadas
Protocolo SMTP permite aos
servidores de correio trocarem
mensagens entre si
• Cliente: servidor de correio
que envia
• Servidor: servidor de
correio que recebe
© 2005 by Pearson Education
2 - 52
2
Correio eletrônico: SMTP [RFC 821]
• Usa TCP/porta 25 persistente para transferência confiável de
mensagens de correio do cliente ao servidor
• Transferência direta: servidor que envia para o servidor que recebe
• Três fases de transferência
• Handshaking (apresentação)
• Transferência de mensagens
• Fechamento
• Interação comando/resposta
• Comandos: texto ASCII
• Resposta: código de status e frase
• Mensagens devem ser formatadas em código ASCII de 7 bits
© 2005 by Pearson Education
2 - 53
2
Cenário: Alice envia mensagem para Bob
1) Alice usa o agente de usuário (UA) para compor a mensagem “para”
[email protected]
2) O agente de usuário dela envia a mensagem para o seu servidor de correio; a
mensagem é colocada na fila de mensagens.
3) O lado cliente do SMTP abre uma conexão TCP com o servidor de correio do Bob.
4) O cliente SMTP envia a mensagem de Alice pela conexão TCP.
5) O servidor de correio de Bob coloca a mensagem na caixa de correio de Bob.
6) Bob invoca seu agente de usuário para ler a mensagem.
© 2005 by Pearson Education
2 - 54
2
Exemplo de interação SMTP
S:
C:
S:
C:
S:
C:
S:
C:
S:
C:
C:
C:
S:
C:
S:
220 hamburger.edu
HELO crepes.fr
250 Hello crepes.fr, pleased to meet you
MAIL FROM: <[email protected]>
250 [email protected]... Sender ok
RCPT TO: <[email protected]>
250 [email protected] ... Recipient ok
DATA
354 Enter mail, end with "." on a line by itself
Do you like ketchup?
How about pickles?
.
250 Message accepted for delivery
QUIT
221 hamburger.edu closing connection
© 2005 by Pearson Education
2 - 55
2
SMTP: palavras finais
• SMTP usa conexões persistentes
• SMTP exige que as mensagens (cabeçalho e corpo) estejam em ASCII de 7 bits
• Servidor SMTP usa CRLF.CRLF para indicar o final da mensagem
Comparação com HTTP:
• HTTP permite receber (pull) enquanto E-mail só envia (push)
• Ambos usam comandos e respostas em ASCII, interação comando/resposta e
códigos de status
• HTTP: cada objeto encapsulado na sua própria mensagem de resposta
• SMTP: múltiplos objetos são enviados numa mensagem multiparte
© 2005 by Pearson Education
2 - 57
2
Formato da mensagem de correio
header
SMTP: protocolo para trocar
mensagens de e-mail
RFC 822: padrão para mensagens
do tipo texto:
• linhas de cabeçalho, ex.:
– To:
– From:
– Subject:
diferente dos comandos
HTTP
• corpo
– a “mensagem”, somente
com caracteres ASCII
© 2005 by Pearson Education
body
2 - 58
linha
em branco
2
Formato das mensagens: extensões multimídia
• MIME: multimedia mail extension, RFC 2045, 2056
• Linhas adicionais no cabeçalho declaram o tipo de conteúdo MIME
Versão da MIME
Método usado para
codificar dados em ASCII
Dados multimídia
tipo, subtipo,
declaração de parâmetro
From: [email protected]
To: [email protected]
Subject: Picture of yummy crepe.
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Type: image/jpeg
base64 encoded data .....
.........................
......base64 encoded data
Dados codificados
© 2005 by Pearson Education
2 - 59
2
Protocolos de acesso ao correio
• SMTP: entrega e armazena no servidor do destino
• Protocolo de acesso: recupera mensagens do servidor
• POP: Post Office Protocol [RFC 1939]
• Autorização em claro (agente <-->servidor) e download
• IMAP: Internet Mail Access Protocol [RFC 3501]
• Maiores recursos (mais complexo)
• Manipulação de mensagens armazenadas no servidor
• HTTP: Hotmail , Yahoo! Mail etc.
© 2005 by Pearson Education
2 - 60
2
Protocolo POP3
Cliente abre conexão TCP/110 ao
servidor
Fase de autorização
• comandos do cliente:
• user: declara nome do usuário
• pass: password (em claro)
respostas do servidor
• +OK
• -ERR
Fase de transação
Comandos do cliente:
• list: lista mensagens e
tamanhos
• retr: recupera msg pelo número
• dele: marca para apagar
• quit
Fase de update
Deleta msgs no servidor após quit
© 2005 by Pearson Education
2 - 61
S: +OK POP3 server ready
C: user alice
S: +OK
C: pass hungry
S: +OK user successfully
logged on
C:
S:
S:
S:
C:
S:
S:
C:
C:
S:
S:
C:
C:
S:
list
1 498
2 912
.
retr 1
<message 1 contents>
.
dele 1
retr 2
<message 2 contents>
.
dele 2
quit
+OK POP3 server signing off
2
POP3 (mais) e IMAP
Mais sobre POP3
•O exemplo anterior usa o modo ler-e-apagar (“download-and-delete”)
•
Bob não pode reler o e-mail se ele trocar o cliente
•Poderia usar o modo ler-e-guardar (“download-and-keep”)
•
Permite manter cópias das mensagens em clientes diferentes
• POP3 é stateless através das sessões (simplifica implementação)
IMAP
• Mantém todas as mensagens em um lugar: o servidor
• Permite que o usuário organize as mensagens em pastas
• Permite que o usuário baixe partes de uma mensagem multiparte
•
Útil quando opera sobre conexões lentas
• IMAP mantém o estado do usuário através das sessões
• Nomes em pastas e mapeamentos entre as identificações das
mensagens (ID) e as pastas
© 2005 by Pearson Education
2 - 62
2
Camada de aplicação
• 2.1 Princípios de aplicações de rede
• 2.2 Web e HTTP
• 2.3 FTP
• 2.4 Correio electrônico
• SMTP, POP3, IMAP
• 2.5 DNS
• 2.6 Compartilhamento de arquivos P2P
• 2.7 Programação de socket com TCP
• 2.8 Programação de socket com UDP
• 2.9 Construindo um servidor Web
© 2005 by Pearson Education
2 - 63
2
DNS: Dominain Name System
Pessoas: muitos identificadores:
• RG, nome, passaporte
Internet hospedeiros, roteadores:
• Endereços IP (32 bits) - usados para endereçar datagramas
• “nome”, ex.: gaia.cs.umass.edu - usados por humanos
P.: Como relacionar nomes com endereços IP?
Domain Name System:
• Base de dados distribuída implementada numa hierarquia de muitos
servidores de nomes
• Protocolo de camada de aplicação do hospedeiro
• Roteadores se comunicam com servidores de nomes para resolver nomes
(translação nome/endereço)
• Nota: função interna da Internet, implementada como protocolo da
camada de aplicação
• Complexidade na “borda” da rede
© 2005 by Pearson Education
2 - 64
2
DNS
Serviços do DNS
• Tradução do nome do hospedeiro para o endereço IP
• Hospedeiro aliasing
• Nomes canônicos e alias
mail server aliasing
distribuição de carga
• Servidores Web replicados: estabelece o endereço IP para um nome canônico
Por que não centralizar o DNS?
• Geraria ponto único de falha
• Alto volume de tráfego
• Base centralizada de dados pode estar muito distante do usuário, causando
ineficiência
• Manutenção da base complicada, pois mapeamentos são criados de forma
distribuída
Não é escalável!
© 2005 by Pearson Education
2 - 65
2
Base de dados distribuída, hierárquica
Cliente quer o IP para www.amazon.com; 1a aprox.:
• Cliente consulta um servidor de raiz para encontrar o servidor DNS com
• Cliente consulta o servidor DNS com para obter o servidor DNS com autoridade
para responder pelos mapeamentos do dominio amazon.com
• Cliente consulta o servidor DNS amazon.com para obter o endereço IP para
www.amazon.com
© 2005 by Pearson Education
2 - 66
2
DNS: servidores de nomes raiz
• São contatados pelos servidores de nomes locais quando estes não podem
resolver um nome
• Servidores de nomes raiz:
• Buscam servidores de nomes com autoridade, se o mapeamento do nome
não for conhecido
• Conseguem o mapeamento
• Retornam o mapeamento para o servidor de nomes local
Até 2004, 13 servidores
raiz.
© 2005 by Pearson Education
2 - 67
2
•
•
•
Servidores Raiz
13 nomes de servidores raiz especificados na forma letra.root-servers.net, onde letra varia de A a M.
Seis desses não são servidores únicos, mas vários servidores físicos distribuídos geograficamente
Letra IP address
Nome antigo
Localização do Operador
–
–
–
–
–
–
–
–
–
–
–
–
–
•
ns.internic.net
ns1.isi.edu
c.psi.net
terp.umd.edu
ns.nasa.gov
ns.isc.org
ns.nic.ddn.mil
aos.arl.army.mil
nic.nordu.net
VeriSign
RIPE NCC
ICANN
WIDE Project
VeriSignDulles, Virginia, U.S.BIND
USC-ISIMarina Del Rey, California, U.S.BIND
Cogent Communicationsdistributed using anycastBIND
University of MarylandCollege Park, Maryland, U.S.BIND
NASAMountain View, California, U.S.BIND
ISCdistributed using anycastBIND
Defense Information Systems AgencyColumbus, Ohio, U.S.BIND
U.S. Army Research Lab, Maryland, U.S.NSD
Autonomicadistributed using anycastBIND
distributed using anycastBIND
distributed using anycastNSD
Los Angeles, California, U.S.NSD
distributed using anycastBIND
Não podem ser usados mais nomes devido a limitações de protocolo
–
–
•
A 198.41.0.4
B 192.228.79.201
C 192.33.4.12
D 128.8.10.90
E 192.203.230.10
F 192.5.5.241
G 192.112.36.4
H 128.63.2.53
I 192.36.148.17
J 192.58.128.30
K 193.0.14.129
L 198.32.64.12
M 202.12.27.33
UDP carrega apenas 512 bytes de maneira confiável e um arquivo com mais de 13 nomes de servidores seria maior
que 512 bytes
Os servidores C, F, I, J, K e M agora existem em múltiplas localidades em diferentes continentes usando anúncios
ANYCAST para prover um serviço distribuído.
Para DNS alternativos consulte Alternative DNS root .
© 2005 by Pearson Education
2 - 68
2
Servidores Raiz
• Setembro/2007: 117 servidores raiz, operados por 12 diferentes
organizações
© 2005 by Pearson Education
2 - 69
2
Servidores TLD e com autoridade
Servidores top-level domain (TLD): responsáveis pelos domínios com,
org, net, edu etc e todos os domínios top-level nacionais uk, fr, ca, jp.
Servidores DNS com autoridade (authoritative): hospedam o
mapeamento de nomes para endereço IP dos hospedeiros de uma
organização que podem ser acessados publicamente (ex.: servidor Web
e servidor de correio).
• Podem ser mantidos por uma organização ou provedor de serviços
© 2005 by Pearson Education
2 - 70
2
Servidor de nomes local
• Quando um hospedeiro precisa resolver um
nome/domínio, a pergunta é enviada para seu
servidor DNS local
• Age como um proxy, encaminhando as perguntas para
dentro da hierarquia
• Não pertence estritamente a uma hierarquia
• Cada ISP residencial, companhia ou universidade
possui um, chamado de “servidor de nomes default”
© 2005 by Pearson Education
2 - 71
2
Exemplo
• O hospedeiro em cis.poly.edu quer o
endereço IP para gaia.cs.umass.edu
© 2005 by Pearson Education
2 - 72
2
Consultas recursivas
Consulta recursiva:
• Transfere a tarefa de
resolução do nome para o
servidor de nomes
consultado
• Carga pesada?
recursiva
recursiva
recursiva
Consulta iterativa:
• Servidor contatado
recursiva
responde com o nome de
outro servidor de nomes
para contato
• “eu não sei isto, mas
pergunte a este servidor”
• Normalmente recursiva ao
DNS Local e iterativa aos
outros níveis
© 2005 by Pearson Education
2 - 73
2
DNS: armazenando e atualizando registros
• Uma vez que um servidor de nomes apreende um mapeamento,
ele armazena o mapeamento num registro do tipo cache
• Registros no cache tornam-se obsoletos depois de um certo tempo
• Servidores TLD são tipicamente armazenados em cache nos
servidores de nome locais
Mecanismos de atualização e notificação estão sendo projetados
pelo IETF
• http://www.ietf.org/html.charters/dnsext-charter.html
© 2005 by Pearson Education
2 - 74
2
Registros do DNS
DNS: base de dados distribuída que armazena registros de recursos (RR)
formato dos RR: (name, value, type, ttl)
• Type = A
• name é o nome do hospedeiro
• value é o endereço IP
• Type = CNAME
• name é um “apelido” para algum nome
“canônico” (possui registro A) em value
www.ibm.com é realmente
servereast.backup2.ibm.com
• Type = NS
• name é um domínio (ex.:
foo.com)
• value é o nome do servidor de
nomes com autoridade para
este domínio
• Type = MX
• value é o nome do servidor de correio
associado com name
© 2005 by Pearson Education
2 - 75
2
DNS: protocolo e mensagem
Protocolo DNS: mensagem de consulta e resposta , ambas com o mesmo
formato de mensagem
32 bits
Cabeçalho da msg
• Identificação: 16 bits
(consulta e resposta usam
o mesmo valor)
• Flags:
• Consulta ou resposta
• Recursão desejada
• Recursão disponível
• Resposta é autorizada
© 2005 by Pearson Education
2 - 76
2
Inserindo registros no DNS
• Exemplo: empresa recém-criada “Network Utopia”
• Registrar o nome networkuptopia.com num “registrar” (ex.: Network
Solutions)
• É necessário fornecer ao registrar os nomes e endereços IP dos seus
servidores de nomes autorizados (primário e secundário)
• Registrar insere dois RRs no servidor TLD do domínio com:
(networkutopia.com, dns1.networkutopia.com, NS)
(dns1.networkutopia.com, 212.212.212.1, A)
• No servidor com autoridade, inserir um registro Tipo A para
www.networkuptopia.com e um registro Tipo MX para networkutopia.com
• DNS pode ser configurado estaticamente ou através de comando UPDATE
• Como as pessoas obtêm o endereço IP do seu Web site?
• nslookup
© 2005 by Pearson Education
2 - 77
2
Leitura adicional sobre DNS
• Geographic Implications of DNS Infrastructure
Distribution (Cisco Internet Protocol Journal)
– http://www.cisco.com/web/about/ac123/ac147/archived
_issues/ipj_10-1/101_dns-infrastructure.html
© 2005 by Pearson Education
2 - 78
2
Camada de aplicação
• 2.1 Princípios de aplicações de rede
• 2.2 Web e HTTP
• 2.3 FTP
• 2.4 Correio electrônico
• SMTP, POP3, IMAP
• 2.5 DNS
• 2.6 Compartilhamento de arquivos P2P
• 2.7 Programação de socket com TCP
• 2.8 Programação de socket com UDP
• 2.9 Construindo um servidor Web
© 2005 by Pearson Education
2 - 79
2
Compartilhamento de arquivos P2P
Exemplo
• Alice executa a aplicação cliente P2P em seu notebook
• Intermitentemente, conecta-se à Internet; obtém novos endereços IP para
cada conexão
• pede por “Hey Jude”
• a aplicação exibe outros pares que possuem uma cópia de Hey Jude.
• Alice escolhe um dos pares, Bob.
• o arquivo é copiado do PC de Bob para o notebook de Alice: HTTP
• enquanto Alice faz o download, outros usuários fazem upload de Alice.
• o par de Alice é tanto um cliente Web como um servidor Web transiente.
Todos os pares são servidores = altamente escaláveis!
© 2005 by Pearson Education
2 - 80
2
P2P: diretório centralizado
Projeto original “Napster”
1) Quando um parceiro se conecta,
ele informa ao servidor central:
• Endereço IP
• Conteúdo
2) Alice procura por “Hey Jude”
3) Alice requisita o arquivo de Bob
© 2005 by Pearson Education
2 - 81
2
P2P: problemas com diretório centralizado
• Ponto único de falhas
• Gargalo de desempenho
• Infração de copyright
Transferência de arquivo é descentralizada, mas a localização de
conteúdo é altamente centralizado
© 2005 by Pearson Education
2 - 82
2
Query flooding: Gnutella
• Totalmente distribuído, sem servidor central
• Protocolo de domínio público
• Muitos clientes Gnutella implementando o protocolo
Rede de cobertura: gráfico
• Aresta entre parceiros X e Y se há uma conexão TCP entre eles
• Todos os pares ativos e arestas estão na rede de sobreposição
• A aresta não é um enlace físico, mas uma conexão TCP
• Um determinado parceiro será tipicamente conectado a menos de 10
vizinhos na rede de sobreposição
© 2005 by Pearson Education
2 - 83
2
Gnutella: protocolo
• Mensagem de consulta
(query) é enviada pelas
conexões TCP existentes
• Os pares encaminham
a mensagem de consulta
• QueryHit (encontro)
é enviado pelo
caminho reverso
Escalabilidade: flooding de alcance limitado
© 2005 by Pearson Education
2 - 84
2
Gnutella: conectando pares
1. Para se conectar, o parceiro X precisa encontrar algum outro
parceiro na rede Gnutella: utiliza a lista de candidatos
2. X seqüencialmente, tenta fazer conexão TCP com os pares da
lista até estabelecer conexão com Y
3. X envia mensagem de Ping para Y e Y encaminha a mensagem
de Ping aos seus vizinhos
4. Todos os pares que recebem a mensagem de Ping respondem
com mensagens de Pong, incluindo end IP, # de arquivos que
está compartilhando e o total de bytes destes arquivos
5. X recebe várias mensagens de Pong e pode então estabelecer
conexões TCP adicionais aos outros pares que serão vizinhos
© 2005 by Pearson Education
2 - 85
2
Explorando heterogeneidade: KaZaA
• Cada par é um líder de grupo ou
está atribuído a um líder de grupo
• Conexão TCP entre o par e seu
líder de grupo
• Conexões TCP entre alguns
pares de líderes de grupo
• O líder de grupo acompanha o
conteúdo de todos os seus
“discípulos”
© 2005 by Pearson Education
2 - 86
2
KaZaA
• Cada arquivo possui um hash e um descritor
• O cliente envia a consulta de palavra-chave para o seu líder de grupo
• O líder de grupo responde com os encontros (hits):
• Para cada encontro: metadata, hash, endereço IP
• Se o líder de grupo encaminha a consulta para outros líderes de grupo,
eles respondem com os encontros
• O cliente então seleciona os arquivos para download
• Requisições HTTP usando hash como identificador são enviadas aos
pares que contêm o arquivo desejado
© 2005 by Pearson Education
2 - 87
2
Artifícios do KaZaA para desempenho
• Limitações em transferências simultâneas e uso de filas múltiplas,
garantindo um mínimo de banda a cada transferência
• Incentiva prioridades, favorecendo usuários que tenham carregado
mais do que baixado no passado (recompensa)
• Realiza downloads em paralelo, usando cabeçalho “faixa de
bytes” no HTTP (download parcial de arquivo)
© 2005 by Pearson Education
2 - 88
2
Camada de aplicação
• 2.1 Princípios de aplicações de rede
• 2.2 Web e HTTP
• 2.3 FTP
• 2.4 Correio electrônico
SMTP, POP3, IMAP
• 2.5 DNS
• 2.6 Compartilhamento de arquivos P2P
• 2.7 Programação de socket com TCP
• 2.8 Programação de socket com UDP
• 2.9 Construindo um servidor Web
© 2005 by Pearson Education
2 - 89
2
Programação de sockets
Objetivo: aprender a construir aplicações cliente-servidor que se comunicam
usando sockets
Socket API
• Introduzida no BSD4.1 UNIX, 1981
• Explicitamente criados, usados e liberados pelas aplicações
• Paradigma cliente-servidor
• Dois tipos de serviço de transporte via socket API:
• Datagrama não confiável
• Confiável, orientado a cadeias de bytes
SOCKET
Uma interface local, controlada pelo OS, na qual os processos de aplicação
podem tanto enviar quanto receber mensagens de e para outro processo de
aplicação (local ou remoto)
© 2005 by Pearson Education
2 - 90
2
Programação de sockets com TCP
Socket: ponto de comunicação entre o processo de aplicação e o protocolo de
transporte fim-a-fim (UCP or TCP)
Serviço TCP: transferência confiável de bytes de um processo para outro
© 2005 by Pearson Education
2 - 91
2
Programação de sockets com TCP
Cliente deve contatar o servidor
• Processo servidor já deve estar em execução
• Servidor deve ter criado socket (porta) que aceita o contato do cliente
Cliente contata o servidor
• Criando um socket TCP local
• Especificando endereço IP e número da porta do processo servidor
• Quando o cliente cria o socket: cliente TCP estabelece conexão com o
TCP do servidor
Quando contatado pelo cliente, o TCP do servidor cria um novo socket
para o processo servidor comunicar-se com o cliente
• Permite ao servidor conversar com múltiplos clientes
• Conexão TCP identificada pela quádrupla (IP cliente, porta cliente, IP
servidor, porta servidor) (mais no capítulo 3)
Ponto de vista da aplicação
TCP fornece a transferência confiável, em ordem de bytes
(“pipe”) entre o cliente e o servidor
© 2005 by Pearson Education
2 - 92
2
Jargão stream
• Um stream é uma seqüência de caracteres que fluem para dentro ou
para fora de um processo
• Um stream de entrada é agregado a alguma fonte de entrada para o
processo, ex.: teclado ou socket
• Um stream de saída é agregado a uma fonte de saída, ex.: monitor ou
socket
© 2005 by Pearson Education
2 - 93
2
Programação de sockets com TCP
Exemplo de aplicação cliente-servidor:
1) Cliente lê linha da entrada-padrão
do sistema (inFromUser stream),
envia para o servidor via socket
(outToServer stream)
2) Servidor lê linha do socket
3) Servidor converte linha para letras
maiúsculas e envia de volta ao
cliente
4) Cliente lê a linha modificada
através do (inFromServer stream)
Programação de sockets com TCP
© 2005 by Pearson Education
2 - 94
2
Exemplo: cliente Java (TCP)
© 2005 by Pearson Education
2 - 95
2
Interação cliente-servidor TCP
© 2005 by Pearson Education
2 - 96
2
Exemplo: cliente Java (TCP)
import java.io.*;
import java.net.*;
class TCPClient {
public static void main(String argv[]) throws Exception
{
String sentence;
String modifiedSentence;
Cria
stream de entrada
Cria
socket cliente,
conecta ao servidor
Cria
stream de saída
ligado ao socket
© 2005 by Pearson Education
BufferedReader inFromUser =
new BufferedReader(new InputStreamReader(System.in));
Socket clientSocket = new Socket("hostname", 6789);
DataOutputStream outToServer =
new DataOutputStream(clientSocket.getOutputStream());
2 - 97
2
Exemplo: cliente Java (TCP)
BufferedReader inFromServer =
new BufferedReader(new
InputStreamReader(clientSocket.getInputStream()));
Cria
stream de entrada
ligado ao socket
sentence = inFromUser.readLine();
Envia linha
para o servidor
outToServer.writeBytes(sentence + '\n');
modifiedSentence = inFromServer.readLine();
Lê linha
do servidor
System.out.println("FROM SERVER: " + modifiedSentence);
clientSocket.close();
}
}
© 2005 by Pearson Education
2 - 98
2
Exemplo: servidor Java (TCP)
import java.io.*;
import java.net.*;
class TCPServer {
Cria
socket de aceitação
na porta 6789
Espera, no socket
de aceitação, por
contato do cliente
Cria stream de
entrada ligado
ao socket
© 2005 by Pearson Education
public static void main(String argv[]) throws Exception
{
String clientSentence;
String capitalizedSentence;
ServerSocket welcomeSocket = new ServerSocket(6789);
while(true) {
Socket connectionSocket = welcomeSocket.accept();
BufferedReader inFromClient =
new BufferedReader(new
InputStreamReader(connectionSocket.getInputStream()));
2 - 99
2
Exemplo: servidor Java (TCP)
Cria stream de
saída ligado ao
socket
DataOutputStream outToClient =
new DataOutputStream(connectionSocket.getOutputStream());
Lê linha do
socket
clientSentence = inFromClient.readLine();
capitalizedSentence = clientSentence.toUpperCase() + '\n';
Escreve linha
para o socket
outToClient.writeBytes(capitalizedSentence);
}
}
}
© 2005 by Pearson Education
Fim do while loop,
retorne e espere por
outra conexão do cliente
2 - 100
2
Camadas de aplicação
• 2.1 Princípios de aplicações de rede
• 2.2 Web e HTTP
• 2.3 FTP
• 2.4 Correio electrônico
• SMTP, POP3, IMAP
• 2.5 DNS
• 2.6 Compartilhamento de arquivos P2P
• 2.7 Programação de socket com TCP
• 2.8 Programação de socket com UDP
• 2.9 Construindo um servidor Web
© 2005 by Pearson Education
2 - 101
2
Programação de sockets com UDP
UDP: não há conexão entre o cliente e o servidor
• Não existe apresentação
• Transmissor envia explicitamente endereço IP e porta de destino em cada
mensagem
• Servidor deve extrair o endereço IP e porta do transmissor de cada
datagrama recebido
UDP: dados transmitidos podem ser recebidos fora de ordem ou perdidos
Ponto de vista da aplicação
UDP fornece a transferência não confiável de grupos de bytes
(datagramas) entre o cliente e oservidor
© 2005 by Pearson Education
2 - 102
2
Interação cliente-servidor: UDP
Cliente
Servidor
(rodando em hostid)
Criar socket port=x, para
requisição entrante:
Criar socket
serverSocket =
DatagramSocket()
serverSocket =
DatagramSocket()
Criar endereço
(hostid, port=x)
Ler requisição de
Enviar requisição de
datagrama clientsocket
serverSocket
Escrevr resposta para
serverSocket
Ler resposta de
especificando o endereço
do hospedeiro cliente e o
número da porta
clientSocket
Fechar
clientSocket
© 2005 by Pearson Education
2 - 103
2
© 2005 by Pearson Education
2 - 106
2
© 2005 by Pearson Education
2 - 107
2
Exemplo: cliente Java (UDP)
import java.io.*;
import java.net.*;
class UDPClient {
public static void main(String args[]) throws Exception
{
Cria
stream de entrada
Cria
socket cliente
Translada
nome do
hospedeiro para
endereço IP
usando DNS
© 2005 by Pearson Education
BufferedReader inFromUser =
new BufferedReader(new InputStreamReader(System.in));
DatagramSocket clientSocket = new DatagramSocket();
InetAddress IPAddress =
InetAddress.getByName("hostname");
byte[] sendData = new byte[1024];
byte[] receiveData = new byte[1024];
String sentence = inFromUser.readLine();
sendData = sentence.getBytes();
2 - 108
2
Exemplo: cliente Java (UDP)
Cria datagrama com
dados a enviar,
tamanho, endereço
IP e porta do servidor
DatagramPacket sendPacket =
new DatagramPacket(sendData, sendData.length,
IPAddress, 9876);
clientSocket.send(sendPacket);
Envia datagrama
para servidor
DatagramPacket receivePacket =
new DatagramPacket(receiveData, receiveData.length);
clientSocket.receive(receivePacket);
Lê datagrama
do servidor
String modifiedSentence =
new String(receivePacket.getData());
System.out.println("FROM SERVER:" + modifiedSentence);
clientSocket.close();
}
}
© 2005 by Pearson Education
2 - 109
2
Exemplo: servidor Java (UDP)
import java.io.*;
import java.net.*;
class UDPServer {
public static void main(String args[]) throws Exception
Cria
{
socket datagrama
DatagramSocket serverSocket = new DatagramSocket(9876);
na porta 9876
byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];
while(true)
{
Cria espaço para
datagramas recebidos
Recebe
datagrama
© 2005 by Pearson Education
DatagramPacket receivePacket =
new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
2 - 110
2
Exemplo: servidor Java (UDP)
String sentence = new String(receivePacket.getData());
Obtém endereço IP
e número da porta
do transmissor
InetAddress IPAddress = receivePacket.getAddress();
int port = receivePacket.getPort();
String capitalizedSentence =
sentence.toUpperCase();
sendData = capitalizedSentence.getBytes();
Cria datagrama
para enviar ao cliente
DatagramPacket sendPacket =
new DatagramPacket(sendData, sendData.length,
IPAddress, port);
Escreve o
datagrama para
dentro do socket
serverSocket.send(sendPacket);
}
}
}
© 2005 by Pearson Education
Termina o while loop,
retorna e espera por
outro datagrama
2 - 111
Download

enviar objeto