Vous êtes sur la page 1sur 130

Captulo 2: Camada de Aplicao

Baseado nos slides de Kurose e Ross

2: Camada de Aplicao

Captulo 2: Roteiro
2.1 Princpios de

aplicaes de rede
2.2 A Web e o HTTP
2.3 Transferncia de
arquivo: FTP
2.4 Correio Eletrnico
na Internet
2.5 DNS: o servio de
diretrio da Internet

2.6 Aplicaes P2P


2.7 Programao e

desenvolvimento de
aplicaes com TCP
2.8 Programao de
sockets com UDP

2: Camada de Aplicao

Captulo 2: Camada de Aplicao


Metas do captulo:
aspectos conceituais
e de implementao
de protocolos de
aplicao em redes

aprender sobre protocolos

modelos de servio da
camada de transporte
paradigma cliente
servidor
paradigma peer-to
peer

atravs do estudo de
protocolos populares da
camada de aplicao:

HTTP
FTP
SMTP/ POP3/ IMAP
DNS

Criar aplicaes de rede

programao usando a API


de sockets

2: Camada de Aplicao

Algumas aplicaes de rede


Correio eletrnico
A Web

Mensagens

instantneas
Login em computador
remoto como Telnet e
SSH
Compartilhamento de
arquivos P2P
Jogos multiusurios
em rede

Streaming de vdeos
armazenados
(YouTube, Hulu,
Netflix)
Telefonia por IP
(Skype)
Videoconferncia em
tempo real
Busca
...
...

2: Camada de Aplicao

Criando uma aplicao de rede


Programas que

Executam em (diferentes)
sistemas finais
Comunicam-se atravs da rede
p.ex., servidor Web se comunica
com o navegador

aplicao
transporte
rede
enlace
fsica

Programas no relacionados
ao ncleo da rede

Dispositivos do ncleo da rede


no executam aplicaes dos
usurios
Aplicaes nos sistemas finais
permite rpido desenvolvimento
e disseminao

aplicao
transporte
rede
enlace
fsica

2: Camada de Aplicao

aplicao
transporte
rede
enlace
fsica

Arquiteturas das aplicaes de


rede
Estruturas possveis das aplicaes:
Cliente-servidor
Peer-to-peer (P2P)

2: Camada de Aplicao

Arquitetura cliente-servidor
Servidor:
Sempre ligado
Endereo IP permanente
Escalabilidade com data
centers
Clientes:
Comunicam-se com o servidor
Podem estar conectados
cliente/servidor
intermitentemente
Podem ter endereos IP
dinmicos
No se comunicam diretamente
com outros clientes
2: Camada de Aplicao

Arquitetura P2P
No h servidor sempre ligado

peer-peer

Sistemas finais arbitrrios se

comunicam diretamente
Pares solicitam servios de
outros pares e em troca
proveem servios para outros
parceiros:

Autoescalabilidade novos
pares trazem nova capacidade
de servio assim como novas
demandas por servios.

Pares esto conectados

intermitentemente e mudam
endereos IP

Gerenciamento complexo

2: Camada de Aplicao

Comunicao entre Processos


Processo cliente:
Processo: programa que
processo que inicia a
executa num sistema final
comunicao
processos no mesmo
sistema final se comunicam Processo servidor:
processo que espera
usando comunicao
ser contactado
interprocessos (definida
pelo sistema operacional)
processos em sistemas
Nota: aplicaes com
finais distintos se
arquiteturas P2P
comunicam trocando
possuem processos
mensagens atravs da rede
clientes e processos
servidores
2: Camada de Aplicao

Sockets
Os processos enviam/ recebem mensagens

para/dos seus sockets


Um socket anlogo a uma porta

Processo transmissor envia a mensagem atravs da porta


O processo transmissor assume a existncia da infra-estrutura
de transporte no outro lado da porta que faz com que a
mensagem chegue ao socket do processo receptor
aplicao

processo

socket

aplicao

processo

transporte

transporte

rede

rede

enlace
fsica

Internet

enlace

Controlado pelo
desenvolvedor
da aplicao
controlado
pelo SO

fsica

2: Camada de Aplicao

10

Endereamento de processos
Para que um processo

receba mensagens, ele deve


possuir um identificador
Cada hospedeiro possui um
endereo IP nico de 32
bits
P: o endereo IP do
hospedeiro no qual o
processo est sendo
executado suficiente para
identificar o processo?
Resposta: No, muitos
processos podem estar
executando no mesmo
hospedeiro

O identificador inclui tanto

o endereo IP quanto os
nmeros das portas
associadas com o processo
no hospedeiro .
Exemplo de nmeros de
portas:

Servidor HTTP: 80
Servidor de Correio: 25

Para enviar uma msg HTTP

para o servidor Web


gaia.cs.umass.edu

Endereo IP: 128.119.245.12


Nmero da porta: 80

Mais sobre isto

posteriormente.
2: Camada de Aplicao

11

Os protocolos da camada de
aplicao definem
Tipos de mensagens

trocadas:

ex. mensagens de
requisio e resposta

Sintaxe das mensagens:


campos presentes nas
mensagens e como so
identificados
Semntica das msgs:

Protocolos abertos:
definidos em RFCs
Permitem a
interoperao
ex, HTTP e SMTP
Protocolos proprietrios:
Ex., Skype

significado da informao
nos campos

Regras para quando os

processos enviam e
respondem s mensagens
2: Camada de Aplicao

12

De que servios uma aplicao necessita?


Integridade dos dados
(sensibilidade a perdas)

algumas apls (p.ex., transf. de


arquivos, transaes web)
requerem uma transferncia
100% confivel
outras (p.ex. udio) podem
tolerar algumas perdas

Vazo (throughput)

algumas apls (p.ex., multimdia)


requerem quantia mnima de
vazo para serem viveis
outras apls (apls elsticas)
conseguem usar qq quantia de
banda disponvel

Segurana
Temporizao (sensibilidade a
atrasos)

Criptografia, integridade dos


dados, ...

algumas apls (p.ex., telefonia


Internet, jogos interativos)
requerem baixo retardo para
serem viveis

2: Camada de Aplicao

13

Requisitos de aplicaes de rede selecionadas


Vazo

Sensibilidade
ao atraso

Aplicao Perdas
transferncia de arqs
correio
documentos Web
udio/vdeo em
tempo real
udio/vdeo gravado
jogos interativos
mensagem instantnea

elstica
elstica
elstica
udio: 5kbps-1Mbps
vdeo:10kbps-5Mbps
Igual acima
tolerante
Alguns kbps-10Mbps
tolerante
sem perdas elstica
sem perdas
sem perdas
sem perdas
tolerante

no
no
no
sim, 100s mseg
sim, alguns segs
sim, 100s mseg
sim e no

2: Camada de Aplicao

14

Servios providos pelos protocolos de


transporte da Internet
Servio TCP:

transporte confivel entre


processos remetente e
receptor
controle de fluxo: remetente
no vai afogar receptor
controle de
congestionamento:
estrangular remetente quando
a rede estiver carregada
no prov: garantias
temporais ou de banda mnima
orientado a conexo:
apresentao requerida entre
cliente e servidor

Servio UDP:

transferncia de dados no

confivel entre processos


remetente e receptor
no prov: estabelecimento
da conexo, confiabilidade,
controle de fluxo, controle
de congestionamento,
garantias temporais ou de
banda mnima

P: Qual o interesse em ter um


UDP?
2: Camada de Aplicao

15

Apls Internet: seus protocolos e seus


protocolos de transporte
Aplicao
correio eletrnico
acesso terminal remoto
Web
transferncia de arquivos
streaming multimdia
telefonia Internet

Protocolo da
camada de apl

Protocolo de
transporte usado

SMTP [RFC 2821]


telnet [RFC 854]
HTTP [RFC 2616]
FTP [RFC 959]
HTTP (ex. Youtube)
RTP [RFC 1889]
SIP, RTP, proprietrio
(ex., Skype)

TCP
TCP
TCP
TCP
TCP ou UDP
TCP ou UDP

2: Camada de Aplicao

16

Tornando o TCP seguro


TCP & UDP
Sem criptografia
Senhas em texto aberto
enviadas aos sockets
atravessam a Internet em
texto aberto
SSL
Prov conexo TCP
criptografada
Integridade dos dados
Autenticao do ponto
terminal

SSL est na camada de


