Capítulo 2
Camada de Aplicação
A note on the use of these ppt slides:
We’re making these slides freely available to all (faculty, students, readers).
They’re in PowerPoint form so you can add, modify, and delete slides
(including this one) and slide content to suit your needs. They obviously
represent a lot of work on our part. In return for use, we only ask the
following:
 If you use these slides (e.g., in a class) in substantially unaltered form,
that you mention their source (after all, we’d like people to use our book!)
 If you post any slides in substantially unaltered form on a www site, that
you note that they are adapted from (or perhaps identical to) our slides, and
note our copyright of this material.
Computer Networking:
A Top Down Approach,
5th edition.
Jim Kurose, Keith Ross
Addison-Wesley, July
2009.
Thanks and enjoy! JFK/KWR
All material copyright 1996-2009
J.F Kurose and K.W. Ross, All Rights Reserved
2: Camada de Aplicação
1
2: Camada de Aplicação
2
2
Capítulo 2: Camada de Aplicação
• 2.1 Princípios das aplicações de rede
• 2.2 Web e HTTP
• 2.3 FTP
• 2.4 Correio Eletrônico
 SMTP, POP3, IMAP
• 2.5 DNS
• 2.6 Aplicações P2P
• 2.7 Programação de Socket com TCP
• 2.8 Programação de Socket com UDP
2: Camada de Aplicação
3
Capítulo 2: Camada de Aplicação
Objetivos:
• Conceitual, aspectos
de implementação
dos protocolos de
aplicação
 Modelos de
serviço da camada
de transporte
 Modelo Cliente x
Servidor
 Modelo Peer-toPeer (Peer2Peer)
2: Camada de Aplicação
• Aprender sobre os
protocolos através de
protocolos populares
na camada de
aplicação




HTTP
FTP
SMTP / POP3 / IMAP
DNS
• Programação de
aplicações de rede
 socket API
4
Algumas aplicações de rede
• E-mail
• Web
• Sistema de Mensagem
•
•
•
•
instantânea (Instant
Messaging)
Login remoto
Compartilhamento de
arquivo P2P
Jogos de rede multiusuários
Vídeo sob demanda
2: Camada de Aplicação
• Voz sobre IP (VoiP)
• Vídeo-conferência
• Computação GRID
•
•
•
…
…
…
5
Criando uma aplicação de rede
Escreva programas que



Executem em sistemas finais
diferentes
Comuniquem-se via rede
e.x., o software de um
servidor web comunica-se com
o software de um browser
Poucos softwares são escritos
para os dispositivos no núcleo
da rede


Os dispositivos do núcleo não
executam aplicações do
usuário
Aplicações nos sistemas finais
permitem um rápido
desenvolvimento da aplicação
e a sua propagação
2: Camada de Aplicação
application
transport
network
data link
physical
application
transport
network
data link
physical
application
transport
network
data link
physical
6
Capítulo 2: camada de aplicação
• 2.1 Princípios das aplicações de rede
• 2.2 Web e HTTP
• 2.3 FTP
• 2.4 Correio Eletrônico
 SMTP, POP3, IMAP
• 2.5 DNS
• 2.6 Aplicações P2P
• 2.7 Programação de Socket com TCP
• 2.8 Programação de Socket com UDP
2: Camada de Aplicação
7
Arquiteturas de aplicação
• Cliente-Servidor
• Peer-to-peer (P2P)
• Híbrido de Cliente-Servidor e P2P
2: Camada de Aplicação
8
Arquitetura Cliente-Servidor
cliente/servidor
2: Camada de Aplicação
Servidor:
 Sempre “on”
 Endereço IP permanente
 Fazendas de servidores
para fins de escalabilidade
Cliente:
 Comunica com o servidor
 Pode ser conectado de
modo intermitente
 Pode possuir endereço IP
dinâmico
 Não se comunica
diretamente com outro
cliente
9
Data Centers: Google
• Custo Estimado de um Data Center: $600M
• Google tem gasto mais de $3B/ano em data
centers
• Cada data center utilliza 50-100 megawatts
de potência
2: Camada de Aplicação
10
Arquitetura P2P Pura
 Não existem servidores
sempre “on”
 Sistemas finais arbitrários
comunicam-se diretamente
 Os pares são conectados de
modo intermitente e podem
ter o endereço IP alterado
 exemplo: Gnutella
P2P
Altamente escalável mas difícil
de gerenciar
2: Camada de Aplicação
11
Híbrido de Cliente-Servidor e P2P
Skype
Aplicação P2P de voz sobre IP (VoiP)
 Servidor centralizado: permite encontrar o endereço de um
parceiro remoto;
 Conexão cliente-cliente: direta (sem passar pelo servidor)
Mensagem Instantânea
 Conversa entre dois usuários (P2P)
 Serviço centralizado: deteção/localização da presença do
cliente

• Usuários registram seus endereços IP no
servidor central quando eles tornam-se “online”
• Usuário contacta o servidor central para obter
o endereço IP dos pares
2: Camada de Aplicação
12
Processos comunicantes
Processo: programa em
execução no host
 Dentro de um mesmo
host, dois processos
comunicam-se através
do uso da comunicação
entre-processos
(definida pelo OS)
 Processos em hosts
diferentes comunicamse através da troca de
mensagens
2: Camada de Aplicação
Processo cliente:
processo que inicia a
comunicação
Processo servidor:
processo que espera
ser contactado
 Nota: aplicações P2P
possuem processos
clientes & processos
servidores
13
Sockets
•
•
Processo envia/recebe
mensagens para/do seu
socket
O socket é análogo a uma
porta


o processo emissor empurra a
mensagem através da porta
o processo emissor confia na
infra-estrutura de transporte
do outro lado da porta que
leva a mensagem ao socket do
processo receptor.
host ou servidor
host ou servidor
processo
Controlado pelo
desenvolvedor da
aplicação
socket
socket
TCP com
buffers,
variáveis
processo
Internet
TCP com
buffers,
variáveis
Controlado pelo OS
• API: (1) escolha do protocolo de transporte; (2)
possibilidade de fixar alguns parâmetros (discussão
mais à frente!)
2: Camada de Aplicação
14
Identificação dos processos
• Para receber mensagens os processos
devem possuir um identificador
• O host possui um endereço IP de 32-bits
• Q: o endereço IP do host no qual o
processo executa é suficiente para
identificar o processo?
2: Camada de Aplicação
15
Identificação dos processos
R: Não, já que
muitos processos
podem estar
executando no
mesmo host
identificador inclui o
endereço IP e o número da
porta associada ao
processo no host.
• Exemplos de portas:
•


Servidor HTTP: 80
Servidor de e-mail: 25
• Para enviar mensagens
HTTP ao servidor web
gaia.cs.umass.edu:


2: Camada de Aplicação
Endereço Ip: 128.119.245.12
Número da porta: 80
16
Protocolo da camada de aplicação
define:
•
Tipos das mensagens
trocadas,

•
Sintaxe da mensagem:

•
Quais campos fazem parte
da mensagem, ordem e
tamanho dos campos
Semântica da mensagem

