Você está na página 1de 125

Captulo 2: Camada de Aplicao

suruagy@cin.ufpe.br

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

atravs do estudo de protocolos populares da camada de aplicao:

modelos de servio da camada de transporte paradigma cliente servidor paradigma peer-to Criar aplicaes de rede peer programao usando a API de sockets

HTTP FTP SMTP/ POP3/ IMAP DNS

2: Camada de Aplicao

Algumas aplicaes de rede


Correio eletrnico

A Web

Streaming de vdeos

Mensagens

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

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

aplicao transporte rede enlace fsica

2: Camada de Aplicao

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 7

Arquitetura P2P
No h servidor sempre ligado Sistemas finais arbitrrios se

peer-peer

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 8

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) Nota: aplicaes com processos em sistemas arquiteturas P2P finais distintos se possuem processos comunicam trocando clientes e processos mensagens atravs da rede servidores
2: Camada de Aplicao 9

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
transporte rede enlace fsica

socket

aplicao

processo
transporte rede

Controlado pelo desenvolvedor da aplicao

Internet

enlace
fsica

controlado pelo SO

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:

Para enviar uma msg HTTP

Servidor HTTP: 80 Servidor de Correio: 25

para o servidor Web gaia.cs.umass.edu


Mais sobre isto

Endereo IP: 128.119.245.12 Nmero da porta: 80

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: significado da informao nos campos Regras para quando os

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

processos enviam e respondem s mensagens


2: Camada de Aplicao 12

De que servios uma aplicao necessita?