aplicao
Aplicaes usam
bibliotecas SSL, que
falam com o TCP
API do socket SSL
Senhas em texto
aberto enviadas ao
socket atravessam a
rede criptografadas
Vide Captulo 7
2: Camada de Aplicao

17

Captulo 2: Roteiro
2.1 Princpios de

aplicaes de rede
2.2 A Web e o HTTP
2.3 Transferncia de
arquivo: FTP
2.4 Correio Eletrnico
na Internet
2.5 DNS: o servio de
diretrio da Internet

2.6 Aplicaes P2P


2.7 Programao e

desenvolvimento de
aplicaes com TCP
2.8 Programao de
sockets com UDP

2: Camada de Aplicao

18

A Web e o HTTP
Primeiro uma reviso...
Pginas Web consistem de objetos
um objeto pode ser um arquivo HTML, uma imagem
JPEG, um applet Java, um arquivo de udio,
Pginas Web consistem de um arquivo base HTML
que inclui vrios objetos referenciados
Cada objeto enderevel por uma URL
Exemplo de URL:
www.someschool.edu/someDept/pic.gif
nome do hospedeiro

nome do caminho
2: Camada de Aplicao

19

Protocolo HTTP
HTTP: hypertext
transfer protocol

protocolo da camada de

aplicao da Web
modelo cliente/servidor
cliente: browser que
pede, recebe (usando o
protocolo HTTP) e
visualiza objetos Web
servidor: servidor Web
envia (usando o
protocolo HTTP)
objetos em resposta a
pedidos

ped
ido
htt
PC executando res
p
pos
Explorer
ta
htt
p

ttp
h
ido
tp Servidor
d
t
e
h
p
executando
sta
o
p
servidor
res
Web Apache

iphone executando
o navegador Safari

2: Camada de Aplicao

20

Mais sobre o protocolo HTTP


Usa servio de transporte
TCP:
cliente inicia conexo TCP

(cria socket) ao servidor,


porta 80
servidor aceita conexo TCP
do cliente
mensagens HTTP (mensagens
do protocolo da camada de
apl) trocadas entre browser
(cliente HTTP) e servidor
Web (servidor HTTP)
encerra conexo TCP

HTTP sem estado


servidor no mantm

informao sobre
pedidos anteriores do
cliente

Nota

Protocolos que mantm


estado so complexos!
histria passada (estado)
tem que ser guardada
Caso caia servidor/cliente,
suas vises do estado
podem ser inconsistentes,
devem ser reconciliadas
2: Camada de Aplicao

21

Conexes HTTP
HTTP no persistente
No mximo um objeto
enviado numa
conexo TCP

A conexo ento
encerrada

Baixar mltiplos

HTTP persistente
Mltiplos objetos
podem ser enviados
sobre uma nica
conexo TCP entre
cliente e servidor

objetos requer o uso


de mltiplas conexes

2: Camada de Aplicao

22

Exemplo de HTTP no persistente


Supomos que usurio digita a URL

www.algumaUniv.br/algumDepartmento/inicial.index

(contm texto,
referncias a 10
imagens jpeg)

1a. Cliente http inicia conexo

TCP a servidor http (processo)


a www.algumaUniv.br. Porta 80
padro para servidor http.

2. cliente http envia

tempo

mensagem de pedido de
http (contendo URL)
atravs do socket da
conexo TCP. A mensagem
indica que o cliente deseja
receber o objeto
algumDepartamento/inicial.
index

1b. servidor http no hospedeiro

www.algumaUniv.br espera por


conexo TCP na porta 80.
aceita conexo, avisando ao
cliente

3. servidor http recebe mensagem


de pedido, formula mensagem
de resposta contendo objeto
solicitado e envia a mensagem
via socket

2: Camada de Aplicao

23

Exemplo de HTTP no persistente


(cont.)

4. servidor http encerra conexo


TCP .

5. cliente http recebe mensagem


de resposta contendo arquivo
html, visualiza html.
Analisando arquivo html,
encontra 10 objetos jpeg
referenciados

6. Passos 1 a 5 repetidos para

cada um dos 10 objetos jpeg

tempo

2: Camada de Aplicao

24

Modelagem do tempo de resposta


Definio de RTT (Round Trip
Time): intervalo de tempo
entre a ida e a volta de um
pequeno pacote entre um
cliente e um servidor
Tempo de resposta:
um RTT para iniciar a conexo
TCP
um RTT para o pedido HTTP e
o retorno dos primeiros bytes
da resposta HTTP
tempo de transmisso do
arquivo
total = 2RTT+tempo de
transmisso do arquivo

Inicia a conexo
TCP
RTT
solicita
arquivo

tempo para
transmitir
o arquivo

RTT
arquivo
recebido
tempo

2: Camada de Aplicao

tempo

25

HTTP persistente
Problemas com o HTTP no
persistente:
requer 2 RTTs para cada
objeto
SO aloca recursos do
hospedeiro (overhead) para
cada conexo TCP
os browser
freqentemente abrem
conexes TCP paralelas
para recuperar os objetos
referenciados

HTTP persistente
o servidor deixa a conexo
aberta aps enviar a
resposta
mensagens HTTP seguintes
entre o mesmo
cliente/servidor so
enviadas nesta conexo
aberta
o cliente envia os pedidos
logo que encontra um
objeto referenciado
pode ser necessrio apenas
um RTT para todos os
objetos referenciados
2: Camada de Aplicao

26

Mensagem de requisio HTTP


Dois tipos de mensagem HTTP:

requisio, resposta

mensagem de requisio HTTP:


ASCII (formato legvel por pessoas)
linha da requisio
(comandos GET,
POST, HEAD)

GET /index.html HTTP/1.1\r\n


Host: www-net.cs.umass.edu\r\n
User-Agent: Firefox/3.6.10\r\n
Accept: text/html,application/xhtml+xml\r\n
linhas de Accept-Language: en-us,en;q=0.5\r\n
cabealho Accept-Encoding: gzip,deflate\r\n
Accept-Charset: ISO-8859-1,utf-8;q=0.7\r\n
Keep-Alive: 115\r\n
Carriage return,
Connection: keep-alive\r\n
line feed
\r\n

indicam fim
de mensagem

2: Camada de Aplicao

27

Mensagem de requisio HTTP:


formato geral

2: Camada de Aplicao

28

Enviando contedo de formulrio


Mtodo POST :
Pginas Web frequentemente contm formulrio
de entrada
Contedo enviado para o servidor no corpo da
mensagem
Mtodo URL:
Usa o mtodo GET
Contedo enviado para o servidor no campo URL:
www.somesite.com/animalsearch?key=monkeys&bananas

2: Camada de Aplicao

29

Tipos de mtodos
HTTP/1.0
GET
POST
HEAD

Pede para o servidor


no enviar o objeto
requerido junto com a
resposta

HTTP/1.1
GET, POST, HEAD
PUT

Upload de arquivo
contido no corpo da
mensagem para o
caminho especificado no
campo URL

DELETE
Exclui arquivo
especificado no campo
URL
2: Camada de Aplicao

30

Mensagem de resposta HTTP


linha de status
(protocolo,
cdigo de status,
frase de status)
linhas de
cabealho

dados, p.ex.,
arquivo html
solicitado

HTTP/1.1 200 OK\r\n


Date: Sun, 26 Sep 2010 20:09:20 GMT\r\n
Server: Apache/2.0.52 (CentOS)\r\n
Last-Modified: Tue, 30 Oct 2007 17:00:02
GMT\r\n
ETag: "17dc6-a5c-bf716880"\r\n
Accept-Ranges: bytes\r\n
Content-Length: 2652\r\n
Keep-Alive: timeout=10, max=100\r\n
Connection: Keep-Alive\r\n
Content-Type: text/html; charset=ISO-88591\r\n
\r\n
data data data data data ...

2: Camada de Aplicao

31

cdigos de status da resposta HTTP


Na primeira linha da mensagem de resposta
servidor->cliente. Alguns cdigos tpicos:
200 OK

sucesso, objeto pedido segue mais adiante nesta mensagem

301 Moved Permanently

objeto pedido mudou de lugar, nova localizao


especificado mais adiante nesta mensagem (Location:)

400 Bad Request

mensagem de pedido no entendida pelo servidor

404 Not Found

documento pedido no se encontra neste servidor

505 HTTP Version Not Supported

verso de http do pedido no usada por este servidor


2: Camada de Aplicao

32

Experimente voc com HTTP (do lado


cliente)
1. Use cliente telnet para seu servidor WWW favorito:
telnet cis.poly.edu 80

