2.      O que é peer-to-peer?

2.1.  Introdução

A tecnologia peer-to-peer consiste na comunicação entre duas máquinas diretamente, visando o compartilhamento de arquivos ou serviços. A definição clássica estipula que os nós da rede devem estabelecer suas conexões de forma independente e descentralizada, cada um deles desempenhando ambas as funções de cliente e servidor.

Uma diferença fundamental em relação ao esquema cliente-servidor tradicional é em relação à troca de dados e responsabilidades. No modelo cliente-servidor, os softwares são diferentes, sendo que o cliente em geral faz uso de serviços e processamento disponibilizados pelo servidor. Trata-se, portanto, de uma troca assimétrica. Já o  P2P efetua uma troca de serviços simétrica. Isto quer dizer que os nós do sistema possuem softwares idênticos, com capacidades e responsabilidades semelhantes.

Um fator importantíssimo da tecnologia P2P é a sua capacidade de passar por cima das limitações do sistema DNS para nomear e mapear os nós participantes. Isto é um pressuposto básico em todos os sistemas P2P, já que formam uma rede extremamente instável. O esquema de DNS funciona bem para máquinas e servidores estáticos, pois a simples propagação de uma alteração pode levar dias. No caso das redes P2P, no entanto, micros domésticos podem juntar-se à rede a qualquer momento com endereços IP aleatórios. A saída então foi focar-se no usuário, ao invés da máquina.  Isso tornou possível um esquema que funciona muito bem nestas circunstâncias.

Um dos pioneiros a usar P2P foi o programa SETI@Home, que se tornou rapidamente um grande sucesso. Algumas empresas, como a Platform

Computing, espelharam-se no modelo do SETI@Home para criar aplicações comerciais.

Em seguida, surgiram outros pioneiros como o ICQ e o Napster, de enorme sucesso. Isto despertou um grande debate sobre a tecnologia, em parte causado pela enorme expectativa criada. Foi então que surgiram algumas entidades que estão desde então procurando direcionar a discussão para um caminho saudável, tentando estabelecer padrões e coordenar a evolução da tecnologia. Dentre elas, podemos destacar a OpenP2P (www.openp2p.org) e a Grid Computing (www.gridcomputing.com).

Uma fonte constante de discussão é  sobre a definição dos serviços e aplicações como P2P “puros” ou não. Alguns ativistas mais radicais aceitam definir como aplicações P2P apenas as que seguem o modelo descentralizado. No entanto, a visão comum engloba também os que usam o modelo híbrido. Vamos passar à descrição dos modelos, abaixo.

2.2.  Modelos de P2P

Os serviços e aplicações P2P seguem podem ser classificados em dois modelos: o descentralizado e o híbrido. À primeira vista, tende-se a imaginar o modelo P2P como aquele em que os nós participantes entram contato direto um com o outro, sem a participação de nenhum intermediário.

Mas isso não é sempre verdade, e alguns dos mais renomados expoentes da tecnologia P2P seguem o modelo híbrido. Vamos a seguir apresentar as duas definições em maiores detalhes.

 

2.2.1.     Modelo Descentralizado

 


O modelo descentralizado trabalha sem a ajuda de nenhum tipo de servidor ou repositório central de informações. Todos os nós são auto-suficientes e podem assumir simultaneamente as funções de cliente e servidor.

Neste modelo, os nós efetuam solicitações ao universo conhecido de nós, que estão ao seu alcance. Por sua vez, estes conectam-se a outros nós, até que o recurso seja localizado. Quando isto acontece, é passado um apontador para o nó inicial, que estabelece uma conexão direta com o outro nó e pode fazer a transação sem intermediários.

Por trazer consigo algumas dificuldades técnicas, é raramente usado conforme a definição acima. Muito mais freqüente é a implementação de servidores para tarefas específicas e com pouco overhead, o que se trata do modelo híbrido descrito abaixo.

 

2.2.2.     Modelo Híbrido

 


No modelo híbrido, são usados servidores para tarefas como autenticação de usuários, serviços de diretório e mapeamento de recursos disponíveis. A idéia básica é que os nós possam contatar algum servidor para iniciar a transação, ou para algum dos serviços acima.

Em seguida, o servidor devolve ao nó inicial alguma informação pertinente que permita a ele conectar-se diretamente com outro nó e efetuar a transação.

Este modelo é usado na grande maioria dos sistemas P2P. No caso do Napster, por exemplo, um servidor central armazena todos as contas de usuários e as listas de arquivos compartilhados. Ao efetuar-se a busca por um arquivo, o servidor central consultava a sua base  e apontava um nó que possuísse este arquivo. Deste ponto em diante, a comunicação e transferência processava-se diretamente.

Outros sistemas, como o Gnutella, utilizam os servidores apenas para gerar e atualizar uma lista de máquinas que estão no ar. Todos as outras funções ocorrem diretamente entre os nós.