•
e.x., requisição (request),
resposta (response)
Protocolos de domínio público:
• Definidos em RFCs
• Permite a
interoperabilidade
• e.x., HTTP, SMTP
Protocolos proprietários:
• e.x., Skype
Significado da informação
nos campos
Regras para quando e como
os processos reagem à
troca de mensagens
2: Camada de Aplicação
17
Quais serviços de transporte as aplicações
necessitam?
Perda de dados
• Algumas aplicações (e.x., áudio)
podem tolerar alguma perda
• Outras aplicações (e.x.,
transferência de arquivos,
telnet) requerem 100% para a
transferência confiável de
dados
Temporização
• Algumas aplicações
(ex. Telefonia na
Internet, jogos
interativos) requerem
baixo atraso para
serem “efetivas”
2: Camada de Aplicação
Bandwidth
• Algumas aplicações
(e.x. multimídia)
requerem uma
quantidade mínima de
banda para serem
“efetivas”
• Outras aplicações
(“aplic. elásticas)
utilizam qualquer banda
que eles obtêm
18
Requisitos de algumas aplicações relativamente
ao serviço de transporte
Aplicação
Transf. de arquivo
e-mail
Documentos Web
Áudio/vídeo em
teleconferência
Perda
de dados
Sem perda
Sem perda
Sem perda
Tolerante
Tolerante
Jogos interativos Tolerante
Mensagem instantânea Sem perda
Áudio/vídeo armazenado
2: Camada de Aplicação
Sensibilidade
Bandwidth
ao tempo
elástico
não
elástico
não
elástico
não
áudio: 5kbps-1Mbps sim, 100’s msec
vídeo:10kbps-5Mbps
sim, alguns secs
igual ao de cima
Alguns kbps a mais sim, 100’s msec
sim e não
elástico
19
Protocolos de transporte na
Internet
Serviço TCP:
Serviço UDP:
•
•
•
•
•
•
Orientado à conexão: requer
o estabelecimento da
conexão entre os processos
cliente e servidor
Transporte confiável: entre
os processos emissor e
receptor
Controle de fluxo: o emissor
não deve sobrecarregar o
receptor
Controle de
congestionamento: regular o
emissor quando a rede está
sobrecarregada
Não suporta: temporização,
garantia de banda mínima
2: Camada de Aplicação
•
Transferência nãoconfiável de dados entre
os processos emissor e
receptor
Não suporta:
estabelecimento de
conexão, controle
defluxo, controle de
congestionamento,
temporizações, ou
garantia de banda
20
Aplicações Internet: protocolos de aplicação & de
transporte
Applicação
Protocolo da
camada de aplicação
SMTP [RFC 2821]
Telnet [RFC 854]
HTTP [RFC 2616]
FTP [RFC 959]
proprietário
(e.g. RealNetworks)
Telefonia Internet proprietary
(e.g., Vonage,Dialpad)
e-mail
Acesso de terminal remoto
Web
Transferência de arquivos
Fluxo multimídia
2: Camada de Aplicação
Protocolo de
transporte associado
TCP
TCP
TCP
TCP
TCP or UDP
tipicamente UDP
21
Capítulo 2: Camada de Aplicação
• 2.1 Princípios das aplicações de rede
• 2.2 Web e HTTP
• 2.3 FTP
• 2.4 Correio Eletrônico
 SMTP, POP3, IMAP
• 2.5 DNS
• 2.6 Aplicações P2P
• 2.7 Programação de Socket com TCP
• 2.8 Programação de Socket com UDP
2: Camada de Aplicação
22
Web e HTTP
Inicialmente algumas definições
• página Web consiste de objetos
• Objeto pode ser um arquivo HTML, imagem
JPEG, applet Java, arquivo de áudio, …
• Página Web consiste de um arquivo HTML que
inclui referências a outros objetos
• Cada objeto é endereçável através de uma URL
• Exemplo URL:
www.someschool.edu/someDept/pic.gif
Nome do host
2: Camada de Aplicação
Nome do caminho (path)
23
Descrição do HTTP
HTTP: hypertext
transfer protocol
•
•
•
•
Protocolo de aplicação da
Web
Modelo cliente x servidor
 cliente: browser usado
para requisitar,
receber, apresentar
objetos Web
 servidor: servidor Web
envia objetos em
resposta às requisições
HTTP 1.0: RFC 1945
HTTP 1.1: RFC 2068
2: Camada de Aplicação
R eq
uis
içã
oH
PC executando Res
TT
P
pos
Int. Explorer
ta
HT
TP
TP
T
oH
ã
ç
TP Servidor
si
i
T
u
q
executando
aH
Re
t
s
o
Servidor
sp
Re
Apache Web
Mac executando
Navegador
24
Descrição HTTP (continuação)
Utiliza TCP:
•
•
•
•
Cliente inicia conexão TCP
(cria socket) com o
servidor, porta 80
Servidor aceita pedido de
conexão TCP do cliente
Troca de mensagens HTTP
entre o browser (cliente
HTTP) e o servidor Web
(servidor HTTP)
encerramento da conexão
TCP
2: Camada de Aplicação
HTTP é “stateless”
•
Servidor não mantém
qualquer informação
sobre as requisições
anteriores do cliente
Obs.
Protocolos que mantêm
estado são complexos!
• O passado (estado) deve
ser mantido
• Caso o servidor/cliente
falhe, suas visões de
“estado” podem ser
inconsistentes e devem ser
reconciliadas
25
Conexões HTTP
HTTP não-persistente
• No máximo um objeto
é enviado em uma
conexão TCP.
• HTTP/1.0 utiliza o
HTTP não-persistente
2: Camada de Aplicação
HTTP Persistente
• Múltiplos objetos
podem ser enviados
em uma única conexão
TCP entre o cliente e
o servidor.
• HTTP/1.1 utiliza
conexões persistentes
como modo “default”
26
HTTP Não-Persistente
(contém texto e
Suponha que o usuário entre a seguinte URL
referências p/10
www.someSchool.edu/someDepartment/home.index Imagens jpeg)
1a. cliente HTTP inicia
conexãoTCP com o servidor
HTTP (processo) em
www.someSchool.edu on port
80
2. cliente HTTP envia mensagem
de requisição (contendo URL)
no socket da conexão TCP. A
mensagem indica que o cliente
deseja o objeto
someDepartment/home.index
1b. Servidor HTTP no host
www.someSchool.edu espera
por conexão TCP na porta 80.
“aceita” a conexão notificando
ao client
3. Servidor HTTP recebe a
mensagem de requisição,
prepara a mensagem de
resposta contendo o objeto
requisitado e a envia no socket
tempo
2: Camada de Aplicação
27
HTTP não-persistente (cont.)
4. Servidor HTTP server fecha
5. Cliente HTTP recebe a
tempo
a conexão TCP .
mensagem de resposta
contendo arquivo html e, em
seguida, apresenta o arquivo
html. O parsing do arquivo
html encontra 10 referências
a objetos .jpeg.
6. Repete os passos 1-5 para
cada um dos 10 objetos jpeg
2: Camada de Aplicação
28
HTTP não-persistente: tempo de
resposta
Definição de RTT: tempo de
ida e volta de um pacote
(cliente-servidor-cliente).
Tempo de resposta:
• um RTT para iniciar a
conexãoTCP
• um RTT para a requisição
HTTP e o retorno da
resposta HTTP
• Tempo de transmissão do
arquivo
total = 2RTT + tempo de
transmissão
2: Camada de Aplicação
Inicia conexão
TCP
RTT
Requisita
o arquivo
Tempo de
tranmissão
do arquivo
RTT
Arquivo
recebido
tempo
tempo
29
HTTP persistente
HTTP não-persistente:
• requer 2 RTTs por objeto
• Overhead do OS para cada
conexão TCP
• Em geral os browsers abrem
conexões TCP em paralelo
para buscar os objetos
HTTP persistente
• O servidor deixa a conexão
aberta após o envio da
resposta
• Mensagens HTTP
subsequentes entre o par
cliente/servidor são
enviadas na conexão aberta
2: Camada de Aplicação
Persistente sem pipelining:
• Cliente envia nova
requisição somente quando
a anterior foi recebida
• um RTT para cada objeto
referenciado
Persistente com pipelining:
• default no HTTP/1.1
• Cliente envia requisições
assim que ele encontra
referência para um objeto
• Praticamente um RTT para
todos os objetos
referenciados
30
Mensagem de requisição HTTP
• Dois tipos de mensagens HTTP messages:
request, response
• Mensagem de requisição HTTP:
ASCII (formato legível ao ser-humano)
Linha de requisição
(comandos GET,
GET /somedir/page.html HTTP/1.1
POST, HEAD)
Host: www.someschool.edu
User-agent: Mozilla/4.0
cabeçalho Connection: close
Accept-language:fr