Abre conexo TCP para a porta 80


(porta padro do servidor http) a www.ic.uff.br.
Qualquer coisa digitada enviada para a
porta 80 do www.ic.uff.br

2. Digite um pedido GET HTTP:


GET /~ross/ HTTP/1.1
Host: cis.poly.edu

Digitando isto (deve teclar


ENTER duas vezes), est enviando
este pedido GET mnimo (porm
completo) ao servidor http

3. Examine a mensagem de resposta enviada pelo servidor HTTP !


(ou use Wireshark para ver as msgs de pedido/resposta HTTP
capturadas)
2: Camada de Aplicao

33

Cookies: manuteno do estado da


conexo
Muitos dos principais stios
Web usam cookies
Quatro componentes:

1) linha de cabealho do
cookie na mensagem de
resposta HTTP
2) linha de cabealho do
cookie na mensagem de
pedido HTTP
3) arquivo do cookie mantido
no host do usurio e
gerenciado pelo browser
do usurio
4) BD de retaguarda no stio
Web

Exemplo:

Suzana acessa a
Internet sempre do
mesmo PC
Ela visita um stio
especfico de comrcio
eletrnico pela primeira
vez
Quando os pedidos
iniciais HTTP chegam no
stio, o stio cria
uma ID nica
uma entrada para a ID no
BD de retaguarda
2: Camada de Aplicao

34

Cookies: manuteno do estado (cont.)


cliente

ebay: 8734

arquivo de
Cookies
amazon: 1678
ebay: 8734

msg usual pedido http

msg usual pedido http

cookie: 1678
resposta usual http

uma semana depois:


arquivo de
Cookies
amazon: 1678
ebay: 8734

servidor de ntrad
a
resposta usual http +
cria a ID 1678 retag no B
ua
rd D
Set-cookie: 1678 para o usurio
a

msg usual pedido http

cookie: 1678
resposta usual http

ao
especfica
do cookie

so
aces

ac
es
so

arquivo de
Cookies

servidor

ao
especfica
do cookie
2: Camada de Aplicao

35

Cookies (continuao)
nota

O que os cookies podem obter: Cookies e privacidade:


cookies permitem que os
autorizao
stios aprendam muito
carrinhos de compra
sobre voc
recomendaes
voc pode fornecer nome e
e-mail para os stios
estado da sesso do usurio
(Webmail)
Como manter o estado:
Pontos finais do protocolo: mantm o
estado no transmissor/receptor para
mltiplas transaes
Cookies: mensagens http transportam
o estado

2: Camada de Aplicao

36

Cache Web (servidor proxy)


Meta: atender pedido do cliente sem envolver servidor de origem
usurio configura

browser: acessos Web via


proxy
cliente envia todos
pedidos HTTP ao proxy

se objeto estiver no
cache do proxy, este o
devolve imediatamente
na resposta HTTP
seno, solicita objeto do
servidor de origem,
depois devolve resposta
HTTP ao cliente

cliente

Servidor
de origem

Servidor
proxy

ped
ido
ht t
res
p
pos
ta
htt
p
ttp
h
ido
t tp
d
h
e
p
s ta
o
p
res

ttp
h
o
t tp
did
h
e
p
sta
o
p
res

cliente

Servidor
de origem
2: Camada de Aplicao

37

Mais sobre Caches Web


Cache atua tanto como

cliente quanto como


servidor
Tipicamente o cache
instalado por um ISP
(universidade, empresa,
ISP residencial)

Para que fazer cache Web?


Reduo do tempo de
resposta para os pedidos
do cliente
Reduo do trfego no
canal de acesso de uma
instituio
A Internet cheia de caches
permitem que provedores
de contedo pobres
efetivamente forneam
contedo (mas o
compartilhamento de
arquivos P2P tambm!)
2: Camada de Aplicao

38

Exemplo de cache (1)


Hipteses
Tamanho mdio de um objeto =
100.000 bits
Taxa mdia de solicitaes dos
browsers de uma instituio
para os servidores originais =
15/seg
Atraso do roteador institucional
para qualquer servidor origem e
de volta ao roteador = 2seg
Conseqncias
Utilizao da LAN = 15%
Utilizao do canal de acesso =
100%
problema!
Atraso total = atraso da
Internet + atraso de acesso +
atraso na LAN = 2 seg + minutos
+ microsegundos

Servidores
de origem

Internet
pblica

enlace de acesso
1,5 Mbps
rede da
instituio

LAN 10 Mbps

2: Camada de Aplicao

39

Exemplo de cache (2)


Soluo em potencial
Aumento da largura de banda
do canal de acesso para, por
exemplo, 10 Mbps
Conseqncias
Utilizao da LAN = 15%
Utilizao do canal de acesso
= 15%
Atraso total = atraso da
Internet + atraso de acesso
+ atraso na LAN = 2 seg +
msegs + msegs
Frequentemente este uma
ampliao cara

Servidores
de origem

Internet
pblica

enlace de acesso
10 Mbps
rede da
instituio

LAN 10 Mbps

2: Camada de Aplicao

40

Exemplo de cache (3)


Instale uma cache
Assuma que a taxa de acerto
seja de 0,4
Conseqncias
40% dos pedidos sero
atendidos quase que
imediatamente
60% dos pedidos sero servidos
pelos servidores de origem
Utilizao do canal de acesso
reduzido para 60%, resultando
em atrasos desprezveis (ex. 10
mseg)
Atraso total = atraso da
Internet + atraso de acesso +
atraso na LAN = 0,6*2 seg +
0,6*0,01 segs + msegs < 1,3 segs

Servidores
de origem

Internet
pblica

enlace de acesso
1,5 Mbps
rede da
instituio

LAN 10 Mbps

cache
institucional
2: Camada de Aplicao

41

GET condicional
Meta: no enviar objeto se

cliente j tem (no cache)


verso atual

Sem atraso para transmisso


do objeto
Diminui a utilizao do enlace

cache: especifica data da

cpia no cache no pedido


HTTP
If-modified-since:
<date>

servidor: resposta no

contm objeto se cpia no


cache for atual:
HTTP/1.0 304 Not
Modified

servidor

cache
msg de pedido http
If-modified-since:
<date>

resposta http
HTTP/1.0
304 Not Modified

objeto
no
modificado

msg de pedido http


If-modified-since:
<date>

resposta http

objeto
modificado

HTTP/1.1 200 OK

<data>

2: Camada de Aplicao

42

HTTP/2
Aprovado pela IESG (Internet

em Fevereiro de 2015

Engineering Steering Group)

https://tools.ietf.org/html/draft-ietf-httpbis-http2-17

Objetivos:

Mecanismos de negociao para permitir a clientes e servidores


escolher o HTTP 1.1, 2, ou outros protocolos
Manuteno de compatibilidade de alto nvel como HTTP 1.1
Diminuir a latncia para melhorar a velocidade de carga das
pginas atravs de:
Compresso de dados dos cabealhos HTTP
Tecnologias de envio (push) pelos servidores
Consertar o problema de bloqueio do cabea da fila (HOL) do HTTP
1.1
Carga de elementos da pgina em paralelo atravs de uma nica
conexo TCP

Dar suporte aos casos de uso comuns atuais do HTTP


2: Camada de Aplicao

43

HTTP/2: Diferenas do HTTP 1.1


Mantm a maior parte da sintaxe de alto nvel do HTTP 1.1

tais como: mtodos, cdigos de status, campos de cabealhos


e URIs

O que modificado como os dados so estruturados e


transportados entre o cliente e o servidor de forma binria e
no textual.

HTTP/2 permite ao servidor enviar (push) contedo, i.e.,

enviar mais dados que os solicitados pelo cliente.


Multiplexa os pedidos e as respostas para evitar o problema
de bloqueio pelo cabea da fila do HTTP 1.1.
Realiza ainda um controle de fluxo e priorizao dos pedidos.

2: Camada de Aplicao

44

HTTP/2: Transporte Binrio

2: Camada de Aplicao

45

HTTP/2: Quadros

Tipos:
HEADERS, DATA, PRIORITY, RST_STREAM,
SETTINGS, PUSH_PROMISE, PING,
GOAWAY, WINDOW_UPDATE,
CONTINUATION
2: Camada de Aplicao

46

HTTP/2: Multiplexao

2: Camada de Aplicao

47

Captulo 2: Roteiro
2.1 Princpios de

