Escolar Documentos
Profissional Documentos
Cultura Documentos
Cliente: pedido
• inicia comunicação com o servidor
(“fala primeiro”)
• tipicamente solicita serviços do resposta
servidor,
• Web: cliente implementado no browser;
e-mail: leitor de correio aplicação
transporte
rede
Servidor: enlace
física
• fornece os serviços solicitados ao cliente
• e.x., Web server envia a página Web solicitada,
servidor de e-mail envia as mensagens, etc.
Interfaces de Programação
API: application programming Q: Como um processo “identifica” o
interface outro processo com o qual ele quer
se comunicar?
• define a interface entre a
– IP address do computador no qual o
camada de aplicação e de processo remoto executa
transporte – “port number” - permite ao
• socket: Internet API computador receptor determinar o
processo local para o qual a
– dois processos se comunicam mensagem deve ser entregue.
enviando dados para o socket
e lendo dados de dentro do
socket
Serviços de Transporte
Perda de dados Banda Passante
• algumas aplicações (e.x., aúdio) • algumas aplicações (e.x.,
podem tolerar alguma perda multimedia) exigem uma
• outras aplicações (e.x., banda mínima para serem
transferência de arquivos, telnet) utilizáveis
exigem transferência de dados
• outras aplicações (“aplicações
100% confiável
elasticas”) melhoram quando
Temporização a banda disponível aumenta
• algumas aplicações (e.x.,
telefonia Internet, jogos
interativos) exigem baixos
atrasos para operarem
Requisitos de Transporte de Aplicações Comuns
tempo
Exemplo (cont.)
4. servidor http fecha conexão TCP.
Não-persistente Persistente
• http/1.0: servidor analisa pedido, • modo default para htp/1.1
envia resposta e fecha a conexão • na mesma conexão TCP são
TCP trazidos vários objetos
• 2 RTTs para obtr um objeto • o cliente envia pedido para todos
– Conexão TCP os objetos referenciados tão logo
– solicitação e transferência do ele recebe a página HTML básica .
objeto • poucos RTTs, menos slow start.
• cada transferência sofre por causa
do mecanismo de slow-start do TCP
• muitos browser abrem várias
conexões paralelas
Formato das Mensagens
• dois tipos de mensagens HTTP: request, response
• http request message:
– ASCII (formato legível para humanos)
linha de pedido
(comandos GET GET /somedir/page.html HTTP/1.0
, POST,HEAD ) User-agent: Mozilla/4.0
Accept: text/html, image/gif,image/jpeg
linhas de Accept-language:fr
cabeçalho
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
HTTP Cliente: faça você mesmo!
cache
institucional
ftp: o protocolo de transferência de arquivos
Text Video
• exemplo de subtipos: plain, • exemplo de subtipos: mpeg,
html quicktime
Image
• exemplo de subtipos: jpeg, gif
Application
• outros dados que devem ser
processados pelo leitor antes de
Audio serem apresentados
• exemplo de subtipos: basic “visualmente”
(codificado 8-bit -law ),
32kadpcm (codificação 32 kbps) • exemplo de subtipos:
msword, octet-stream
Tipo Multiparte
From: alice@crepes.fr
To: bob@hamburger.edu
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
e NASA Mt View, CA
f Internet Software C. Palo Alto, CA
existem 13 servidores de
b USC-ISI Marina del Rey, CA
nomes raiz no mundo
l ICANN Marina del Rey, CA
DNS: exemplo simples servidor de nomes
raiz
gaia.cs.umass.edu
DNS: consultas encadeadas servidor de nomes
raiz
• Type=A • Type=CNAME
– name é o nome do computador – name é um “apelido” para algum
– value é o endereço IP nome “canônico” (o nome real)
• Type=NS www.ibm.com é realmente
– name é um domínio (ex. foo.com) servereast.backup2.ibm.com
– value é o nome canônico
– value é o endereço IP do servidor
de nomes autoritativo para este
domínio
• Type=MX
– value é o nome do servidor de
correio associado com name
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
RRs de resposta
a uma consulta
registros para
servidores autoritativos
informação adicional
que pode ser útil
Programação de Sockets
Objetivo: aprender a construir aplicações cliente/servidor que
se comunicam usando sockets
socket
Socket API
• introduzida no BSD4.1 UNIX, 1981 uma interface local, criada e
• explicitamente criados, usados e possuída pelas aplicações,
liberados pelas aplicações controlada pelo OS (uma
• paradigma cliente/servidor “porta”) na qual os processo
• dois tipos de serviço de transporte
de aplicação podem tanto
via socket API: enviar quanto receber
– datagrama não confiável mensagens de e para outro
– confiável, orientado a cadeias de
processo de aplicação (local
bytes ou remoto)
Programação de Sockets com TCP
controlado pelo
controlado pelo processo processo
criador da aplicação
criador da aplicação
socket socket
controlado pelo TCP com TCP com 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 com
executando antes de ser contactado o TCP do servidor
• servidor deve ter criado socket • Quando contactado pelo cliente, o
(porta) que aceita o contato do TCP do servidor cria um novo
cliente socket para o processo servidor
comunicar-se com o cliente
Cliente contata o servidor através de:
– permite o servidor conversar
• criando um socket TCP local
com múltiplos clientes
• especificando endereço IP e
número da porta do processo ponto de vista da aplicação
servidor TCP fornece a transferência
confiável, em ordem de bytes
(“pipe”) entre o cliente e o
servidor
Programação de Sockets com TCP
teclado monitor
inFromUser
• cliente lê linha da entrada padrão do input
stream
inFromServer
outToServer
maiúsculas e envia de volta ao cliente output input
stream stream
• cliente lê a linha modificada através
do (inFromServer stream)
TCP socket
clientSocket
cliente TCP
socket
sentence = inFromUser.readLine();
clientSocket.close();
}
}
Exemplo: servidor Java (TCP)
import java.io.*;
import java.net.*;
class TCPServer {
cria socket,
port=x, para cria socket,
clientSocket =
solicitação entrante: DatagramSocket()
serverSocket =
DatagramSocket()
Cria, endereço (hostid, port=x,
envia datagrama de pedido
usando clientSocket
lê pedido de:
serverSocket
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
import java.io.*;
import java.net.*;
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];
import java.io.*;
import java.net.*;
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
Programação de Sockets: referências