Escolar Documentos
Profissional Documentos
Cultura Documentos
Text Video
• exemplo de subtipos: plain, • exemplo de subtipos: mpeg,
html quicktime
Image Application
• exemplo de subtipos: jpeg, • outros dados que devem ser
gif processados pelo leitor antes de
serem apresentados
Audio “visualmente”
• exemplo de subtipos: basic • exemplo de subtipos:
(codificado 8-bit µ-law ), msword, octet-stream
32kadpcm (codificação 32
kbps)
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
e NASA Mt View, CA
f Internet Software C. Palo Alto, CA
existem 13 servidores
b USC-ISI Marina del Rey, CA de nomes raiz no
l ICANN Marina del Rey, CA
mundo
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)
www.ibm.com é realmente
• Type=NS
servereast.backup2.ibm.com
– name é um domínio (ex.
– value é o nome canônico
foo.com)
– value é o endereço IP do • Type=MX
servidor de nomes autoritativo
– value é o nome do servidor de
para este domínio
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
P2P file •sharing
Alice chooses one of the
peers, Bob.
Example • File is copied from
• Alice runs P2P client Bob’s PC to Alice’s
application on her notebook: HTTP
notebook computer • While Alice downloads,
• Intermittently other users uploading
connects to Internet; from Alice.
gets new IP address • Alice’s peer is both a
for each connection Web client and a
• Asks for “Hey Jude” transient Web server.
• Application displays All peers are servers =
other peers that have highly scalable!
P2P: centralized directory
Bob
centralized
original “Napster” design directory server
1
peers
1) when peer connects, it 1
informs central server:
3
– IP address 1
– content 2 1
Bob
P2P: problems with centralized directory
file transfer is
• Single point of failure decentralized, but
• Performance locating content is
bottleneck highly decentralized
• Copyright
infringement
P2P: decentralized directory
• Each peer is either a
group leader or
assigned to a group
leader.
• Group leader tracks
the content in all its
children.
ordinary peer
join
P2P: more on query flooding
Pros Cons
• peers have similar • excessive query traffic
responsibilities: no • query radius: may not
group leaders have content when
• highly decentralized present
• no peer maintains • bootstrap node
directory info • maintenance of
overlay network
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
de aplicação podem tanto
• dois tipos de serviço de transporte
via socket API: enviar quanto receber
mensagens de e para outro
– datagrama não confiável
processo de aplicação (local
– confiável, orientado a cadeias de
ou remoto)
bytes
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 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
Exemplo de aplicação cliente-
servidor:
inFromUser
• cliente lê linha da entrada padrão do input
stream
sistema (inFromUser stream) , processo stream de entrada:
envia para o servidor via socket Process
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 cliente
outToServer
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 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
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