Professional Documents
Culture Documents
2: Camada de Aplicação 2
Servidores de nomes DNS
Por que não centralizar o Nenhum servidor mantém
DNS? todos os mapeamento nome-
ponto único de falha para-endereço IP
volume de tráfego servidor de nomes local:
cada provedor, empresa tem
base de dados
servidor de nomes local (default)
centralizada e distante pedido DNS de hospedeiro vai
manutenção (da BD) primeiro ao servidor de nomes
local
2: Camada de Aplicação 5
Exemplo de DNS
servidor de
nomes raiz
Servidor raiz: 6
2
pode não conhecer o 7 3
servidor de nomes
oficial
pode conhecer
servidor de nomes servidor intermediário
servidor local
intermediário: a quem pitomba.ic.uff.br saell.cc.columbia.edu
contatar para 4 5
descobrir o servidor 1 8
de nomes oficial
servidor oficial
cs.columbia.edu
solicitante
manga.ic.uff.br
www.cs.columbia.edu
2: Camada de Aplicação 6
DNS: consultas interativas servidor de
nomes raíz
2: Camada de Aplicação 8
Registros DNS
DNS: BD distribuído contendo registros de recursos (RR)
Tipo=A Tipo=CNAME
nome é nome de hospedeiro nome é nome alternativo
valor é o seu endereço IP (alias) para algum nome
“canônico” (verdadeiro)
Tipo=NS valor é o nome
nome é domínio (p.ex. canônico
foo.com.br)
valor é endereço IP de
Tipo=MX
servidor oficial de nomes nome é domínio
para este domínio valor é nome do servidor de
correio para este domínio
2: Camada de Aplicação 9
DNS: protocolo e mensagens
protocolo DNS: mensagens de pedido e resposta,
ambas com o mesmo formato de mensagem
cabeçalho de msg
identificação: ID de 16 bit
para pedido, resposta ao
pedido usa mesmo ID
flags:
pedido ou resposta
recursão desejada
recursão permitida
resposta é oficial
2: Camada de Aplicação 10
DNS: protocolo e mensagens
campos de nome, e
de tipo num pedido
RRs em resposta
ao pedido
2: Camada de Aplicação 11
Programação com sockets
Meta: aprender a construir aplicações cliente/servidor
que se comunicam usando sockets
socket
API Sockets uma interface (uma
apareceu no BSD4.1 UNIX “porta”), local ao
em 1981 hospedeiro, criada por e
são explicitamente criados, pertencente à aplicação, e
usados e liberados por apls controlado pelo SO,
paradigma cliente/servidor através da qual um
processo de aplicação
dois tipos de serviço de
pode tanto enviar como
transporte via API Sockets
receber mensagens
datagrama não confiável
para/de outro processo
fluxo de bytes, confiável de aplicação
(remoto ou local)
2: Camada de Aplicação 12
Programação com sockets usando TCP
Socket: uma porta entre o processo de aplicação e um
protocolo de transporte fim-a-fim (UDP ou TCP)
Serviço TCP: transferência confiável de bytes de um
processo para outro
controlado pelo
controlado pelo processo programador de
programador de processo
aplicação
aplicação
socket socket
TCP com TCP com controlado
controlado
buffers, pelo sistema
pelo sistema buffers, internet operacional
operacional variáveis variáveis
estação ou estação ou
servidor servidor
2: Camada de Aplicação 13
Programação com sockets usando TCP
Cliente deve contactar servidor Quando cliente cria socket: TCP
processo servidor deve antes do cliente estabelece conexão com
estar em execução TCP do servidor
servidor deve antes ter Quando contatado pelo cliente, o
criado socket (porta) que TCP do servidor cria socket novo
aguarda contato do cliente para que o processo servidor possa
se comunicar com o cliente
Cliente contacta servidor para:
permite que o servidor
criar socket TCP local ao
converse com múltiplos clientes
cliente
especificar endereço IP, ponto de vista da aplicação
número de porta do processo
servidor TCP provê transferência
confiável, ordenada de bytes
(“tubo”) entre cliente e servidor
2: Camada de Aplicação 14
Comunicação entre sockets
2: Camada de Aplicação 15
Exemplo de aplicação cliente-servidor
Fluxo de entrada: seqüência
cliente lê linha da entrada
de bytes recebida pelo
padrão (fluxo doUsuário),
processo
envia para servidor via socket
(fluxo paraServidor) Fluxo de saída: seqüência de
bytes transmitida pelo
servidor lê linha do socket
processo
servidor converte linha para
letras maiúsculas, devolve
para o cliente
cliente lê linha modificada do
socket (fluxo doServidor),
imprime-a
socket do cliente
2: Camada de Aplicação 16
Interações cliente/servidor usando o TCP
Servidor (executa em nomeHosp) Cliente
cria socket,
porta=x, para
receber pedido:
socketRecepção =
ServerSocket ()
TCP cria socket,
aguarda chegada de
pedido de conexão setup da conexão abre conexão a nomeHosp, porta=x
socketCliente =
socketConexão =
Socket()
socketRecepção.accept()
escreve resposta
para socketConexão lê resposta de
socketCliente
fecha
socketConexão fecha
socketCliente
2: Camada de Aplicação 17
Exemplo: cliente Java (TCP)
import java.io.*;
import java.net.*;
class ClienteTCP {
frase = doUsuario.readLine();
Envia linha
ao servidor paraServidor.writeBytes(frase + '\n');
socketCliente.close();
}
}
2: Camada de Aplicação 19
Exemplo: servidor Java (TCP)
import java.io.*;
import java.net.*;
class servidorTCP {
2: Camada de Aplicação 20
Exemplo: servidor Java (TCP), cont
Cria fluxo
de saída, ligado DataOutputStream paraCliente =
ao socket new DataOutputStream(socketConexão.getOutputStream());
Lê linha
do socket fraseCliente= doCliente.readLine();
2: Camada de Aplicação 21
Programação com sockets usando UDP
2: Camada de Aplicação 22
Interações cliente/servidor usando o UDP
Servidor (executa em nomeHosp) Cliente
escreve resposta
ao socketServidor
especificando endereço lê resposa do
IP, número de porta socketCliente
do cliente fecha
socketCliente
2: Camada de Aplicação 23
Cliente UDP
2: Camada de Aplicação 24
Exemplo: cliente Java (UDP)
import java.io.*;
import java.net.*;
class clienteUDP {
public static void main(String args[]) throws Exception
{
Cria
fluxo de entrada BufferedReader do Usuario=
new BufferedReader(new InputStreamReader(System.in));
Cria
socket de cliente DatagramSocket socketCliente = new DatagramSocket();
Traduz nome de
InetAddress IPAddress = InetAddress.getByName(”nomeHosp");
hospedeiro ao
endereço IP byte[] sendData = new byte[1024];
usando DNS byte[] receiveData = new byte[1024];
String fraseModificada =
new String(pacoteRecebido.getData());
2: Camada de Aplicação 26
Servidor UDP
2: Camada de Aplicação 27
Exemplo: servidor Java (UDP)
import java.io.*;
import java.net.*;
class servidorUDP {
public static void main(String args[]) throws Exception
Cria socket {
para datagramas
DatagramSocket socketServidor = new DatagramSocket(9876);
na porta 9876
byte[] dadosRecebidos = new byte[1024];
byte[] dadosEnviados = new byte[1024];
while(true)
{
Aloca memória para DatagramPacket pacoteRecebido =
new DatagramPacket(dadosRecebidos,
receber datagrama
dadosRecebidos.length);
Recebe socketServidor.receive(pacoteRecebido);
datagrama
2: Camada de Aplicação 28
Exemplo: servidor Java (UDP), cont
String frase = new String(pacoteRecebido.getData());
Obtém endereço
InetAddress IPAddress = pacoteRecebido.getAddress();
IP, no. de porta
do remetente int porta = pacoteRecebido.getPort();
dadosEnviados = fraseEmMaiusculas.getBytes();
Cria datagrama p/
DatagramPacket pacoteEnviado =
enviar ao cliente new DatagramPacket(dadosEnviados,
dadosEnviados.length, IPAddress, porta);
Escreve
datagrama socketServidor.send(pacoteEnviado);
no socket }
}
} Fim do elo while,
volta ao início e aguarda
chegar outro datagrama
2: Camada de Aplicação 29
Servidor Web Simples
Funções do servidor Web:
Trata apenas um pedido HTTP por vez
Aceita e examina o pedido HTTP
Recupera o arquivo pedido do sistema de
arquivos do servidor
Cria uma mensagem de resposta HTTP
consistindo do arquivo solicitado precedido por
linhas de cabeçalho
Envia a resposta diretamente ao cliente.
2: Camada de Aplicação 30
Servidor Web Simples
Contém a classe import java.io.*;
StringTokenizer que é import java.net.*;
usada para examinar import java.util.*;
o pedido
class WebServer {
public static void main(String argv[]) throws Exception
Primeira linha da mensagem {
de pedido HTTP e String requestMessageLine;
Nome do arquivo solicitado String fileName;
2: Camada de Aplicação 31
Servidor Web Simples, cont
Lê a primeira linha do
pedido HTTP que deveria
ter o seguinte formato: requestMessageLine = inFromClient.readLine();
GET file_name HTTP/1.0
StringTokenizer tokenizedLine =
Examina a primeira linha new StringTokenizer(requestMessageLine);
da mensagem para extrair if (tokenizedLine.nextToken().equals("GET")){
fileName = tokenizedLine.nextToken();
o nome do arquivo
if (fileName.startsWith("/") == true )
fileName = fileName.substring(1);
2: Camada de Aplicação 32
Servidor Web Simples, cont
if (fileName.endsWith(".jpg"))
outToClient.writeBytes("Content-Type: image/jpeg\r\n");
Transmissão do if (fileName.endsWith(".gif"))
cabeçalho da resposta outToClient.writeBytes("Content-Type:
HTTP. image/gif\r\n");
outToClient.writeBytes("Content-Length: " + numOfBytes +
"\r\n");
outToClient.writeBytes("\r\n");
outToClient.write(fileInBytes, 0, numOfBytes);
connectionSocket.close();
}
troca típica de
msgs de controle X dados
mensagens
na banda, fora da banda
pedido/resposta:
centralizado X descentralizado
cliente solicita info ou
s/ estado X c/ estado
serviço
transferência de msgs
servidor responde com
confiável X não confiável
dados, código de status
“complexidade na borda da
formatos de mensagens: rede”
cabeçalhos: campos com
segurança: autenticação
info sobre dados
(metadados)
dados: info sendo
comunicada 2: Camada de Aplicação 35