aplicaes de rede
2.2 A Web e o HTTP
2.3 Transferncia de
arquivo: FTP
2.4 Correio Eletrnico
na Internet
2.5 DNS: o servio de
diretrio da Internet

2.6 Aplicaes P2P


2.7 Programao e

desenvolvimento de
aplicaes com TCP
2.8 Programao de
sockets com UDP

2: Camada de Aplicao

48

FTP: o protocolo de transferncia


de arquivos

usurio
na
estao

Interface cliente
do usurio FTP
FTP

transferncia
do arquivo

servidor
FTP
sistema de
arquivos
remoto

sistema de
arquivos
local

transferir arquivo de/para hospedeiro remoto


modelo cliente/servidor

cliente: lado que inicia transferncia (pode ser de ou


para o sistema remoto)
servidor: hospedeiro remoto
ftp: RFC 959
servidor ftp: porta 21

2: Camada de Aplicao

49

FTP: conexes separadas p/ controle, dados


cliente FTP contata servidor

FTP na porta 21,


especificando o TCP como
protocolo de transporte
O cliente obtm autorizao
atravs da conexo de
controle
O cliente consulta o
diretrio remoto enviando
comandos atravs da
conexo de controle
Quando o servidor recebe
um comando para a
transferncia de um arquivo,
ele abre uma conexo de
dados TCP para o cliente
Aps a transmisso de um
arquivo o servidor fecha a
conexo

conexo de controle
TCP, porta 21

cliente
FTP

conexo de dados
TCP, porta 20

servidor
FTP

O servidor abre uma segunda

conexo TCP para transferir


outro arquivo
Conexo de controle: fora da
faixa
Servidor FTP mantm o
estado: diretrio atual,
autenticao anterior
2: Camada de Aplicao

50

FTP: comandos, respostas


Comandos tpicos:

Cdigos de retorno tpicos

enviados em texto ASCII

cdigo e frase de status (como

pelo canal de controle


USER nome
PASS senha
LIST devolve lista de
arquivos no diretrio atual
RETR arquivo recupera
(l) arquivo remoto
STOR arquivo armazena
(escreve) arquivo no
hospedeiro remoto

para http)
331 Username OK, password
required
125 data connection
already open; transfer
starting
425 Cant open data
connection
452 Error writing file

2: Camada de Aplicao

51

Captulo 2: Roteiro
2.1 Princpios de

aplicaes de rede
2.2 A Web e o HTTP
2.3 Transferncia de
arquivo: FTP
2.4 Correio Eletrnico
na Internet
2.5 DNS: o servio de
diretrio da Internet

2.6 Aplicaes P2P


2.7 Programao e

desenvolvimento de
aplicaes com TCP
2.8 Programao de
sockets com UDP

2: Camada de Aplicao

52

Correio Eletrnico
Trs grandes componentes:
agentes de usurio (UA)
servidores de correio

servidor
de correio

simple mail transfer protocol:

SMTP

SMTP

Agente de Usurio
a.k.a. leitor de correio
compor, editar, ler mensagens
de correio
p.ex., Outlook, Thunderbird,
cliente de mail do iPhone
mensagens de sada e chegando
so armazenadas no servidor

agente
de
usurio

SMTP

fila de
mensagens
de sada
caixa de
correio do usurio
agente
de
usurio

servidor
de correio

SMTP
servidor
de correio

agente
de
usurio

agente
de
usurio

agente
de
usurio

agente
de
usurio
2: Camada de Aplicao

53

Correio Eletrnico: servidores de correio


Servidores de correio

caixa de correio contm

mensagens de chegada
(ainda no lidas) p/ usurio
fila de mensagens contm
mensagens de sada (a serem
enviadas)
protocolo SMTP entre
servidores de correio para
transferir mensagens de
correio
cliente: servidor de
correio que envia
servidor: servidor de
correio que recebe

servidor
de correio

agente
de
usurio

SMTP
SMTP

agente
de
usurio

servidor
de correio

SMTP
servidor
de correio

agente
de
usurio

agente
de
usurio

agente
de
usurio
2: Camada de Aplicao

54

Correio Eletrnico:
SMTP [RFC 2821]
usa TCP para a transferncia confivel de msgs do correio do

cliente ao servidor, porta 25


transferncia direta: servidor remetente ao servidor
receptor
trs fases da transferncia
handshaking (saudao)
transferncia das mensagens
encerramento
interao comando/resposta (como o HTTP e o FTP)
comandos: texto ASCII
resposta: cdigo e frase de status

mensagens precisam ser em ASCII de 7-bits


2: Camada de Aplicao

55

Gerncia da Porta 25

http://antispam.br/
2: Camada de Aplicao

56

Cenrio: Alice envia uma msg para Bob


1) Alice usa o UA para compor
uma mensagem para
bob@someschool.edu
2) O UA de Alice envia a
mensagem para o seu
servidor de correio; a
mensagem colocada na
fila de mensagens
3) O lado cliente do SMTP
abre uma conexo TCP com
o servidor de correio de
Bob

4) O cliente SMTP envia a


mensagem de Alice atravs
da conexo TCP
5) O servidor de correio de
Bob coloca a mensagem na
caixa de entrada de Bob
6) Bob chama o seu UA para
ler a mensagem

2: Camada de Aplicao

57

Interao SMTP tpica


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: <alice@crepes.fr>
250 alice@crepes.fr ... Sender ok
RCPT TO: <bob@hamburger.edu>
250 bob@hamburger.edu ... 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 Aplicao

58

Experimente uma interao SMTP:


telnet nomedoservidor 25
veja resposta 220 do servidor

entre comandos HELO, MAIL FROM, RCPT TO,

DATA, QUIT

estes comandos permitem que voc envie correio sem


usar um cliente (leitor de correio)

2: Camada de Aplicao

59

SMTP: ltimas palavras


SMTP usa conexes

persistentes
SMTP requer que a mensagem
(cabealho e corpo) sejam em
ASCII de 7-bits
servidor SMTP usa
CRLF.CRLF para reconhecer o
final da mensagem

Comparao com HTTP


HTTP: pull (recupera)
SMTP: push (envia)
ambos tm interao

comando/resposta, cdigos
de status em ASCII

HTTP: cada objeto

encapsulado em sua prpria


mensagem de resposta
SMTP: mltiplos objetos de
mensagem enviados numa
mensagem de mltiplas
partes
2: Camada de Aplicao

60

Formato de uma mensagem


SMTP: protocolo para trocar
msgs de correio
RFC 822: padro para formato
de mensagem de texto:
linhas de cabealho, p.ex.,
To:
From:
Subject:
diferentes dos comandos de
smtp FROM, RCPT TO

cabealho

linha em
branco

corpo

corpo

a mensagem, somente de
caracteres ASCII

2: Camada de Aplicao

61

Formato de uma mensagem: extenses para


multimdia
multimedia mail extension, RFC 2045, 2056
linhas adicionais no cabealho da msg declaram tipo do
contedo MIME
MIME:

verso MIME
mtodo usado
p/ codificar dados
tipo, subtipo de
dados multimdia,
declarao parmetros
Dados codificados

From: ana@consumidor.br
To: bernardo@doces.br
Subject: Imagem de uma bela torta
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Type: image/jpeg
base64 encoded data .....
.........................
......base64 encoded data

2: Camada de Aplicao

62

Tipos MIME
Content-Type: tipo/subtipo; parmetros

Text

subtipos exemplos: plain,

html
charset=iso-8859-1,
ascii

Image

subtipos exemplos : jpeg,

gif

Video

subtipos exemplos : mpeg,

Audio

subtipos exemplos : basic

(8-bit codificado mu-law),


32kadpcm (codificao 32
kbps)

Application

outros dados que precisam

ser processados por um


leitor para serem
visualizados
subtipos exemplos :
msword, octet-stream

quicktime
2: Camada de Aplicao

63

Tipo Multipart
From: alice@crepes.fr
To: bob@hamburger.edu
Subject: Picture of yummy crepe.
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=98766789
--98766789
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain
Dear Bob,
Please find a picture of a crepe.
--98766789
Content-Transfer-Encoding: base64
Content-Type: image/jpeg
base64 encoded data .....
.........................
......base64 encoded data
--98766789-2: Camada de Aplicao

64

Protocolos de acesso ao correio


agente
de
usurio

SMTP

SMTP

servidor de correio
do remetente

POP3 ou
IMAP

agente
de
usurio

