JXTA
Protocolos PIP e PBP
Franklin Felipe WagnerMárcio Dalle Lucca
Peer Information ProtocolPIP
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.
Peer Information Protocol
- 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)
Exemplo de PIP
Mensagens:- Peer Info Query Message- Peer Info Response Message
Peer Information Protocol
<?xml version=”1.0” encoding=”UTF-8”?><jxta:PeerInfoQueryMessage xmlns:jxta=”http://jxta.org”>
<sourcePid> . . . </sourcePid><targetPid> . . . </targetPid><request> . . . </request>
</jxta:PeerInfoQueryMessage>
Peer Info Query 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 Info Response Message
- net.jxta.protocol diferente de - net.jxta.impl.protocol
- PeerInfoQueryMessage e - PeerInfoResponseMsg
Peer Information Protocol
Pipe Binding ProtocolPBP
- 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
Introdução
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
Endpoint
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
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: formação
<?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.
Pipe Advertisement
O PBP define duas mensagens para permitir que um peer resolva um pipe:
- Pipe Binding Query Message
- Pipe Binding Answer Message
Mensagens
<?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 Query 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.
PB Answer Message
- 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.
Esclarecimentos
Dúvidas?
Referências:
http://translation.jxta.org/ja/docbook/JXTAProtocols.html#proto-pbp
http://www.brendonwilson.com/projects/jxta-book/