Carriage return,
line feed
indicam o fim da
mensagem
2: Camada de Aplicação
(carriage return, line feed extras)
31
Mensagem de requisição HTTP: formato
geral
2: Camada de Aplicação
32
Enviando dados de formulário
Método Post:
• Página Web inclui um
formulário
• A entrada é encaminhada
(uploaded) ao servidor no
“entity body”
Método URL:
• Usa o método Get
• A entrada é encaminhada
no campo URL da linha de
requisição:
www.somesite.com/animalsearch?monkeys&banana
2: Camada de Aplicação
33
Tipos de métodos
HTTP/1.0
• GET
• POST
• HEAD

Similar ao Get. O
servidor não retorna o
objeto especificado
(usado para debugging)
2: Camada de Aplicação
HTTP/1.1
• GET, POST, HEAD
• PUT

Envia arquivo no “entity
body” para o caminho
(path) especificado no
campo URL
• DELETE
 Deleta o arquivo
especificado no campo
URL
34
Mensagem de resposta HTTP
Linha de status
Cabeçalho
dado, e.x.,
Arquivo HTML
requisitado
2: Camada de Aplicação
HTTP/1.1 200 OK
Connection close
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 ...
35
Códigos de status nas mensagens
de resposta HTTP
Aparecem na primeira linha da mensagem de
resposta servidor ->cliente
Alguns exemplos de códigos:
200 OK

Requisição bem sucedida; objeto requisitado incluído na
mensagem;
301 Objeto deslocou

Objeto requisitado moveu; nova localização incluída na mensagem;
400 Requisição incorreta

Mensagem de requisição não entendida pelo servidor
404 Não encontrado

Documento requisitado não encontrado no servidor
505 Versão HTTP Version não suportada
2: Camada de Aplicação
36
Acessando um servidor HTTP via linha de
comandos
1. Comando telnet para um servidor Web:
telnet cis.poly.edu 80 abre conexão TCP na porta 80
(porta default do servidor Web) em cis.poly.edu.
Qualquer comando é enviado para a porta 80 em
cis.poly.edu
2. comando de requisição GET HTTP:
GET /~ross/ HTTP/1.1
Host: cis.poly.edu
Ao entrar este comando (bater duas
vezes o carriage return), voce envia
uma requisição GET mínima mas
completa ao Servidor HTTP
3. Analise a resposta enviada pelo servidor HTTP!
2: Camada de Aplicação
37
Olhando o HTTP em ação-Exemplos
• Exemplo telnet
• Exemplo Wireshark (ferramenta livre de
monitoramento de redes)
2: Camada de Aplicação
38
Estado do usuário: cookies
Vários sítios Web utilizam
pequenos arquivos
chamados cookies
Quatro situações:
1) Cookie é gerado no sítio
Web na primeira conexão e
guardado em base de dados.
2) Cookie é inserido no
cabeçalho da mensagem de
resposta HTTP
3) Cookie é armazenado e
gerenciado pelo browser no
host do usuário
4) Cookie é enviado pelo
browser ao servidor a cada
nova requisição HTTP
2: Camada de Aplicação
Exemplo:
• Susan sempre acessa a
Internet através do mesmo
PC
• Visita um sítio específico de
e-comércio pela primeira vez
• Quando a requisição HTTP
inicial chega no destino, o
sítio cria:
 ID único
 Entrada na base de dados
para o ID
e devolve tais informações na
forma de um arquivo cookie.
39
Cookies: mantendo o “estado”
cliente
ebay 8734
Arquivo cookie
ebay 8734
amazon 1678
servidor
requisição http
resposta http
Set-cookie: 1678
requisição http
cookie: 1678
resposta http customizada
Servidor Amazon
cria ID 1678
para o usuário cria
entrada
cookie
Uma semana após:
ebay 8734
amazon 1678
2: Camada de Aplicação
accesso
accesso
Base de
dados
requisição http
cookie: 1678
resposta http customizada
cookie
40
Cookies (cont.)
O quê os cookies oferecem:
• autorização
• cartões de compra
• recomendações
• estado da sessão do
usuário
2: Camada de Aplicação
Obs
Cookies e privacidade:
• Os cookies permitem que
se aprenda bastante sobre
o usuário
• Você pode fornecer seu
nome e e-mail para os sítios
41
Caches Web (servidor proxy)
Objetivo: atender a requisição do cliente sem envolver o
servidor original
• 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
2: Camada de Aplicação
42
Mais sobre o cache Web
•
O cache atua tanto como
cliente como servidor
• Tipicamente, o cache é
instalado pelo ISP
(universidade,
companhia, ISP
residencial)
2: Camada de Aplicação
Porque o cache Web?
• 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)
43
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 típico na nuvem Internet
Pública = 2 seg.
• Atraso típico na LAN = 10 ms
Conseqüências:
• Utilização da LAN =
100.000 x 15 / 10.000.00 = 15%
• Utilização do enlace de acesso =
100.000 x 15 / 1.000.000 = 150%
• Atraso total = atraso da LAN +
atraso de acesso + atraso da
Internet = 10 ms + alguns minutos
(sobrecarga) + 2 s = alguns minutos
2: Camada de Aplicação
Servidores de
origem
Internet
Pública
Enlace de acesso
1 Mbps
Rede
institucional
10 Mbps LAN
44
Exemplo de caching (cont)
Servidores de
origem
Solução possível
•
Aumentar a banda do acesso do
enlace para, p. ex., 10 Mbps
consequência
•
•
•
•
Utilização da LAN =
= 100.000 x 15 / 10.000.000 =
15%
Utilization do enlace de acesso =
= 100.000 x 15 / 10.000.000 =
15%
Atraso total = atraso da LAN +
atraso do acesso + atraso Internet
= 10 ms + 10 ms + 2 s = 2,02 s
Trata-se, em geral, de um
“upgrade” caro!
2: Camada de Aplicação
Internet
Pública
Enlace de acesso
1 Mbps -> 10 Mbps
Rede
institucional
10 Mbps LAN
45
Exemplo de caching (cont)
Solução possível: instalação de
um cache
•
Suponha que a tx. de sucesso é
de 0,4 (40% dos dados pedidos
já estão no cache)
Servidores de
origem
Internet
Pública
Consequência
•
•
•
•
40% das requisições serão
satisfeitas imediatamente
60% das requisições serão
atendidas pelos servidores
originais (usam enlace)
A utilização do enlace de acesso
é reduzida para 60% implicando
em atrasos negligíveis (~10 ms)
Atraso médio total= atraso de
LAN + atraso de acesso +
atraso Internet = 0.4* 10 ms +
0.6*(10 ms + 2.0 s) = 1.21 s
2: Camada de Aplicação
Enlace de acesso
1 Mbps
Rede
institucional
10 Mbps LAN
Cache
institucional
46
GET condicional
Servidor
Cliente
• Razão: não enviar objeto se
a versão que o cliente já
possui está atualizada.
• Cliente: especifica a data da
versão armazenada no pedido
HTTP
If-modified-since:
<date>
• Servidor: resposta não
contém objeto se a cópia é
atualizada:
HTTP/1.0 304 Not Modified
2: Camada de Aplicação
HTTP request msg
If-modified-since: <date>
HTTP response
HTTP/1.0
304 Not Modified
HTTP request msg
If-modified-since: <date>
Objeto
não
modificado
Objeto
modificado
HTTP response
HTTP/1.1 200 OK
<data>
47
Capítulo 2: Camada de Aplicação
• 2.1 Princípios das aplicações de rede
• 2.2 Web e HTTP
• 2.3 FTP
• 2.4 Correio Eletrônico
 SMTP, POP3, IMAP