servidor de correio
do receptor

SMTP: entrega/armazenamento no servidor do receptor


protocolo de acesso ao correio: recupera do servidor

POP: Post Office Protocol [RFC 1939]


autorizao (agente <-->servidor) e transferncia
IMAP: Internet Mail Access Protocol [RFC 1730]
mais comandos (mais complexo)
manuseio de msgs armazenadas no servidor
HTTP: gmail, Hotmail , Yahoo! Mail, etc.
2: Camada de Aplicao

65

Protocolo POP3
fase de autorizao
comandos do cliente:

user: declara nome


pass: senha
servidor responde
+OK
-ERR
fase de transao, cliente:
list: lista nmeros das
msgs
retr: recupera msg por
nmero
dele: apaga msg
quit

S:
C:
S:
C:
S:

+OK POP3 server ready


user ana
+OK
pass faminta
+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
2: Camada de Aplicao

66

on

POP3 (mais) e IMAP


Mais sobre o POP3
O exemplo anterior
usa o modo download
e delete.
Bob no pode reler as
mensagens se mudar
de cliente
Download-emantenha: copia as
mensagens em clientes
diferentes
POP3 no mantm
estado entre conexes

IMAP
Mantm todas as
mensagens num nico
lugar: o servidor
Permite ao usurio
organizar as mensagens
em pastas
O IMAP mantm o estado
do usurio entre sesses:

nomes das pastas e


mapeamentos entre as IDs
das mensagens e o nome da
pasta
2: Camada de Aplicao

67

Captulo 2: Roteiro
2.1 Princpios de

aplicaes de rede
2.2 A Web e o HTTP
2.3 Transferncia de
arquivo: FTP
2.4 Correio Eletrnico
na Internet
2.5 DNS: o servio de
diretrio da Internet

2.6 Aplicaes P2P


2.7 Programao e

desenvolvimento de
aplicaes com TCP
2.8 Programao de
sockets com UDP

2: Camada de Aplicao

68

DNS: Domain Name System


Pessoas: muitos
identificadores:

CPF, nome, no. da


Identidade

hospedeiros, roteadores
Internet :

endereo IP (32 bit) usado p/ enderear


datagramas
nome, ex.,
www.yahoo.com - usado
por gente

P: como mapear entre


nome e endereo IP?

Domain Name System:

base de dados distribuda


implementada na hierarquia de
muitos servidores de nomes
protocolo de camada de
aplicao permite que
hospedeiros, roteadores,
servidores de nomes se
comuniquem para resolver nomes
(traduo endereo/nome)
nota: funo imprescindvel
da Internet implementada
como protocolo de camada de
aplicao
complexidade na borda da
rede

2: Camada de Aplicao

69

DNS (cont.)
Servios DNS
Traduo de nome de
hospedeiro para IP
Apelidos para
hospedeiros (aliasing)

Nomes cannicos e apelidos

Apelidos para

servidores de e-mail
Distribuio de carga

Por que no centralizar o


DNS?
ponto nico de falha
volume de trfego
base de dados
centralizada e distante
manuteno (da BD)
No escalvel!

Servidores Web replicados:


conjunto de endereos IP
para um mesmo nome
2: Camada de Aplicao

70

Base de Dados Hierrquica e


Distribuda
Root DNS Servers

com DNS servers

org DNS servers

yahoo.com amazon.com
DNS serversDNS servers

edu DNS servers

poly.edu
umass.edu
pbs.org
DNS servers DNS serversDNS servers

Cliente quer IP para www.amazon.com; 1a aprox:


Cliente consulta um servidor raiz para encontrar um servidor
DNS .com
Cliente consulta servidor DNS .com para obter o servidor DNS
para o domnio amazon.com
Cliente consulta servidor DNS do domnio amazon.com para
obter endereo IP de www.amazon.com
2: Camada de Aplicao

71

DNS: Servidores raiz


procurado por servidor local que no consegue resolver o

nome
servidor raiz:
procura servidor oficial se mapeamento desconhecido
obtm traduo
devolve mapeamento ao servidor local
a Verisign, Dulles, VA
c Cogent, Herndon, VA (also Los Angeles)
d U Maryland College Park, MD
k RIPE London (also Amsterdam,
g US DoD Vienna, VA
Frankfurt)
h ARL Aberdeen, MD
i
Autonomica, Stockholm
j Verisign, ( 11 locations)
(plus 3 other locations)
m WIDE Tokyo

e NASA Mt View, CA
f Internet Software C. Palo Alto,
CA (and 17 other locations)

b USC-ISI Marina del Rey, CA


l ICANN Los Angeles, CA

13 servidores de
nome raiz em todo o
mundo
2: Camada de Aplicao

72

Servidores TLD e Oficiais


Servidores de nomes de Domnio de Alto Nvel (TLD):
servidores DNS responsveis por domnios com, org, net,
edu, etc, e todos os domnios de pases como br, uk, fr, ca,
jp.
Network Solutions mantm servidores para domnio .com
NIC.br (Registro .br) para domnio .br
Servidores de nomes com autoridade:

servidores DNS das organizaes, provendo mapeamentos


oficiais entre nomes de hospedeiros e endereos IP para os
servidores da organizao (e.x., Web e correio).
Podem ser mantidos pelas organizaes ou pelo provedor de
acesso

2: Camada de Aplicao

73

Domnios
Registrados
por DPN
(Domnio de
Primeiro Nvel)
06/02/13

2: Camada de Aplicao

74

Servidor DNS Local


No pertence necessariamente hierarquia
Cada ISP (ISP residencial, companhia,

universidade) possui um.

Tambm chamada do servidor de nomes default

Quanto um hospedeiro faz uma consulta DNS, a

mesma enviada para o seu servidor DNS local

Possui uma cache local com pares de traduo


nome/endereo recentes (mas podem estar
desatualizados!)
Atua como um intermedirio, enviando consultas para a
hierarquia.

2: Camada de Aplicao

75

Exemplo de resoluo
de nome pelo DNS

servidor raiz

Hospedeiro em

cis.poly.edu quer
endereo IP para
gaia.cs.umass.edu

consulta interativa:
servidor consultado
responde com o nome
de um servidor de
contato
No conheo este
nome, mas pergunte
para esse servidor

3
4

servidor TLD

5
servidor local
dns.poly.edu

6
servidor com autoridade
dns.cs.umass.edu

solicitante
cis.poly.edu
gaia.cs.umass.edu
2: Camada de Aplicao

76

Exemplo de resoluo
de nome pelo DNS servidor DNS raiz
2

consulta recursiva:
transfere a

3
7

responsabilidade de
resoluo do nome
para o servidor de
nomes contatado
servidor DNS local
carga pesada?
dns.poly.edu

solicitante

6
servidor TLD
5

8
servidor DNS com autoridade
dns.cs.umass.edu

cis.poly.edu
gaia.cs.umass.edu
2: Camada de Aplicao

77

DNS: uso de cache, atualizao de dados


uma vez que um servidor qualquer aprende um mapeamento,

ele o coloca numa cache local


entradas na cache so sujeitas a temporizao
(desaparecem) depois de um certo tempo (TTL)
Entradas na cache podem estar desatualizadas (traduo
nome/endereo do tipo melhor esforo!)

Se o endereo IP de um nome de host for alterado, pode no


ser conhecido em toda a Internet at que todos os TTLs
expirem

esto sendo projetados pela IETF mecanismos de

atualizao/notificao dos dados

RFCs 2136, 3007, 4033/4/5

http://www.ietf.org/html.charters/dnsext-charter.html

2: Camada de Aplicao

78

Registros DNS
DNS: BD distribudo contendo registros de recursos (RR)
formato RR: (nome, valor, tipo, ttl)
Tipo=A
nome nome de hospedeiro
valor o seu endereo IP
Tipo=NS

nome domnio (p.ex.


foo.com.br)
valor endereo IP de
servidor oficial de nomes
para este domnio

Tipo=CNAME
nome nome alternativo
(alias) para algum nome
cannico (verdadeiro)
valor o nome cannico
Tipo=MX
nome domnio
valor nome do servidor de
correio para este domnio
2: Camada de Aplicao

79

DNS: protocolo e mensagens


protocolo DNS: mensagens de pedido e resposta,
ambas com o mesmo formato de mensagem
cabealho de msg
identificao: ID de 16 bit para

pedido, resposta ao pedido usa


mesmo ID
flags:
pedido ou resposta
recurso desejada
recurso permitida
resposta oficial