Integridade dos dados (sensibilidade a perdas) Vazo (throughput)
algumas apls (p.ex., multimdia) algumas apls (p.ex., transf. de

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

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

Temporizao (sensibilidade a atrasos)


algumas apls (p.ex., telefonia

Segurana
Criptografia, integridade dos

dados, ...

Internet, jogos interativos) requerem baixo retardo para serem viveis


2: Camada de Aplicao

13

Requisitos de aplicaes de rede selecionadas


Vazo 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 Sensibilidade ao atraso 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:

processos remetente e receptor controle de fluxo: remetente no vai afogar receptor

transporte confivel entre

Servio UDP:
transferncia de dados no

estrangular remetente quando a rede estiver carregada no prov: garantias temporais ou de banda mnima

controle de congestionamento:

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

orientado a conexo:

apresentao requerida entre cliente e servidor

P: Qual o interesse em ter um UDP?


2: Camada de Aplicao

15

Apls Internet: seus protocolos e seus protocolos de transporte


Aplicao Protocolo da camada de apl SMTP [RFC 2821] telnet [RFC 854] HTTP [RFC 2616] FTP [RFC 959] HTTP (ex. Youtube) RTP [RFC 1889] SIP, RTP, proprietrio (ex., Skype) Protocolo de transporte usado TCP TCP TCP TCP TCP ou UDP TCP ou UDP

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

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
PC executando Explorer

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

Servidor executando servidor 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

HTTP sem estado


servidor no mantm

(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

informao sobre pedidos anteriores do cliente

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

Nota

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 1a. Cliente http inicia conexo
(contm texto, referncias a 10 imagens jpeg)

TCP a servidor http (processo) a www.algumaUniv.br. Porta 80 padro para servidor http.

1b. servidor http no hospedeiro

2. cliente http envia

www.algumaUniv.br espera por conexo TCP na porta 80. aceita conexo, avisando ao cliente

mensagem de pedido de

tempo

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

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


TCP .

4. servidor http encerra conexo

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 RTT arquivo recebido tempo tempo tempo para transmitir o arquivo

2: Camada de Aplicao

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)
linhas de cabealho Carriage return, line feed indicam fim de mensagem
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 Accept-Language: en-us,en;q=0.5\r\n Accept-Encoding: gzip,deflate\r\n Accept-Charset: ISO-8859-1,utf-8;q=0.7\r\n Keep-Alive: 115\r\n Connection: keep-alive\r\n \r\n

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

HTTP/1.1 GET, POST, HEAD PUT

Upload de arquivo

Pede para o servidor no enviar o objeto requerido junto com a resposta

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

dados, p.ex., arquivo html solicitado

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


objeto pedido mudou de lugar, nova localizao especificado mais adiante nesta mensagem (Location:) mensagem de pedido no entendida pelo servidor documento pedido no se encontra neste servidor verso de http do pedido no usada por este servidor
2: Camada de Aplicao 32

301 Moved Permanently

400 Bad Request

404 Not Found

505 HTTP Version Not Supported

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
arquivo de Cookies ebay: 8734

servidor

servidor resposta usual http + cria a ID 1678 Set-cookie: 1678 para o usurio
msg usual pedido http

msg usual pedido http

arquivo de Cookies amazon: 1678 ebay: 8734

cookie: 1678
resposta usual http

uma semana depois:


arquivo de Cookies amazon: 1678 ebay: 8734

ao especfica do cookie ao especfica do cookie


2: Camada de Aplicao 35

msg usual pedido http

cookie: 1678
resposta usual http

Cookies (continuao)
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

nota

Cache Web (servidor proxy)


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

browser: acessos Web via proxy cliente envia todos pedidos HTTP ao proxy

cliente

Servidor 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
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
Internet pblica

Servidores de origem

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

Servidores de origem

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

Servidores de origem

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


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

servidor
objeto no modificado

Sem atraso para transmisso do objeto Diminui a utilizao do enlace

resposta http
HTTP/1.0 304 Not Modified

cache: especifica data da

cpia no cache no pedido HTTP


If-modified-since: <date>

msg de pedido http


If-modified-since: <date>

servidor: resposta no

contm objeto se cpia no cache for atual:


HTTP/1.0 304 Not Modified

resposta http
HTTP/1.1 200 OK

objeto modificado

<data>
2: Camada de Aplicao 42

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

43

FTP: o protocolo de transferncia de arquivos


Interface cliente do usurio FTP FTP transferncia do arquivo

servidor FTP
sistema de arquivos remoto

usurio na estao

sistema de arquivos local

transferir arquivo de/para hospedeiro remoto modelo cliente/servidor

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

cliente: lado que inicia transferncia (pode ser de ou

2: Camada de Aplicao

44

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 45

FTP: comandos, respostas


Comandos tpicos:
enviados em texto ASCII

Cdigos de retorno tpicos


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

46

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

47

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

fila de mensagens de sada caixa de correio do usurio


agente de usurio

simple mail transfer protocol:

SMTP

SMTP

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

servidor de correio

agente de usurio

SMTP

agente de usurio

agente de usurio

agente de usurio

2: Camada de Aplicao

48

Correio Eletrnico: servidores de correio


Servidores de correio
caixa de correio contm
servidor de correio
agente de usurio agente de usurio

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

servidor de correio

agente de usurio

2: Camada de Aplicao

49

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 50

Gerncia da Porta 25

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

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

52

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 53

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

54

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


pull (recupera) SMTP: push (envia)
HTTP:
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 55

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

cabealho

linha em branco

diferentes dos comandos de smtp FROM, RCPT TO


corpo

To: From: Subject:

corpo

a mensagem, somente de caracteres ASCII


2: Camada de Aplicao

56

Formato de uma mensagem: extenses para multimdia


MIME:

multimedia mail extension, RFC 2045, 2056

linhas adicionais no cabealho da msg declaram tipo do

contedo MIME verso MIME

mtodo usado p/ codificar dados tipo, subtipo de dados multimdia, declarao parmetros

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

Dados codificados

2: Camada de Aplicao

57

Tipos MIME
Content-Type: tipo/subtipo; parmetros

Text

subtipos exemplos: plain,

Audio

subtipos exemplos : basic

html charset=iso-8859-1, ascii

Image
gif

Application

(8-bit codificado mu-law), 32kadpcm (codificao 32 kbps)

subtipos exemplos : jpeg,

outros dados que precisam

Video

subtipos exemplos : mpeg,

ser processados por um leitor para serem visualizados subtipos exemplos : msword, octet-stream

quicktime
2: Camada de Aplicao 58

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 59

Protocolos de acesso ao correio


agente de usurio

SMTP

SMTP

POP3 ou IMAP
servidor de correio do receptor

agente de usurio

servidor de correio do remetente

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 60

Protocolo POP3
fase de autorizao
comandos do cliente:

user: declara nome pass: senha servidor responde +OK -ERR

S: C: S: C: S: C: S: S: S: C: S: S: C: C: S: S: C: C: S:

+OK POP3 server ready user ana +OK pass faminta +OK user successfully logged 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

on

fase de transao, cliente:


list: lista nmeros das

msgs retr: recupera msg por nmero dele: apaga msg quit

61

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 62

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

63

DNS: Domain Name System


Pessoas: muitos identificadores:

Domain Name System:

hospedeiros, roteadores Internet :

CPF, nome, no. da Identidade

base de dados distribuda


protocolo de camada de aplicao permite que

implementada na hierarquia de muitos servidores de nomes

P: como mapear entre nome e endereo IP?

endereo IP (32 bit) usado p/ enderear datagramas nome, ex., www.yahoo.com - usado por gente

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 64

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

Nomes cannicos e apelidos

Apelidos para

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 de e-mail Distribuio de carga

Servidores Web replicados: conjunto de endereos IP para um mesmo nome


2: Camada de Aplicao 65

Base de Dados Hierrquica e Distribuda


Root DNS Servers
com DNS servers org DNS servers edu DNS servers

yahoo.com amazon.com DNS servers 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 66

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 67

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

68

Domnios Registrados por DPN (Domnio de Primeiro Nvel)


06/02/13

2: Camada de Aplicao

69

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

70

Exemplo de resoluo de nome pelo DNS


Hospedeiro em

servidor raiz

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


servidor local
dns.poly.edu

3 4 5

servidor TLD

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

6
servidor com autoridade dns.cs.umass.edu

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

71

Exemplo de resoluo de nome pelo DNS servidor DNS raiz


consulta recursiva:
transfere a

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

6
servidor TLD 4

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

solicitante
cis.poly.edu

gaia.cs.umass.edu
2: Camada de Aplicao 72

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

73

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 74

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

75

DNS: protocolo e mensagens

2: Camada de Aplicao

76

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 77

Ataques ao DNS
Ataques DDoS Bombardeia os servidores raiz com trfego

Ataques de redirecionamento Pessoa no meio

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

Intercepta as consultas Envia respostas falsas para o servidor DNS que as coloca em cache

Envenenamento do DNS

Bombardeio aos servidores

TLD

Explorao do DNS para DDoS Envia consultas com endereo origem falsificado: IP alvo Requer amplificao
2: Camada de Aplicao 78

Potencialmente mais perigoso

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

79

Arquitetura P2P pura

sem servidor sempre ligado


par-par

sistemas finais arbitrrios se

comunicam diretamente pares esto conectados de forma intermitente e mudam seus endereos IP
Exemplos:

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

2: Camada de Aplicao

80

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 us Arquivo, tamanho F dN uN

u1 d1

u2

us: banda de upload do servidor

d2

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

Rede (com banda abundante)

2: Camada de Aplicao

81

Tempo de distribuio do arquivo: C/S


transmisso do servidor: deve enviar

sequencialmente N cpias do arquivo:


us di rede

cliente: cada cliente deve fazer o

Tempo para enviar uma cpia = F/us Tempo para enviar N cpias = NF/us

ui

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 82

Tempo de distribuio do arquivo: P2P


transmisso do servidor: deve

enviar pelo menos uma cpia:

cliente: cada cliente deve

tempo para enviar uma cpia: F/us

us di network

baixar uma cpia do arquivo

clientes: no total devem baixar NF bits

Tempo de download para usurio com menor taxa: F/dmin

ui

Taxa mxima de upload : us +

Su

tempo para distribuir F para N clientes D P2P > max{F/us,,F/dmin,,NF/(us + Sui)} usando abordagem P2P

cresce linearmente com N assim como este, cada par traz capacidade de servio
2: Camada de Aplicao 83

Cliente-servidor x P2P: Exemplo


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

Minimum Distribution Time

3 2.5 2 1.5 1 0.5 0 0

P2P Client-Server

10

15

20

25

30

35

N
2: Camada de Aplicao 84

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 85

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

86

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

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


Primeiro os mais raros

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

2: Camada de Aplicao

87

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 88

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

89

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

90

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 91

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

92

DHT circular (I)


1 15 3 4 12 10

8 cada par rastreia apenas o seu sucessor e antecessor imediatos. rede sobreposta (overlay)
2: Camada de Aplicao 93

DHT circular (II)


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

Quem responsvel pela chave 1110 ?

0011

0100
1110
1110

1100 0101
Defina mais prximo como o sucessor mais 1010 prximo
1110

1000
2: Camada de Aplicao 94

DHT circular com atalhos


1
Quem responsvel pela chave 1110?

3
15

4
12 10 5

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

Peer churn
1
15

tratando peer churn:


pares

3
4

12 10

8 exemplo: par 5 sai abruptamente par 4 detecta a sada do par 5; torna 8 o seu sucessor imediato; pergunta a 8 quem o seu sucessor imediato; torna o sucessor imediato de 8 como o seu segundo sucessor. o que fazer caso o par 13 resolva entrar?
2: Camada de Aplicao

(churn) cada para conhece o endereo dos seus dois sucessores cada par periodicamente envia um ping aos seus dois sucessores para verificar se esto vivos se o sucessor imediato sair, escolha o prximo sucessor como o sucessor imediato.

podem chegar e sair

96

Estudo de caso P2P: Skype


Skype clients (SC)
inerentemente P2P:

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

Skype login server

Supernode (SN)

2: Camada de Aplicao

97

Pares como intermedirios (relays)


Problema quando tanto

Alice como Bob esto atrs de NATs.

Soluo:

O NAT impede que um par externo inicie uma chamada com um par interno
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 98

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

99

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

100

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

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


estao ou servidor

2: Camada de Aplicao

101

Programao com sockets usando TCP


Cliente deve contactar servidor Quando contactado pelo cliente, o TCP do servidor cria socket novo processo servidor deve antes 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 (tubo) entre cliente e servidor TCP do servidor
2: Camada de Aplicao 102

Comunicao entre sockets

2: Camada de Aplicao

103

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

104

Programao com sockets usando TCP


inFromUser

Exemplo de apl. clienteservidor:


1.

keyboard

monitor

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 sada: Seqncia de bytes transmitidos pelo processo
output stream

Fluxo de entrada: Seqncia de bytes recebidos pelo processo


inFromServer outToServer

input stream

Socket clientSocket TCP cliente TCP socket


to network from network

2: Camada de Aplicao

105

Interaes cliente/servidor usando o TCP


Servidor (executa em nomeHosp)
cria socket, porta=x, para receber pedido: socketRecepo = ServerSocket () aguarda chegada de setup pedido de conexo socketConexo = socketRecepo.accept() l pedido de socketConexo escreve resposta para socketConexo fecha socketConexo

Cliente

TCP

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

106

Exemplo: cliente Java (TCP)


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

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

Exemplo: cliente Java (TCP), cont.


Cria fluxo de entrada ligado ao socket Envia linha ao servidor L linha do servidor
BufferedReader doServidor = new BufferedReader(new InputStreamReader(socketCliente.getInputStream())); frase = doUsuario.readLine(); paraServidor.writeBytes(frase + '\n'); fraseModificada = doServidor.readLine(); System.out.println(Do Servidor: " + fraseModificada); socketCliente.close();

} }
2: Camada de Aplicao 108

Exemplo: servidor Java (TCP)


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

class servidorTCP {
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

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

109

Exemplo: servidor Java (TCP), cont


Cria fluxo de sada, ligado ao socket L linha do socket Escreve linha ao socket
} } DataOutputStream paraCliente = new DataOutputStream(socketConexo.getOutputStream()); fraseCliente= doCliente.readLine(); fraseEmMaiusculas= fraseCliente.toUpperCase() + '\n'; paraCliente.writeBytes(fraseEmMaiusculas); }