• 2.5 DNS
• 2.6 Aplicações P2P
• 2.7 Programação de Socket com TCP
• 2.8 Programação de Socket com UDP
2: Camada de Aplicação
48
FTP: the file transfer protocol
usuário
Interface de Cliente
usuário
FTP
FTP
Transf. de arquivo
Sistema de
Arquivo local
•
•
•
•
Servidor
FTP
Sistema de
Arquivo
remoto
Transferência de arquivo para/do host remoto
Modelo cliente x servidor
 cliente: lado que inicia a transferência (seja para/do
host remoto)
 servidor: host remoto
ftp: RFC 959
Servidor ftp: porta 21
2: Camada de Aplicação
49
FTP: separa fluxo de controle e fluxo
de dados
• Cliente FTP contata o servidor FTP na porta 21 especificando o TCP como
protocolo de transporte
• Cliente obtém autorização pela conexão de controle
• Cliente procura o diretório remoto enviando comandos pela conexão de
controle
• Quando o servidor recebe um comando para uma transferência de arquivo,
ele 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
Conexão de controle TCP
porta 21
Cliente
FTP
2: Camada de Aplicação
Conexão TCP de dados
Servidor
porta 20
FTP
50
FTP commands, responses
Exemplos de comandos:
• Envie 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 Username OK, password required
• 125 data connection already open; transfer starting
• 425 Can’t open data connection
• 452 Error writing file
2: Camada de Aplicação
51
Capítulo 2: Camada de Aplicação
• 2.1 Princípios das aplicações de rede
• 2.2 Web e HTTP
• 2.3 FTP
• 2.4 Correio Eletrônico
 SMTP, POP3, IMAP
• 2.5 DNS
• 2.6 Aplicações P2P
• 2.7 Programação de Socket com TCP
• 2.8 Programação de Socket com UDP
2: Camada de Aplicação
52
Correio eletrônico
Fila de
mensagens de saída
Mailbox do
usuário
Três componentes principais:
•
•
•
Agentes do usuário
Servidores de e-mail
Protocolo de transferência de
e-mail: SMTP
Agente do usuário
• Conhecido como “leitor de email”
• Composição, edição, leitura de
mensagens de e-mail
• E.x., Eudora, Outlook, elm,
Mozilla Thunderbird
• O servidor armazena as
mensagens enviadas e
recebidas
2: Camada de Aplicação
Agente
do
usuário
Servidor
de e-mail
SMTP
SMTP
SMTP
Servidor
de e-mail
Agente
do
usuário
Agente
do
usuário
Servidor
de e-mail
Agente
do
usuário
Agente
do
usuário
Agente
do
usuário
53
Correio eletrônico: servidores de
e-mail
Servidores de e-mail
•
•
•
Mailbox: contém as
mensagens enviadas para o
usuário
Fila de mensagens: contém
as mensagens de saída (a
serem enviadas)
Protocolo SMTP: protocolo
tipo cliente-servidor entre
os servidores de e-mail
para troca de mensagens
 “cliente”: servidor
emissor do e-mail
 “servidor”: servidor
receptor do e-mail
2: Camada de Aplicação
Agente
do
usuário
Servidor
de e-mail
SMTP
SMTP
SMTP
Servidor
de e-mail
Agente
do
usuário
Agente
do
usuário
Servidor
de e-mail
Agente
do
usuário
Agente
do
usuário
Agente
do
usuário
54
Correio eletrônico: SMTP [RFC 2821]
•
•
•
•
Utiliza o TCP para transferência confiável das
mensagens de e-mail do cliente para o servidor via
porta 25
Transferência direta: servidor emissor para servidor
receptor
Transferência em três fases:
 handshaking (cumprimentos)
 Transferência de mensagens
 encerramento
Interação comando/resposta
 comandos: texto ASCII
 resposta: frase e código de status
• As mensagens devem ser codificadas em
ASCII de 7-bits
2: Camada de Aplicação
55
Cenário: Alice envia mensagens para
Bob
1) Alice usa o agente (UA)
para compor a mensagem e
enviar “to”
[email protected]
2) O agente de Alice envia a
mensagem para o seu
servidor; a mensagem é
colocada na fila de
mensagem
3) O lado cliente do SMTP
abre uma conexão TCP com
o servidor de e-mail do Bob
1
2
Agente
do
usuário
2: Camada de Aplicação
4) O cliente SMTP envia a
mensagem da Alice na
conexão TCP
5) O servidor de e-mail do
Bob coloca a mensagem no
mailbox do Bob
6) Bob evoca o seu agente
para ler a mensagem
Servidor
de e-mail
3
4
Servidor
de e-mail
5
6
Agente
do
usuário
56
Exemplo de uma 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
2: Camada de Aplicação
57
Tente uma interação SMTP!
• Entre telnet servername 25
• Aguarde resposta tipo: 220 reply from server
• Entre os comandos para envio de um e-mail sem
a utilização de um cliente de e-mail (reader):
HELO, MAIL FROM:, RCPT TO:, DATA, QUIT
2: Camada de Aplicação
58
SMTP: características
•
•
•
SMTP utiliza conexão
persistente
SMTP requer as
mensagens (cabeçalho &
corpo) em ASCII de 7
bits: necessidade de
codificação de mensagens
com outras codificações
que usam mais de 7 bits
SMTP utiliza CRLF.CRLF
para determinar o fim da
mensagem
2: Camada de Aplicação
Comparação com o HTTP:
•
•
HTTP: pull
SMTP: push
•
Ambos interagem via
comandos/resposta e
códigos de status em
ASCII
•
HTTP: cada objeto é
encapsulado na mensagem
de resposta
SMTP: múltiplos objetos
enviados na mensagem
•
59
Formato da mensagem de e-mail
SMTP: protocolo para troca
de mensagens de e-mail
RFC 822: padrão para
formato da mensagem de
texto:
• Linhas de cabeçalho, e.x.,
To:
 From:
 Subject:
(não são os comandos SMTP !)

•
cabeçalho
Linha
em branco
CRLFCRLF
body
body

mensagem codificada com
caracteres ASCII de 7 bits
2: Camada de Aplicação
60
Formato da mensagem: extensões
multimídia
•
•
MIME: extensão multimedia para o e-mail, RFC 2045,
2056
Linhas adicionais no cabeçalho da mensagem declaram
o conteúdo do tipo MIME
Versão MIME
Método usado para
codificação do dado
Dado multimídia
tipo, subtipo,
dado codificado
2: Camada de Aplicação
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
61
Protocolos de acesso ao e-mail
SMTP
Agente
do
usuário
SMTP
Protocolo
de acesso
Agente
do
usuário
Servidor de e-mail Servidor de e-mail
emissor
receptor
•
•
SMTP: entrega/armazenamento no servidor de recepção
Protocolo de acesso ao e-mail: recebimento da mensagem do
servidor
 POP: Post Office Protocol [RFC 1939]
• autorização (agente <-->servidor) e download
 IMAP: Internet Mail Access Protocol [RFC 1730]
• Mais características (mais complexo)
• Manipulação das mensagens armazenadas no servidor
 HTTP: gmail, Hotmail, Yahoo! Mail, etc.
2: Camada de Aplicação
62
Protocolo POP3
Fase de autorização
•
•
Comandos do cliente:
 user: declara username
 pass: password
Respostas do servidor
 +OK
 -ERR
