Você está na página 1de 52

Parte 2: Camada de Aplicação

Nossos objetivos: Outros objetivos do capítulo


• conceitual, aspectos de • protocolos específicos:
implementação de – http
protocolos de aplicação – ftp
para redes – smtp
– paradigma cliente- – pop
servidor – dns
– modelos de serviço • programação de aplicações
• aprenda sobre protocolos de rede
examinando algumas – socket API
aplicações populares
ftp: o protocolo de transferência de arquivos

FTP transferência de arquivos


FTP FTP
interface cliente
servidor
de usuário
user
at host sistema de sistema de
arquivos arquivos remoto
local

• transferência de arquivos de e para o computador remoto


• modelo cliente servidor
– cliente: lado que inicia a transferência (seja de ou para o
lado remoto)
– servidor: host remoto
• ftp: RFC 959
• ftp servidor: porta 21
ftp: controle separado, conexões de dados

• cliente ftp contata o servidor ftp


na porta 21, especificando TCP
como protocolo de transporte
TCP conexão de controle
• duas conexões TCP paralelas são porta 21
abertas:
– controle: troca de comandos e
respostas entre cliente e TCP conexão de dados
FTP porta 20 FTP
servidor. cliente servidor
“controle out of band”
– dados: dados do arquivo
trocados com o servidor
• servidor ftp mantém o “estado”:
diretório corrente, autenticação
anterior
ftp comandos, respostas

Exemplos de comandos: Exemplos de códigos de


• envie um texto ASCII sobre retorno
canal de controle • código de status e frase (como
• USER username no http)
• PASS password • 331 Username OK,
password required
• LIST retorna listagem do
arquivo no diretório atual • 125 data connection
already open;
• RETR filename recupera transfer starting
(obtém) o arquivo
• 425 Can’t open data
• STOR filename armazena o connection
arquivo no host remoto • 452 Error writing
file
Correio Eletrônico fila de
saída de mensagem
caixa postal
agente
Três componentes principais: usuário

• agentes de usuário servidor


agente
de correio
• servidores de correio usuário

• simple mail transfer protocol: SMTP mail


smtp server agente
usuário
SMTP
Agente de usuário
• “leitor de correio” SMTP
agente
• composição, edição, leitura de servidor
usuário
de correio
mensagens de correio
• ex., Eudora, Outlook, elm, agente
Netscape Messenger usuário
agente
• mensagens de entrada e de saída usuário
são armazenadas no servidor
Correio eletrônico: servidores de correio
agente
usuário
Servidores de Correio
servidor
• caixa postal contém mensagens de correio
agente
usuário
que chegaram (ainda não lidas)
para o usuário SMTP servidor
• fila de mensagens contém as de correio agente
usuário
mensagens de correio a serem SMTP
enviadas
• protocolo smtp permite aos SMTP
agente
servidor
servidores de correio trocarem de correio
usuário
mensagens entre eles
– cliente: servidor de correio agente
usuário
que envia
agente
– “servidor”: servidor de usuário
correio que recebe
Correio Eletrônico: smtp [RFC 2821]
• usa TCP para transferência confiável de mensagens de correio do
cliente ao servidor, porta 25
• transferência direta: servidor que envia para o servidor que recebe
• três fases de trasnferência
– handshaking (apresentação)
– transferência de mensagens
– fechamento
• interação comando/resposta
– comandos: texto ASCII
– resposta: código de status e frase
• mensagens devem ser formatadas em código ASCII de
7 bits
Exemplo de interação SMTP
S: 220 hamburger.edu
C: HELO crepes.fr
S: 250 Hello crepes.fr, pleased to meet you
C: MAIL FROM: <alice@crepes.fr>
S: 250 alice@crepes.fr... Sender ok
C: RCPT TO: <bob@hamburger.edu>
S: 250 bob@hamburger.edu ... Recipient ok
C: DATA
S: 354 Enter mail, end with "." on a line by itself
C: Do you like ketchup?
C: How about pickles?
C: .
S: 250 Message accepted for delivery
C: QUIT
S: 221 hamburger.edu closing connection
Tente o SMTP você mesmo:

• telnet nome do servidor 25


• veja resposta 220 do servidor
• envie comandos HELO, MAIL FROM, RCPT
TO, DATA, QUIT
a seqüência acima permite enviar um comando sem
usar o agente de usuário do rementente
SMTP: considerações gerais

• SMTP usas conexões persistentes Comparação com http:


• SMTP exige que as mensagens • http: pull
(cabeçalho e corpo) estejam em
ASCII de 7 bits • email: push
• algumas seqüências de caracteres • ambos usam comandos e respostas
não são permitidas nas mensagens em ASCII, interação comando /
(ex., CRLF.CRLF). Assim resposta e códigos de status
mensagens genéricas têm que ser
codificadas (usualmente em “base- • http: cada objeto encapsulado na
64” ou “quoted printable”) sua própria mensagem de resposta
• Servidor SMTP usa CRLF.CRLF • smtp: múltiplos objetos são
para indicar o final da mensagem enviados numa mensagem
multiparte
Formato das Mensagens

smtp: protocolo para trocar header


mensagens de e-mail linha
em branco
RFC 822: padrão para
mensagens do tipo texto:
• linhas de cabeçalho, e.g., body
– To:
– From:
– Subject:
diferente dos comandos
SMTP!
• corpo
– a “mensagem”, ASCII
somente com caracteres
Formato das Mensagens: extensões multimedia
• MIME: Multipurpose Internet Mail Extension, RFC 2045,
2056
• linhas adicionais no cabeçalho declaram o tipo de conteúdo
MIME
From: alice@crepes.fr
MIME versão To: bob@hamburger.edu
Subject: Picture of yummy crepe.
método usado MIME-Version: 1.0
para codificar dados Content-Transfer-Encoding: base64
Content-Type: image/jpeg
multimedia data
tipo, subtipo, base64 encoded data .....
declaração de parâmetro .........................
......base64 encoded data
dados codificados
Tipos MIME
Content-Type: type/subtype; parâmetros

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

base64 encoded data .....


.........................
......base64 encoded data
--98766789--
Protocolos de acesso ao correio
SMTP SMTP POP3, agente
agente
usuário IMAP ou usuário
HTTP
servidor de servidor de
correio da origem correio do destino

• SMTP: entrega e armazena no servidor do destino


• Protocolo de acesso: recupera mensagens do servidor
– POP: Post Office Protocol [RFC 1939]
• autorização (agente <-->servidor) e download
– IMAP: Internet Mail Access Protocol [RFC 1730]
• maiores recursos (mais complexo)
• manipulação de mensagens armazenadas no servidor
– HTTP: Hotmail , Yahoo! Mail, etc.
protocolo POP3 S: +OK POP3 server ready
C: user alice
fase de autorização S: +OK
C: pass hungry
• comandos do cliente: S: +OK user successfully logged on
– user: declara nome do usuário
C: list
– pass: password S: 1 498
• respostas do servidor S: 2 912
S: .
– +OK
C: retr 1
– -ERR S: <message 1 contents>
fase de transação, cliente: S: .
C: dele 1
• list: lista mensagens e tamanhos C: retr 2
• retr: recupera mensagem pelo S: <message 1 contents>
número S: .
C: dele 2
• dele: apaga
C: quit
• quit S: +OK POP3 server signing off
DNS: Domain Name System
Domain Name System:
Pessoas: muitos • base de dados distribuída
identificadores: implementada numa hierarquia de
muitos servidores de nomes
– RG, nome, passporte
• protocolo de camada de aplicação
Internet hosts, roteadores: host, roteadores se comunicam com
– endereços IP (32 bit) - servidores de nomes para resolver
usados para endereçar nomes (translação nome/endereço)
datagramas – nota: função interna da Internet,
– “nome”, ex., implementeda como protocolo da
gaia.cs.umass.edu - usados camada de aplicação
por humanos – complexidade na “borda” da rede
Q: relacionar nomes com
endereços IP?
Servidores de Nomes DNS

• nenhum servidor tem todos os


Porque não centralizar o mapeamentos de nomes para endereços
DNS? IP
• ponto único de falha servidores de nomes locais:
– cada ISP ou empresa tem um servidor
• volume de tráfego de nomes local (default)
– Consultas dos computadores locais ao
• base de dados distante DNS vão primeiro para o servidor de
nomes local
• manutenção
servidor de nomes autoritativo:
– para um computador: armazena o nome
e o endereço IP daquele computador
Não cresce junto com a rede! – pode realizar mapeamentos de nomes
para endereços para aquele nome de
computador
DNS: Servidores de Nomes Raiz
• são contatados pelos servidores de nomes locais que não podem resolver um nome
• servidores de nomes raiz::
– buscam servidores de nomes autoritativos se o mapeamento do nome não for
conhecido
– conseguem o mapeamento
– returnam o mapeamento para o servidor de nomes local
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

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

host surf.eurecom.fr quer o 2 4


