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/