Fase de transação, cliente:
list: lista número da
mensagem
• retr: recupera mensagem
pelo número
• dele: deleta
• quit
•
2: Camada de Aplicação
S:
C:
S:
C:
S:
+OK POP3 server ready
user bob
+OK
pass hungry
+OK user successfully logged
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 1 contents>
.
dele 2
quit
+OK POP3 server signing off
63
on
POP3 e IMAP
Mais sobre o POP3
• Exemplo anterior utiliza o
modo “download and
delete”.
• Bob não pode reler o email caso ele troque de
cliente
• “Download-and-keep”:
cópias das mensagens em
clientes diferentes
• POP3 é do tipo “stateless”
2: Camada de Aplicação
IMAP
• Mantém as mensagens em
único lugar: o servidor
• Permite que o usuário
organize as mensagens em
pastas
• IMAP mantém o estado do
usuário entre sessões:

Nomes dos folders e
mapeamento entre o ID
das mensagens e o nome da
pasta
64
Capítulo 2: Camada de Aplicação
• 2.1 Princípios das aplicações de rede
• 2.2 Web e HTTP
• 2.3 FTP
• 2.4 Correio Eletrônico
 SMTP, POP3, IMAP
• 2.5 DNS
• 2.6 Aplicações P2P
• 2.7 Programação de Socket com TCP
• 2.8 Programação de Socket com UDP
2: Camada de Aplicação
65
DNS: Domain Name System
Pessoas: vários
identificadores:
Domain Name System:
Base de dados distribuída
 RG, name, #cic, …
implementada através de uma
Hosts Internet, roteadores:
hierarquia de vários
 Endereço IP (32 bits) –
servidores de nomes
usado para endereçamento • Protocolo de aplicação permite
de datagramas
que hosts e servidores de
 “nome”, e.x., ww.yahoo.com
nomes comuniquem-se para
– usado por humanos
resolução de nomes (tradução
Q: como mapear nomes e
nome/endereço)
endereços IP?
 nota: função do núcleo da
Internet mas implementada
como um protocolo de
camada de aplicação
2: Camada de Aplicação
•
66
DNS
Serviços DNS
• Tradução do nome do
host no endereço IP
• Aliasing do host

Canonical, sinônimos
(aliases)
• Aliasing do servidor
de e-mail
• Distribuição da carga

Servidores Web
replicados: conjunto de
endereços IP para um
nome canônico
2: Camada de Aplicação
Por que não um DNS
centralizado?
• Ponto único de falha
• Alto volume de tráfego
• Base de dados
centralizada distante
• Dificuldades de
manutenção
Conclusão: não é escalável!
67
Base de dados Hierárquica e
distribuída
Servidores DNS Root
Servidores DNS .com
Servidores DNS .org
Servidores
Servidores DNS
DNS yahoo.com amazon.com
Servidores DNS .edu
Servidores DNS Servidores DNS Servidores DNS
umass.edu
poly.edu
pbs.org
Cliente deseja IP para www.amazon.com; 1a aprox:
• Cliente consulta um servidor root para obter o
servidor DNS responsável por .com
• Cliente consulta servidor DNS .com para obter
servidor DNS amazon.com
• Cliente consulta servidor DNS amazon.com para
obter o endereço IP de www.amazon.com
2: Camada de Aplicação
68
DNS: servidores de nome raiz
(Root)
•
Contactado pelo servidor de nome local que não é capaz de resolver o
nome
Servidor de nome raiz:
 Contata o servidor de nome autoridade (authoritative) se o
mapeamento do nome não é conhecido
 Obém o mapeamento
 Retorna o mapeamento para o servidor de nome local
a Verisign, Dulles, VA
c Cogent, Herndon, VA (also LA)
d U Maryland College Park, MD
g US DoD Vienna, VA
h ARL Aberdeen, MD
j Verisign, ( 21 locations)
e NASA Mt View, CA
f Internet Software C. Palo Alto,
k RIPE London (also 16 other locations)
i Autonomica, Stockholm (plus
28 other locations)
m WIDE Tokyo (also Seoul,
Paris, SF)
CA (and 36 other locations)
b USC-ISI Marina del Rey, CA
l ICANN Los Angeles, CA
2: Camada de Aplicação
13 servidores de
nome raiz no
mundo!
69
Servidores TLD e Servidores
autoridades
• Servidores Top-level domain (TLD):



responsáveis por com, org, net, edu, etc, e todos os domínios de
países como br, uk, fr, ca, jp.
Network Solutions mantém servidores TLD .com
Educause mantém TLD .edu
• Servidores DNS autoridades:


Servidores DNS das organizações são autoridades para
fornecimento do mapeamento IP para o nome dos servidores da
organização (e.x., Web, mail).
Podem ser mantidos pelas organizações ou pelo provedor de serviço
2: Camada de Aplicação
70
Servidor de Nome Local
• Na verdade, não pertence à hierarquia do DNS
• cada ISP (ISP residencial, empresa,
universidade) possui um.

Também chamado de “default name server”
• Quando um host faz uma consulta DNS, a
consulta é encaminhada ao seu servidor DNS
local

Atua como um proxy encaminhando a consulta na hierarquia
2: Camada de Aplicação
71
Exemplo de resolução de nome
root DNS server
através do DNS
2
• Host em cis.poly.edu
deseja o endereço IP
para
gaia.cs.umass.edu
Consulta iterativa:
•
•
Servidor contactado
responde com o nome
do servidor a ser
contactado
“Eu não conheço este
nome mas pergunte a
este servidor”
2: Camada de Aplicação
3
4
TLD DNS server
5
local DNS server
dns.poly.edu
1
8
requesting host
7
6
authoritative DNS server
dns.cs.umass.edu
cis.poly.edu
gaia.cs.umass.edu
72
Exemplo de resolução de nome DNS
root DNS server
Consulta recursiva:
•
2
Transfere o ônus da
resolução de nome ao
servidor contactado
3
7
6
TLD DNS server
local DNS server
dns.poly.edu
1
5
4
8
requesting host
authoritative DNS server
dns.cs.umass.edu
cis.poly.edu
gaia.cs.umass.edu
2: Camada de Aplicação
73
DNS: caching e atualização dos
registros
• Uma vez que qualquer servidor de nomes
aprende um mapeamento, ele faz o cache
deste mapeamento
 As entradas do cache possuem validade por
um tempo (timeout) desaparecendo após
expirado este tempo
 Parte do conteúdo dos servidores TLD em
geral encontra-se no cache dos servidores
locais
• Isso evita a necessidade de contactar os
servidores de nome root a todo momento.
2: Camada de Aplicação
74
Registros DNS
DNS: base de dados distribuída armazenando “resource records” (RR)
Formato RR:
(name, value, type, ttl)
• Type=A
 Nome é hostname
 Valor é endereço IP
• Type=NS
Nome é domínio
(e.x. foo.com)

Valor é o hostname do
servidor autoridade para
este domínio
2: Camada de Aplicação
• Type=CNAME
 name é um alias para algum
nome canônico (nome real)
www.ibm.com é, na realidade,
servereast.backup2.ibm.com

Valor corresponde ao
nome canônico
• Type=MX
 value é o nome do servidor
de e-mail associado ao name
75
DNS: protocolo, mensagens
Protocolo DNS : mensagens de consulta e
resposta, ambas possuem o mesmo formato
Cabeçalho da mensagem
•
•
identificação: 16 bits
para consulta; resposta
usa o mesmo
identificador
flags:
 consulta ou resposta
 demanda de recursão
 recursão disponível
 resposta é de
autoridade do domínio
2: Camada de Aplicação
76
DNS: protocolo, mensagens
Nome, tipo da consulta
RRs na resposta
a uma consulta
Registros para
servidores autoridades
Informação adicional
2: Camada de Aplicação
77
Inserindo registros no DNS
• Exemplo: novo domínio “Network Utopia”
Registro do nome networkuptopia.com no DNS (e.g.,
Network Solutions)