2: Camada de Aplicao

80

DNS: protocolo e mensagens

2: Camada de Aplicao

81

Inserindo registros no DNS


Exemplo: acabou de criar a empresa Network

Utopia
Registra o nome netutopia.com.br em uma entidade
registradora (e.x., Registro.br)

Tem de prover para a registradora os nomes e endereos IP


dos servidores DNS oficiais (primrio e secundrio)
Registradora insere dois RRs no servidor TLD .br:

(netutopia.com.br, dns1.netutopia.com.br, NS)


(dns1.netutopia.com.br, 212.212.212.1, A)

Pe no servidor oficial um registro do tipo A para

www.netutopia.com.br e um registro do tipo MX para


netutopia.com.br
2: Camada de Aplicao

82

Ataques ao DNS
Ataques DDoS
Bombardeia os servidores
raiz com trfego

At o momento no
tiveram sucesso
Filtragem do trfego
Servidores DNS locais
cacheiam os IPs dos
servidores TLD,
permitindo que os
servidores razes no
sejam consultados

Bombardeio aos servidores

TLD

Potencialmente mais
perigoso

Ataques de redirecionamento
Pessoa no meio

Intercepta as consultas

Envenenamento do DNS

Envia respostas falsas


para o servidor DNS que
as coloca em cache

Explorao do DNS para


DDoS
Envia consultas com
endereo origem
falsificado: IP alvo
Requer amplificao
2: Camada de Aplicao

83

Captulo 2: Roteiro
2.1 Princpios de

aplicaes de rede
2.2 A Web e o HTTP
2.3 Transferncia de
arquivo: FTP
2.4 Correio Eletrnico
na Internet
2.5 DNS: o servio de
diretrio da Internet

2.6 Aplicaes P2P


2.7 Programao e

desenvolvimento de
aplicaes com TCP
2.8 Programao de
sockets com UDP

2: Camada de Aplicao

84

Arquitetura P2P pura


sem servidor sempre ligado
sistemas finais arbitrrios se
comunicam diretamente
pares esto conectados de
forma intermitente e mudam
seus endereos IP

par-par

Exemplos:

Distribuio de arquivos
(BitTorrent)
Streaming (KanKan)
VoIP (Skype)

2: Camada de Aplicao

85

Distribuio de Arquivo: C/S x P2P


Pergunta: Quanto tempo leva para distribuir um arquivo
de um servidor para N pares?

Capacide de upload/download de um par um recurso limitado

Servidor

Arquivo,
tamanho F

us
dN
uN

u1 d1

u2

d2

Rede (com
banda abundante)

us: banda de upload


do servidor
ui: banda de upload
do par i
di: banda de
download do par i

2: Camada de Aplicao

86

Tempo de distribuio do arquivo: C/S

transmisso do servidor: deve enviar


sequencialmente N cpias do
arquivo:

Tempo para enviar uma cpia = F/us

Tempo para enviar N cpias = NF/us

us
di
rede

ui

cliente: cada cliente deve fazer o


download de uma cpia do arquivo

dmin = taxa mnima de download

Tempo de download para usurio com


menor taxa: F/dmin

Tempo para distribuir F


para N clientes usando
abordagem cliente/servidor

Dcs max { NF/us, F/dmin }


cresce linearmente com N
2: Camada de Aplicao

87

Tempo de distribuio do arquivo: P2P


transmisso do servidor: deve

enviar pelo menos uma cpia:

tempo para enviar uma cpia: F/us

us

cliente: cada cliente deve

di

baixar uma cpia do arquivo

network

Tempo de download para usurio


com menor taxa: F/dmin

ui

clientes: no total devem baixar NF bits

Taxa mxima de upload : us +

tempo para distribuir


F para N clientes
DP2P
usando abordagem P2P

> max{F/us,,F/dmin,,NF/(us + ui)}

cresce linearmente com N


assim como este, cada par traz capacidade de servio
2: Camada de Aplicao

88

Cliente-servidor x P2P: Exemplo


Taxa de upload do cliente= u, F/u = 1 hora, us = 10u, dmin us

2: Camada de Aplicao

89

Distribuio de arquivo P2P:


BitTorrent
arquivos divididos em blocos de 256kb
Pares numa torrente enviam/recebem blocos do arquivo
tracker: registra pares
participantes de uma
torrente

torrente: grupo de
pares trocando
blocos de um arquivo

Alice chega
obtm lista de
parceiros do tracker
e comea a trocar blocos
de arquivos com os
parceiros na torrente
2: Camada de Aplicao

90

Distribuio de arquivo P2P:


BitTorrent
par que se une torrente:

no tem nenhum bloco, mas ir


acumul-los com o tempo
registra com o tracker para
obter lista dos pares, conecta a
um subconjunto de pares
(vizinhos)

enquanto faz o download, par carrega blocos para outros pares


par pode mudar os parceiros com os quais troca os blocos
pares podem entrar e sair
quando o par obtiver todo o arquivo, ele pode (egoisticamente)

sair ou permanecer (altruisticamente) na torrente

2: Camada de Aplicao

91

BitTorrent: pedindo, enviando blocos de


arquivos
obtendo blocos:
num determinado instante,
pares distintos possuem
diferentes subconjuntos de
blocos do arquivo
periodicamente, um par
(Alice) pede a cada vizinho
a lista de blocos que eles
possuem
Alice envia pedidos para os
pedaos que ainda no tem

Primeiro os mais raros

Enviando blocos: toma l, d c!


Alice envia blocos para os
quatro vizinhos que estejam
lhe enviando blocos na taxa
mais elevada

outros pares foram sufocados por


Alice
Reavalia os 4 mais a cada 10 segs

a cada 30 segs: seleciona

aleatoriamente outro par,


comea a enviar blocos

optimistically unchoked
o par recm escolhido pode se
unir aos 4 mais

2: Camada de Aplicao

92

BitTorrent: toma l, d c!
(1) Alice optimistically unchokes Bob
(2) Alice se torna um dos quatro melhores provedores de Bob;
Bob age da mesma forma
(3) Bob se torna um dos quatro melhores provedores de Alice

Com uma taxa de upload mais


alta, pode encontrar melhores
parceiros de troca e obter o
arquivo mais rapidamente!
2: Camada de Aplicao

93

Distributed Hash Table (DHT)


DHT: uma base de dados P2P distribuda
base de dados possui duplas (chave, valor);

exemplos:

chave: cpf; valor: nome da pessoa


chave: ttulo do filme; valor: endereo IP

Distribui as duplas (chave, valor) entre os milhes

de pares
um par consulta a DHT com a chave

a DHT retorna valores que casam com a chave

pares podem tambm inserir duplas (chave, valor)

2: Camada de Aplicao

94

P: como atribuir chaves aos


pares?
questo central:
atribuio duplas (chave, valor) aos pares.
ideia bsica:

converter cada chave para um inteiro


atribuir inteiros para cada par
colocar a dupla (chave, valor) no par que esteja
mais prximo da chave

2: Camada de Aplicao

95

Identificadores DHT
designa um identificador inteiro a cada par

na faixa [0, 2n-1] de algum n fixo.

cada identificador representado por n bits.

requer que cada chave seja um inteiro na

mesma faixa
para encontrar a chave inteira, aplica a
funo de hash chave original.

ex., chave = hash(Led Zeppelin IV)


por isto que chamada de tabela de hash
distribuda.

2: Camada de Aplicao

96

Alocao de chaves aos pares


regra: atribui a chave ao par que tiver a ID

mais prxima.
conveno de leitura: o mais prximo o
sucessor imediato da chave.
Ex., n=4; pares: 1,3,4,5,8,10,12,14
chave = 13, ento par sucessor = 14
chave = 15, ento par sucessor = 1

2: Camada de Aplicao

97

DHT circular (I)


1
3

15

4
12

5
10

cada par rastreia apenas o seu sucessor e

antecessor imediatos.
rede sobreposta (overlay)

2: Camada de Aplicao

98

DHT circular (II)


Em mdia
O(N)
mensagens
Eu sou
para
resolver a
1111
consulta,
quando
1110
houver N
pares
1100

0001
0011
1110

0100
1110

1110

Defina mais prximo


como o sucessor mais
prximo

Quem
responsvel pela
chave 1110 ?

1110

0101

1110

1010

1000
2: Camada de Aplicao

99

DHT circular com atalhos


1

Quem responsvel
pela chave 1110?

