Arquitetura

A organização da rede P2P é caracterizada pela descentralização. Na rede cliete-servidor, um servidor possui um banco de dados contendo todos os arquivos a serem compartilhados. Ele recebe os pedidos dos usuários (clientes) e decide se disponibilizará ou não o acesso ao pedido. Já na rede ponto a ponto (P2P), a arquitetura é feita de forma com que cada ponto da rede seja um cliente e um servidor simultaneamente.

Podemos definir dois tipos de P2P: as redes não estruturadas, utilizam, em geral, algoritmos de busca baseados em técnicas de inundação e não apresentam boa escalabilidade; as estruturadas possuem uma topologia e organização, onde os dados são armazenados em localizações específicas, o que torna as buscas mais simples, e tipicamente, utiliza-se um esquema DHT (Distributed Hash Table).

Redes estruturadas

Há um nível de organização muito grande nas redes estruturadas P2P. Elas são baseadas em diferentes funções hash, onde cada nó fica responsável por um subconjunto do total de chaves. Porém, consultas mais complexas, como graus de relevância na pesquisa não são permitidas, pois os armazenamentos e consultas são feitos através das chaves e através do conteúdo. Com isso, dados similares podem estar em lugares totalmente diferentes.

Neste modelo um novo nó na rede tem um lugar de conexão no grafo de nós determinado por um algoritmo bootstrap. O estágio de alta descentralização em seu funcionamento faz com que não existam divisões da arquitetura. Isto significa que a diferenciação fica destinada à função hash utilizada. De maneira mais voltada ao P2P, temos o DHT (Distributed Hash Table) cujos conceitos gerais são:

• Obter e alocar informações de maneira descentralizada, escalável, balanceada e de excelente performance.

• O que são guardadas são pares de chave-valor. As chaves controlam quais nós guardam os valores, e cada nó é responsável por uma seção do espaço.

• Guardar(Chave,Valor) e Valor=Recupera(Chave)

• Aqui, todos os nós trocam informações entre si sobre todos os arquivos possíveis, ou seja, para qualquer comunicação, basta rastrear qualquer outro usuário conectado à rede. Além disso, enquanto um rastreador estiver ativo, mesmo para um Torrent (no caso do BitTorrent, por exemplo) legal, todos os outros Torrents, mesmo os ilegais, poderão continuar funcionando por meio do DHT, pois um único rastreador já é suficiente para descobrir outros membros online e começar a busca e compartilhamento.

Redes não estruturadas

As redes P2P não-estruturadas possuem suas estruturas de conexão e organização dos nós de maneira praticamente aleatória. Isto significa que quando algum usuário novo entra em uma rede já formada, não existe uma posição pré-determinada para ele. Como não há nenhum indício de organização, estas redes não são homogêneas, pois nós podem se conectar concentradamente entre um pequeno grupo de outros nós, tornando-se com isso mais difícil de encontrar o objeto dentro da rede.

Entretanto, redes não-estruturadas são mais simples de serem implementadas e o controle de buscas também é fácil de ser feito. Além disso, arquivos muito grandes como vídeos, programas e outros, possuem uma difusão bem acentuada, visto que algoritmos de organização e replicação poderiam tornar o tempo e os recursos de processamento maiores. Em contrapartida, como todos os usuários estão em uma organização aleatória, quando se quer fazer uma busca, por exemplo, deve-se recorrer à toda rede, pois não há uma escalabilidade nos mecanismos de busca, o que faz com que ocorra muitas vezes uma inundação na rede.

Redes P2P não estruturadas podem ser subdivididas em três casos:

Centralizada

Neste caso, existe um servidor que funciona como gerenciador de tarefas, consulta e conexão. Não há trocas de dados entre o nó e o servidor, apenas um fornecimento por parte do primeiro de sua lista de arquivos, que será indexada pelo servidor. Então, quando outro nó fizer sua pesquisa, ele consulta ao servidor sobre a informação da localização do dado procurado. A partir daí restará ao nó entrar em contato diretamente com o alvo.

A vulnerabilidade dessa estrutura é que ela ainda depende de uma central. Portanto, uma falha no servidor poderá comprometer toda a rede (Single Point of Failure). Devido a esta vulnerabilidade, em casos de acusação de compartilhamento ilegal o sistema pode ser facilmente interrompido, simplesmente fechando-se o servidor central. O responsável pelo servidor é também responsável por tudo aquilo que estiver em fluxo, sofrendo processos como por exemplo de violação de direitos autorais. Um exemplo de uma rede deste tipo fechada por este motivo foi o Napster.

Parcialmente centralizada

Neste caso, se faz necessário o conceito de supernós. Ele consiste no fato de que alguns nós terão funções como as do servidor centralizado P2P. Há então, uma clara formação de hierarquia entre os nós. Como o trabalho do antigo servidor agora é dividido, há também uma maior escalabilidade. Quando solicitado, um supernó busca em sua base e nas de nós adjacentes se alguém possui o arquivo. Esta estrutura possui uma menor vulnerabilidade, já que há uma maior descentralização no compartilhamento dos arquivos. Apesar disso, há uma possibilidade de um ataque de negação de serviços focando nos supernós, apesar de ser complicado atacar todos eles simultaneamente. Um exemplo de um sistema que se baseia nessa topologia é o Kazaa.

Descentralizada

Nas redes P2P descentralizadas existe uma lista de servidores (hosts) e qualquer pessoa pode colocar no ar um deles para fazer a inicialização da rede. Apesar das autoridades já terem inutilizados alguns deles que eram notórios na rede, outros surgem muito facilmente e rapidamente.

Os servidores se comunicam entre si, garantindo que todos os usuários tenham acesso a todos os arquivos. Qualquer consulta de um nó é requisitada a todos seus vizinhos, que requisitam aos seus vizinhos (exceto àquele de onde veio a mensagem), e assim sucessivamente.

Para tal objetivo acontecerá uma inundação da rede e para isto utiliza-se comumente o algoritmo TTL (Time To Live). Essa topologia possui uma vulnerabilidade ainda menor do que a parcialmente centralizada, porém se o TTL for muito grande, inunda demais a rede, assim como se for muito pequeno e os nós extremos muito distantes, as requisições podem não alcançar o destino.

Devido à grande quantidade de informação em fluxo nessa estrutura, percebe-se uma necessidade de armazenamento de pedidos para que mensagens repetidas por conexões separadas sejam encaminhadas uma única vez, evitando loops e desperdícios de rede.