Fornece nome e endereço IP do servidor de nomes autoridade
(deve haver primário e secundário)
É preciso inserir 2 registros RRs no servidor TLD:
(networkutopia.com, dns1.networkutopia.com, NS)
(dns1.networkutopia.com, 212.212.212.1, A)
Criar registros do Tipo A no servidor autoridade para
o servidor web www.networkutopia.com e do Type MX
para o servidor de mail mail.networkutopia.com
2: Camada de Aplicação
78
Capítulo 2: Camada de Aplicação
• 2.1 Princípios das aplicações de rede
• 2.2 Web e HTTP
• 2.3 FTP
• 2.4 Correio Eletrônico
 SMTP, POP3, IMAP
• 2.5 DNS
• 2.6 Aplicações P2P
• 2.7 Programação de Socket com TCP
• 2.8 Programação de Socket com UDP
2: Camada de Aplicação
79
P2P: Compartilhamento de arquivo
Alice escolhe um dos
“peers”, Bob.
• Uma cópia do arquivo é
trazida do PC do Bob para o
notebook da Alice: HTTP
• Enquanto Alice faz o
download, outros usuários
realizam uploading do
notebook da Alice.
• Os pares da Alice são,
simultaneamente, um cliente
e um Servidor.
Todos os pares são servidores
= alta escalabilidade!
•
Exemplo
• Alice executa uma
aplicação P2P no seu
notebook
• Intermitentemente
conecta-se à Internet;
obtém um novo endereço
IP a cada acesso
• Pergunta por “Hey Jude”
• A aplicação informa
outros “peers” que
possuem uma cópia de Hey
Jude.
2: Camada de Aplicação
80
P2P: diretório centralizado
Projeto original do “Napster”
1) Quando um peer conectacentralized
se, ele informa ao
directory server
servidor central:


Bob
1
peers
Endereço IP
conteúdo
2) Alice pergunta por “Hey
Jude”
3) Alice requisita arquivo da
máquina do Bob
1
3
1
2
1
Alice
2: Camada de Aplicação
81
P2P: problemas relacionados a um
diretório centralizado
• Ponto único de falha
• Gargalo no desempenho
• Problemas de copyright: a ação da lei
é óbvia
A transferência do arquivo é descentralizada, mas a
localização do conteúdo é altamente centralizada
2: Camada de Aplicação
82
Gnutella: inundação
• Completamente
distribuída

Não possui servidor
central
• Protocolo de domínio
público
• Muitos clientes
Gnutella implementam o
protocolo
2: Camada de Aplicação
Rede overlay: grafo
• Arco entre os pares X e
Y caso exista uma
conexão TCP entre eles
• Todos os pares ativos e
os arcos formam uma
rede overlay
• arco: enlace virtual (não
físico)
• Um “peer” conecta-se,
tipicamente, com < 10
vizinhos overlay.
83
Gnutella: protocolo
mensagem de query nas conexões TCP existentes
❒ os pares encaminham a mensagem
de Query
❒ mensagem de QueryHit
enviada no caminho reverso
ry
e
it
Qu
H
ry
e
Qu
File transfer:
HTTP
Query
QueryHit
Qu
ery
Query
QueryHit
Escalabilidade:
Limitada pelo esquema
de inundação
2: Camada de Aplicação
Qu
e
ry
84
Gnutella: associação do Peer
Ao associar-se, o peer Alice precisa encontrar
um outro peer Gnutella na rede: utiliza a lista
de candidatos a “peers”
2. Alice tenta, sequencialmente, conexões TCP com
os candidatos “peers” até o “set up” com Bob
3. Flooding: Alice envia mensagem de Ping para
Bob; Bob encaminha a mensagem para os seus
vizinhos overlay.
1.
❒
Pares ao receberem a mensagem Ping de Alice respondem com
mensagem Pong
Alice recebe várias mensagens do tipo Pong e
pode, portanto, estabelecer conexões
TCP adicionais
Desassociação de um Peer: veja a lista de
exercícios!
4.
2: Camada de Aplicação
85
Overlay Hierárquico
•
•
Situa-se entre a indexação
centralizada e a abordagem
baseada em inundação
Cada peer é um líder de grupo
ou é atribuído a um líder de
grupo.


•
Conexão TCP entre o peer e o
seu líder de grupo.
Conexões TCP entre alguns
pares de líderes de grupo.
Líder de grupo pesquisa o
conteúdo no seus liderados
Peer comum
Peer líder de grupo
Relações de vizinhança na rede overlay
2: Camada de Aplicação
86
P2P Estudo de caso: Skype
Clientes Skype (SC)
• P2P (pc-to-pc, pc-
to-phone, phone-topc) Voice-Over-IP
Skype
(VoIP)
Servidor de login

também IM
Super nó
(SN)
• Protocolo proprietário
(algumas pistas
obtidas via
engenharia reversa)
• Overlay hierárquico
2: Camada de Aplicação
87
Skype: Realizando uma chamada
•
Usuário inicia o Skype
SC registra-se no SN
•

Lista de SNs de bootstrap
Skype
login server
•
SC realiza o login
(authenticate)
•
Call: SC contacta o SN e fornece
o ID do destino

•
SN contacta outros SNs
(protocolo desconhecido, talvez
por inundação) para encontrar o
addr do destino; retorna o addr
para o SC
SC contacta diretamente o destino via TCP
2: Camada de Aplicação
88
Estudo de Caso P2P: BitTorrent
• Distribuição de arquivo P2P
tracker: registra os peers
participantes de um torrent
torrent: grupo de
peers que estão
trocando pedaços
de um arquivo
Obtém a
lista de peers
Negociando
partes do
arquivo
peer
2: Camada de Aplicação
89
BitTorrent (1)
•
•
•
•
•
O arquivo é divido em pedaços (chunks) de 256KB.
Peer ao associar-se a um torrent:
 Não possui “chunks”, mas irá acumulá-los com o tempo
 Registra-se com o “tracker” para obter a lista dos “peers” e
conecta-se ao sub-conjunto dos pares (“neighbors”)
Enquanto faz o download, o peer realiza o upload para outros
pares.
Peers podem ir e vir
Uma vez que o peer possui todo o arquivo, ele pode sair
(egoísta) ou ficar (altruista)
2: Camada de Aplicação
90
BitTorrent (2)
Obtendo Chunks
• Em um certo instante,
diferentes peers possuem
diferentes subconjuntos de
chunks
• Periodicamente, um peer
(Alice) pergunta a cada
vizinho pela lista dos
chunks que ele possui.
• Alice envia uma solicitação
para as partes que ela não
possui
 Raramente ocorre de ser
o primeiro!
2: Camada de Aplicação
Enviando Chunks: tit-for-tat
• Alice envia chunks para 4
vizinhos que estão, atualmente,
enviando chunks para ela na
taxa mais elevada
 Reavalia os 4 tops a cada 10
segundos
• A cada 30 segundos: seleciona
aleatoriamente um outro peer,
para o qual começa a enviar
chunks
 O novo peer pode fazer
parte dos top 4
91
Comparando as arquiteturas ClienteServidor e P2P
Questão : Quanto tempo para distribuir um arquivo
inicialmente em um servidor para N outros
computadores?
Servidor
F, tamanho
do arquivo
us
uN
dN
2: Camada de Aplicação
u1
d1
u2
d2
Rede (possui abundância
de banda)
us: banda de upload
do servidor
ui: banda de upload
do peer cliente i
di: banda de
download do peer
cliente i
92
Cliente-servidor: tempo de distribuição do
arquivo
Server
• O servidor envia N
F
cópias:

