450 likes | 594 Views
Redes de Computadores 2 - Camada de Aplicação (FTP & SMTP & DNS e Sockets). Paulo Roberto Freire Cunha prfc@cin.ufpe.br. 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.
E N D
Redes de Computadores 2- Camada de Aplicação (FTP & SMTP & DNS e Sockets) Paulo Roberto Freire Cunha prfc@cin.ufpe.br
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 servidor FTP cliente FTP sistema de arquivos remoto sistema de arquivos local FTP - File Transfer Protocol Redes de Computadores 2 (baseado nos slides do Kurose)
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 porta 21 - controle porta 20 - dados Aplicação Aplicação cliente servidor Enlace Enlace Física Física Rede Rede 20 20 21 21 Transporte Transporte FTP Redes de Computadores 2 (baseado nos slides do Kurose)
Comandos (ASCII) USER username PASS password LISTarquivos no diretório corrente RETR filename recupera um arquivo STOR filename armazena o arquivo no diretório remoto servidor Respostas (código + mensagem) 331username OK, password required 125 data connection already open; transfer starting 425 Can’t open data connection 452 Error writing file cliente FTP Redes de Computadores 2 (baseado nos slides do Kurose)
componentes agentes do usuário pine, Outlook, Eudora, mail, etc servidores de mail armazenam as mensagens enviadas e recebidas protocolo SMTP pine pine pine pine pine SMTP SMTP SMTP servidor de e-mail servidor de e-mail servidor de e-mail Correio Eletrônico fila de mensagens de saída maibox Redes de Computadores 2 (baseado nos slides do Kurose)
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 SMTP – Simple Mail Transfer Protocol Redes de Computadores 2 (baseado nos slides do Kurose)
servidor de e-mail servidor de e-mail SMTP cin.ufpe.br cpc.wmin.ac.uk Servidor Cliente 220cin.ufpe.br HELO cpc.wmin.ac.uk 250 Hello cpc.wmin.ac.uk, pleased to meet you MAIL FROM: <alice@cpc.wmin.ac.uk> 250 alice@cpc.wmin.ac.uk... Sender ok RCPT TO: <bob@cin.ufpe.br> DATA 250 bob@cin.ufpe.br ... Recipient ok Do you like ketchup? How about pickles? . 354 Enter mail, end with "." on a line by itself 250 Message accepted for delivery QUIT 221 cin.ufpe.br closing connection 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)
cabeçalho e.g.,To:, From:, Subject: corpo mensagem com caracteres ASCII Formato da Mensagem SMTP linha em branco cabeçalho corpo Redes de Computadores 2 (baseado nos slides do Kurose)
RFCs 2045 e 2056 o cabeçalho passa a ter linhas adicionais para definir os parâmetros do tipo de conteúdo From: ahmed@cpc.wmin.ac.uk To: user@cin.ufpe.br Subject: Vivas news! MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Type: image/jpeg dado codificado (base64) ..... ......................... ...... codificado (base64) Formato da Mensagem: Extensão Multimídia (MIME) versão método para codificação dos dados declaração dos dados multimídia dados condificados de acordo com a declaração acima Redes de Computadores 2 (baseado nos slides do Kurose)
Texto plain, html Imagem jpeg, gif Áudio basic (8-bit mu-law encoded), 32kadpcm (32 kbps coding) Vídeo mpeg, quicktime Aplicações msword Tipos MIME Redes de Computadores 2 (baseado nos slides do Kurose)
Mensagem com Múltiplas Partes From: alice@cpc.wmin.ac.uk To: bob@cin.ufpe.br 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-- Redes de Computadores 2 (baseado nos slides do Kurose)
nome simbólico telnet recife.cin.ufpe.br endereço numérico difícil de memorizar DNS Nome IP telnet 150.161.2.1 recife 150.161.2.1 150.161.2.2 olinda 150.161.2.3 moreno petrolina 150.161.2.4 Serviço de Nomes Motivação Redes de Computadores 2 (baseado nos slides do Kurose)
Serviço de Nomes • abordagem inicial para o serviço de nomes recife • NIC – Network Infomation Center • acessado por todos os outros • hosts via FTP hordes olinda Rede recife 150.161.2.1 olinda 150.161.2.2 hordes 200.2.1.23 fermat 164.34.2.14 ... ... fermat hosts.txt NIC host X 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)
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 Hierarquia do Espaço de Nomes Redes de Computadores 2 (baseado nos slides do Kurose)
(root) br edu gov usp com mil ufpe ufs cin npd Hierarquia do Espaço de Nomes cin é um sub-domínio de ufpe.br, ufpe é um subdomínio de br cin.ufpe.br é umnome de domínio totalmente qualificado (FQDN – Fully Qualified Domain Name) Redes de Computadores 2 (baseado nos slides do Kurose)
(raiz) edu gov com mil br Hierarquia do Espaço de Nomes • hierarquia do espaço de nomes domínios genéricos/domínios organizacionais + domínios geográficos/países com- organizações comerciais edu - instituições organizacionais gov - instituições governamentais int - organizações internacionais mil - instituições militares net - principais centros de suporte de redes org - organizações não-governamentais código do país - código dos países (ISO 3166) http://www.iana.org IANA – Internet Assigned Numbers Authority Redes de Computadores 2 (baseado nos slides do Kurose)
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 Mapeamento Nome -> IP (root) edu gov com mil br usp ufs ufpe barreiros.cin.ufpe.br (172.19.33.164) cin npd Redes de Computadores 2 (baseado nos slides do Kurose)
o mapeamento de endereços IP em nomes usa um outro espaço de nomes localizado no domínio in.addr-arp Mapeamento IP -> Nome recife.cin.ufpe.br busca no espaço de nomes dos domínios 150.161.2.1 150.161.2.1 busca em in-addr.arpa recife.cin.ufpe.br Redes de Computadores 2 (baseado nos slides do Kurose)
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 Espaço de Nomes Distribuído Redes de Computadores 2 (baseado nos slides do Kurose)
(root) edu usp gov com mil ufs Espaço de Nomes Distribuído B.ROOT-SERVERS.NET. 128.9.0.107 A.ROOT-SERVERS.NET. 198.41.0.4 ... 13 hosts br ufpe Lista de root hosts em ftp.rs.internic.net (arquivo named.root) cin npd Redes de Computadores 2 (baseado nos slides do Kurose)
(root) edu gov usp com mil ufs Resolução de Nomes • exemplo de busca por recife.cin.ufpe.br feita a partir do host X ... br ufpe hostX cin npd Redes de Computadores 2 (baseado nos slides do Kurose)
Programa do usuário Cache Cache Resolução de Nomes Abordagem I query user query Servidor de Nomes Resolvedor user response response Base de Dados r q Servidor de Nomes Externo Redes de Computadores 2 (baseado nos slides do Kurose)
Programa do usuário query Servidor de Nomes Resolvedor stub response Base de Dados Cache r q Programas como FTP e Telnet têm um resolvedor incorporado Servidor de Nomes Externo Resolução de Nomes Abordagem I Redes de Computadores 2 (baseado nos slides do Kurose)
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 Operação do Resolvedor de Nomes • 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)
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 Operação do Resolvedor de Nomes • 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)
nome TTL classe tipo Rdata 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 = recife.cin.ufpe.br TTL = 86400 classe =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 Cache Programa do usuário query Servidor de Nomes Resolvedor stub response Base de Dados r q Servidor de Nomes Externo identificação parâmetros QDcount ANcount ARCount NSCount seção de questão seção de resposta seção de autoridade seção de informação adicional 0 31 16 Redes de Computadores 2 (baseado nos slides do Kurose)
T E L N E T H T T P S M T P S N M P F T P Aplicação do Usuário UDP TCP IP ARP PPP Interface de rede Camada de Abstração do Hardware Sockets • 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 D N S Interface de Sockets Drivers Redes de Computadores 2 (baseado nos slides do Kurose)
socket Sockets controlado pelo desenvolvedor da aplicação controlado pelo desenvolvedor da aplicação servidor cliente socket controlado pelo SO controlado pelo SO TCP/UDP TCP/UDP internet host 2 host 1 A aplicação deve executar sobre o TCP ou UDP? Redes de Computadores 2 (baseado nos slides do Kurose)
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- ) Sockets Redes de Computadores 2 (baseado nos slides do Kurose)
inFromUser outToServer inFromServer Aplicação com Sockets Conversor Minúscula / Minúscula • 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 socket do cliente Redes de Computadores 2 (baseado nos slides do Kurose)
cria um socket porta=x, para antender solicitações: estabelecimento da conexão TCP welcomeSocket = ServerSocket() cria um socket conecta a hostid, porta=x espera por solicitações clientSocket = Socket() connectionSocket = welcomeSocket.accept() envia solicitação clientSocket lê a solicitação connectionSocket escreve a resposta connectionSocket lê a resposta clientSocket fecha connectionSocket fecha clientSocket Interação Cliente/Servidor (TCP) Servidor (hostid) Cliente Redes de Computadores 2 (baseado nos slides do Kurose)
Interação Cliente/Servidor (TCP) Passos da Interação (Java) • Abre um socket • Abre Input/Output streams para o socket • Lê/escreve no stream de acordo com o protocolo de aplicação usado • Fecha os streams • 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)
cria socket, porta=x para solicitações: cria socket, clientSocket = DatagramSocket() serverSocket = DatagramSocket() usa hostid, port=x, para enviar uma solicitação clientSocket lê solicitação serverSocket escreve em serverSocket especificando o cliente endereço, porta lê a resposta clientSocket fecha clientSocket Interação Cliente/Servidor (UDP) Cliente Servidor (hostid) • UDP • não é estabelecida uma conexão • o cliente explicitamente envia o seu IP+porta para o servidor • o 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); } } } Redes de Computadores 2 (baseado nos slides do Kurose)