Upload
rey
View
18
Download
0
Embed Size (px)
DESCRIPTION
Redes de Computadores 2 - Camada de Aplicação (FTP & SMTP & DNS e Sockets). Paulo Roberto Freire Cunha [email protected]. transferência de arquivos de/para um servidor remoto adota o modelo cliente servidor definido pelo RFC 959 porta 21. transferência. interface com o usuário. - PowerPoint PPT Presentation
Citation preview
Redes de Computadores 2
- Camada de Aplicação (FTP & SMTP & DNS e Sockets)
Paulo Roberto Freire [email protected]
Redes de Computadores 2 (baseado nos slides do Kurose)
FTP - File Transfer Protocol
transferência de arquivos de/para um servidor remoto
adota o modelo cliente servidor definido pelo RFC 959 porta 21
transferênciaservidor
FTP
interfacecom o usuário
clienteFTP
sistema de arquivos local
sistema de arquivos remoto
Redes de Computadores 2 (baseado nos slides do Kurose)
FTP
usa duas conexões TCP
porta 21 (controle)
troca de comandos
porta 20 (dados)
transferência dos dados
o protocolo mantém o
estado da conexão
diretório atual
autenticação
usa duas conexões TCP
porta 21 (controle)
troca de comandos
porta 20 (dados)
transferência dos dados
o protocolo mantém o
estado da conexão
diretório atual
autenticação
cliente servidor
porta 21 - controle
porta 20 - dados
Aplicação
Transporte
Rede
Enlace
Física
Aplicação
Transporte
Rede
Enlace
Física
21 2120 20
Redes de Computadores 2 (baseado nos slides do Kurose)
FTP
cliente
servidor
Comandos (ASCII)
USER username
PASS password
LIST arquivos no diretório corrente
RETR filename recupera um arquivo
STOR filename armazena o arquivo no diretório remoto
Respostas (código + mensagem)
331 username OK, password required
125 data connection already open; transfer starting
425 Can’t open data connection
452 Error writing file
Correio Eletrônico
Redes de Computadores 2 (baseado nos slides do Kurose)
Correio Eletrônico
componentes
agentes do usuário
pine, Outlook, Eudora,
mail, etc
servidores de mail
armazenam as
mensagens enviadas e
recebidas
protocolo SMTP
componentes
agentes do usuário
pine, Outlook, Eudora,
mail, etc
servidores de mail
armazenam as
mensagens enviadas e
recebidas
protocolo SMTP maibox
fila de mensagens de
saída
servidorde e-mail
servidorde e-mail
servidorde e-mail
pine
SMTP
SMTP
SMTP
pine
pine
pine
pine
Redes de Computadores 2 (baseado nos slides do Kurose)
SMTP – Simple Mail Transfer Protocol
RFC 821 usa o TCP (porta 25) usado na comunicação servidor-servidor etapas da comunicação
handshaking transferência de mensagens encerra conexão
interação comandos: texto ASCII resposta: código + descrição
mensagens codificadas em 7-bits ASCII
Redes de Computadores 2 (baseado nos slides do Kurose)
SMTP
servidorde e-mail
servidorde e-mail
cin.ufpe.br cpc.wmin.ac.uk
220 cin.ufpe.br
250 Hello cpc.wmin.ac.uk, pleased to meet you
250 [email protected]... Sender ok
250 [email protected] ... Recipient ok
354 Enter mail, end with "." on a line by itself
250 Message accepted for delivery
221 cin.ufpe.br closing connection
HELO cpc.wmin.ac.uk
MAIL FROM: <[email protected]>
RCPT TO: <[email protected]>
DATA
Do you like ketchup? How about pickles? .
QUIT
ServidorCliente
Redes de Computadores 2 (baseado nos slides do Kurose)
Exemplo
telnet mail.cin.ufpe.br 25
comandos HELO
MAIL FROM
RCPT TO
DATA
QUIT
Redes de Computadores 2 (baseado nos slides do Kurose)
Formato da Mensagem SMTP
cabeçalho
e.g.,To:, From:,
Subject:
corpo
mensagem com
caracteres ASCII
cabeçalho
e.g.,To:, From:,
Subject:
corpo
mensagem com
caracteres ASCII
cabeçalho
corpo
linhaem
branco
Redes de Computadores 2 (baseado nos slides do Kurose)
Formato da Mensagem: Extensão Multimídia (MIME)
RFCs 2045 e 2056
o cabeçalho passa a ter linhas adicionais para definir os
parâmetros do tipo de conteúdo
From: [email protected] To: [email protected] Subject: Vivas news!MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Type: image/jpeg
dado codificado (base64) ..... ......................... ...... codificado (base64)
declaração dosdados multimídia
método paracodificação dos
dados
versão
dados condificadosde acordo com a declaração acima
Redes de Computadores 2 (baseado nos slides do Kurose)
Tipos MIME
Texto plain, html
Imagem jpeg, gif
Áudio basic (8-bit mu-law
encoded),
32kadpcm (32 kbps
coding)
Vídeo
mpeg, quicktime
Aplicações
msword
Redes de Computadores 2 (baseado nos slides do Kurose)
Mensagem com Múltiplas Partes
From: [email protected] To: [email protected] Subject: Picture of yummy crepe. MIME-Version: 1.0 Content-Type: multipart/mixed; boundary=98766789 --98766789Content-Transfer-Encoding: quoted-printableContent-Type: text/plain
Dear Bob, Please find a picture of a crepe.--98766789Content-Transfer-Encoding: base64Content-Type: image/jpeg
base64 encoded data ..... ......................... ......base64 encoded data --98766789--
DNS – Domain Name System
Redes de Computadores 2 (baseado nos slides do Kurose)
Serviço de Nomes
telnet recife.cin.ufpe.br
telnet 150.161.2.1
endereço numérico difícilde memorizar
nome simbólico
DNS
150.161.2.1recife
150.161.2.2olinda
150.161.2.3moreno
150.161.2.4petrolina
IPNome
Motivação
Redes de Computadores 2 (baseado nos slides do Kurose)
Serviço de Nomes
abordagem inicial para o serviço de nomes
recife
olinda
fermat
hordes
Rede
host X
hosts.txt
recife 150.161.2.1olinda 150.161.2.2hordes 200.2.1.23fermat 164.34.2.14......
NIC
NIC – Network Infomation Center
acessado por todos os outros
hosts via FTP
Redes de Computadores 2 (baseado nos slides do Kurose)
Serviço de Nomes abordagem atual: base de nomes
distribuída
Rede
Redes de Computadores 2 (baseado nos slides do Kurose)
DNS
DNS – Domain Name System
RFC 1034 e RFC 1035
refere-se a base de nomes distribuída ou ao protocolo
função: mapeamento de qualquer nome simbólico
(recife) em endereços IP (150.161.2.1) e vice-versa
não usa uma base de dados contendo todos os nomes
usa TCP ou UDP (porta 53)
Redes de Computadores 2 (baseado nos slides do Kurose)
Hierarquia do Espaço de Nomes
os nomes dos domínios são montados de
uma forma hierárquica
Sobre os nomes
63 caracteres
deve iniciar com uma letra
pode conter hífen / dígitos
Redes de Computadores 2 (baseado nos slides do Kurose)
Hierarquia do Espaço de Nomes
cin é um sub-domínio de ufpe.br,ufpe é um subdomínio de br
edu mil gov com
(root)
br
usp ufs ufpe
cin npd
cin.ufpe.br é um nome de domínio totalmentequalificado (FQDN – Fully Qualified Domain Name)
Redes de Computadores 2 (baseado nos slides do Kurose)
Hierarquia do Espaço de Nomes hierarquia do espaço de nomes
edu mil gov com
(raiz)
br
domínios genéricos/domínios organizacionais+ domínios geográficos/países
com - organizações comerciaisedu - instituições organizacionaisgov - instituições governamentaisint - organizações internacionaismil - instituições militaresnet - principais centros de suporte de redesorg - organizações não-governamentaiscódigo do país - código dos países (ISO 3166)
http://www.iana.orgIANA – Internet Assigned Numbers Authority
Redes de Computadores 2 (baseado nos slides do Kurose)
Mapeamento Nome -> IP
o mapeamento de
nomes em endereços IP
é realizado por
servidores de nomes
independentes que
cooperam para realizar
esta tarefa e que estão
organizados em uma
hierarquia
edu mil gov com
(root)
br
usp ufs ufpe
cin npdbarreiros.cin.ufpe.br
(172.19.33.164)
Redes de Computadores 2 (baseado nos slides do Kurose)
Mapeamento IP -> Nome
o mapeamento de
endereços IP em
nomes usa um
outro espaço de
nomes
localizado no
domínio in.addr-arp
recife.cin.ufpe.br
150.161.2.1
busca no espaço denomes dos domínios
150.161.2.1
busca em in-addr.arpa
recife.cin.ufpe.br
Redes de Computadores 2 (baseado nos slides do Kurose)
Espaço de Nomes Distribuído
o DNS usa o conceito de espaço
de nomes distribuído
os nomes simbólicos são
agrupados em zonas
cada zona possui um host
(servidor de nomes) que realiza
o mapeamento Nome->IP
os nomes são administrados
independentemente em cada
zona
os servidores são
organizados
logicamente em uma
árvore hierárquica de
domínios
a autoridade do topo é
compartilhada entre os
servidores de nomes da
raiz
Redes de Computadores 2 (baseado nos slides do Kurose)
Espaço de Nomes Distribuído
edu mil gov com
(root)
br
usp ufs ufpe
cin npd
...13 hosts
Lista de root hosts em ftp.rs.internic.net
(arquivo named.root)
A.ROOT-SERVERS.NET.198.41.0.4
B.ROOT-SERVERS.NET.128.9.0.107
Redes de Computadores 2 (baseado nos slides do Kurose)
Resolução de Nomes exemplo de busca por recife.cin.ufpe.br feita a
partir do host X
edu mil gov com
(root)
br
usp ufs ufpe
cin npd
...
hostX
Redes de Computadores 2 (baseado nos slides do Kurose)
Resolução de Nomes
Programado usuário
ResolvedorServidorde Nomes
Servidorde NomesExterno
Base de Dados
Cache
Cache
user query
user response
query
response
rq
Abordagem I
Redes de Computadores 2 (baseado nos slides do Kurose)
Resolução de Nomes
Programado usuário
Servidorde Nomes
Servidorde NomesExterno
Base de Dados
Cache
query
response
rq
Resolvedorstub
Programas como FTP e Telnet têm um resolvedor incorporado
Abordagem I
Redes de Computadores 2 (baseado nos slides do Kurose)
Operação do Resolvedor de Nomes
tipos de queries
recursiva: quando o
servidor não consegue
resolver o nome, o próprio
servidor executa queries a
outros servidores
iterativa: quando o servidor
não consegue resolver o
nome, o servidor retorna
uma lista de servidores que
podem ser consultados
tipos de respostas
authoritative: quando a
resposta é fornecida por
um servidor que tem
autoridade sobre o
domínio consultado
non-authoritative: quando
a resposta é fornecida por
um servidor que não tem
autoridade sobre o
domínio consultado
Redes de Computadores 2 (baseado nos slides do Kurose)
Operação do Resolvedor de Nomes
tipos de servidores de
nomes (cada servidor
tem autoridade para
zero ou mais zonas)
primário: carrega as
informações da zona do
disco e tem autoridade
sobre a zona
tipos de servidores (cont.)
secundário: tem
autoridade sobre uma
zona, mas obtem as
informações sobre a zona
do servidor primário
(~3horas)
cache: não tem autoridade
sobre a zona e obtém as
informações de servidores
primários ou secundários
Redes de Computadores 2 (baseado nos slides do Kurose)
Formato dos Registros da Base de Nomes
recife 150.161.2.1
olinda 150.161.2.2
moreno 150.161.2.3
petrolina 150.161.2.4
nome TTL classe tipo Rdata
nome = recife.cin.ufpe.brTTL = 86400classe =IN (família de protocolo)tipo = A (endereço do host, tipos definidos em RFC 1034, 1035,1706)Rdata = 150.161.2.1
Redes de Computadores 2 (baseado nos slides do Kurose)
Formato das Mensagens do DNS
Programado usuário
Servidorde Nomes
Servidorde NomesExterno
Base de Dados
Cache
query
response
rq
Resolvedorstub
identificação parâmetros
QDcount ANcount
NSCount ARCount
seção de questão
seção de resposta
seção de autoridade
seção de informação adicional
0 3116
Sockets
Redes de Computadores 2 (baseado nos slides do Kurose)
Sockets
Camada de Abstração do Hardware
Interface de rede
ARP PPP
IP
UDP TCP
Interface de Sockets
Drivers
FTP
TELNET
DNS
HTTP
SMTP
SNMP
Aplicaçãodo Usuário
processos se comunicam enviando/ recebendo mensagens através de sockets (API)
socket é a interface entre o processo da aplicação e a camada de transporte
um processo identifica o outro processo que ele quer se comunicar através de um endereço IP e uma porta
Redes de Computadores 2 (baseado nos slides do Kurose)
Sockets
cliente
TCP/UDP
socket
controlado pelo
desenvolvedorda aplicação
controladopelo SO
host 1
servidor
TCP/UDP
socket
host 2
internet
controlado pelo desenvolvedorda aplicação
controladopelo SO
A aplicação deve executar
sobre o TCP ou UDP?
Redes de Computadores 2 (baseado nos slides do Kurose)
Sockets
servidor deve executar
primeiro cria um socket para
receber as solicitações dos clientes
o socket deve usar uma porta (1023- )
cliente cria um socket para
se comunicar com o servidor
identifica o servidor através do endereço IP + Porta
o socket deve usar a mesma porta do servidor (1023- )
Redes de Computadores 2 (baseado nos slides do Kurose)
Aplicação com Sockets
socket do cliente
outToServer
inFromServer
inFromUser
o cliente lê uma linha da
entrada padrão (inFromUser)
e envia para o servidor via
socket (outToServer)
o servidor lê a linha do socket
e converte-a em maiúscula
o servidor envia a linha
convertida para o cliente
o cliente lê a linha do socket
(inFromserver) e imprime-a
na tela
Streams
Conversor Minúscula / Minúscula
Redes de Computadores 2 (baseado nos slides do Kurose)
Interação Cliente/Servidor (TCP)
Servidor
(hostid)
Cliente
envia solicitaçãoclientSocket
estabelecimentoda conexão TCP
cria um socketconecta a hostid, porta=xclientSocket =
Socket()
espera por solicitaçõesconnectionSocket =welcomeSocket.accept()
cria um socketporta=x, para antender solicitações:welcomeSocket =
ServerSocket()
lê a respostaclientSocket
fechaclientSocket
fechaconnectionSocket
lê a solicitaçãoconnectionSocket
escreve a respostaconnectionSocket
Redes de Computadores 2 (baseado nos slides do Kurose)
Interação Cliente/Servidor (TCP)
Passos da Interação (Java)
1. Abre um socket
2. Abre Input/Output streams para o socket
3. Lê/escreve no stream de acordo com o protocolo de
aplicação usado
4. Fecha os streams
5. Fecha os sockets
Redes de Computadores 2 (baseado nos slides do Kurose)
Cliente Java (TCP)import java.io.*;
import java.net.*;
class TCPClient {
public static void main(String argv[]) throws Exception {
String sentence, modifiedSentence;
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
Socket clientSocket = new Socket("hostname", 6789);
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
sentence = inFromUser.readLine();
outToServer.writeBytes(sentence + '\n');
modifiedSentence = inFromServer.readLine();
System.out.println(“FROM SERVER: " + modifiedSentence);
clientSocket.close();
}
}
Redes de Computadores 2 (baseado nos slides do Kurose)
Servidor Java (TCP)import java.io.*;
import java.net.*;
class TCPServer {
public static void main(String argv[]) throws Exception {
String clientSentence;
String capitalizedSentence;
ServerSocket welcomeSocket = new ServerSocket(6789);
while(true) {
Socket connectionSocket = welcomeSocket.accept();
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
DataOutputStream outToClient = new DataOutputStream (connectionSocket.getOutputStream());
clientSentence = inFromClient.readLine();
capitalizedSentence = clientSentence.toUpperCase() + '\n';
outToClient.writeBytes(capitalizedSentence);
}
}
}
Redes de Computadores 2 (baseado nos slides do Kurose)
Interação Cliente/Servidor (UDP)
Servidor (hostid)
fechaclientSocket
lê a resposta clientSocket
Cliente
cria socket,clientSocket = DatagramSocket()
usa hostid, port=x,para enviar uma solicitação clientSocket
cria socket,porta=x parasolicitações:serverSocket = DatagramSocket()
lê solicitaçãoserverSocket
escreve emserverSocketespecificando o clienteendereço,porta
UDP não é estabelecida uma conexão o cliente explicitamente envia o seu IP+porta para o servidoro servidor deve explicitamente extrair o IP+porta (cliente) do datagrama
Redes de Computadores 2 (baseado nos slides do Kurose)
Cliente Java (UDP)class UDPClient {
public static void main(String args[]) throws Exception {
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
DatagramSocket clientSocket = new DatagramSocket();
InetAddress IPAddress = InetAddress.getByName("hostname");
byte[] sendData = new byte[1024];
byte[] receiveData = new byte[1024];
String sentence = inFromUser.readLine();
sendData = sentence.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876);
clientSocket.send(sendPacket);
DatagramPacket receivePacket =new DatagramPacket(receiveData, receiveData.length);
clientSocket.receive(receivePacket);
String modifiedSentence = new String(receivePacket.getData());
System.out.println("FROM SERVER:" + modifiedSentence);
clientSocket.close();
}
}
Redes de Computadores 2 (baseado nos slides do Kurose)
Servidor Java (UDP)class UDPServer {
public static void main(String args[]) throws Exception {
DatagramSocket serverSocket = new DatagramSocket(9876);
byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];
while(true) {
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
String sentence = new String(receivePacket.getData());
InetAddress IPAddress = receivePacket.getAddress();
int port = receivePacket.getPort();
String capitalizedSentence = sentence.toUpperCase();
sendData = capitalizedSentence.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port);
serverSocket.send(sendPacket);
}
}
}