Tempo: NF/us
us
uN
• Cliente i gasta F/di
de tempo para
download
dN
Tempo para distribuir F
para N clientes usando
o modelo cliente-servidor
u1 d1 u2
d2
Network (with
abundant bandwidth)
= dcs = max { NF/us, F/min(di) }
i
Cresce linearmente com N
2: Camada de Aplicação
93
P2P: tempo de distribuição do arquivo
Servidor
•
•
•
•
Servidor precisa enviar uma
cópia de F: tempo de F/us
F
cliente i gasta o tempo F/di
para download
NF bits no total devem ser
recebidos (downloaded)
us
uN
dN
u1 d1 u2
d2
Rede (com abundância
de banda)
Maior taxa de upload possível (assumindo que
todos os nós enviam pedaços do arquivo para
algum peer): us +
ui
Σ
i=1,N
Σ
ui }
i=1,N
dP2P = max { F/us, F/min(di) , NF/(us +
i
2: Camada de Aplicação
94
Comparando as arquiteturas ClienteServidor e P2P
Tempo Mínimo de Distribuição
3.5
P2P
Cliente-Servidor
3
2.5
2
1.5
1
0.5
0
0
5
10
15
20
25
30
35
N
2: Camada de Aplicação
95
Distributed Hash Table (DHT)
• DHT = base de dados distribuída P2P
• A base de dados possui tuplas (chave,valor);
 chave: cpf; valor: nome de alguém
 chave: nome de música; valor: endereço IP
• Peers consultam o BD com uma chave
 BD retorna valor(es) que casam com a chave
• Peers também podem inserir tuplas (chave,
valor)
2: Camada de Aplicação
96
Identificadores na DHT
• Atribui um identificador inteiro para cada peer
no intervalo [0,2n-1].

Cada identificador é representado por n bits.
• Requer que cada chave seja um inteiro no mesmo
intervalo.
• Para obter a chave, fazer o hash da chave
original.
ex, chave = h(“Led Zeppelin IV”)
 Esta é a razão do nome distributed “hash” table

2: Camada de Aplicação
97
Como atribuir chaves aos peers?
• Questão central:
 Atribuir as tuplas (chave, valor) aos peers.
• Regra: atribua a chave ao peer que possui o
ID mais próximo do ID.
• Convenção adotada: mais próximo
corresponde ao sucessor imediato ao valor
da chave.
• Ex: n=4; peers: 1,3,4,5,8,10,12,14;
chave = 13, então o sucessor é o peer = 14
 chave = 15, então o sucessor é o peer = 1

2: Camada de Aplicação
98
DHT Circular (1)
1
3
15
4
12
5
10
8
• Cada peer é ciente somente do sucessor e do
predecessor imediatos.
• “Exemplo de uma Rede Overlay”
2: Camada de Aplicação
99
DHT Circular (2)
O(N) mensagens na
média para resolver
uma consulta (query)
quando existem N
1111
peers
Quem é o responsável
0001
Sou eu!
pela chave 1110
0011
1110
0100
1110
1110
1100
1110
1010
2: Camada de Aplicação
?
1110
0101
1110
1000
100
DHT Circular com Atalhos
1
Quem é o
responsável pela
chave 1110?
3
15
4
12
10
5
8
Cada peer conhece os endereços IP do sucessor e do
predecessor, assim como, alguns atalhos.
• Reduz o número de mensagens necessárias.
• Normalmente adota-se atalhos para O(log N) vizinhos,
O(log N) mensagens no caso de uma query
•
2: Camada de Aplicação
101
Dinâmica dos Peers
1
• Para gerenciar a dinâmica dos peers,
3
15
4
12
5
10
requere-se que cada peer conheça o
endereço IP dos seus 2 sucessores.
• Cada peer faz um ping periodicamente para os seus dois sucessores
para verificar se ambos ainda estão
vivos.
8
Peer 5 falha
• Peer 4 deteta; faz o 8 o seu sucessor imediato; pergunta
ao peer 8 quem é o seu sucessor imediato; torna o sucessor
imediato de 8 seu segundo sucessor.
• O que acontece se um peer 13 associa-se à rede?
•
2: Camada de Aplicação
102
Capítulo 2: Camada de Aplicação
• 2.1 Princípios das aplicações de rede
• 2.2 Web e HTTP
• 2.3 FTP
• 2.4 Correio Eletrônico
 SMTP, POP3, IMAP
• 2.5 DNS
• 2.6 Aplicações P2P
• 2.7 Programação de Socket com TCP
• 2.8 Programação de Socket com UDP
2: Camada de Aplicação
103
Programação via Socket
Objetivo: aprender como desenvolver aplicações
cliente/servidor que se comunicam via socket
API de socket
•
•
•
•
Introduzida no Unix FSD4.1,
1981
Criada, utilizada e encerrada
de forma explícita pela
aplicação
Paradigma cliente/servidor
Dois tipos de serviços de
transporte oferecidos pela
API de socket:
 Datagrama não-confiável
 Confiável e orientada ao
byte
2: Camada de Aplicação
socket
Trata-se de uma interface
local ao host, criada pela
aplicação e controlada pelo
SO (“porta”) através da qual
processos de aplicação podem
enviar e receber mensagens
de/para outro processo de
aplicação
104
Programação de socket via TCP
Socket: pode ser visto como uma porta entre o
processo de aplicação e o protocolo de
transporte fim-a-fim (UCP ou TCP)
Serviço TCP: transferência confiável de bytes de
um processo para outro
Controlado pelo
programador
Controlado pelo
SO
processo
socket
TCP com
buffers,
variáveis
host ou
servidor
2: Camada de Aplicação
processo
internet
socket
TCP com
buffers,
variáveis
Controlado pelo
programador
Controlado pelo
SO
host ou
servidor
105
Programação de socket com TCP
Cliente deve contactar o servidor
• Primeiramente, o processo
servidor precisa estar
executando
• O servidor precisa ter criado o
socket (porta) que receberá o
contacto do cliente
•
Quando contactado pelo cliente,
o servidor TCP cria um novo
socket para o processo servidor
comunicar-se com o cliente
 Permite que o servidor
converse com múltiplos
clientes
 O número da porta de origem
serve para distinguir os
clientes (mais no cap. 3)
Cliente contacta o servidor via:
• Criação de um socket TCP local
ao cliente
• Especificação do endereço IP e
Ponto de vista da aplicação
do número da porta associados
O TCP provê uma transferência
ao processo servidor
confiável e ordenada de bytes
• Quando cliente cria o socket: o
(“pipe”) entre o cliente e o servidor
cliente TCP estabelece uma
conexão com o servidor TCP
2: Camada de Aplicação
106
Interação cliente/servidor via socket:
TCP
Servidor
(executando no hostid)
Cliente
cria socket,
porta=x, para receber
as requisições:
welcomeSocket =
ServerSocket()
Espera um pedido
Setup
de conexão
connectionSocket =
welcomeSocket.accept()
Lê a requisição do
connectionSocket
Responde para
connectionSocket
encerra
connectionSocket
2: Camada de Aplicação
TCP
da conexão
Cria socket e conecta ao
hostid, porta=x
clientSocket =
Socket()
Envia requisição via
clientSocket
Lê resposta de
clientSocket
encerra
clientSocket
107
Stream: jargão
• um stream é uma
input
stream
output
stream
input
stream
client
client TCP
socket
para a rede
2: Camada de Aplicação
inFromServer
Processo cliente
outToServer
sequência de bytes
que flui para/de um
processo.
• um stream de entrada
é associado a alguma
fonte de entrada para
o processo, ex.,
teclado ou socket.
• Um stream de saída é
associado a uma saída,
ex., monitor ou socket
monitor
inFromUser
teclado
da rede
108
Programação de socket com TCP
Exemplo de aplicação cliente-servidor:
1) Cliente lê linha da entrada (input) padrão
(inFromUser stream) e envia para o servidor via
socket (outToServer stream)
2) Servidor lê a linha via socket
3) Servidor converte a linha para maiúscula e envia de
volta para o cliente
4) Cliente lê a linha modificada via socket
(inFromServer stream) e imprime
2: Camada de Aplicação
109
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 fluxo (stream)
de entrada
Cria socket do
cliente e conecta
ao servidor
Cria fluxo de saída
associado ao socket
2: Camada de Aplicação
BufferedReader inFromUser =
new BufferedReader(new InputStreamReader(System.in));
Socket clientSocket = new Socket("hostname", 6789);
DataOutputStream outToServer =
new DataOutputStream(clientSocket.getOutputStream());
110
Exemplo: Cliente Java (TCP), cont.
Cria fluxo de
entrada
associado ao socket
BufferedReader inFromServer =
new BufferedReader(new
InputStreamReader(clientSocket.getInputStream()));
sentence = inFromUser.readLine();
Envia linha para o
servidor
outToServer.writeBytes(sentence + '\n');
modifiedSentence = inFromServer.readLine();
Lê linha enviada
pelo servidor
System.out.println("FROM SERVER: " + modifiedSentence);
clientSocket.close();
}
}
2: Camada de Aplicação
111
Exemplo: servidor Java (TCP)
import java.io.*;
import java.net.*;
class TCPServer {
Cria socket de
recepção na porta
6789
Espera no socket
de recepção um
contacto de cliente
Cria um fluxo
de entrada associado
ao socket
2: Camada de Aplicação
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()));
112
Exemplo: Servidor Java (TCP), cont.
Cria fluxo de
saída associado
ao socket
DataOutputStream outToClient =
new DataOutputStream(connectionSocket.getOutputStream());
Lê linha
Recebida no socket
clientSentence = inFromClient.readLine();
capitalizedSentence = clientSentence.toUpperCase() + '\n';
Escreve linha
no socket
outToClient.writeBytes(capitalizedSentence);
}
}
}
2: Camada de Aplicação
Final do loop do while; passa a
esperar por uma nova conexão de cliente
113
TCP: Observações e Questões
• O Servidor possui dois tipos de sockets:
 ServerSocket e Socket