3
15
4
12

5
10

cada par rastreia os endereos IP do

antecessor, sucessor e atalhos.


reduz de 6 para 2 mensagens.
Permite projetar atalhos de modo que para
O(log N) vizinhos, O(log N) mensagens na
consulta
2: Camada de Aplicao

100

Peer churn
1

tratando peer churn:


pares

podem chegar e
sair (churn)
cada para conhece o
3
15
endereo dos seus dois
sucessores
4
cada par periodicamente
12
envia um ping aos seus
5
dois sucessores para
10
verificar se esto vivos
8
se o sucessor imediato
exemplo: par 5 sai abruptamente
sair,
escolha
prximo
par 4 detecta a sada do par
5; torna
8 ooseu
como
o sucessor
sucessor imediato; perguntasucessor
a 8 quem
o seu
imediato.imediato de 8
sucessor imediato; torna o sucessor
como o seu segundo sucessor.
o que fazer caso o par 13 resolva entrar?
2: Camada de Aplicao
101

Estudo de caso P2P: Skype


Skype clients (SC)
inerentemente P2P:

comunicao entre pares


de usurios.
protocolo proprietrio da Skype
login server
camada de aplicao
(inferido atravs de
engenharia reversa)
overlay hierrquico com
SNs
ndice mapeia nomes dos
usurios a endereos IP;
distribudo atravs dos
SNs

Supernode
(SN)

2: Camada de Aplicao

102

Pares como intermedirios


(relays)
Problema quando tanto

Alice como Bob esto


atrs de NATs.

O NAT impede que um


par externo inicie uma
chamada com um par
interno

Soluo:

Intermedirio escolhido,
usando os SNs de Alice e de
Bob.
Cada par inicia sesso com o
intermedirio
Pares podem se comunicar
atravs de NATs atravs do
intermedirio
2: Camada de Aplicao

103

Captulo 2: Roteiro
2.1 Princpios de

aplicaes de rede
2.2 A Web e o HTTP
2.3 Transferncia de
arquivo: FTP
2.4 Correio Eletrnico
na Internet
2.5 DNS: o servio de
diretrio da Internet

2.6 Aplicaes P2P


2.7 Programao e

desenvolvimento de
aplicaes com TCP
2.8 Programao de
sockets com UDP

2: Camada de Aplicao

104

Programao com sockets


Meta: aprender a construir aplicaes cliente/servidor
que se comunicam usando sockets
socket
API Sockets
uma interface (uma
apareceu no BSD4.1 UNIX

em 1981
so explicitamente criados,
usados e liberados por apls
paradigma cliente/servidor
dois tipos de servio de
transporte via API Sockets

datagrama no confivel
fluxo de bytes, confivel

porta), local ao
hospedeiro, criada por e
pertencente aplicao, e
controlado pelo SO,
atravs da qual um
processo de aplicao
pode tanto enviar como
receber mensagens
para/de outro processo
de aplicao
(remoto ou local)
2: Camada de Aplicao

105

Programao com sockets usando TCP


Socket: uma porta entre o processo de aplicao e um
protocolo de transporte fim-a-fim (UDP ou TCP)
Servio TCP: transferncia confivel de bytes de um
processo para outro

controlado pelo
desenvolvedor de
aplicao
controlado
pelo sistema
operacional

processo
socket
TCP com
buffers,
variveis
estao ou
servidor

internet

processo
socket
TCP com
buffers,
variveis

controlado pelo
desenvolvedor de
aplicao
controlado
pelo sistema
operacional

estao ou
servidor
2: Camada de Aplicao

106

Programao com sockets usando TCP


Cliente deve contactar servidor Quando contactado pelo cliente, o
processo servidor deve antes
TCP do servidor cria socket novo
para que o processo servidor possa
estar em execuo
se comunicar com o cliente
servidor deve antes ter
permite que o servidor
criado socket (porta) que
converse com mltiplos clientes
aguarda contato do cliente
Endereo IP e porta origem
Cliente contacta servidor para:
so usados para distinguir os
criar socket TCP local ao
clientes (mais no cap. 3)
cliente
especificar endereo IP,
nmero de porta do processo
ponto de vista da aplicao
servidor
TCP prov transferncia
Quando cliente cria socket:
confivel, ordenada de bytes
TCP cliente cria conexo com
TCP do servidor
(tubo) entre cliente e servidor
2: Camada de Aplicao

107

Comunicao entre sockets

2: Camada de Aplicao

108

Jargo para Fluxo (Stream)


Um fluxo (stream) uma

seqncia de caracteres
que fluem de ou para um
processo.
Um fluxo de entrada
conectado a alguma fonte
de entrada para o processo,
por exemplo, teclado ou
socket.
Um fluxo de sada
conectado a uma fonte de
sada, por exemplo, um
monitor ou um socket.

2: Camada de Aplicao

109

Programao com sockets usando TCP

2.
3.

4.

cliente l linha da entrada


padro (fluxo doUsurio),
envia para servidor via
socket (fluxo
paraServidor)
servidor l linha do socket
servidor converte linha para
letras maisculas, devolve
para o cliente
cliente l linha modificada do
socket (fluxo doServidor),
imprime-a

input
stream

Processo
Process
cliente

Fluxo de entrada:
Seqncia de bytes
recebidos pelo
processo

Fluxo de sada:
Seqncia de bytes
transmitidos pelo
processo
output
stream

outToServer

1.

inFromServer

Exemplo de apl. clienteservidor:

monitor

inFromUser

keyboard

input
stream

Socket
clientSocket
cliente TCP socketTCP
to network

from network

2: Camada de Aplicao

110

Interaes cliente/servidor usando o TCP


Servidor (executa em nomeHosp)

Cliente

cria socket,
porta=x, para
receber pedido:
socketRecepo =
ServerSocket ()

TCP

aguarda chegada de
pedido de conexo
setup
socketConexo =
socketRecepo.accept()
l pedido de
socketConexo
escreve resposta
para socketConexo
fecha
socketConexo

da conexo

cria socket,
abre conexo a nomeHosp, porta=x
socketCliente =
Socket()
Envia pedido usando
socketCliente

l resposta de
socketCliente
fecha
socketCliente
2: Camada de Aplicao

111

Exemplo: cliente Java (TCP)

Cria
fluxo de entrada
Cria
socket de cliente,
conexo ao servidor
Cria
fluxo de sada
ligado ao socket