5 3
endereço IP de
gaia.cs.umass.edu
1. contata seu servidor DNS local,
dns.eurecom.fr
2. dns.eurecom.fr contata o servidor de nomes local servidor de nomes autoritativo
dns.eurecom.fr dns.umass.edu
servidor de nomes raiz se
necessário
1 6
3. o servidor de nomes raiz contata o
servidor de nomes autoritativo,
dns.umass.edu, se
necessário
computador solicitante gaia.cs.umass.edu
surf.eurecom.fr
DNS: exemplo servidor de nomes
raiz

Servidor de nomes raiz: 2 6


• pode nãso conhecer o 7 3
servidor de nomes
autoritativo para um certo
nome
• pode conhecer: servidor de servidor de nomes local servidor de nomes intermediário
nomes intermediário: dns.eurecom.fr dns.umass.edu
aquele que deve ser 4 5
1 8
contactado para encontrar o
servidor de nomes
servidor de nomes autoritativo
autoritativo dns.cs.umass.edu
computador solicitante
surf.eurecom.fr

gaia.cs.umass.edu
DNS: consultas encadeadas servidor de nomes
raiz

consulta recursiva: 2 consulta


• transfere a tarefa de 3 encadeada
resolução do nome para o 4
servidor de nomes
consultado 7
• carga pesada? servidor de nomes local servidor de nomes intermediário
dns.eurecom.fr dns.umass.edu
consulta encadeada: 5 6
1 8
• servidor contactado
responde com o nome de
servidor de nomes autoritativo
outro servidor de nomes dns.cs.umass.edu
para contato computador solicitante
surf.eurecom.fr
• “Eu não sei isto ,mas
pergunte a este servidor”
gaia.cs.umass.edu
DNS: armazenando e atualizando
registros
• uma vez que um servidor de nomes apreende um
mapeamento, ele armazena o mapeamento num
registro to tipo cache
– registro do cache tornam-se obsoletos
(desapareçem) depois de um certo tempo
• mecanismos de atualização e notificação estão sendo
projetados pelo IETF
– RFC 2136
– http://www.ietf.org/html.charters/dnsind-charter.html
registros do DNS
DNS: base de dados distribuída que armazena registros de recursos
(RR)
formato dos RR: (name, value, type,ttl)

• 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

Campos de nome e tipo


para uma consulta

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

2) Alice queries for “Hey


Jude”
3) Alice requests file from Alice

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

• Peer queries group group-leader peer

leader; group leader neighoring relationships


in overlay network

may query other group


leaders.
More about decentralized directory
overlay network advantages of approach
• peers are nodes • no centralized directory
• edges between peers and server
their group leaders – location service distributed
over peers
• edges between some pairs
– more difficult to shut down
of group leaders
disadvantages of approach
• virtual neighbors
• bootstrap node needed
bootstrap node
• group leaders can get
• connecting peer is either
overloaded
assigned to a group leader
or designated as leader
P2P: Query flooding
• Send query to neighbors
• Gnutella • Neighbors forward query
• no hierarchy • If queried peer has object, it
• use bootstrap node to sends message back to
learn about others querying peer
• join message

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

Socket: uma porta entre o processo de aplicação e o


protocolo de transporte fim-a-fim (UCP or TCP)
serviço TCP: trnasferência confiável de bytes de um
processo para outro

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

para rede da rede


Interação Cliente/servidor: TCP
Servidor (executando em hostid) Cliente
cria socket,
port=x, para
solicitação entrante:
welcomeSocket =
ServerSocket()

TCP cria socket,


espera por pedido
de conexão entrante estabel. de conexão conecta com hostid, port=x
connectionSocket = clientSocket =
welcomeSocket.accept() Socket()

envia pedido usando


lê pedido de clientSocket
connectionSocket

escreve resposta para


connectionSocket lê resposta de
clientSocket
fecha
connectionSocket fecha
clientSocket
Exemplo: cliente Java (TCP)
import java.io.*;
import java.net.*;
class TCPClient {

public static void main(String argv[]) throws Exception


{
String sentence;
String modifiedSentence;
Cria
stream de entrada BufferedReader inFromUser =
new BufferedReader(new InputStreamReader(System.in));
Cria
socket cliente, Socket clientSocket = new Socket("hostname", 6789);
conecta ao servidor
Cria DataOutputStream outToServer =
stream de saída new DataOutputStream(clientSocket.getOutputStream());
ligado ao socket
Exemplo: cliente Java (TCP), cont.

Cria BufferedReader inFromServer =


stream de entrada new BufferedReader(new
ligado ao socket InputStreamReader(clientSocket.getInputStream()));

sentence = inFromUser.readLine();

Envia linha outToServer.writeBytes(sentence + '\n');


para o servidor
modifiedSentence = inFromServer.readLine();
Lê linha
do servidor System.out.println("FROM SERVER: " + modifiedSentence);

clientSocket.close();

}
}
Exemplo: servidor Java (TCP)
import java.io.*;
import java.net.*;

