Buscar

aula2-b

Prévia do material em texto

Aulas do livro disponíveis em:
http://www-net.cs.umass.edu/kurose-ross-ppt-7e/
Camada de 
aplicação
Mail eletrônico
Três componentes principais:
• Agentes de usuário
• Servidores de mail
• simple mail transfer protocol: 
SMTP
Agente Usuário
• a.k.a. “leitor de mail”
• redigir, editar, ler mensagens de 
mail
• e.g., Outlook, Thunderbird, 
cliente mail iPhone
• Mensagens de saída e de entrada 
armazenadas no servidor
Mailbox usuário
Fila de 
mensagens saída
mail
server
mail
server
mail
server
SMTP
SMTP
SMTP
user
agent
user
agent
user
agent
user
agent
user
agent
user
agent
Mail eletrônico: servidores de mail
Servidores de mail:
• mailbox contém mensagens 
de entrada para usuário
• Fila de mensagens de saída 
(a ser enviada) mensagens 
de mail
• Protocolo SMTP entre 
servidores de mail para 
enviar mensagens de mail
o cliente: enviando do servidor de 
mail
o “servidor”: recebendo do 
servidor de mail
mail
server
mail
server
mail
server
SMTP
SMTP
SMTP
user
agent
user
agent
user
agent
user
agent
user
agent
user
agent
Mail Eletrônico: SMTP [RFC 2821]
• Usa TCP para transferir mensagens de e-mail 
confiáveis de cliente para servidor, porta 25
• Transferência direta: envio do servidor para o servidor 
de recebimento
• Três fases de transferência:
o handshaking (apresentação)
o transferência de mensagens
o Fechamento
• Interação comando / resposta (como HTTP)
o comandos: texto ASCII
o resposta: código de status e frase
• Mensagens devem ser em 7-bit ASCI
user
agent
Cenário: Alice envia mensagem para Bob
1) Alice uses UA to compose 
message “to”
bob@someschool.edu
2) Alice’s UA sends message to 
her mail server; message 
placed in message queue
3) client side of SMTP opens TCP 
connection with Bob’s mail 
server
4) SMTP client sends Alice’s 
message over the TCP 
connection
5) Bob’s mail server places the 
message in Bob’s mailbox
6) Bob invokes his user agent to 
read message
mail
server
mail
server
1
2 3 4
5
6
Alice’s mail server Bob’s mail server
user
agent
Sample SMTP interaction
S: 220 hamburger.edu 
C: HELO crepes.fr 
S: 250 Hello crepes.fr, pleased to meet you 
C: MAIL FROM: <alice@crepes.fr> 
S: 250 alice@crepes.fr... Sender ok 
C: RCPT TO: <bob@hamburger.edu> 
S: 250 bob@hamburger.edu ... Recipient ok 
C: DATA 
S: 354 Enter mail, end with "." on a line by itself 
C: Do you like ketchup? 
C: How about pickles? 
C: . 
S: 250 Message accepted for delivery 
C: QUIT 
S: 221 hamburger.edu closing connection
SMTP
• SMTP usa conexões 
persistentes
• SMTP requer mensagens 
(cabecalho & corpo) para 
ser em 7-bit ASCII
• Servidor SMTP usa 
CRLF.CRLF para 
determinar final da 
mensagem
Comparação com HTTP:
• HTTP: puxar (pull)
• SMTP: empurrar (push)
• Ambos tem comandos/repostas 
ASCII, códigos de status
• HTTP: cada objeto encapsulado 
em sua própria mensagem de 
resposta
• SMTP: múltiplos objetos 
enviados em mensagem 
multiparte
Formato da mensagem de Mail
SMTP: protocol for 
exchanging email messages
RFC 822: standard for text 
message format:
• header lines, e.g.,
o To:
o From:
o Subject:
different from SMTP MAIL 
FROM, RCPT TO:
commands!
• Body: the “message”
o ASCII characters only
header
body
blank
line
Protocolos de acesso ao mail
• SMTP: Entrega / armazenamento no servidor do receptor. 
• Protocolo de acesso de e-mail: recuperação do servidor:
o POP: Post Office Protocol [RFC 1939]: authorization, download 
o IMAP: Internet Mail Access Protocol [RFC 1730]: more features, 
including manipulation of stored messages on server
o HTTP: gmail, Hotmail, Yahoo! Mail, etc.
sender’s mail 
server
SMTP SMTP
mail access
protocol
receiver’s mail 
server
(e.g., POP, 
IMAP)
user
agent
user
agent
Protocolo POP3
Fase de autorização
• Comandos do cliente:
o user: declare username
o pass: password
• Respostas do servidor
o +OK
o -ERR
Fase de transação, cliente:
• list: list message numbers
• retr: retrieve message by 
number
• dele: delete
• quit
C: list 
S: 1 498 
S: 2 912 
S: . 
C: retr 1 
S: <message 1 contents>
S: . 
C: dele 1 
C: retr 2 
S: <message 1 contents>
S: . 
C: dele 2 
C: quit 
S: +OK POP3 server signing off
S: +OK POP3 server ready 
C: user bob 
S: +OK 
C: pass hungry 
S: +OK user successfully logged on
POP3 e IMAP
Mais sobre POP3
• Exemplo anterior usa o 
modo POP3 "download e 
apaga"
o Bob não pode reler o e-mail se ele 
mudar de cliente
• POP3 "download-e-
guarda": cópias de 
mensagens em clientes 
diferentes
• POP3 é stateless em todas 
as sessões
IMAP
• Mantém todas as mensagens 
em um só lugar: no servidor
• Permite ao usuário organizar 
mensagens em pastas
• Mantém o estado do usuário 
nas sessões:
o Nomes de pastas e 
mapeamentos entre IDs de 
mensagens e o nome da pasta
DNS: domain name system
Sistema de nome de domínio
Pessoas: muitos identificadores
RG, CPF, nome, passaporte…
Máquinas na Internet, 
roteadores:
o Endereço IP (32 bit) –
usado para endereçar 
datagramas
o “nome”, e.g., 
www.yahoo.com - usado 
por humanos
Q: Como mapear entre 
endereço IP e nome, e 
vice-versa?
Sistema de nome de domínio:
• Base de dados distribuída
implementada em hierarquia 
de muitos servidores de nome
• Protocolo de camada de 
aplicação: máquinas, 
servidores de nome 
comunicam para resolver
nomes (tradução 
endereço/nome)
o note: função core Internet, 
implementada como protocolo 
de camada de aplicação
o Complexidade na "borda" da 
rede
DNS: serviços, estrutura
Porque não centralizar DNS?
• Ponto único de falha
• Volume de tráfego
• Banco de dados centralizado 
distante
• Manutenção
Serviços DNS
• Hostname para tradução 
de endereços IP
• Host aliasing
• Canônico, alias nomes
• Aliasing de servidor de 
email
• Distribuição de carga
o Servidores Web replicados: 
muitos endereços IP 
correspondem a um nome
Atenção: não é escalável!
Root DNS Servers
com DNS servers org DNS servers edu DNS servers
poly.edu
DNS servers
umass.edu
DNS serversyahoo.com
DNS servers
amazon.com
DNS servers
pbs.org
DNS servers
DNS: uma base de dados distribuída e hierárquica
Cliente quer IP do www.amazon.com; 1a vez:
• cliente consulta servidor raiz para encontrar servidor DNS .com 
• cliente consulta servidor DNS .com para obter servidor DNS 
amazon.com 
• cliente consulta servidor DNS amazon.com para obter endereço IP 
para www.amazon.com
… …
DNS: Servidores de nomes raiz
• Contactado pelo servidor de nomes local que não consegue resolver o nome
• Servidor de nomes raiz:
o Contata servidor de nomes autoritativo se mapeamento de nome for desconhecido
o Obtém mapeamento
o Retorna o mapeamento para o servidor de nomes local
13 logical root name
“servers”
worldwide each
“server” replicated
many times (~200 
servers in US)
TLD, Servidores autorizados
top-level domain (TLD) servers:
o Responsável por com, org, net, edu, aero, jobs, museums, e todos 
domínios de países de nível superior, e.g.: uk, fr, ca, jp
o A Network Solutions mantém servidores para .com TLD
o Educause para .edu TLD
authoritative DNS servers:
o Servidor (s) DNS da organização, fornecendo nome de host 
autorizados para mapeamentos IP para os hosts nomeados da 
organização.
o Podem ser mantidos pela organização ou provedor de serviços
Servidor de nome de DNS local
• Não pertence estritamente à hierarquia
• Cada ISP (ISP residencial, empresa, universidade) tem um
o Também chamado de "servidor de nomes padrão"
• Quando host faz consulta DNS, a consulta é enviada para 
seu servidor DNS local
o Tem cache local com tradução recente de nome para endereço (mas pode 
estar desatualizado!)
o Atua como proxy, encaminha a consulta para hierarquia
requesting host
cis.poly.edu
gaia.cs.umass.edu
root DNS server
local DNS server
dns.poly.edu
1
2
3
4
5
6
authoritative DNS server
dns.cs.umass.edu
78
TLD DNS server
Exemplo de resolução 
de nomes DNS
• Host em cis.poly.edu 
quer endereço IP para 
gaia.cs.umass.edu
Consulta interativa:
§ O servidor contactado 
responde com o nome 
do servidorpara entrar 
em contato
§ "Eu não sei esse nome, 
mas pergunte a este 
servidor"
45
6
3
Consulta recursiva:
§ Coloca carga da 
resolução de nomes no 
servidor de nomes 
contactado
§ Carga pesada em níveis 
superiores de hierarquia?
requesting host
cis.poly.edu
gaia.cs.umass.edu
root DNS server
local DNS server
dns.poly.edu
1
2
7
authoritative DNS server
dns.cs.umass.edu
8
Exemplo de resolução 
de nomes DNS
TLD DNS 
server
DNS: Cache, atualização de registros
• Uma vez (qualquer) que servidor de nomes aprender 
mapeamento, ele armazena em cache
o Entradas de cache tempo limitado (desaparecer) após algum tempo (TTL)
o Servidores de TLD geralmente armazenados em cache em servidores de 
nomes locais
• Assim servidores de nomes de raiz não são visitados frequentemente
• As entradas em cache podem estar desatualizadas
o Se o host alterar o endereço IP, pode não ser conhecido na Internet até 
que todos os TTL expirem
• Atualizar / notificar mecanismos propostos IETF padrão
o RFC 2136
DNS registros
DNS: Banco de dados distribuído armazenando registros de recursos (RR)
type=NS
o name is domain (e.g., 
foo.com)
o value is hostname of 
authoritative name 
server for this domain
RR formato: (name, value, type, ttl)
type=A
§ name is hostname
§ value is IP address
type=CNAME
§ name is alias name for some “canonical” (the 
real) name
§ www.ibm.com is really
servereast.backup2.ibm.
com
§ value is canonical name
type=MX
§ value is name of mailserver associated 
with name
DNS protocolo, mesagens
• Mensagens de consulta e resposta, ambas com o mesmo formato de mensagem
message header
§ identification: 16 bit # for query, 
reply to query uses same #
§ flags:
§ query or reply
§ recursion desired 
§ recursion available
§ reply is authoritative
identification flags
# questions
questions (variable # of questions)
# additional RRs# authority RRs
# answer RRs
answers (variable # of RRs)
authority (variable # of RRs)
additional info (variable # of RRs)
2 bytes 2 bytes
name, type fields
for a query
RRs in response
to query
records for
authoritative servers
additional “helpful”
info that may be used
identification flags
# questions
questions (variable # of questions)
# additional RRs# authority RRs
# answer RRs
answers (variable # of RRs)
authority (variable # of RRs)
additional info (variable # of RRs)
DNS protocolo, mesagens
2 bytes 2 bytes
Inserindo registros no DNS
• example: new startup “Network Utopia”
• register name networkuptopia.com at DNS registrar (e.g., 
Network Solutions)
o provide names, IP addresses of authoritative name server (primary and 
secondary)
o registrar inserts two RRs into .com TLD server:
(networkutopia.com, dns1.networkutopia.com, NS)
(dns1.networkutopia.com, 212.212.212.1, A)
• create authoritative server type A record for 
www.networkuptopia.com; type MX record for 
networkutopia.com
Arquitetura P2P pura
• Sem servidor sempre disponível
• Sistemas arbitrários de 
extremidade comunicam 
diretamente
• Pares são intermitentemente 
conectados e alteraram 
endereços IP
• exemplos:
o Distribuição de arquivos (BitTorrent)
o Streaming (KanKan)
o VoIP (Skype) 
Distribuição de arquivos:
cliente-servidor vs P2P
Questão: Quanto tempo para distribuir o arquivo (tamanho F) de 
um servidor para N pares?
• Capacidade upload/download do par é um recurso limitado
us
uN
dN
server
network (with abundant
bandwidth)
file, size F
us: server upload 
capacity
ui: peer i upload 
capacity
di: peer i download 
capacityu2 d2
u1 d1
di
ui
Tempo de distribuição de arquivo: 
cliente-servidor
• Transmissão servidor: deve enviar 
sequencialmente (upload) N copias 
do arquivo:
o Tempo para enviar uma cópia: F/us 
o time to send N copies: NF/us
increases linearly in N
time to distribute F 
to N clients using 
client-server approach Dc-s > max{NF/us,,F/dmin}
§ cliente: cada cliente deve 
download cópia do arquivo
• dmin = taxa de download min cliente
• Tempo download min cliente: F/dmin
us
network
di
ui
F
Tempo distribuição arquivo: P2P
• Transmissão servidor: deve upload 
ao menos uma cópia
o Tempo para enviar uma cópia: F/us 
Tempo para distribuir F 
para N clientes 
usando
P2P
us
network
di
ui
F
DP2P > max{F/us,,F/dmin,,NF/(us + Sui)}
§ cliente: cada cliente deve download cópia do 
arquivo
• Tempo de download min cliente: F/dmin
§ clientes: como agregado deve download NF bits
• Max taxa upload (limitando taxa max download) é us + Sui
… mas isso também acontece, pois cada peer traz capacidade de serviço
Aumenta linearmente em N …
0
0.5
1
1.5
2
2.5
3
3.5
0 5 10 15 20 25 30 35
N
M
in
im
um
 D
is
tri
bu
tio
n 
Ti
m
e P2P
Client-Server
Cliente-servidor vs. P2P: exemplo
Taxa upload cliente= u, F/u = 1 hour, us = 10u, dmin ≥ us
Distribuição de arquivos P2P: BitTorrent 
tracker: acompanha (tracks) 
pares participando de torrent
torrent: grupo de pares trocando 
pedaços (chunks) de um arquivo
Alice chega…
• Arquivo dividido em pedaços (chunks) de 256Kb
• Peers em torrent enviam / recebem pedaços de arquivos
… obtem lista
de pares do tracker
… e inicia trocando
pedaços do arquivo com 
pares no torrent
• pares se juntando ao torrent: 
o Não tem pedaços, mas irá acumulá-los 
ao longo do tempo de outros pares
o Registra com o tracker para obter a 
lista de pares, se conecta a um 
subconjunto de pares ("vizinhos")
Distribuição de arquivos P2P: BitTorrent 
§ Durante o download, o par carrega pedaços para outros pares
§ O par pode mudar os pares com quem troca pedaços
§ Churn: os pares podem ir e vir
§ Uma vez que o par tenha um arquivo inteiro, ele pode (egoisticamente) partir ou 
(altruisticamente) permanecer em torrent
BitTorrent: requisitando, enviando 
pedaços (chunks) de arquivo
Requisitando chunks:
§ Em qualquer momento, diferentes
pares têm subconjuntos diferentes
de chunks de arquivo
§ Periodicamente, Alice pergunta a 
cada par a lista de chunks que eles
têm
§ Alice pede chunks ausentes dos 
pares, os mais raros primeiro
Enviando chunks: tit-for-tat
§ Alice envia chunks para aqueles quatro
pares atualmente enviando seus chunks na
taxa mais alta
§ Outros pares são sufocados por 
Alice (não recebem pedaços dela)
§ Reavaliar top 4 a cada 10 segundos
§ A cada 30 segundos: seleciona
aleatoriamente outro par, começa a enviar
pedaços
§ Par recém-escolhido pode juntar-se 
top 4
BitTorrent: tit-for-tat
(1) Alice “seleciona” Bob
(2) Alice se torna uma das quatro maiores provedoras de Bob
(3) Bob se torna um dos quatro principais fornecedores de Alice
Maior taxa de upload: encontrar 
parceiros comerciais, obter o 
arquivo mais rápido!
Socket programming 
goal: learn how to build client/server applications that 
communicate using sockets
socket: door between application process and end-end-
transport protocol 
Internet
controlled
by OS
controlled by
app developer
transport
application
physical
link
network
process
transport
application
physical
link
network
process
socket
Socket programming 
Two socket types for two transport services:
o UDP: unreliable datagram
o TCP: reliable, byte stream-oriented 
Application Example:
1.client reads a line of characters (data) from its 
keyboard and sends data to server
2.server receives the data and converts characters 
to uppercase
3.server sends modified data to client
4.client receives modified data and displays line on 
its screen
Socket programming with UDP
UDP: no “connection” between client & server
• no handshaking before sending data
• sender explicitly attaches IP destination address and 
port # to each packet
• receiver extracts sender IP address and port# from 
received packet
UDP: transmitted data may be lost or received out-of-
order
Application viewpoint:
• UDP provides unreliable transfer of groups of bytes 
(“datagrams”) between client and server
Client/server socket interaction: UDP
close
clientSocket
read datagram from
clientSocket
create socket:
clientSocket =socket(AF_INET,SOCK_DGRAM)
Create datagram with server IP and
port=x; send datagram via
clientSocket
create socket, port= x:
serverSocket =
socket(AF_INET,SOCK_DGRAM)
read datagram from
serverSocket
write reply to
serverSocket
specifying 
client address,
port number
server (running on serverIP) client
Example app: UDP client
from socket import *
serverName = ‘hostname’
serverPort = 12000
clientSocket = socket(AF_INET, 
SOCK_DGRAM)
message = raw_input(’Input lowercase sentence:’)
clientSocket.sendto(message.encode(),
(serverName, serverPort))
modifiedMessage, serverAddress = 
clientSocket.recvfrom(2048)
print modifiedMessage.decode()
clientSocket.close()
Python UDPClient
include Python’s socket 
library
create UDP socket for 
server
get user keyboard
input 
Attach server name, port to 
message; send into socket
print out received string 
and close socket
read reply characters from
socket into string
Example app: UDP server
from socket import *
serverPort = 12000
serverSocket = socket(AF_INET, SOCK_DGRAM)
serverSocket.bind(('', serverPort))
print (“The server is ready to receive”)
while True:
message, clientAddress = serverSocket.recvfrom(2048)
modifiedMessage = message.decode().upper()
serverSocket.sendto(modifiedMessage.encode(),
clientAddress)
Python UDPServer
create UDP socket
bind socket to local port 
number 12000
loop forever
Read from UDP socket into 
message, getting client’s 
address (client IP and port)
send upper case string 
back to this client
Socket programming with TCP
client must contact server
• server process must first be 
running
• server must have created 
socket (door) that welcomes 
client’s contact
client contacts server by:
• Creating TCP socket, 
specifying IP address, port 
number of server process
• when client creates socket:
client TCP establishes 
connection to server TCP
• when contacted by client, 
server TCP creates new socket
for server process to 
communicate with that 
particular client
o allows server to talk with 
multiple clients
o source port numbers used 
to distinguish clients 
(more in Chap 3)
TCP provides reliable, in-order
byte-stream transfer (“pipe”) 
between client and server
application viewpoint:
Client/server socket interaction: TCP
wait for incoming
connection request
connectionSocket =
serverSocket.accept()
create socket,
port=x, for incoming 
request:
serverSocket = socket()
create socket,
connect to hostid, port=x
clientSocket = socket()
server (running on hostid) client
send request using
clientSocketread request from
connectionSocket
write reply to
connectionSocket
TCP 
connection setup
close
connectionSocket
read reply from
clientSocket
close
clientSocket
Example app: TCP client
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.encode())
modifiedSentence = clientSocket.recv(1024)
print (‘From Server:’, modifiedSentence.decode())
clientSocket.close()
Python TCPClient
create TCP socket for 
server, remote port 12000
No need to attach server 
name, port 
Example app: TCP server
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 True:
connectionSocket, addr = serverSocket.accept()
sentence = connectionSocket.recv(1024).decode()
capitalizedSentence = sentence.upper()
connectionSocket.send(capitalizedSentence.
encode())
connectionSocket.close()
Python TCPServer
create TCP welcoming
socket
server begins listening for 
incoming TCP requests
loop forever
server waits on accept()
for incoming requests, new 
socket created on return
read bytes from socket (but 
not address as in UDP)
close connection to this 
client (but not welcoming 
socket)
• Troca de mensagens de 
requisição e resposta:
o Cliente solicita informações ou 
serviços
o Servidor responde com dados, 
código de status
• Formato de mensagem:
o cabeçalhos: campos que fornecem 
informações sobre dados
o dado: info(payload) sendo 
comunicado
Importante temas:
§ controle vs. mensagens
• in-band, out-of-band
§ centralizado vs. decentralizado 
§ Sem estado ou com estado
§ Transferência de mensagem 
confiável vs. não confiável
§ "Complexidade na borda da 
rede"
Capitulo 2: resumo
Mais importante: aprendeu sobre protocolos!

Continue navegando