Final do lao while, volta ao incio e aguarda conexo de outro cliente


2: Camada de Aplicao 110

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

111

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

112

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

113

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 114

Interaes cliente/servidor usando o UDP


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

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

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

l resposta do socketCliente fecha socketCliente

2: Camada de Aplicao

115

Exemplo: Cliente Java (UDP)

UDP

2: Camada de Aplicao

116

Exemplo: cliente Java (UDP)


import java.io.*; import java.net.*;
class clienteUDP { public static void main(String args[]) throws Exception { BufferedReader doUsuario= new BufferedReader(new InputStreamReader(System.in)); DatagramSocket socketCliente = new DatagramSocket();

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

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 117

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 118

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

119

Servidor UDP

2: Camada de Aplicao

120

Exemplo: servidor Java (UDP)


import java.io.*; import java.net.*; class servidorUDP { public static void main(String args[]) throws Exception { DatagramSocket socketServidor = new DatagramSocket(9876); byte[] dadosRecebidos = new byte[1024]; byte[] dadosEnviados = new byte[1024]; while(true) { DatagramPacket pacoteRecebido = new DatagramPacket(dadosRecebidos, dadosRecebidos.length); socketServidor.receive(pacoteRecebido);
2: Camada de Aplicao 121

Cria socket para datagramas na porta 9876

Aloca memria para receber datagrama Recebe datagrama

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

122

Exemplo: servidor Python (UDP)


from socket import * serverPort = 12000 serverSocket = socket(AF_INET, SOCK_DGRAM) serverSocket.bind(('', serverPort)) print The server is ready to receive while 1:
message, clientAddress = serverSocket.recvfrom(2048) modifiedMessage = message.upper() serverSocket.sendto(modifiedMessage, clientAddress)

cria socket UDP liga socket porta local nmero 12000

loop infinito l mensagem do socket UDP, obtendo endereo do cliente (IP e porta do cliente)

retorna string em maisculas para este cliente

2: Camada de Aplicao

123

Captulo 2: Resumo
Nosso estudo sobre aplicaes de rede est agora completo!
Arquiteturas de aplicaes cliente-servidor P2P
Requisitos de servio das Protocolos especficos: HTTP FTP SMTP, POP, IMAP DNS P2P: BitTorrent, DHT Programao de sockets

aplicaes:

confiabilidade, banda, atraso

Modelos de servio de

transporte da Internet
orientado conexo, confivel: TCP no confivel, datagramas: UDP
2: Camada de Aplicao 124

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

pedido/resposta

Temas importantes:
msgs de controle vs. dados

cliente solicita info ou servio servidor responde com dados, cdigo de status cabealhos: campos com info sobre dados (metadados) dados: info sendo comunicada

formatos de mensagens:

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

125