class TCPServer {

public static void main(String argv[]) throws Exception


{
String clientSentence;
Cria String capitalizedSentence;
socket de aceitação
ServerSocket welcomeSocket = new ServerSocket(6789);
na porta 6789
while(true) {
Espera, no socket
de aceitação por Socket connectionSocket = welcomeSocket.accept();
contato do cliente
BufferedReader inFromClient =
Cria stream de new BufferedReader(new
entrada, ligado InputStreamReader(connectionSocket.getInputStream()));
ao socket
Exemplo: servidor Java (cont)

Cria stream de
saída, ligado ao DataOutputStream outToClient =
socket new DataOutputStream(connectionSocket.getOutputStream());
Lê linha do
socket clientSentence = inFromClient.readLine();

capitalizedSentence = clientSentence.toUpperCase() + '\n';


Escreve linha
outToClient.writeBytes(capitalizedSentence);
para o socket
}
}
} Fim do while loop,
retorne e espere por
outra conexão do cliente
Programaçaõ de Sockets com UDP

UDP: não há conexão entre o


cliente e o servidor
• não existe apresentação ponto de vista da aplicação
• transmissor envia UDP fornece a transferência
explicitamente endereço IP e não confiável de grupos de bytes
porta de destino em cada (“datagramas”) entre o cliente e o
mensagem servidor
• servidor deve extrair o endereço
IP e porta do transmissor de
cada datagrama recebido
• UDP: dados transmitidos
podem ser recebidos foram de
ordem ou perdidos
Interação Cliente/servidor: UDP

Servidor (executando hostid) Cliente

cria socket, cria socket,


port=x, para clientSocket =
solicitação entrante: DatagramSocket()
serverSocket =
DatagramSocket()
Cria, endereço (hostid, port=x,
envia datagrama de pedido
usando clientSocket
lê pedido de:
serverSocket

escreve resposta para


serverSocket
lê resposta de
especificando endereço
do host cliente e clientSocket
número da porta fecha
clientSocket
Exemplo: cliente Java (UDP)
teclado monitor

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

para rede da rede


Exemplo: cliente Java (UDP)

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];

String sentence = inFromUser.readLine();


sendData = sentence.getBytes();
Exemplo: cliente Java (UDP), cont.
Cria datagrama com
dados a enviar,
DatagramPacket sendPacket =
tamanho, endereço IP
new DatagramPacket(sendData, sendData.length, IPAddress, 9876);
porta
Envia datagrama clientSocket.send(sendPacket);
para servidor
DatagramPacket receivePacket =
new DatagramPacket(receiveData, receiveData.length);
Lê datagrama
clientSocket.receive(receivePacket);
do servidor
String modifiedSentence =
new String(receivePacket.getData());

System.out.println("FROM SERVER:" + modifiedSentence);


clientSocket.close();
}
}
Exemplo: servidor Java (UDP)

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();

String capitalizedSentence = sentence.toUpperCase();

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

tutorial sobre C-language tutorial (audio/slides):


• “Unix Network Programming” (J. Kurose),
http://manic.cs.umass.edu.

Tutoriais sobre Java:


• “Socket Programming in Java: a tutorial,”
http://www.javaworld.com/javaworld/jw-12-1996/jw-12-
sockets.html
Parte 2: Sumário
Nosso estudo das aplicações está agora completo!

• exigências dos serviços de • protocolos especificos:


aplicação: – http
– confiabilidade, banda – ftp
passante, atraso – smtp, pop3
• paradigma cliente-servidor – dns
• modelo do serviço de • programação de sockets
transporte da Internet l – implementação cliente/servidor
– orientado à conexão, – usando sockets tcp, udp
confiável: TCP
– não confiável, datagramas:
UDP
Parte 2: Sumário
Mais importante: características dos protocolos
• tipica troca de mensagens
• controle vs. dados
comando/resposta:
– in-band, out-of-band
– cliente solicita informação ou
serviço • centralizado vs. descentralizado
– servidor responde com dados e • stateless vs. stateful
código de status • transferência de mensagens
confiável vs. não confiável
– formatos das mensagens:
– cabeçalhos: campos que dão • “complexidade na borda da rede”
informações sobre os dados • segurança: autenticação
– dados: informação sendo
comunicada

Você também pode gostar