Capítulo 2: Camada de Aplicação
Metas do capítulo:
❒ aspectos conceituais e de
Aplicações e protocolos da camada de aplicação
Mais metas do capítulo
❒ protocolos específicos:
Aplicação: processos distribuídos
em comunicação
❍ executem em hospedeiros
no “espaço de usuário”
❍ trocam mensagens para
implementar aplicação
❍ p.ex., correio, transf. de
arquivo, WWW
Protocolos da camada de apl.
❍ uma “parte” da aplicação
❍ define mensagens trocadas
por apls e ações tomadas
❍ usam serviços providos por
protocolos de camadas
inferiores
implementação de
❍ http
protocolos de aplicação
❍ ftp
em redes
❍ smtp
❍ paradigma cliente
❍ pop
servidor
❍ dns
❍ modelos de serviço
❒ aprenda sobre protocolos ❒ a programação de
através do estudo de
aplicações de rede
protocolos populares do
❍ programação usando sockets
nível da aplicação
2: Camada de Aplicação
programa que executa num
hospedeiro.
❒ 2 processos no mesmo
hospedeiro se comunicam
usando communicação entre
processos definida pelo
sistema operacional (SO).
❒ 2 processos em
hospedeiros distintos se
comunicam usando um
protocolo da camada de
apalicação.
Apl. de rede típica tem duas
partes: cliente and servidor
(UA) é uma interface
entre o usuário e a
aplicação de rede.
❍
❍
WWW: browser
Correio:
leitor/compositor de
mensagens
streaming audio/video:
tocador de mídia
2: Camada de Aplicação
3
❒ algumas apls (p.ex. áudio)
podem tolerar algumas
perdas
❒ outras (p.ex., transf. de
arquivos, telnet) requerem
transferência 100%
confiável
aplicação
transporte
rede
enlace
física
pedido
resposta
aplicação
transporte
rede
enlace
física
2: Camada de Aplicação
4
Largura de banda
❒ algumas apls (p.ex.,
multimídia) requerem
quantia mínima de banda
para serem “viáveis”
❒ outras apls (“apls elásticas”)
conseguem usar qq quantia
de banda disponível
Temporização
❒ algumas apls (p.ex.,
receptor determine a
qual processo deve ser
entregue a mensagem
telefonia Internet, jogos
interativos) requerem
baixo retardo para serem
“viáveis”
… voltamos mais tarde a este assunto.
2: Camada de Aplicação
Cliente:
❒ inicia contato com o servidor
(“fala primeiro”)
❒ tipicamente solicita serviço do
servidor
❒ para WWW, cliente
implementado no browser; para
correio no leitor de mensagens
Servidor:
❒ provê ao cliente o serviço
requisitado
❒ p.ex., servidor WWW envia
página solicitada; servidor de
correio entrega mensagens
Perda de dados
API: interface de
P: como um processo pode
programação de
“identificar”o outro
aplicações
processo com o qual
quer se comunicar?
❒ define interface entre
❍ endereço IP do
aplicação e camada de
hospedeiro do outro
transporte
processo
❒ socket (= tomada) : API
❍ “número de porta” da Internet
permite que o hospedeiro
2 processos se comunicam
enviando dados para um
socket ou lendo dados de
um socket
2
De que serviço de transporte uma
aplicação precisa?
Protocolos da camada de aplicação (cont).
❍
2: Camada de Aplicação
Paradigma cliente-servidor (C-S)
❒ Um agente de usuário
❍
aplicação
transporte
rede
enlace
física
aplicação
transporte
rede
enlace
física
1
Aplicações de rede: algum jargão
❒ Um processo é um
aplicação
transporte
rede
enlace
física
5
2: Camada de Aplicação
6
Serviços providos por protocolos de
transporte Internet
Requisitos do serviço de transporte de apls comuns
Aplicação
transferência de arqs
correio
documentos WWW
áudio/vídeo de
tempo real
áudio/vídeo gravado
jogos interativos
apls financeiras
Sensibilidade
temporal
Perdas
Banda
sem perdas
sem perdas
sem perdas
tolerante
elástica
elástica
elástica
áudio: 5Kb-1Mb
vídeo:10Kb-5Mb
como anterior
> alguns Kbps
elástica
tolerante
tolerante
sem perdas
serviço TCP:
❒ orientado a conexão: setup
não
não
não
sim, 100’s mseg
❒
sim, alguns segs
sim, 100’s mseg
sim e não
❒
❒
❒
2: Camada de Aplicação
7
Apls Internet: seus protocolos e seus
protocolos de transporte
Aplicação
correio eletrônico
accesso terminal remoto
WWW
transferência de arquivos
streaming multimídia
servidor de arquivo remoto
telefonia Internet
Protocolo da
camada de apl
Protocolo de
transporte usado
smtp [RFC 821]
telnet [RFC 854]
http [RFC 2068]
ftp [RFC 959]
proprietário
(p.ex. RealNetworks)
NSF
proprietário
(p.ex., Vocaltec)
TCP
TCP
TCP
TCP
TCP ou UDP
requerido entre cliente,
servidor
transporte confiável entre
processos remetente e
receptor
controle de fluxo: remetente
não vai “afogar” receptor
controle de
congestionamento:
estrangular remetente quando
a rede carregada
não provê: garantias
temporais ou de banda mínima
serviço UDP:
❒ transferência de dados não
confiável entre processos
remetente e receptor
❒ não provê: setup da conexão,
confiabilidade, controle de
fluxo, controle de
congestionamento, garantias
temporais ou de banda
mínima
P: Qual é o interesse em ter um
UDP?
2: Camada de Aplicação
8
WWW: algum jargão
❒ Página WWW:
❍ consiste de “objetos”
❍ endereçada por uma URL
❒ Agent de usuário para
WWW se chama de
browser:
❍
❒ Quase todas as páginas
WWW consistem de:
❍
❍
TCP ou UDP
tipicamente UDP
página base HTML, e
vários objetos
referenciados.
❍
MS Internet Explorer
Netscape Communicator
❒ Servidor para WWW se
chama “servidor
WWW”:
❍
❒ URL tem duas partes:
❍
nome de hospedeiro, e
nome de caminho:
Apache (domínio público)
MS Internet Information
Server (IIS)
www.univ.br/algum-depto/pic.gif
2: Camada de Aplicação
http: hypertext transfer
protocol
aplicação para WWW
❒ modelo cliente/servidor
❍ cliente: browser que
pede, recebe, “visualiza”
objetos WWW
❍ servidor: servidor
WWW envia objetos em
resposta a pedidos
❒ http1.0: RFC 1945
❒ http1.1: RFC 2068
ped
PC executa
Explorer
10
Mais sobre o protocolo http
WWW: o protocolo http
❒ protocolo da camada de
2: Camada de Aplicação
9
res
ido
pos
ta
http: serviço de
transporte TCP:
htt
p
❒ cliente inicia conexão TCP
htt
p
p
htt
tp Servidor
ht
pe
executando
sta
po
servidor
s
re
WWW
do NCSA
o
did
Mac executa
Navigator
2: Camada de Aplicação
11
(cria socket) ao servidor,
porta 80
❒ servidor aceita conexão TCP
do cliente
❒ mensagens http (mensagens
do protocolo da camada de
apl) trocadas entre browser
(cliente http) e servidore
WWW (servidor http)
❒ encerra conexão TCP
http é “sem estado”
❒ servidor não mantém
informação sobre
pedidos anteriores do
cliente
Nota
Protocolos que mantêm
“estado” são complexos!
❒ história passada (estado)
tem que ser guardada
❒ Caso caia servidor/cliente,
suas visões do “estado”
podem ser inconsistentes,
devem ser reconciliadas
2: Camada de Aplicação
12
Exemplo de http
Exemplo de http (cont.)
Supomos que usuário digita a URL
www.algumaUniv.br/algumDepartmento/inicial.index
(contém texto,
referências a 10
imagens jpeg)
4. servidor http encerra conexão
5. cliente http recebe mensagem
1a. Cliente http inicia conexão
TCP a servidor http (processo)
a www.algumaUniv.br. Porta 80
é padrão para servidor http.
2. cliente http envia mensagem
de pedido de http (contendo
URL) através do socket da
conexão TCP
tempo
1b. servidor http no hospedeiro
www.algumaUniv.br espera por
conexão TCP na porta 80.
“aceita” conexão, avisando ao
cliente
6. Passos 1 a 5 repetidos para
cada um dos 10 objetos jpeg
3. servidor http recebe mensagem
de pedido, formula mensagem
de resposta contendo objeto
solicitado
(algumDepartmento/inicial.index),
envia mensagem via socket
2: Camada de Aplicação
tempo
2: Camada de Aplicação
13
Conexões não persistente and persistente
❒ Dois tipos de mensagem http: pedido, resposta
❒ mensagem de pedido http:
❍ ASCII (formato legível por pessoas)
linha do pedido
(comandos GET,
POST, HEAD)
GET /somedir/page.html HTTP/1.0
User-agent: Mozilla/4.0
Accept: text/html, image/gif,image/jpeg
linhas do Accept-language:fr
cabeçalho
Carriage return,
line feed
indicate fim
de mensagem
15
(carriage return (CR), line feed(LF) adicionais)
2: Camada de Aplicação
16
formato de mensagem http: resposta
mensagem de pedido http: formato geral
linha de status
(protocolo,
código de status,
frase de status)
linhas de
cabeçalho
dados, p.ex.,
arquivo html
solicitado
2: Camada de Aplicação
14
formato de mensagem http: pedido
Persistente
❒ default for HTTP/1.1
❒ na mesma conexão TCP:
servidor analisa pedido,
responde, analisa novo
pedido,..
❒ Cliente envia pedidos
para todos objetos
referenciados assim
que recebe o HTML
base .
A maioria de browsers 1.0 ❒ Menos RTTs and menos
usa connexões TCP paralelas. partida lenta.
Não persistente
❒ HTTP/1.0
❒ servidor analisa
pedido, responde, and
encerra conexão TCP
❒ 2 RTTs para trazer
cada objeto
(RTT=round trip time)
❒ transferência de cada
objeto sofre de
partida lenta
2: Camada de Aplicação
TCP .
de resposta contendo arquivo
html, visualiza html.
Analisando arquivo html,
encontra 10 objetos jpeg
referenciados
17
HTTP/1.0 200 OK
Date: Thu, 06 Aug 1998 12:00:15 GMT
Server: Apache/1.3.0 (Unix)
Last-Modified: Mon, 22 Jun 1998 …...
Content-Length: 6821
Content-Type: text/html
dados dados dados dados ...
2: Camada de Aplicação
18
códigos de status da resposta http
Experimente você com http (do lado cliente)
Na primeira linha da mensagem de resposta
servidor->cliente. Alguns códigos típicos:
200 OK
1. Use cliente telnet para seu servidor WWW favorito:
❍
telnet www.ic.uff.br 80 Abre conexão TCP para a porta 80
(porta padrão do servidor http) a www.ic.uff.br.
Qualquer coisa digitada é enviada para a
porta 80 do www.ic.uff.br
sucesso, objeto pedido segue mais adiante nesta mensagem
301 Moved Permanently
❍
objeto pedido mudou de lugar, nova localização
especificado mais adiante nesta mensagem (Location:)
2. Digite um pedido GET http:
400 Bad Request
❍
GET /~michael/index.html HTTP/1.0
mensagem de pedido não entendida pelo servidor
404 Not Found
❍
documento pedido não se encontra neste servidor
3. Examine a mensagem de resposta enviado pelo
servidor http !
505 HTTP Version Not Supported
❍
versão de http do pedido não usada por este servidor
2: Camada de Aplicação
Digitando isto (deve teclar
ENTER duas vezes), está enviando
este pedido GET mínimo (porém
completo) ao servidor http
2: Camada de Aplicação
19
HTML (HyperText Markup Language)
Encadeamento de referências
❒ HTML: uma linguagem simples para hipertexto
❍ começou como versão simples de SGML
❍ construção básica: cadéias de texto anotadas
❒ Referências <A HREF=LinkRef> ... </A>
❍ a componentes do documento local
<A HREF=“importante”> clique para uma dica </A>
❍ a documentos no servidor local
<A HREF=“../index.htm”> voltar ao sumário </A>
❍ a documentos em outros servidores
<A HREF=“http://www.uff.br”> saiba sobre a UFF </A>
❒ Construtores de formato operam sobre cadéias
❍ <b> .. </b>
bold (negrito)
❍ <H1 ALIGN=CENTER> ..título centrado .. </H1>
❍ <BODY bgcolor=white text=black link=red ..> .. </BODY>
❒ Multimídia
❍ imagem embutida: <IMG SRC=“eclipse”>
❍ imagem externa:
<A HREF=“eclipse.gif”> imagem maior </A>
❍ vídeo Mpeg <A HREF=“ByeByeBrasil.mpg”> um bom filme </A>
❍ som
<A HREF=“http://www.sons.br/aniv.au”> feliz niver </A>
❒ vários formatos
❍ listas de bullets, listas ordenadas, listas de definição
❍ tabelas
❍ frames
2: Camada de Aplicação
informação do cliente ao
servidor
❒ HTTP permite enviar
formulários ao servidor
❒ Resposta enviada como
página HTML dinâmica
cliente
WWW
GET/POST
formulário
resposta:
HTML
scripts CGI (programas que
executam no servidor WWW)
❍ CGI - Common Gateway
Interface
❍ scripts CGI escondem
acesso a diferentes serviços
❍ servidor WWW atua como
gateway universal
Sistema de
informação
2: Camada de Aplicação
22
Interação usuário-servidor: autenticação
❒ Formulários processados usando
servidor
WWW
2: Camada de Aplicação
21
Formulários e interação bidirecional
❒ Formulários transmitem
20
Meta da autenticação: controle de
servidor
acesso aos documentos do
cliente
servidor
msg de pedido http comum
❒ sem estado: cliente deve
401: authorization req.
apresentar autorização com
WWW authenticate:
cada pedido
❒ autorização: tipicamente nome,
msg de pedido http comum
senha
+ Authorization:line
❍ authorization: linha de
cabeçalho no pedido
msg de resposta http comum
❍ se não for apresentada
autorização, servidor nega
msg de pedido http comum
accesso, e coloca no
+ Authorization:line
cabeçalho da resposta
tempo
WWW authenticate:
23
msg de resposta http comum
Browser guarda nome e senha para
evitar que sejam pedidos ao usuário a cada acesso.
2: Camada de Aplicação
24
Interação usuário-servidor: cookies
Interação usuário-servidor: GET condicional
servidor
cliente
❒ servidor envia “cookie” ao
❒ Meta: não enviar objeto se
resposta http comum+
cliente na msg de resposta
Set-cookie: #
Set-cookie: 1678453
❒ cliente apresenta cookie
msg de pedido http comum
nos pedidos posteriores
cookie: #
cookie: 1678453
❒ servidor casa cookie-
Ação
específica
msg de resposta http comum do cookie
apresentado com a info
guardada no servidor
❍ autenticação
❍ lembrando preferências
do usuário, opções
anteriores
msg de pedido http comum
Ação
específica
msg de resposta http comum do cookie
cookie: #
❒ usuário configura
❍
❍
se objeto no cache do
procurador, este o
devolve imediatamente
na resposta http
senão, solicita objeto do
servidor de origem,
depois devolve resposta
http ao cliente
Servidor
de origem
ped
ido
Servidorprocurador
htt
p
pos
ta
htt
p
ttp
oh
tp
did
ht
pe
ta
s
po
s
re
res
pe
ttp
oh
ttp
ah
ost
sp
did
re
ped
res
ido
pos
htt
p
ta h
ttp
cliente
usuário
na
estação
transferência
do arquivo
msg de pedido http
objeto
modificado
If-modified-since:
<date>
resposta http
HTTP/1.1 200 OK
…
<data>
2: Camada de Aplicação
Suposição: cache está
“próximo” do cliente
(p.ex., na mesma rede)
❒ tempo de resposta
menor: cache “mais
próximo” do cliente
❒ diminui tráfego aos
servidores distantes
26
Servidores
de origem
Internet
pública
enlace de accesso
2 Mbps
rede da
instituição
muitas vezes é um
gargalo o enlace que liga
a rede da instituição ou
do provedor à Internet
LAN 10 Mbps
cache da
instituição
2: Camada de Aplicação
27
ftp: o protocolo de transferência
de arquivos
Interface cliente
do usuário FTP
FTP
HTTP/1.0 304 Not
Modified
❍
Servidor
de origem
2: Camada de Aplicação
contém objeto se cópia no
cache é atual:
resposta http
objeto
não
modificado
HTTP/1.0
304 Not Modified
Por quê usar cache WWW?
Meta: atender pedido do cliente sem envolver servidor de origem
cliente
If-modified-since:
<date>
msg de pedido http
If-modified-since:
<date>
25
Cache WWW (servidor-procurador)
browser: acessos WWW
via procurador
❒ cliente envia todos
pedidos http ao
procurador
cliente já tem (no cache)
versão atual
❒ cliente: especifica data da
cópia no cache no pedido
http
❒ servidor: resposta não
2: Camada de Aplicação
servidor
cliente
msg de pedido http comum
28
ftp: conexões separadas p/ controle, dados
❒ cliente ftp contata servidor
FTP
servidor
sistema de
arquivos
remoto
sistema de
arquivos
local
❒ transferir arquivo de/para hospedeiro remoto
❒ modelo cliente/servidor
cliente: lado que inicia transferência (pode ser de ou
para o sistema remoto)
❍ servidor: hospedeiro remoto
❒ ftp: RFC 959
❒ servidor ftp: porta 21
❍
2: Camada de Aplicação
29
ftp na porta 21,
especificando TCP como
protocolo de transporte
❒ são abertas duas conexões
TCP paralelas:
❍ controle: troca comandos,
respostas entre cliente,
servidor.
“controle fora da banda”
❍ dados: dados de arquivo
de/para servidor
❒ servidor ftp mantém
“estado”: directório corrente,
autenticação realizada
conexão de controle
TCP, porta 21
cliente
FTP
conexão de dados
TCP, porta 20
servidor
FTP
2: Camada de Aplicação
30
Ftp: comandos, respostas
Correio Eletrônico
Comandos típicos:
Códigos de retorno típicos
Três grandes componentes:
❒ enviados em texto ASCII pelo
❒ código e frase de status (como
❒ agentes de usuário (UA)
canal de controle
❒ USER nome
❒ PASS senha
❒ LIST devolve lista de arquivos
❒
❒
no directório corrente
❒ 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 Can’t open data
connection
452 Error writing file
2: Camada de Aplicação
❒ caixa de correio contém
servidor
de correio
agente
de
usuário
smtp
Agente de Usuário
SMTP
de correio
❒ p.ex., Eudora, Outlook, elm,
Netscape Messenger
❒ mensagens de saída e chegando
são armazenadas no servidor
servidor
de correio
SMTP
❒ a.k.a. “leitor de correio”
❒ compor, editar, ler mensagens
agente
de
usuário
servidor
de correio
agente
de
usuário
agente
de
usuário
agente
de
usuário
agente
de
usuário
2: Camada de Aplicação
32
Correio Eletrônico: smtp [RFC 821]
❒ usa tcp para a transferência confiável de msgs do correio
do cliente ao servidor, porta 25
agente
de
usuário
mensagens de chegada
(ainda não lidas) p/ usuário
SMTP
servidor
❒ fila de mensagens contém
de correio
mensagens de saída (a serem
SMTP
enviadas)
❒ protocolo smtp entre
SMTP
agente
servidores de correio para
de
servidor
transferir mensagens de
usuário
de correio
correio
agente
❍ cliente: servidor de
de
correio que envia
usuário
agente
❍ “servidor”: servidor de
de
usuário
correio que recebe
2: Camada de Aplicação
❒ transferência direta: servidor remetente ao servidor
receptor
❒ três fases da transferência
handshaking (cumprimento)
transferência das mensagens
❍ encerramento
❒ interação comando/resposta
❍ comandos: texto ASCII
❍ resposta: código e frase de status
❍
❍
❒ mensagens precisam ser em ASCII de 7-bits
2: Camada de Aplicação
33
Interaction smtp típica
S:
C:
S:
C:
S:
C:
S:
C:
S:
C:
C:
C:
S:
C:
S:
SMTP
❒ simple mail transfer protocol:
31
Correio Eletrônico: servidores de correio
Servidores de correio
servidor
de correio
❒ servidores de correio
agente
de
usuário
fila de
mensagens
de saída
caixa de
correio do usuário
34
Experimente você uma interação smtp :
220 doces.br
HELO consumidor.br
250 Hello consumidor.br, 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
Voce gosta de chocolate?
Que tal sorvete?
.
250 Message accepted for delivery
QUIT
221 doces.br closing connection
2: Camada de Aplicação
35
❒ telnet nomedoservidor 25
❒ veja resposta 220 do servidor
❒ entre comandos HELO, MAIL FROM, RCPT TO,
DATA, QUIT
estes comandos permite que você envie correio sem
usar um cliente (leitor de correio)
2: Camada de Aplicação
36
smtp: últimas palavras
❒ smtp usa conexões
persistentes
❒ smtp requerque a mensagem
(cabeçalho e corpo) sejam em
ascii de 7-bits
❒ algumas cadeias de caracteres
não são permitidas numa
mensagem (p.ex., CRLF.CRLF).
Logo a mensagem pode ter que
ser codificada (normalmente
em base-64 ou “quoted
printable”)
❒ servidor smtp usa CRLF.CRLF
para reconhecer o final da
mensagem
Formato de uma mensagem
Comparação com http
smtp: protocolo para trocar
msgs de correio
RFC 822: padrão para formato
de mensagem de texto:
❒ linhas de cabeçalho, p.ex.,
❒ http: pull (puxar)
❒ email: push (empurrar)
❒ ambos tem interação
comando/resposta, códigos
de status em ASCII
To:
From:
❍ Subject:
diferentes dos comandos de
smtp!
❍
encapsulado em sua própria
mensagem de resposta
❒ smtp: múltiplos objetos de
mensagem enviados numa
mensagem de múltiplas
partes
linha em
branco
corpo
❍
❒ http: cada object é
2: Camada de Aplicação
cabeçalho
❒ corpo
❍
a “mensagem”, somente de
caracteres ASCII
2: Camada de Aplicação
37
Formato de uma mensagem: extensões para
multimídia
❒ MIME: multimedia mail extension, RFC 2045, 2056
Tipos MIME
Content-Type: tipo/subtipo; parâmetros
Text
Audio
conteúdo MIME
❒ subtipos exemplos: plain,
❒ subtipos exemplos : basic
versão MIME
html
❒ charset=“iso-8859-1”,
ascii
❒ linhas adicionais no cabeçalho da msg declaram tipo do
método usado
p/ codificar dados
tipo, subtipo de
dados multimídia,
declaração parâmetros
Dados codificados
From: [email protected]
To: [email protected]
Subject: Imagem de uma bela torta
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Type: image/jpeg
(8-bit codificado mu-law),
32kadpcm (codificação 32
kbps)
Application
Image
❒ outros dados que precisam
❒ subtipos exemplos : jpeg,
gif
base64 encoded data .....
.........................
......base64 encoded data
38
Video
❒ subtipos exemplos : mpeg,
ser processados por um
leitor para serem
“visualizados”
❒ subtipos exemplos :
msword, octet-stream
quicktime
2: Camada de Aplicação
2: Camada de Aplicação
39
Tipo Multipart
40
Protocolos de accesso ao correio
From: [email protected]
To: [email protected]
Subject: Imagem de uma bela torta
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=98766789
agente
de
usuário
--98766789
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain
SMTP
SMTP
servidor de correio
do remetente
POP3 ou
IMAP
agente
de
usuário
servidor de correio
do receptor
❒ SMTP: entrega/armazenamento no servidor do receptor
caro Bernardo,
Anexa a imagem de uma torta deliciosa.
--98766789
Content-Transfer-Encoding: base64
Content-Type: image/jpeg
❒ protocolo de accesso ao correio: recupera do servidor
❍
base64 encoded data .....
.........................
......base64 encoded data
--98766789--
❍
❍
2: Camada de Aplicação
41
POP: Post Office Protocol [RFC 1939]
• autorização (agente <-->servidor) e transferência
IMAP: Internet Mail Access Protocol [RFC 1730]
• mais comandos (mais complexo)
• manuseio de msgs armazenadas no servidor
HTTP: Hotmail , Yahoo! Mail, Webmail, etc.
2: Camada de Aplicação
42
Protocolo POP3
fase de autorização
❒ comandos do cliente:
user: declara nome
❍ pass: senha
❒ servidor responde
❍ +OK
❍ -ERR
❍
fase de transação, cliente:
❒ list: lista números das
msgs
❒ retr: recupera msg por
número
❒ dele: apaga msg
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
❒ quit
2: Camada de Aplicação
DNS: Domain Name System
on
43
Servidores de nomes DNS
local
servidor de nomes autoritativo:
❍
❍
p/ hospedeiro: guarda nome,
endereço IP dele
pode realizar tradução
nome/endereço para este nome
2: Camada de Aplicação
Exemplo simples do DNS
❍
❒ base de dados distribuída
CPF, nome, no. de
Passaporte
hospedeiros, roteadores
Internet :
❍
❍
endereço IP (32 bit) usado p/ endereçar
datagramas
“nome”, e.g.,
jambo.ic.uff.br - usado
por gente
P: como mapear entre
nome e endereço IP?
implementada na hierarquia de
muitos servidores de nomes
❒ protocolo de camada de aplicação
permite hospedeiros, roteadores,
servidores de nomes
communicarem para resolver
nomes (tradução endereço/nome)
❍ note: função imprescindível da
Internet implementada como
protocolo de camada de
aplicação
❍ complexidade na borda da rede
2: Camada de Aplicação
44
2: Camada de Aplicação
46
DNS: Servidores raíz
Por quê não centralizar o ❒ Nenhum servidor mantém
todos os mapeamento nomeDNS?
para-endereço IP
❒ ponto único de falha
servidor
de nomes local:
❒ volume de tráfego
❍ cada provedor, empresa tem
❒ base de dados
servidor de nomes local (default)
centralizada e distante
❍ pedido DNS de hospedeiro vai
primeiro ao servidor de nomes
❒ manutenção (da BD)
Não é escalável!
Domain Name System:
Pessoas: muitos
identificadores:
45
❒ procurado por servidor
local que não consegue
resolver o nome
❒ servidor raíz:
❍ procura servidor
autoritativo se
mapeamento
desconhecido
❍ obtém tradução
❍ devolve
mapeamento ao
servidor local
❒ ~ uma dúzia de
servidores raíz no
mundo
Exemplo de DNS
servidor de
nomes raíz
hospedeiro
2
4
manga.ic.uff.br requer
3
5
endereço IP de
www.cs.columbia.edu
1. Contata servidor DNS local,
pitomba.ic.uff.br
servidor autoritativo
servidor local
2. pitomba.ic.uff.br
pitomba.ic.uff.br
cs.columbia.edu
contata servidor raíz, se
1
6
necessário
3. Servidor raíz contata
servidor autoritativo
cs.columbia.edu, se
solicitante
www.cs.columbia.edu
manga.ic.uff.br
necessário
servidor de
nomes raíz
Servidor raíz:
❒ pode não conhecer o
servidor de nomes
autoritativo
❒ pode conhecer
servidor de nomes
intermediário: a quem
contactar para
descobrir o servidor
de nomes autoritativo
6
2
7
servidor local
3
servidor intermediário
pitomba.ic.uff.br saell.cc.columbia.edu
1
8
solicitante
4
5
servidor autoritativo
cs.columbia.edu
manga.ic.uff.br
www.cs.columbia.edu
2: Camada de Aplicação
47
2: Camada de Aplicação
48
DNS: consultas iteratadas
consulta recursiva:
responsabilidade de
reolução do nome para
o servidor de nomes
cntatado
❒ carga pesada?
3
4
7
servidor local
servidor intermediário
pitomba.ic.uff.br saell.cc.columbia.edu
consulta iterada:
1
5
8
❒ servidor consultado
responde com o nome
de um servidor de
contato
❒ “Não conheço este
nome, mas pergunte
para esse servidor”
❒ uma vez um servidor qualquer aprende um
consulta
iterrada
2
❒ transfere a
DNS: uso de cache, atualização de dados
servidor de
nomes raíz
solicitante
6
servidor autoritativo
cs.columbia.edu
manga.ic.uff.br
❍
RFC 2136
❍
http://www.ietf.org/html.charters/dnsind-charter.html
www.cs.columbia.edu
2: Camada de Aplicação
2: Camada de Aplicação
49
Registros DNS
50
DNS: protocolo, mensagens
DNS: BD distribuída contendo resource records (RR)
formato RR: (nome,
mapeamento, ele o coloca numa cache local
❍ futuras consultas são resolvidas usando dados
da cache
❍ entradas no cache são sujeitas a temporização
(desaparecem depois de certo tempo)
ttl = time to live (sobrevida)
❒ estão sendo projetados pela IETF mecanismos
de atualização/notificação dos dados
protocolo DNS: mensagens pedido e resposta, ambas
com o mesmo formato de mensagem
valor, tipo, sobrevida)
❒ Tipo=CNAME
❒ Tipo=A
❍ nome é nome alternativo
❍ nome é nome de hospedeiro
(alias) para algum nome
❍ valor é endereço IP
“canônico” (verdadeiro)
❒ Tipo=NS
❍ valor é o nome
❍ nome é domínio (p.ex.
canônico
foo.com.br)
❒ Tipo=MX
❍ valor é endereço IP de
❍ nome é domínio
servidor de nomes
autoritativo para este
❍ valor é nome do servidor de
domínio
correio para este domínio
2: Camada de Aplicação
cabeçalho de msg
❒ identification: ID de 16 bit
para pedido, resposta ao
pedido usa mesmo ID
❒ flags:
❍ pedido ou resposta
❍ recursão desejada
❍ recursão permitida
❍ resposta é autoritativa
2: Camada de Aplicação
51
52
Programação com sockets
DNS: protocolo, mensagens
Meta: aprender construir aplicação cliente/servidor que
comunica usando sockets
socket
API Sockets
uma interface (uma
campos nome, tipo
num pedido
❒ apareceu em BSD4.1 UNIX,
RRs em resposta
ao pedido
1981
❒ explicitamente criados,
usados e liberados por apls
❒ paradigma cliente/servidor
❒ dois tipos de serviço de
transporte via API Sockets
registros para
servidores autoritativos
info adicional
“relevante” que
pode ser usada
❍
❍
2: Camada de Aplicação
53
datagrama não confiável
fluxo de bytes, confiável
“porta”), local ao
hospedeiro, criada por e
pertencente à aplicação, e
controlado pelo SO,
através da qual um
processo de aplicação
pode tanto enviar como
receber mensagens
para/de outro processo
de aplicação
(remoto ou local)
2: Camada de Aplicação
54
Programação com sockets usando TCP
Programação com sockets usando TCP
Socket: uma porta entre o processo de aplicação e um
protocolo de transporte fim-a-fim (UDP ou TCP)
Serviço TCP: transferência confiável de bytes de um
processo para outro
Cliente deve contactar servidor ❒ Quando cliente cria socket: TCP
do cliente estabelece conexão
❒ processo servidor deve antes
ao servidor TCP
estar em execução
❒ Quando contactado pelo cliente,
❒ servidor deve antes ter
servidor TCP cria socket novo
criado socket (porta) que
processo servidor poder se
aguarda contato do cliente
comunicar com o cliente
Cliente contacta servidor por:
❍ permite que o servidor
❒ criar socket TCP local ao
converse com múltiplos
cliente
clientes
❒ especificar endereço IP,
ponto de vista da aplicação
número de porta do processo
TCP provê transferência
servidor
confiável, ordenada de bytes
(“tubo”) entre cliente e servidor
controlado pelo
programador de
aplicação
processo
processo
socket
TCP com
buffers,
variáveis
controlado
pelo sistema
operacional
internet
estação ou
servidor
socket
TCP com
buffers,
variáveis
controlado pelo
programador de
aplicação
controlado
pelo sistema
operacional
estação ou
servidor
2: Camada de Aplicação
Programação com sockets usando TCP
(executa em idHosp)
cria socket,
abre conexão a idHosp, porta=x
socketCliente =
Socket()
Envia pedido usando
socketCliente
d
escreve resposta
para socketConexão
o
p
TCP
da conexão
lê pedido de
socketConexão
socket do cliente
lê resposta de
socketCliente
fecha
socketConexão
fecha
socketCliente
2: Camada de Aplicação
57
58
e
r
S
2: Camada de Aplicação
a
Cliente
cria socket,
porta=x, para
receber pedido:
socketRecepção =
ServerSocket ()
aguarda chegada de
setup
pedido de conexão
socketConexão =
socketRecepção.accept()
doUsuário
56
Interações cliente/servidor com socket: TCP
Servidor
Input stream: sequence of
bytes into process
Output stream: sequence of
bytes out of process
p
Exemplo de apl cliente-servidor:
❒ cliente lê linha da entrada
padrão (fluxo doUsuário),
envia para servidor via socket
(fluxo paraServidor)
❒ servidor lê linha do socket
❒ servidor converte linha para
letra maiúscula, devolcve para
o cliente
❒ cliente lê linha modificado do
socket (fluxo doServidor),
imprime-a
2: Camada de Aplicação
55
Exemplo: cliente Java (TCP), cont.
r
a
Exemplo: cliente Java (TCP)
Cria
fluxo de entrada
ligado ao socket
i
paraServidor.writeBytes(frase + '\n');
Lê linha
do servidor
fraseModificada = doServidor.readLine();
System.out.println(”Do Servidor: " + fraseModificada);
Socket socketCliente = new Socket(”idHosp", 6789);
r
socketCliente.close();
d
DataOutputStream paraServidor =
new DataOutputStream(socketCliente.getOutputStream());
2: Camada de Aplicação
o
v
r
Create
output stream
attached to socket
BufferedReader doUsuario =
new BufferedReader(new InputStreamReader(System.in));
i
Cria
socket de cliente,
conexão ao servidor
d
Cria
fluxo de entrada
frase = doUsuario.readLine();
Envia linha
ao servidor
e
public static void main(String argv[]) throws Exception
{
String frase;
String fraseModificada;
BufferedReader doServidor =
new BufferedReader(new
InputStreamReader(socketCliente.getInputStream()));
v
S
import java.io.*;
import java.net.*;
class ClienteTCP {
}
}
59
2: Camada de Aplicação
60
Exemplo: servidor Java (TCP)
Exemplo: servidor Java (TCP), cont
import java.io.*;
import java.net.*;
Cria fluxo
de saída, ligado
ao socket
class servidorTCP {
Cria socket
para recepção
na porta 6789
Aguarda, no socket
para recepção, o
contato do cliente
Cria fluxo de
entrada, ligado
ao socket
public static void main(String argv[]) throws Exception
{
String fraseCliente;
StringfFraseMaiusculas;
Lê linha
do socket
Escreve linha
ao socket
while(true) {
Socket socketConexao = socketRecepcao.accept();
Final do elo while,
volta ao início e aguarda
conexão de outro cliente
}
BufferedReader doCliente =
new BufferedReader(new
InputStreamReader(socketConexao.getInputStream()));
UDP: não tem “conexão” entre
cliente e servidor
❒ não tem “handshaking”
❒ remetente coloca
explicitamente endereço IP
e porta do destino
❒ servidor deve extrair
endereço IP, porta do
remetente do datagrama
recebido
2: Camada de Aplicação
61
(executa em idHosp)
cria socket,
porta=x, para
pedido que chega:
socketServidor =
DatagramSocket()
ponto de vista da aplicação
UDP provê transferência
não confiável de grupos
de bytes (“datagramas”)
entre cliente e servidor
lê pedido do
socketServidor
escreve resposa
ao socketServidor
especificando endereço
IP, número de porta
do cliente
2: Camada de Aplicação
Cliente
cria socket,
socketCliente =
DatagramSocket()
cria, endereça (idHosp, porta=x,
envia pedido em datagrama
usando socketCliente
lê resposa do
socketCliente
fecha
socketCliente
2: Camada de Aplicação
63
Exemplo: cliente Java (UDP)
62
Interações cliente/servidor com socket: UDP
Servidor
UDP: dados transmitidos
podem ser recebidos fora
de ordem, ou perdidos
64
Exemplo: cliente Java (UDP) cont.
Cria datagrama com
dados para enviar,
comprimento,
endereço IP, porta
import java.io.*;
import java.net.*;
Traduz nome de
hospedeiro ao
endereço IP
usando DNS
paraClient.writeBytes(fraseEmMaiusculas);
}
}
Programação com sockets usando UDP
Cria
socket de cliente
fraseCliente= doCliente.readLine();
fraseEmMaiusculas= fraseCliente.toUpperCase() + '\n';
ServerSocket socketRecepcao = new ServerSocket(6789);
2: Camada de Aplicação
Cria
fluxo de enrada
DataOutputStream paraCliente =
new DataOutputStream(socketConexão.getOutputStream());
class clienteUDP {
public static void main(String args[]) throws Exception
{
Envia datagrama
ao servidor
DatagramPacket pacoteEnviado =
new DatagramPacket(dadosEnvio, dadosEnvio.length,
IPAddress, 9876);
socketCliente.send(pacoteEnviado);
DatagramPacket pacoteRecebido =
new DatagramPacket(dadosRecebidos, dadosRecebidos.length);
BufferedReader do Usuario=
new BufferedReader(new InputStreamReader(System.in));
Lê datagrama
do servidor
DatagramSocket socketCliente = new DatagramSocket();
socketCliente.receive(pacoteRecebido);
String fraseModificada =
new String(pacoteRecebido.getData());
InetAddress IPAddress = InetAddress.getByName(”idHosp");
byte[] dadosEnvio = new byte[1024];
byte[] dadosRecebidos = new byte[1024];
System.out.println(”Do Servidor:" + fraseModificada);
socketCliente.close();
}
String frase = doUsuario.readLine();
}
dadosEnvio = frase.getBytes();
2: Camada de Aplicação
65
2: Camada de Aplicação
66
Exemplo: servidor Java (UDP)
Exemplo: servidor Java (UDP), cont
String frase = new String(pacoteRecebido.getData());
import java.io.*;
import java.net.*;
Cria socket
para datagramas
na porta 9876
Obtém endereço
IP, no. de porta
do remetente
class servidorUDP {
public static void main(String args[]) throws Exception
{
Recebe
datagrama
int port = pacoteRecebido.getPort();
String fraseEmMaiusculas = frase.toUpperCase();
DatagramSocket socketServidor = new DatagramSocket(9876);
dadosEnviados = fraseEmMaiusculas.getBytes();
Cria datagrama p/
enviar ao cliente
byte[] dadosRecebidos = new byte[1024];
byte[] dadosEnviados = new byte[1024];
Aloca memória para
receber datagrama
InetAddress IPAddress = pacoteRecebido.getAddress();
socketServidor.send(pacoteEnviado);
}
}
}
socketServidor.receive(pacoteRecebido);
2: Camada de Aplicação
DatagramPacket pacoteEnviado =
new DatagramPacket(dadosEnviados,
dadosEnviados.length, IPAddress, porta);
Escreve
datagrama
ao socket
while(true)
{
DatagramPacket pacoteRecebido =
new DatagramPacket(dadosRecebidos,
dadosRecebidos.length);
67
Fim do elo while,
volta ao início e aguarda
chegar outro datagrama
2: Camada de Aplicação
Capítulo 2: Sumário
Capítulo 2: Sumário
Terminamos nosso estudo de aplicações de rede!
Mais importante: aprendemos de protocolos
❒ Requisitos do servi;co
de aplicação:
❍
confiabilidade, banda,
retardo
❒ paradigma cliente-
servidor
❒ modelo de serviço do
transporte orientado a
conexão, confiável da
Internet: TCP
❍
não confiável,
datagramas: UDP
❒ Protocolos específicos:
❍ http
❍ ftp
❍ smtp, pop3
❍ dns
❒ troca típica de
mensagens
pedido/resposta:
❍
❒ programação c/ sockets
❍ implementação
cliente/servidor
❍ usando sockets tcp, udp
2: Camada de Aplicação
69
❍
cliente solicita info ou
serviço
servidor responde com
dados, código de status
❒ formatos de mensagens:
❍ cabeçalhos: campos com
info sobre dados
(metadados)
❍ dados: info sendo
comunicada
68
❒ msgs de controle X dados
❍
na banda, fora da banda
❒ centralizado X descentralizado
❒ s/ estado X c/ estado
❒ transferência de msgs
confiável X não confiável
❒ “complexidade na borda da
rede”
❒ segurança: autenticação
2: Camada de Aplicação
70
Download

transp. - port.