2b: Camada de Aplicação 1
Capítulo 2: Roteiro
2.1 Princípios dos protocolos da camada de aplicação
2.2 Web e HTTP 2.3 FTP 2.4 Correio
Eletrônico SMTP, POP3, IMAP
2.5 DNS
2.6 Compartilhamento de arquivos P2P
2.7 Programação de Sockets com TCP
2.8 Programação de Sockets com UDP
2.9 Construindo um servidor Web
2b: Camada de Aplicação 2
DNS: Domain Name System
Pessoas: muitos identificadores: CPF, nome, no. da
Identidade
hospedeiros, roteadores Internet : endereço IP (32 bit) -
usado p/ endereçar datagramas
“nome”, ex., jambo.ic.uff.br - usado por gente
P: como mapear entre nome e endereço IP?
Domain Name System: base de dados distribuída
implementada na hierarquia de muitos servidores de nomes
protocolo de camada de aplicação permite que hospedeiros, roteadores, servidores de nomes se comuniquem para resolver nomes (tradução endereço/nome) nota: função imprescindível
da Internet implementada como protocolo de camada de aplicação
complexidade na borda da rede
2b: Camada de Aplicação 3
DNS (cont.)
Serviços DNS Tradução de nome de
hospedeiro para IP Apelidos para
hospedeiros (aliasing) Nomes canônicos e
apelidos
Apelidos para servidores de e-mail
Distribuição de carga Servidores Web replicados:
conjunto de endereços IP para um nome canônico
Serviços DNS Roda sobre UDP e usa a
porta 53 RFCs 1034, 1035 Atualizado em outras RFCs
Por que não centralizar o DNS?
ponto único de falha volume de tráfego base de dados
centralizada e distante manutenção (da BD)
Não é escalável!
2b: Camada de Aplicação 4
Root DNS Servers
com DNS servers org DNS servers edu DNS servers
poly.eduDNS servers
umass.eduDNS servers
yahoo.comDNS servers
amazon.comDNS servers
pbs.orgDNS servers
Base de Dados Hierárquica e Distribuída
Cliente quer IP para www.amazon.com; 1a aprox: Cliente consulta um servidor raiz para encontrar um
servidor DNS .com Cliente consulta servidor DNS .com para obter o
servidor DNS para o domínio amazon.com Cliente consulta servidor DNS do domínio amazon.com
para obter endereço IP de www.amazon.com
2b: Camada de Aplicação 5
DNS: Servidores raiz
procurado por servidor local que não consegue resolver o nome
servidor raiz: procura servidor oficial se mapeamento desconhecido obtém tradução devolve mapeamento ao servidor local
13 servidores de nome raiz em todo o mundo
a Verisign, Dulles, VAc Cogent, Herndon, VA (also Los Angeles)d U Maryland College Park, MDg US DoD Vienna, VAh ARL Aberdeen, MDj Verisign, ( 11 locations)
b USC-ISI Marina del Rey, CAl ICANN Los Angeles, CA
e NASA Mt View, CAf Internet Software C. Palo Alto, CA (and 17 other locations)
i Autonomica, Stockholm (plus 3 other locations)
k RIPE London (also Amsterdam, Frankfurt)
m WIDE Tokyo
2b: Camada de Aplicação 6
Servidores TLD e Oficiais
Servidores Top-level domain (TLD) : servidores DNS responsáveis por domínios com, org, net, edu, etc, e todos os domínios de países como br, uk, fr, ca, jp. Network Solutions mantém servidores para domínio com FAPESP (Registro .br) para domínio br
Servidores oficiais: servidores DNS das organizações, provendo mapeamentos oficiais entre nomes de hospedeiros e endereços IP para os servidores da organização (e.x., Web e correio). Podem ser mantidos pelas organizações ou pelo provedor
de acesso
2b: Camada de Aplicação 7
Servidor de Nomes Local
Não pertence necessariamente à hierarquia
Cada ISP (ISP residencial, companhia, universidade) possui um. Também chamada do “servidor de nomes
default” Quanto um hospedeiro faz uma consulta
DNS, a mesma é enviada para o seu servidor DNS local Atua como um intermediário, enviando
consultas para a hierarquia.
2b: Camada de Aplicação 8
solicitantecis.poly.edu
gaia.cs.umass.edu
servidor raiz
servidor local dns.poly.edu
1
23
4
5
6
servidor oficialdns.cs.umass.edu
78
servidor TLD
Exemplo de DNS
Hospedeiro em cis.poly.edu quer endereço IP para gaia.cs.umass.edu
2b: Camada de Aplicação 9
DNS: tipos de consultas
consulta recursiva: transfere a
responsabilidade de resolução do nome para o servidor de nomes contatado
carga pesada?
consulta interativa: servidor consultado
responde com o nome de um servidor de contato
“Não conheço este nome, mas pergunte para esse servidor”
1
2 3
6
8 7
9
10
consulta interativa
servidor de nomes raiz
servidor localpitomba.ic.uff.br
servidor intermediário
servidor oficialcs.columbia.edu
solicitantemanga.ic.uff.br
www.cs.columbia.edu
consulta recursiva
4
5
servidor TLD
saell.cc.columbia.edu
2b: Camada de Aplicação 10
DNS: uso de cache, atualização de dados
uma vez que um servidor qualquer aprende um mapeamento, ele o coloca numa cache local entradas na cache são sujeitas a temporização
(desaparecem depois de um certo tempo) Servidores TLD tipicamente armazenados no
cache dos servidores de nomes locais• Servidores raiz acabam não sendo visitados com
muita freqüência
estão sendo projetados pela IETF mecanismos de atualização/notificação dos dados RFC 2136 http://www.ietf.org/html.charters/dnsind-charter.html
2b: Camada de Aplicação 11
Registros DNSDNS: BD distribuído contendo registros de recursos (RR)
Tipo=NS nome é domínio (p.ex.
foo.com.br) valor é endereço IP de
servidor oficial de nomes para este domínio
formato RR: (nome, valor, tipo, sobrevida)
Tipo=A nome é nome de hospedeiro valor é o seu endereço IP
Tipo=CNAME nome é nome alternativo
(alias) para algum nome “canônico” (verdadeiro)
valor é o nome canônico
Tipo=MX nome é domínio valor é nome do servidor
de correio para este domínio
2b: Camada de Aplicação 12
DNS: protocolo e mensagensprotocolo 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
2b: Camada de Aplicação 13
DNS: protocolo e mensagens
campos de nome, e de tipo num pedido
RRs em respostaao pedido
registros para outrosservidores oficiais
info adicional “relevante” que
pode ser usada
2b: Camada de Aplicação 14
Inserindo registros no DNS
Exemplo: acabou de cria a empresa “Network Utopia”
Registra o nome netutopia.com.br em uma entidade registradora (e.x., Registro .br) Tem de prover para a registradora os nomes e endereços
IP dos servidores DNS oficiais (primário e secundário) Registradora insere dois RRs no servidor TLD .br:
(netutopia.com.br, dns1.netutopia.com.br, NS)(dns1.netutopia.com.br, 212.212.212.1, A)
Põe no servidor oficial um registro do tipo A para www.netutopia.com.br e um registro do tipo MX para netutopia.com.br
Como as pessoas vão obter o endereço IP do seu site?
2b: Camada de Aplicação 15
Capítulo 2: Roteiro
2.1 Princípios dos protocolos da camada de aplicação
2.2 Web e HTTP 2.3 FTP 2.4 Correio
Eletrônico SMTP, POP3, IMAP
2.5 DNS
2.6 Compartilhamento de arquivos P2P
2.7 Programação de Sockets com TCP
2.8 Programação de Sockets com UDP
2.9 Construindo um servidor Web
2b: Camada de Aplicação 16
Compartilhamento de arquivos P2PExemplo Alice executa aplicação
cliente P2P no seu notebook
Periodicamente ela se conecta à Internet e recebe um novo endereço IP a cada conexão
Pede a música “Hey Jude” A aplicação apresenta
uma lista de outros parceiros que possuem uma cópia de Hey Jude.
Alice escolhe um dos parceiros, Bob.
O arquivo é copiado do PC de Bob para o notebook de Alice: HTTP
Enquanto Alice está baixando a música, outros usuários podem estar pegando arquivos do seu computador.
O parceiro de Alice é tanto um cliente Web como um servidor Web temporário.
Todos os parceiros são servidores = altamente escalável!
2b: Camada de Aplicação 17
P2P: diretório centralizado
Projeto original do Napster
1) Quando um parceiro conecta ele informa ao servidor central o seu: endereço IP conteúdo
2) Alice consulta sobre a música “Hey Jude”
3) Alice solicita o arquivo a Bob
servidor de diretóriocentralizado
parceiros
Alice
Bob
1
1
1
12
3
2b: Camada de Aplicação 18
P2P: problemas com diretório centralizado Ponto único de falha Gargalo de
desempenho Violação de Direitos
Autorais
a transferência de arquivo é descentralizada, mas a localização do conteúdo é altamente centralizada.
2b: Camada de Aplicação 19
Inundação de consultas: Gnutella Completamente
distribuído Sem servidor central
Protocolo de domínio público
Vários clientes Gnutella implementam o protocolo
Rede sobreposta: grafo Arco entre pares X e Y se
existe uma conexão TCP Todos os pares ativos e
arcos formam a rede sobreposta
Arco não é um enlace físico
Um par vai estar conectado tipicamente com < 10 vizinhos na rede sobreposta
2b: Camada de Aplicação 20
Gnutella: protocolo
Consulta
Item achado
Consulta
Consulta
Item achado
Consulta
Consulta
Item ach
ado
Transferência arq:HTTP
Mensagem de consulta enviada pelas conexões TCP existentes Pares repassem mensagem de consulta Resposta sobre item encontrado enviada pelo caminho reverso
Escalabilidade:Inundação com escopo limitado
2b: Camada de Aplicação 21
Gnutella: junção do Par
1. Um par X se juntando deve encontrar algum outro par na rede Gnutella: usa lista de pares candidatos
2. X tenta criar conexões TCP com os pares na lista seqüencialmente até estabelecer conexão com Y
3. X envia mensagem Ping para Y; Y repassa a mensagem Ping
4. Todos os pares recebendo a mensagem Ping respondem com uma mensagem Pong
5. X recebe várias mensagens Pong. Ele pode então estabelecer conexões TCP adicionais
Saída do par: veja problema no livro texto!
2b: Camada de Aplicação 22
Explorando heterogeneidade: KaZaA Cada parceiro é um
líder de grupo ou está alocado a um líder de grupo Conexão TCP entre
cada par e o seu líder de grupo
Conexões TCP entre alguns pares de líderes de grupos
O líder de um grupo mantém registro sobre o conteúdo de todos os seus filhos
ordinary peer
group-leader peer
neighoring re la tionshipsin overlay network
2b: Camada de Aplicação 23
KaZaA: Consulta
Cada arquivo possui um hash e um descritor O cliente envia palavras-chave para o seu líder de
grupo O líder de grupo responde com os itens
encontrados Para cada item: metadados, hash, endereço IP
Se o líder de grupo repassa a consulta para outros líderes, eles respondem com os itens encontrados
O cliente seleciona arquivos para download Requisições HTTP usando hash com identificador são
enviadas para os pares que possuem os arquivos desejado
2b: Camada de Aplicação 24
Truques do KaZaA
Limitações na quantidade de uploads simultâneos
Enfileiramento de requisições Prioridades para incentivar
disponibilização de conteúdo Download em paralelo
2b: Camada de Aplicação 25
Capítulo 2: Roteiro
2.1 Princípios dos protocolos da camada de aplicação
2.2 Web e HTTP 2.3 FTP 2.4 Correio
Eletrônico SMTP, POP3, IMAP
2.5 DNS
2.6 Compartilhamento de arquivos P2P
2.7 Programação de Sockets com TCP
2.8 Programação de Sockets com UDP
2.9 Construindo um servidor Web
2b: Camada de Aplicação 26
Programação com sockets
API Sockets apareceu no BSD4.1 UNIX
em 1981 são explicitamente
criados, usados e liberados por apls
paradigma cliente/servidor dois tipos de serviço de
transporte via API Sockets datagrama não confiável fluxo de bytes, confiável
uma interface (uma “porta”), local ao
hospedeiro, criada por e pertencente à
aplicação, e controlado pelo SO, através da qual um processo de aplicação pode tanto enviar como receber mensagens para/de outro processo de
aplicação (remoto ou local)
socket
Meta: aprender a construir aplicações cliente/servidor que se comunicam usando sockets
2b: Camada de Aplicação 27
Programação com sockets usando TCPSocket: 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
processo
TCP combuffers,
variáveis
socket
controlado peloprogramador de
aplicação
controladopelo sistemaoperacional
estação ouservidor
processo
TCP combuffers,
variáveis
socket
controlado peloprogramador deaplicação
controladopelo sistemaoperacional
estação ouservidor
internet
2b: Camada de Aplicação 28
Cliente deve contactar servidor
processo servidor deve antes estar em execução
servidor deve antes ter criado socket (porta) que aguarda contato do cliente
Cliente contacta servidor para:
criar socket TCP local ao cliente
especificar endereço IP, número de porta do processo servidor
Quando cliente cria socket: TCP cliente cria conexão com TCP do servidor
Quando contatado pelo cliente, o TCP do servidor cria socket novo para que o processo servidor possa se comunicar com o cliente permite que o servidor
converse com múltiplos clientes
Endereço IP e porta origem são usados para distinguir os clientes (mais no cap. 3)
TCP provê transferência confiável, ordenada de bytes
(“tubo”) entre cliente e servidor
ponto de vista da aplicação
Programação com sockets usando TCP
2b: Camada de Aplicação 29
Comunicação entre sockets
2b: Camada de Aplicação 30
Jargão para Fluxo (Stream)
Um fluxo (stream) é uma seqüência de caracteres que fluem de ou para um processo.
Um fluxo de entrada é conectado a alguma fonte de entrada para o processo, por exemplo, teclado ou socket.
Um fluxo de saída é conectado a uma fonte de saída, por exemplo, um monitor ou um socket.
2b: Camada de Aplicação 31
Programação com sockets usando TCP
Exemplo de apl. cliente-servidor:
1. cliente lê linha da entrada padrão (fluxo doUsuário), envia para servidor via socket (fluxo paraServidor)
2. servidor lê linha do socket3. servidor converte linha
para letras maiúsculas, devolve para o cliente
4. cliente lê linha modificada do socket (fluxo doServidor), imprime-a
outT
oSer
ver
to network from network
inFr
omS
erve
r
inFr
omU
ser
keyboard monitor
Process
clientSocket
inputstream
inputstream
outputstream
TCPsocket
Fluxo de entrada: Seqüência de bytes recebidos pelo processo
Fluxo de saída: Seqüência de bytes transmitidos pelo processo
Processo cliente
Socket cliente TCP
2b: Camada de Aplicação 32
Interações cliente/servidor usando o TCP
aguarda chegada de pedido de conexãosocketConexão =socketRecepção.accept()
cria socket,porta=x, parareceber pedido:
socketRecepção = ServerSocket ()
cria socket,abre conexão a nomeHosp, porta=xsocketCliente =
Socket()
fechasocketConexão
lê resposta desocketCliente
fechasocketCliente
Servidor (executa em nomeHosp) Cliente
Envia pedido usandosocketClientelê pedido de
socketConexão
escreve resposta para socketConexão
TCP setup da conexão
2b: Camada de Aplicação 33
Exemplo: cliente Java (TCP)
import java.io.*; import java.net.*; class ClienteTCP {
public static void main(String argv[]) throws Exception { String frase; String fraseModificada;
BufferedReader doUsuario = new BufferedReader(new InputStreamReader(System.in));
Socket socketCliente = new Socket(”nomeHosp", 6789);
DataOutputStream paraServidor = new DataOutputStream(socketCliente.getOutputStream());
Criafluxo de entrada
Criasocket de cliente,
conexão ao servidor
Criafluxo de saída
ligado ao socket
2b: Camada de Aplicação 34
Exemplo: cliente Java (TCP), cont.
BufferedReader doServidor = new BufferedReader(new InputStreamReader(socketCliente.getInputStream()));
frase = doUsuario.readLine();
paraServidor.writeBytes(frase + '\n');
fraseModificada = doServidor.readLine();
System.out.println(”Do Servidor: " + fraseModificada);
socketCliente.close(); } }
Criafluxo de entradaligado ao socket
Envia linhaao servidor
Lê linhado servidor
2b: Camada de Aplicação 35
Exemplo: servidor Java (TCP)import java.io.*; import java.net.*;
class servidorTCP {
public static void main(String argv[]) throws Exception { String fraseCliente; StringfFraseMaiusculas;
ServerSocket socketRecepcao = new ServerSocket(6789); while(true) { Socket socketConexao = socketRecepcao.accept();
BufferedReader doCliente = new BufferedReader(new InputStreamReader(socketConexao.getInputStream()));
Cria socketpara recepçãona porta 6789
Aguarda, no socketpara recepção, o
contato do cliente
Cria fluxo deentrada, ligado
ao socket
2b: Camada de Aplicação 36
Exemplo: servidor Java (TCP), cont
DataOutputStream paraCliente = new DataOutputStream(socketConexão.getOutputStream());
fraseCliente= doCliente.readLine();
fraseEmMaiusculas= fraseCliente.toUpperCase() + '\n';
paraClient.writeBytes(fraseEmMaiusculas); } } }
Lê linhado socket
Cria fluxode saída, ligado
ao socket
Escreve linhaao socket
Final do laço while,volta ao início e aguardaconexão de outro cliente
2b: Camada de Aplicação 37
Capítulo 2: Roteiro
2.1 Princípios dos protocolos da camada de aplicação
2.2 Web e HTTP 2.3 FTP 2.4 Correio
Eletrônico SMTP, POP3, IMAP
2.5 DNS
2.6 Compartilhamento de arquivos P2P
2.7 Programação de Sockets com TCP
2.8 Programação de Sockets com UDP
2.9 Construindo um servidor Web
2b: Camada de Aplicação 38
Programação com sockets usando UDPUDP: não tem “conexão”
entre cliente e servidor não tem “handshaking” remetente coloca
explicitamente endereço IP e porta do destino
servidor deve extrair endereço IP, porta do remetente do datagrama recebido
UDP: dados transmitidos podem ser recebidos fora de ordem, ou perdidos
UDP provê transferência não confiável de grupos de bytes (“datagramas”) entre cliente e servidor
ponto de vista da aplicação
2b: Camada de Aplicação 39
Interações cliente/servidor usando o UDP
fechasocketCliente
Servidor (executa em nomeHosp)
lê resposta dosocketCliente
cria socket,socketCliente = DatagramSocket()
Cliente
cria, endereça (nomeHosp, porta=x,envia pedido em datagramausando socketCliente
cria socket,porta=x, parapedido que chega:socketServidor = DatagramSocket()
lê pedido dosocketServidor
escreve resposta ao socketServidorespecificando endereçoIP, número de porta do cliente
2b: Camada de Aplicação 40
Exemplo: Cliente Java (UDP)
sendP
ack
et
to network from network
rece
iveP
ack
et
inF
rom
Use
r
keyboard monitor
Process
clientSocket
UDPpacket
inputstream
UDPpacket
UDPsocket
Saída: transmite pacote (o TCP enviou uma “seqüência de bytes”)
Entrada: recebe pacote (o TCP recebeu uma “seqüência de bytes”)
Processo cliente
socket cliente UDP
2b: Camada de Aplicação 41
Exemplo: cliente Java (UDP)
import java.io.*; import java.net.*; class clienteUDP { public static void main(String args[]) throws Exception { BufferedReader doUsuario= new BufferedReader(new InputStreamReader(System.in)); DatagramSocket socketCliente = new DatagramSocket(); InetAddress IPAddress = InetAddress.getByName(”nomeHosp"); byte[] dadosEnvio = new byte[1024]; byte[] dadosRecebidos = new byte[1024]; String frase = doUsuario.readLine();
dadosEnvio = frase.getBytes();
Criafluxo de entrada
Cria socket de cliente
Traduz nome de hospedeiro ao
endereço IP usando DNS
2b: Camada de Aplicação 42
Exemplo: cliente Java (UDP) cont.
DatagramPacket pacoteEnviado = new DatagramPacket(dadosEnvio, dadosEnvio.length,
IPAddress, 9876); socketCliente.send(pacoteEnviado); DatagramPacket pacoteRecebido = new DatagramPacket(dadosRecebidos, dadosRecebidos.length); socketCliente.receive(pacoteRecebido); String fraseModificada = new String(pacoteRecebido.getData()); System.out.println(“Do Servidor:" + fraseModificada); socketCliente.close(); }
}
Cria datagrama com dados para
enviar,comprimento,
endereço IP, portaEnvia datagrama
ao servidor
Lê datagramado servidor
2b: Camada de Aplicação 43
Servidor UDP
2b: Camada de Aplicação 44
Exemplo: servidor Java (UDP)
import java.io.*; import java.net.*; class servidorUDP { public static void main(String args[]) throws Exception { DatagramSocket socketServidor = new DatagramSocket(9876); byte[] dadosRecebidos = new byte[1024]; byte[] dadosEnviados = new byte[1024]; while(true) { DatagramPacket pacoteRecebido = new DatagramPacket(dadosRecebidos,
dadosRecebidos.length);
socketServidor.receive(pacoteRecebido);
Cria socketpara datagramas
na porta 9876
Aloca memória parareceber datagrama
Recebedatagrama
2b: Camada de Aplicação 45
Exemplo: servidor Java (UDP), cont
String frase = new String(pacoteRecebido.getData()); InetAddress IPAddress = pacoteRecebido.getAddress(); int porta = pacoteRecebido.getPort(); String fraseEmMaiusculas = frase.toUpperCase();
dadosEnviados = fraseEmMaiusculas.getBytes(); DatagramPacket pacoteEnviado = new DatagramPacket(dadosEnviados, dadosEnviados.length, IPAddress, porta); socketServidor.send(pacoteEnviado); } }
}
Obtém endereço IP, no.
de porta do remetente
Escrevedatagrama
no socket
Fim do laço while,volta ao início e aguardachegar outro datagrama
Cria datagrama p/ enviar ao cliente
2b: Camada de Aplicação 46
Capítulo 2: Roteiro
2.1 Princípios dos protocolos da camada de aplicação
2.2 Web e HTTP 2.3 FTP 2.4 Correio
Eletrônico SMTP, POP3, IMAP
2.5 DNS
2.6 Compartilhamento de arquivos P2P
2.7 Programação de Sockets com TCP
2.8 Programação de Sockets com UDP
2.9 Construindo um servidor Web
2b: Camada de Aplicação 47
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.
2b: Camada de Aplicação 48
Servidor Web Simplesimport java.io.*;import java.net.*;import java.util.*;
class WebServer { public static void main(String argv[]) throws Exception { String requestMessageLine; String fileName;
ServerSocket listenSocket = new ServerSocket(6789); Socket connectionSocket = listenSocket.accept();
BufferedReader inFromClient = new BufferedReader(new InputStreamReader( connectionSocket.getInputStream()));
DataOutputStream outToClient = new DataOutputStream( connectionSocket.getOutputStream());
Contém a classe StringTokenizer que éusada para examinar
o pedido
Aguarda conexãodo cliente
Primeira linha da mensagemde pedido HTTP e
Nome do arquivo solicitado
Cria fluxo de Entrada
Cria fluxo de Saída
2b: Camada de Aplicação 49
Servidor Web Simples, cont
requestMessageLine = inFromClient.readLine();
StringTokenizer tokenizedLine = new StringTokenizer(requestMessageLine); if (tokenizedLine.nextToken().equals("GET")){ fileName = tokenizedLine.nextToken(); if (fileName.startsWith("/") == true ) fileName = fileName.substring(1);
File file = new File(fileName); int numOfBytes = (int) file.length();
FileInputStream inFile = new FileInputStream ( fileName);
byte[] fileInBytes = new byte[]; inFile.read(fileInBytes);
Lê a primeira linha dopedido HTTP que deveria
ter o seguinte formato:GET file_name HTTP/1.0
Examina a primeira linha da mensagem para extrair
o nome do arquivo
Associa o fluxo inFile ao arquivo fileName
Determina o tamanho doarquivo e constrói um vetor
de bytes do mesmo tamanho
2b: Camada de Aplicação 50
Servidor Web Simples, cont
outToClient.writeBytes( "HTTP/1.0 200 Document Follows\r\n");
if (fileName.endsWith(".jpg")) outToClient.writeBytes("Content-Type: image/jpeg\r\n"); if (fileName.endsWith(".gif")) outToClient.writeBytes("Content-Type: image/gif\r\n"); outToClient.writeBytes("Content-Length: " + numOfBytes + "\r\n"); outToClient.writeBytes("\r\n");
outToClient.write(fileInBytes, 0, numOfBytes); connectionSocket.close(); }
else System.out.println("Bad Request Message"); }}
Transmissão do cabeçalho da resposta
HTTP.
Inicia a construção damensagem de resposta
2b: Camada de Aplicação 51
Capítulo 2: Resumo
Arquiteturas de aplicações cliente-servidor P2P híbrido
Requerimentos de serviço das aplicações: confiabilidade, banda, atraso
Modelos de serviço de transporte da Internet orientado à conexão, confiável:
TCP não confiável, datagramas: UDP
Nosso estudo sobre aplicações de rede está agora completo!
Protocolos específicos: HTTP FTP SMTP, POP, IMAP DNS
Programação socket
2b: Camada de Aplicação 52
Capítulo 2: Resumo
troca típica de mensagens pedido/resposta cliente solicita info ou serviço servidor responde com dados,
código de status
formatos de mensagens: cabeçalhos: campos com info
sobre dados (metadados) dados: info sendo comunicada
Mais importante: aprendemos sobre protocolos
msgs de controle vs. dados na banda, fora da banda
centralizado vs. descentralizado
s/ estado vs. c/ estado transferência de msgs
confiável vs. não confiável “complexidade na borda da
rede”