import java.io.*;
import java.net.*;
class ClienteTCP {
public static void main(String argv[]) throws Exception
{
String frase;
String fraseModificada;
BufferedReader doUsuario =
new BufferedReader(new InputStreamReader(System.in));
Socket socketCliente = new Socket(nomeHosp", 6789);
DataOutputStream paraServidor =
new DataOutputStream(socketCliente.getOutputStream());
2: Camada de Aplicao

112

Exemplo: cliente Java (TCP), cont.


Cria
fluxo de entrada
ligado ao socket

BufferedReader doServidor =
new BufferedReader(new
InputStreamReader(socketCliente.getInputStream()));
frase = doUsuario.readLine();

Envia linha
ao servidor

paraServidor.writeBytes(frase + '\n');
fraseModificada = doServidor.readLine();

L linha
do servidor

System.out.println(Do Servidor: " + fraseModificada);


socketCliente.close();

}
}

2: Camada de Aplicao

113

Exemplo: servidor Java (TCP)


import java.io.*;
import java.net.*;
class servidorTCP {

Cria socket
para recepo
na porta 6789
Aguarda, no socket
para recepo, o
contato do cliente
Cria fluxo de
entrada, ligado
ao socket

public static void main(String argv[]) throws Exception


{
String fraseCliente;
String FraseMaiusculas;
ServerSocket socketRecepcao = new ServerSocket(6789);
while(true) {
Socket socketConexao = socketRecepcao.accept();
BufferedReader doCliente =
new BufferedReader(new
InputStreamReader(socketConexao.getInputStream()));

2: Camada de Aplicao

114

Exemplo: servidor Java (TCP), cont


Cria fluxo
de sada, ligado
ao socket
L linha
do socket

DataOutputStream paraCliente =
new DataOutputStream(socketConexo.getOutputStream());
fraseCliente= doCliente.readLine();
fraseEmMaiusculas= fraseCliente.toUpperCase() + '\n';

Escreve linha
ao socket

paraCliente.writeBytes(fraseEmMaiusculas);
}
}

Final do lao while,


volta ao incio e aguarda
conexo de outro cliente
2: Camada de Aplicao

115

Exemplo: cliente Python (TCP)


inclui a biblioteca de sockets
do Python

cria socket TCP socket


para o servidor, porta
remota 12000

no h necessidade de
especificar nem o nome
do servidor nem a porta

from socket import *


serverName = servername
serverPort = 12000
clientSocket = socket(AF_INET, SOCK_STREAM)
clientSocket.connect((serverName,serverPort))
sentence = raw_input(Input lowercase sentence:)
clientSocket.send(sentence)
modifiedSentence = clientSocket.recv(1024)
print From Server:, modifiedSentence
clientSocket.close()

2: Camada de Aplicao

116

Exemplo: servidor Python (TCP)


cria socket TCP de
recepo
servidor inicia a escuta
por solicitaes TCP
loop infinito
servidor espera no accept()
por solicitaes, um novo
socket criado no retorno
l bytes do socket (mas
no precisa ler endereo
como no UDP)
fecha conexo para este
cliente (mas no o socket
de recepo)

from socket import *


serverPort = 12000
serverSocket = socket(AF_INET,SOCK_STREAM)
serverSocket.bind((,serverPort))
serverSocket.listen(1)
print The server is ready to receive
while 1:
connectionSocket, addr = serverSocket.accept()
sentence = connectionSocket.recv(1024)
capitalizedSentence = sentence.upper()
connectionSocket.send(capitalizedSentence)
connectionSocket.close()

2: Camada de Aplicao

117

Captulo 2: Roteiro
2.1 Princpios de

aplicaes de rede
2.2 A Web e o HTTP
2.3 Transferncia de
arquivo: FTP
2.4 Correio Eletrnico
na Internet
2.5 DNS: o servio de
diretrio da Internet

2.6 Aplicaes P2P


2.7 Programao e

desenvolvimento de
aplicaes com TCP
2.8 Programao de
sockets com UDP

2: Camada de Aplicao

118

Programao com sockets usando UDP


UDP: no tem conexo entre
cliente e servidor
no tem handshaking
remetente coloca
explicitamente endereo IP
e porta do destino
servidor deve extrair
endereo IP, porta do
remetente do datagrama
recebido

ponto de vista da aplicao


UDP prov transferncia
no confivel de grupos
de bytes (datagramas)
entre cliente e servidor

UDP: dados transmitidos


podem ser recebidos fora
de ordem, ou perdidos
2: Camada de Aplicao

119

Interaes cliente/servidor usando o UDP


Servidor (executa em nomeHosp)
cria socket,
porta=x, para
pedido que chega:
socketServidor =
DatagramSocket()

l pedido do
socketServidor
escreve resposta
ao socketServidor
especificando endereo
IP, nmero de porta
do cliente

Cliente
cria socket,
socketCliente =
DatagramSocket()
cria, enderea (nomeHosp, porta=x,
envia pedido em datagrama
usando socketCliente

l resposta do
socketCliente
fecha
socketCliente

2: Camada de Aplicao

120

Exemplo: Cliente Java (UDP)

UDP

2: Camada de Aplicao

121

Exemplo: cliente Java (UDP)


import java.io.*;
import java.net.*;

Cria
fluxo de entrada
Cria
socket de cliente
Traduz nome de
hospedeiro ao
endereo IP
usando DNS

class clienteUDP {
public static void main(String args[]) throws Exception
{
BufferedReader doUsuario=
new BufferedReader(new InputStreamReader(System.in));
DatagramSocket socketCliente = new DatagramSocket();
InetAddress IPAddress = InetAddress.getByName(nomeHosp");
byte[] dadosEnvio = new byte[1024];
byte[] dadosRecebidos = new byte[1024];
String frase = doUsuario.readLine();
dadosEnvio = frase.getBytes();
2: Camada de Aplicao

122

Exemplo: cliente Java (UDP) cont.

Cria datagrama
com dados para
enviar,
comprimento,
endereo IP, porta
Envia datagrama
ao servidor
L datagrama
do servidor

DatagramPacket pacoteEnviado =
new DatagramPacket(dadosEnvio, dadosEnvio.length,
IPAddress, 9876);
socketCliente.send(pacoteEnviado);
DatagramPacket pacoteRecebido =
new DatagramPacket(dadosRecebidos, dadosRecebidos.length);
socketCliente.receive(pacoteRecebido);
String fraseModificada =
new String(pacoteRecebido.getData());
System.out.println(Do Servidor:" + fraseModificada);
socketCliente.close();
}

}
2: Camada de Aplicao

123

Exemplo: cliente Python (UDP)


inclui a biblioteca de sockets
do Python

cria socket UDP para


servidor
obtm entrada do teclado do
usurio
acrescenta o nome do
servidor e nmero da porta
mensagem; envia pelo socket
l caracteres de resposta
do socket e converte em
string
imprime string recebido e
fecha socket

from socket import *


serverName = hostname
serverPort = 12000
clientSocket = socket(socket.AF_INET,
socket.SOCK_DGRAM)
message = raw_input(Input lowercase sentence:)
clientSocket.sendto(message,(serverName, serverPort))
modifiedMessage, serverAddress =
clientSocket.recvfrom(2048)
print modifiedMessage
clientSocket.close()

2: Camada de Aplicao

124

Servidor UDP

2: Camada de Aplicao

125

Exemplo: servidor Java (UDP)


import java.io.*;
import java.net.*;

Cria socket
para datagramas
na porta 9876

class servidorUDP {
public static void main(String args[]) throws Exception
{
DatagramSocket socketServidor = new DatagramSocket(9876);
byte[] dadosRecebidos = new byte[1024];
byte[] dadosEnviados = new byte[1024];

Aloca memria para


receber datagrama
Recebe
datagrama

while(true)
{
DatagramPacket pacoteRecebido =
new DatagramPacket(dadosRecebidos,
dadosRecebidos.length);
socketServidor.receive(pacoteRecebido);
2: Camada de Aplicao

126

Exemplo: servidor Java (UDP), cont


String frase = new String(pacoteRecebido.getData());

Obtm endereo
IP, no. de porta
do remetente

InetAddress IPAddress = pacoteRecebido.getAddress();


int porta = pacoteRecebido.getPort();
String fraseEmMaiusculas = frase.toUpperCase();
dadosEnviados = fraseEmMaiusculas.getBytes();

Cria datagrama p/
enviar ao cliente
Escreve
datagrama
no socket
}

DatagramPacket pacoteEnviado =
new DatagramPacket(dadosEnviados,
dadosEnviados.length, IPAddress, porta);
socketServidor.send(pacoteEnviado);
}
}

Fim do lao while,


volta ao incio e aguarda
chegar outro datagrama
2: Camada de Aplicao

127

Exemplo: servidor Python (UDP)

cria socket UDP


liga socket porta local
nmero 12000
loop infinito

from socket import *


serverPort = 12000
serverSocket = socket(AF_INET, SOCK_DGRAM)
serverSocket.bind(('', serverPort))
print The server is ready to receive
while 1:

l mensagem do socket
UDP, obtendo endereo do
cliente (IP e porta do
cliente)
retorna string em
maisculas para este cliente

message, clientAddress = serverSocket.recvfrom(2048)


modifiedMessage = message.upper()
serverSocket.sendto(modifiedMessage, clientAddress)

2: Camada de Aplicao

128

Captulo 2: Resumo
Nosso estudo sobre aplicaes de rede est agora
completo!
Protocolos especficos:
Arquiteturas de aplicaes

cliente-servidor
P2P

Requisitos de servio das

aplicaes:

confiabilidade, banda, atraso

Modelos de servio de

HTTP
FTP
SMTP, POP, IMAP
DNS
P2P: BitTorrent, DHT

Programao de sockets

transporte da Internet

orientado conexo,
confivel: TCP
no confivel, datagramas:
UDP
2: Camada de Aplicao

129

Captulo 2: Resumo
Mais importante: aprendemos sobre protocolos
troca tpica de mensagens

pedido/resposta

cliente solicita info ou servio


servidor responde com dados,
cdigo de status

formatos de mensagens:

cabealhos: campos com info


sobre dados (metadados)
dados: info sendo comunicada

Temas importantes:
msgs de controle vs. dados
na banda, fora da banda
centralizado vs.
descentralizado
s/ estado vs. c/ estado
transferncia de msgs
confivel vs. no confivel
complexidade na borda da
rede
2: Camada de Aplicao

130