• Quando o cliente “bate na porta” do
serverSocket, o Servidor cria o
connectionSocket e completa a conexão TCP.
• O IP destino e a porta não são explicitamente
anexados ao segmento.
• Múltiplos clientes podem acessar o servidor?
2: Camada de Aplicação
114
114
Capítulo 2: Camada de Aplicação
• 2.1 Princípios das aplicações de rede
• 2.2 Web e HTTP
• 2.3 FTP
• 2.4 Correio Eletrônico
 SMTP, POP3, IMAP
• 2.5 DNS
• 2.6 Aplicações P2P
• 2.7 Programação de Socket com TCP
• 2.8 Programação de Socket com UDP
2: Camada de Aplicação
115
Programação de Socket com UDP
UDP: não existe conexão
entre cliente e servidor
• sem handshaking
• A origem associa
ponto de vista da aplicação
explicitamente um
endereço IP de destino e
UDP provê uma transferência
uma porta de destino a
de bytes não confiável
cada pacote
(“datagramas”) entre o cliente
• O servidor deve extrair o
e o servidor
endereço IP e a porta de
origem do pacote recebido
UDP: o dado transmitido
pode ser recebido fora de
ordem ou perdido
2: Camada de Aplicação
116
Interação Cliente/Servidor via socket
UDP
Servidor
(executando no hostid)
cria socket,
porta=x, para recebimento
da requisição:
serverSocket =
DatagramSocket()
Lê requisição de
serverSocket
Responde via
serverSocket
especificando
o endereço do host do
cliente e o número da porta
2: Camada de Aplicação
Cliente
cria socket,
clientSocket =
DatagramSocket()
Cria datagrama de requisição
contendo (endereço hostid e porta=x)
e envia através de clientSocket
Lê a resposta de
clientSocket
encerra
clientSocket
117
Exemplo: cliente Java (UDP)
Client
process
Saída: envia pacote
(lembrar que oTCP
envia fluxo de
bytes)
UDP
packet
receivePacket
Entrada: recebe
sendPacket
Processo
input
stream
monitor
inFromUser
teclado
pacotes (lembrar
que o TCP recebe
fluxo de bytes)
UDP
packet
clientSocket
client UDP
socket
para a rede
2: Camada de Aplicação
UDP
socket
da rede
118
Exemplo: cliente Java (UDP)
import java.io.*;
import java.net.*;
Cria fluxo de
entrada
Cria socket do
cliente
Traduz o nome do
host para o
endereço IP via
DNS
class UDPClient {
public static void main(String args[]) throws Exception
{
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: Camada de Aplicação
119
Example: Java client (UDP), cont.
Cria o datagrama
contendo o dado,
tamanho, end. IP e
porta
Envia o datagrama
para o servidor
DatagramPacket sendPacket =
new DatagramPacket(sendData, sendData.length, IPAddress, 9876);
clientSocket.send(sendPacket);
DatagramPacket receivePacket =
new DatagramPacket(receiveData, receiveData.length);
Lê o datagrama
do servidor
clientSocket.receive(receivePacket);
String modifiedSentence =
new String(receivePacket.getData());
System.out.println("FROM SERVER:" + modifiedSentence);
clientSocket.close();
}
}
2: Camada de Aplicação
120
Exemplo: servidor Java (UDP)
import java.io.*;
import java.net.*;
Cria o
datagrama socket
na porta 9876
class UDPServer {
public static void main(String args[]) throws Exception
{
DatagramSocket serverSocket = new DatagramSocket(9876);
byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];
while(true)
{
Cria o espaço para
receber o datagrama
Recebe o
datagrama
2: Camada de Aplicação
DatagramPacket receivePacket =
new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
121
Exemplo: servidor Java (UDP), cont
String sentence = new String(receivePacket.getData());
Obtém o end. IP
# da porta da
origem
InetAddress IPAddress = receivePacket.getAddress();
int port = receivePacket.getPort();
String capitalizedSentence = sentence.toUpperCase();
sendData = capitalizedSentence.getBytes();
Cria datagrama
para enviar ao
cliente
Escreve o
datagrama no
Socket de saída
}
2: Camada de Aplicação
DatagramPacket sendPacket =
new DatagramPacket(sendData, sendData.length, IPAddress,
port);
serverSocket.send(sendPacket);
}
}
Fim do loop do while e volta a
esperar um outro datagrama
122
Capítulo 2: resumo
O estudo das aplicações de rede está completo!
• Arquiteturas de aplicação
 Cliente-servidor
 P2P
 híbrida
• Requisitos do serviço de
aplicação:

confiabilidade, banda, atraso
• Protocolos específicos:
 HTTP
 FTP
 SMTP, POP, IMAP
 DNS
 P2P: BitTorrent, Skype
• Programação via socket
• Modelo de serviço de
transporte na Internet


Confiável e orientado a conexão:
TCP
Não-confiável, datagrama: UDP
2: Camada de Aplicação
123
Capítulo 2: resumo
Importante: conceitos sobre protocolos
•
Troca típica de mensagem
request/reply:


•
cliente requisita informação
ou serviço
Servidor responde com
dados e código de status
Formatos das mensagens:


cabeçalhos: campos que
fornecem informações sobre
os dados
Dado: informação que é
comunicada
2: Camada de Aplicação
Temas importantes:
• Mensagens de controle vs.
mensagens de dado
 in-band, out-of-band
• centralizado vs.
decentralizado
• stateless vs. stateful
• Transferência confiável vs.
não-confiável de mensagem
• “complexidade na borda da
rede”
124
Download

Servidor