Cap04 Camada Aplicacao
Cap04 Camada Aplicacao
Robson Siscoutto
Camada de Aplicação
1
Camada de Aplicação
Protocolos de aplicação
◼ fazem parte das aplicações
◼ HTTP, SMTP, POP3, …
aplicação
◼ definem mensagens trocadas e as ações tomadas aplicação
transporte
transporte
rede
rede
◼ usam serviços de comunicação das camadas enlace
enlace
física
física
inferiores
Aplicações de Rede
Processo: programa ◼ agente usuário: software que
interfaceia com o usuário de um lado e
executando num host.
com a rede de outro.
◼ implementa protocolo da camada de
◼ dentro do mesmo host: aplicação
interprocess communication
◼ Web: browser
(definido pelo OS).
◼ Netscape, IE, ….
◼ E-mail: leitor de correio
◼ processos executando em ◼ MSOutlook, …
diferentes hosts se
◼ streaming audio/video: media player
comunicam com um
protocolo da camada de
aplicação
Paradigma Cliente-Servidor
Aplicações de rede típicas têm duas
partes: cliente and servidor aplicação
transporte
rede
enlace
Cliente: física
Largura de Banda
• algumas aplicações (e.x., multimedia) exigem uma banda mínima para serem utilizáveis
– Voz: 32Kbps
• outras aplicações (“aplicações elasticas”) melhoram quando a banda disponível aumenta
– Coreio eletronico, transferencia de aquivos, acesso remoto e transferencias Web, ….
Requisitos de Transporte de Aplicações Comuns
Protocolo de Protocolo de
Aplicação Aplicação Transporte
cliente
tempo
Exemplo (cont.)
4. servidor http fecha conexão TCP.
Persistente
◼ modo default para htp/1.1
◼ o cliente envia pedido para todos os objetos referenciados tão logo ele
recebe a página HTML básica
Linhas
cabeçalho
Corpo da Entidade
◼ Linhas de requisição: Método: GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, CONNECT
◼ HEAD: Usado para depuração de servidores HTTP;
◼ POST – Páginas Web frequentemente contêm um formulário de entrada – Conteúdo é enviado para o servidor no corpo da mensagem - Alternativa: Campos do formulário no URL – Usa
o método GET – Conteúdo é enviado para o servidor no campo URL
HTTP/1.0 200 OK
Date: Thu, 06 Aug 1998 12:00:15 GMT
Server: Apache/1.3.0 (Unix)
linhas de cabeçalho Last-Modified: Mon, 22 Jun 1998 …...
Content-Length: 6821
Content-Type: text/html
200 OK
◼ request succeeded, requested object later in
this message
301 Moved Permanently
◼ requested object moved, new location
specified later in this message (Location:)
400 Bad Request
◼ request message not understood by server
404 Not Found
◼ requested document not found on this server
505 HTTP Version Not Supported
Exemplo
HTTP/2
◼ HTTP/1.0 - Uma requisição por conexão TCP
◼ HTTP/1.1 - Sequência de requisições por conexão
◼ Melhora em relação ao 1.0, mas ainda pode ter problemas de bloqueio na
cabeceira da fila (HOL - head-of-line blocking)
Clientes que precisam fazer muitas o O bloqueio HOL é um bloqueio que ocorre na porta de entrada.
Este bloqueio ocorre quando dois ou mais pacotes são destinados
requisições acabam usando múltiplas a uma mesma porta de saída mais alta. Se o pacote1 de uma porta
◼ HTTP/2
◼ Permite a intercalação de requisições e respostas na mesma
conexão
◼ Usa codificação do cabeçalho HTTP
HTTP/2 se torna mais amigável à rede
já que um número menor de conexões
TCP é necessário
Cookies – RFC 2109
◼ Razão: obter informações do usuário
◼ Gerados e lembrados pelo servidor, cliente servidor
usados mais tarde para: usual http request msg ação
◼ autenticação usual http response +
específica
◼ lembrar preferencias dos usuários ou Set-cookie: # do cookie
prévias escolhas
◼ Uma maneira de guardar estados
usual http request msg
cookie: # ação
específica
◼ servidor envia “cookie” ao cliente na usual http response msg do cookie
resposta HTTP
Set-cookie: 1678453
usual http request msg
ação
cookie: #
específica
◼ cliente apresenta o cookie em pedidos usual http response msg do cookie
posteriores
cookie: 1678453
Cookies – RFC 2109
◼ Quatro componentes principais:
◼ Linha de cabeçalho do cookie na mensagem de resposta HTTP
◼ Linha de cabeçalho do cookie na mensagem de pedido HTTP
◼ Arquivo do cookie mantido na estação do usuário e gerenciado pelo navegador do usuário
◼ Banco de Dados de retaguarda no sítio Web
cache
institucional
Protocolo HTTP
FTP transferência de
FTP FTP
interface cliente arquivos
servidor
de usuário
user
at host sistema de sistema de
arquivos arquivos remoto
local
SMTP mail
Agente de usuário server agente
◼ “leitor de correio” SMTP usuário
que envia
agente
◼ “servidor”: servidor de correio usuário
que recebe agente
usuário
Correio Eletrônico: smtp [RFC 821]
◼ usa TCP para transferência confiável de mensagens de correio do cliente ao servidor, porta 25
◼ handshaking (apresentação)
◼ transferência de mensagens
◼ fechamento
◼ interação comando/resposta
Text Video
◼ exemplo de subtipos: plain, html ◼ exemplo de subtipos: mpeg,
quicktime
Image
◼ exemplo de subtipos: jpeg, gif Application
◼ outros dados que devem ser
Audio processados pelo leitor antes de
serem apresentados “visualmente”
◼ exemplo de subtipos: basic
(codificado 8-bit -law ), 32kadpcm ◼ exemplo de subtipos: msword,
octet-stream
(codificação 32 kbps)
Tipo Multiparte
From: [email protected]
To: [email protected]
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
servidor de servidor de
correio da origem correio do destino
Locais
Não cresce junto com a ou
rede! oficiais
Servidores de Nomes DNS
◼ Responsáveis por:
◼ Domínios como com, org, net, edu, ...
◼ Todos os domínios de países como br, uk, fr, ca, jp
◼ Consultas dos computadores locais ao DNS vão primeiro para o servidor de nomes local
◼ pode realizar mapeamentos de nomes para endereços para aquele nome de computador
a NSI Herndon, VA
c PSInet Herndon, VA k RIPE London
d U Maryland College Park, MD i NORDUnet Stockholm
g DISA Vienna, VA
h ARL Aberdeen, MD
j NSI (TBD) Herndon, VA
m WIDE Tokyo existem 13 servidores de nomes
e NASA Mt View, CA
f Internet Software C. Palo Alto,
raiz no mundo
CA
2 4
host surf.eurecom.fr quer o 3
5
endereço IP de
gaia.cs.umass.edu
◼ Type=NS
◼ name é um domínio (ex. foo.com)
◼ value é o endereço IP do servidor
• Type=CNAME
de nomes autoritativo para este – name é um “apelido” para algum
domínio nome “canônico” (o nome real)
www.ibm.com é realmente
• Type=MX
servereast.backup2.ibm.com
– value é o nome do servidor de
correio associado com name – value é o nome canônico
DNS: protocolo e mensagens
Protocolo DNS: mensagen de consulta e resposta , ambas
com o mesmo formato de mensagem
cabeçalho da msg
• identificação: número de 16 bit
para consulta, resposta usa o
mesmo número
• flags:
– consulta ou resposta
– recursão desejada
– recursão disponível
– resposta é autoritativa
DNS: protocolo e mensagens
Programação de Sockets
Objetivo: aprender a construir aplicações cliente/servidor
que se comunicam usando sockets
Socket API
socket
◼ introduzida no BSD4.1 UNIX, 1981
◼ explicitamente criados, usados e liberados pelas
aplicações uma interface local, criada e possuída pelas
◼ paradigma cliente/servidor aplicações,
◼ dois tipos de serviço de transporte via socket API: controlada pelo OS (uma “porta”) na qual os
◼ datagrama não confiável (UDP) processo de aplicação podem tanto enviar
◼ confiável, orientado a cadeias de bytes (TCP) quanto receber mensagens de e para outro
processo de aplicação (local ou remoto)
Programação de Sockets com TCP
controlado pelo
controlado pelo processo processo
criador da aplicação
criador da aplicação
socket socket
TCP com TCP com controlado pelo
controlado pelo
sistema buffers, buffers, sistema
internet variáveis
operacional variáveis operacional
host o host ou
servidor servidor
Programação de Sockets com TCP
Cliente deve contactar o servidor ◼ Quando o cliente cria o socket:
◼ processo servidor já deve estar cliente TCP estabelece conexão
executando antes de ser com o TCP do servidor
contactado ◼ Quando contactado pelo cliente,
◼ servidor deve ter criado socket o TCP do servidor cria um novo
(porta) que aceita o contato do socket para o processo servidor
cliente comunicar-se com o cliente
◼ permite o servidor conversar
Cliente contata o servidor através
de: com múltiplos clientes
◼ criando um socket TCP local
ponto de vista da aplicação
◼ especificando endereço IP e
TCP fornece a transferência
número da porta do processo
confiável, em ordem de bytes
servidor
(“pipe”) entre o cliente e o
servidor
Programação de Sockets com TCP
teclado monitor
inFromUser
◼ cliente lê linha da entrada padrão input
stream
do sistema (inFromUser stream) processo
Process stream de entrada:
, envia para o servidor via socket cliente seqüência de bytes
(outToServer stream) para dentro do processo
stream de saída:
◼ servidor lê linha do socket seqüência de bytes
◼ servidor converte linha para letras para fora do processo
inFromServer
maiúsculas e envia de volta ao
outToServer
output input
cliente stream stream
sentence = inFromUser.readLine();
clientSocket.close();
}
}
Exemplo: servidor Java (TCP)
import java.io.*;
import java.net.*;
class TCPServer {
Cria stream de
saída, ligado ao DataOutputStream outToClient =
socket new DataOutputStream(connectionSocket.getOutputStream());
Lê linha do
socket clientSentence = inFromClient.readLine();
inFromUser
stream
de entrada
processo
Process Entrada: recebe
cliente
pacote (TCP recebe
Saída: envia pacote “byte stream”)
(TCP envia “byte
receivePacket
sendPacket
stream”) pacote pacote
UDP UDP
socket UDP
clientSocket
cliente UDP
socket
class UDPClient {
public static void main(String args[]) throws Exception
{
Cria
stream de entrada BufferedReader inFromUser =
new BufferedReader(new InputStreamReader(System.in));
Cria
socket cliente DatagramSocket clientSocket = new DatagramSocket();
Translada
nome do host para InetAddress IPAddress = InetAddress.getByName("hostname");
endereço IP
usando DNS byte[] sendData = new byte[1024];
byte[] receiveData = new byte[1024];
class UDPServer {
public static void main(String args[]) throws Exception
Cria {
socket datagrama
DatagramSocket serverSocket = new DatagramSocket(9876);
na porta 9876
byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];
while(true)
{
Cria espaço para
DatagramPacket receivePacket =
datagramas recebidos
new DatagramPacket(receiveData, receiveData.length);
Recebe serverSocket.receive(receivePacket);
datagrama
Exemplo: servidor Java, (cont.)
String sentence = new String(receivePacket.getData());
Obtém endereço IP
InetAddress IPAddress = receivePacket.getAddress();
e número da porta
do transmissor
int port = receivePacket.getPort();
sendData = capitalizedSentence.getBytes();
Cria datagrama
DatagramPacket sendPacket =
para enviar ao cliente
new DatagramPacket(sendData, sendData.length, IPAddress,
port);
Escreve o
datagrama para serverSocket.send(sendPacket);
dentro do socket }
}
} Termina o while loop,
retorna e espera por
outro datagrama
Criação de Java threads
77
Criação de Java threads
78
Programação de Sockets: referências
◼ Andrew S. Tanenbaum
◼ Redes de Computadores