![](figs/napster.gif)
Napster
Criado pelo estudante Shawn Fanning, em 1999, o Napster veio a oferecer aos seus usuários a disponibilidade e possibilidade de compartilhamento de arquivos, cujo foco era 'Arquivos de Áudio em MP3. Como dito anteriormente, esse sistema tinha um misto de arquiteturas, o compartilhamento era ponto-a-ponto, mas a comunicação era mantida por um servidor que, neste caso, armazenava as listas de músicas de diferentes máquinas e fazia a conexão entre quem requisitava e quem obtinha o dado (Fig. 1). O único problema que impediu uma maior abrangência do Napster foi sua restrita dependência a este servidor. Ele era essencial para a existência da aplicação. Como o compartilhamento envolve, muitas vezes, críticas e problemas por parte de Direitos Autorais, o governo americano facilmente o fechou.
Ao iniciar o Napster em um computador, automaticamente ele é transformado num pseudo-servidor capaz de transferir arquivos para os outros computadores envolvidos na rede. Então, o computador conecta-se aos servidores do Napster, os quais detem uma lista completa de cada música compartilhada e disponível em cada disco rígido dos computadores a eles ligado. Assim, após a procura do arquivo solicitado, o computador conectava-se a outro cliente pertencente a rede que continha aquele dado para iniciar a transferência. Esta conexão de um cliente a outro era intermediada pelos servidores Napster na fase da procura, entretanto, na fase da transferência, os clientes deixavam de sofrer a influência desta autoridade.
Gnutella
A Gnutella é atualmente a rede P2P mais utilizada por sistemas de compartilhamento de arquivos. A principal diferença entre este sistema e o Napster é que nele não existe um servidor central contendo um índice de todos os arquivos armazenados. Em vez disso, cada nó informa aos outros os arquivos ali existentes, sendo a busca feita por um mecanismo semelhante ao de índices distribuídos e repositórios. Devido à grande descentralização, há uma grande resistência a falhas. Além disso, não há como se efetuar o fechamento desta rede devido a atividades de compartilhamento ilegal, uma vez que não há um servidor central. Estas características contribuíram para a grande aceitação desta rede como principal rede de compartilhamento P2P, existindo atualmente diversos sistemas de compartilhamento de arquivos baseados nela.
Kazaa, eMule, iMesh, Ares Galaxy, Shareaza, LimeWire...
O sucesso alcançado pelo Napster abriu as portas para o desenvolvimento da rede de compartilhamento Gnutella, iniciando-se assim um dos principais mercados para a arquitetura de redes P2P atualmente: sistemas de compartilhamento de músicas, filmes, imagens, etc. Muitos deles são baseados nesta rede de compartilhamento (iMesh, LimeWire, Shareaza...), outros possuem suas próprias estruturas de compartilhamento, mas todos eles possuem em comum a característica de possibilitarem o compartilhamento destes arquivos de forma ponto a ponto. Extremamente perseguidos pelas gravadoras, muitos deles já foram fechados devido ao compartilhamento ilegal de músicas protegidas sob leis de direitos autorais. Existe uma grande polêmica, entretanto, relacionada ao compartilhamento de músicas pela internet. De um lado, existe um grupo que defende o compartilhamento de músicas livremente na internet, sob o argumento de que ele auxilia na divulgação das bandas e na verdade traz grandes benefícios para os autores. Do outro lado, existe o grupo que acredita que o compartilhamento de músicas pela internet traz um colossal prejuízo para os autores e as gravadoras, sob o argumento que inibe as vendas de cds e dvds. Independentemente desta discussão, é inegável que a cada dia torna-se uma tarefa mais complicada o fechamento de sistemas deste tipo, uma vez que cada vez mais estes sistemas são descentralizados e independentes de qualquer servidor central.
e-Marketplaces Peer-to-Peer
A própria natureza descentralizada do P2P combina com a tendência das empresas atuais e seus métodos de negócios [2]. No e-Marketplace, por exemplo, os nós da rede podem representar compradores e/ou vendedores que, por sua vez, podem estar ligados entre si.
As transações são feitas através da oferta de um vendedor sobre um determinado produto, confiando na infra-estrutura do P2P para transmitir. O comprador, por sua vez, utiliza da capacidade da rede para localizar estas ofertas e interagir com os vendedores.
Entre as principais diferenças entre esta modalidade e a convencional dos e-markets estão a distribuição do repositório de informações, a troca individual entre os nós, a informação trocada é dinâmica e atualizada e, sobretudo, as regras de negociação não são fixas.
BitTorrent
Desenvolvido pelo programador Bram Cohen em 2001, o BitTorrent é o principal protocolo para compartilhamento de artigos utilizado atualmente. Ele é principalmente utilizado para transferência de músicas, filmes, jogos, livros e softwares. É evidante então uma grande relação entre a utilização dos sistemas BitTorrent e a pirataria. Por isso, há uma grande preocupação de autoridades de diversos países para conter o compartilhamento de conteúdo ilegal utilizando sistemas deste tipo.
Para compartilhar um arquivo através do protocolo BitTorrent, o usuário deve primeiro criar um arquivo de descrição torrent para ele. Com isso, quando outros usuários têm acesso a este arquivo de descrição, eles podem iniciar o download do arquivo. O usuário que contém um arquivo completo em seu computador, sendo o compartilhamento caracterizado apenas pelo envio do arquivo para outros clientes, é chamado de seed. Um usuário que contém o arquivo apenas parcialmente é chamado de peer. Uma vez tendo concluido o download do arquivo, um peer, por definição, torna-se um seed. Um arquivo sendo compartilhado por um sistema BitTorrent é dividido em várias partes de mesmo tamanho, chamadas de pieces, que são baixados em uma ordem não necessariamente sequencial. Isto aumenta substancialmente a qualidade do compartilhamento, uma vez que um usuário, ao terminar de receber um pedaço específico, não precisa esperar até que o pedaço seguinte esteja disponível para continuar o download. Os pedaços são protegidos através de uma Função Hash Criptográfica contida no arquivo de descrição torrent. Isto permite a detecção de alterações em quaisquer pedaços do arquivo, sejam elas acidentais ou maliciosas.
Mecanismos de Busca
Hoje estima-se que existam mais de 600 milhões de páginas na World Wide Web[3]. De forma que se faça possível a navegação pela internet e o aproveitamento das informações ali guardadas, é necessário que existam mecanismos de busca cada vez mais eficientes, capazes de fazer a busca de dados de forma rápida e eficiente. A seguir serão apresentadas algumas formas de busca.
Transmissão de inundação de consultas:
Apesar de ser simples, possui uma baixa escalabilidade, isto é, uma baixa capacidade de atender uma demanda em crescimento. Por isto é pouco utilizada atualmente. A busca é feita verificando se algum nó vizinho possui resultado para a consulta em questão. Caso contrário, essa busca é repassada para os vizinhos seguintes, onde repete-se o procedimento. Daí vem o nome de busca por inundação, ou Flooding broadcast of queries. Este mecanismo era utilizado em versões iniciais da rede Gnutella;
Sistemas de seleção de encaminhamento:
Neste método, a consulta é encaminhada seletivamente através da rede com a utilização de um algoritmo de controle de fluxo (Flow Control Algorithm-FCA). Desta forma, nós que possuam uma maior probabilidade de retornar algum resultado possuem uma maior prioridade para o encaminhamento da busca. Um nó que possua uma maior disponibilidade de banda para fazer o processamento dos dados torna-se um super-nó, dessa forma, nós que possuem uma baixa disponibilidade podem consultar estes super-nós.
Redes de “hash table” descentralizada:
Nesta forma de busca, cada arquivo armazenado no sistema possui uma identificação única. A busca é então feita rapidamente através desta identificação do arquivo.
Índices centralizados e repositórios:
Este tipo de busca é utilizado pelo Napster. As requisições são enviadas para um servidor central que possui funções de gerência e busca. Neste servidor estão armazenadas identificações de todos os nós da rede. Caso a busca retorne algum resultado, o servidor envia ao nó que fez a requisição a identificação do nó que contém o arquivo. Desta forma, pode ser estabelecida uma conexão entre estes dois nós para que seja feito o compartilhamento.
Índices distribuídos e repositórios:
Neste mecanismo, cada nó possui um índice de arquivos locais e alguns índices de nós vizinhos. Ao receber uma consulta, o nó verifica primeiramente o seu próprio índice. Caso o arquivo não esteja contido naquele nó, o índice local é utilizado para encaminhar a consulta para um determinado nó vizinho. Desta forma, é eliminada a necessidade do servidor central, caracterizando assim um sistema menos propenso a falhas, devido à ausência da vulnerabilidade causada pelo Single Point of Failure.
Relevância dirigida à “crawlers” de redes:
Os Web-Crawlers visitam várias páginas na internet automaticamente, lendo seus conteúdos e atualizando um banco de dados. Em cada página são identificados links externos que serão as próximas páginas a serem visitadas por estes bots, de forma que o algoritmo seja executado recursivamente. Eles podem ser utilizados também para a criação de cópias completas das páginas visitadas. Desta forma podem ser amplamente utilizados em mecanismos de busca de forma a prover dados atualizados ou para o processamento e indexação das páginas gravadas, permitindo ao mecanismo que retorne resultados das buscas mais rapidamente. Existe uma técnica chamada de Web-Crawling distribuído, onde diversos computadores são utilizados através de uma rede P2P, de forma a fazer a indexação das páginas da web, o que aumentaria ainda mais a velocidade com que as páginas são visitadas, além de diminuir os custos para a manutenção de uma estação que faça a indexação individualmente. Com o enorme crescimento que a web vem sofrendo recentemente, tornou-se não apenas interessante, mas sim necessário que se distribua o processamento dos web-crawlers por diversos computadores, ou se tornaria inviável a tarefa de indexação das milhões de páginas existentes[4]. Um exemplo de sistema que utiliza esta técnica é o YaCi[5].