JXTA
Protocolos PIP e PBP
Franklin Felipe Wagner
Márcio Dalle Lucca
Peer Information Protocol
PIP
Peer Information Protocol
O que é?
- Permite que os peers obtenham a
informação de status dos peers
previamente descobertos.
- Uptime e quantidade de tráfego
processada pelo par.
- Futuro: monitoração.
Peer Information Protocol
- O PIP fica numa camada acima do
Peer Resolver Protocol.
- PIP é um protocolo opcional do JXTA.
- Nenhuma, uma ou múltiplas respostas
podem ser recebidas a qualquer
pergunta.
Exemplo de PIP
- Peer 1 manda um
Peer Info Query
Message para um
peer especifico (2)
- Os peer´s recebem
a msg e comparam o
Peer ID da
mensagem.
- se for igual o seu
(2), respondem para
o peer source com
uma Peer Infor
Response Message
- Senão, não faz nada
(12)
Peer Information Protocol
Mensagens:
- Peer Info Query Message
- Peer Info Response Message
Peer Info Query Message
<?xml version=”1.0” encoding=”UTF-8”?>
<jxta:PeerInfoQueryMessage xmlns:jxta=”http://jxta.org”>
<sourcePid> . . . </sourcePid>
<targetPid> . . . </targetPid>
<request> . . . </request>
</jxta:PeerInfoQueryMessage>
Peer Info Response Message
<?xml version=”1.0” encoding=”UTF-8”?>
<jxta:PeerInfoResponse xmlns:jxta=”http://jxta.org”>
<sourcePid> . . . </sourcePid>
<targetPid> . . . </targetPid>
<uptime> . . . </uptime>
<timestamp> . . . </timestamp>
<response> . . . </response>
<trafic>
...
</trafic>
</jxta:PeerInfoQueryMessage>
Peer Info Response Message
<traffic>
<lastIncomingMessageAt> . . . </lastIncomingMessageAt>
<lastOutgoingMessageAt> . . . </lastOutgoingMessageAt>
<in>
<transport endptaddr=” . . . “> . . . </transport>
</in>
<out>
<transport endptaddr=” . . . “> . . . </transport>
</out>
</traffic>
Peer Information Protocol
- net.jxta.protocol diferente de
- net.jxta.impl.protocol
- PeerInfoQueryMessage e
- PeerInfoResponseMsg
Pipe Binding Protocol
PBP
Introdução
- Pipes são utilizados para troca de mensagens
entre peers.
- Antes de ser utilizado, um pipe precisa estar
ligado a dois endpoints, para que os peers criem
input e outputs pipes e então formem um Pipe.
- O processo de ligar um pipe a um endpoint é
definido pelo Pipe Binding Protocol
Endpoint
Definição:
Interface de rede nativa provida por um peer.
Utilização:
Produzir, enviar, receber e usar mensagens
através da rede.
Endpoint
Outros serviços JXTA são construídos em cima
de endpoints, direta ou indiretamente.
Existem duas maneiras de acessar a rede P2P
sem utilizar diretamente os endpoints:
- Através do serviço Resolver
- Através do uso de Pipes
Pipe
Um Pipe é formado quando dois endpoints
querem se comunicar.
Ele provê conexão entre um endpoint remetente
e um ou mais endpoints destinatários.
Embora o JXTA especifique outros tipos de Pipe,
o único requerido é o Pipe unidirecional e
assíncrono.
Pipe: formação
Pipe: formação
- O Peer1 cria um input pipe de um Pipe Advertisement e espera
mensagens chegarem.
- O Peer2, querendo mandar mensagens para o Peer1 usando o
mesmo Pipe Advertisement, precisa criar um output pipe. Para isso ele
envia uma PB Query Message para todos os seus peers e rendezvous
peers conhecidos.
- Peer1, ao receber a PB Query Message do Peer2, checa seu cache
de pipes para ver se bate. Se sim, ele responde com uma PB Answer
Message contendo seu Peer Advertisement.
- Peer2 recebe de PB Answer Message e extrai a informação de
endpoint do Peer Advertisement. Com ela ele cria um output pipe. Feito
isso, o Peer2 pode mandar mensagens para o Peer1.
Pipe Advertisement
<?xml version=”1.0” encoding=”UTF-8”?>
<jxta:PipeAdvertisement>
<Id> . . . </Id>
<Type> . . . </Type>
<Name> . . . </Name>
</jxta:PipeAdvertisement>
Pipe Advertisement
ID: ID único do Pipe.
Type: JxtaUnicast - comum, JxtaUnicastSecure comum com TLS, JxtaPropagate - provê
conexão entre endpoints remetentes e múltiplos
destinatários.
Name: Nome simbólico do Pipe, que pode ser
usado pelo Discovery service para descobrir o
Pipe Advertisement.
Pipe Advertisement
Percebe-se que o Pipe Advertisement não possui Peer
ID. Isso é definido para que vários peers possam prover
acesso a um serviço utilizando o mesmo Pipe
Advertisement. E é por isso que os pipes precisam ser
resolvidos com o PBP.
Quando um peer quer enviar dados usando um pipe, ele
precisa encontrar um peer que já ligou um pipe com o
mesmo Pipe ID a um endpoint e que está esperando por
dados.
Mensagens
O PBP define duas mensagens para permitir que
um peer resolva um pipe:
- Pipe Binding Query Message
- Pipe Binding Answer Message
PB Query Message
<?xml version=”1.0” encoding=”UTF-8”?>
<jxta:PipeResolver>
<MsgType>Query</MsgType>
<PipeId> . . . </PipeId>
<Type> . . . </Type>
<Cached> . . . </Cached>
<Peer> . . . </Peer>
</jxta:PipeResolver>
PB Query Message
MsgType: pode ser Query ou Answer, nesse caso é
Query.
PipeId: ID do Pipe
Type: Corresponde ao campo Type do Pipe Adv., pode
ser JxtaUnicast, JxtaUnicastSecure ou JxtaPropagate.
Cached: Opcional. Define se o peer usa seu cache de
Pipes resolvidos pra responder à query.
Peer: Opicional. Especifica um único Peer ID para
responder a query.
PB Answer Message
<?xml version=”1.0” encoding=”UTF-8”?>
<jxta:PipeResolver>
<MsgType>Answer</MsgType>
<PipeId> . . . </PipeId>
<Type> . . . </Type>
<Peer> . . . </Peer>
<Found>false</Found>
<PeerAdv> . . . </PeerAdv>
</jxta:PipeResolver>
PB Answer Message
MsgType: Answer
Found: Opcional. Serve para indicar se foi
encontrado o Pipe ID. Por default é considerado
que sim.
PeerAdv: Quando encontrado o Pipe ID correto,
a resposta é enviada com o PeerAdv. do peer
que o possui.
Esclarecimentos
- Quando o Peer1 cria o input pipe, nada é mandado pela rede. Ele
simplesmente começa a esperar no seu endpoint local por mensagens
que possuam o Pipe ID especificado no Pipe Adv.
- O Pipe Adv. não necessariamente precisa ser comunicado através da
rede. Embora o Pipe Adv. é normalmente descoberto através do
Discovery service, ele pode ser codificado na aplicação ou pode ser
trocado usando o Resolver service.
- Binding significa a troca de mensagens PB para formar um pipe. Para
criar um input pipe, não é necessário fazer o binding, ou seja, não são
enviadas mensagens.
- Os endpoints que na verdade são responsáveis por enviar e receber
dados. O Pipe só auxilia na identificação de quais endpoints estarão
trocando mensagens pela rede.
Dúvidas?
Referências:
http://translation.jxta.org/ja/docbook/JXTAProtocols.html#proto-pbp
http://www.brendonwilson.com/projects/jxta-book/
Download

JXTA – Protocolos PIP e PBP