Autor: Biblioteca do TI | Publicado: 2011-05-20T14:31:00-07:00

01/12/2010P2P .Um sistema P2P sem uma infraestrutura central.
Disposição de uma rede usual centralizada, baseada em servidores.Peer-to-Peer (do inglês: par-a-par), entre pares (tradução livre ponto a ponto), é uma arquitetura de sistemas distribuídos caracterizada pela descentralização das funções na rede, onde cada nodo realiza tanto funções de servidor quanto de cliente.
Contexto
A demanda por serviços na Internet vem crescendo a uma escala que só pode ser limitada pelo tamanho da população mundial. Um dos objetivos dos sistemas peer-to-peer é permitir o compartilhamento de dados e recursos numa larga escala eliminando qualquer requisito por servidores gerenciados separadamente e a sua infra-estrutura associada. Sistemas peer-to-peer têm o propósito de suportar sistemas e aplicações distribuídas utilizando os recursos computacionais disponíveis em computadores pessoais e estações de trabalho em número crescente. Isso tem se mostrado bastante atrativo, já que a diferença de performance entre desktops e servidores tem diminuído, e as conexões de banda larga têm se proliferado.
Shirky[1] definiu as aplicações P2P como "aplicações que exploram recursos disponíveis nas bordas da Internet - armazenamento, ciclos, conteúdo, presença humana"..[2]
Geralmente, uma rede Peer-to-Peer é constituída por computadores ou outros tipos de unidades de processamento que não possuem um papel fixo de cliente ou servidor, pelo contrário, costumam ser considerados de igual nível e assumem o papel de cliente ou de servidor dependendo da transação sendo iniciada ou recebida de um outro par da mesma rede.
Os nós da rede Peer-to-Peer podem diferir em termos de configuração local, capacidade de processamento, capacidade de armazenamento, largura de banda, entre outras características particulares. O primeiro uso da expressão Peer-to-Peer foi em 1984, com o desenvolvimento do projeto Advanced Peer-to-Peer Networking Architecture na IBM.Redes virtuais O termo é utilizado em diferentes tecnologias que adotam um modelo conceitual Peer-to-Peer (em Portugal, conhecido como par-a-par), tal como o protocolo NNTP (para Usenet News), SMTP (para envio de mensagens eletrônicas - e-mail), e sistemas de troca de mensagens instantâneas (ICQ, MSN). Porém, o termo tornou-se popular com o surgimento de aplicações de compartilhamento de arquivo, em outras palavras, programas que possibilitam a distribuição de arquivos em rede, permitindo o acesso de qualquer usuário dessa rede a este recurso. Outros tipos de recursos podem ser compartilhados em redes Par-a-Par, tal como capacidade de processamento de máquinas, espaço de armazenamento de arquivos, serviços de programas (software, em inglês) - analogamente aos Web Services, entre outros.
Em 1999, Shawn Fanning criou o Napster, para compartilhamento de arquivos de música (principalmente MP3), e trouxe o conceito de Par-a-Par para a mídia, principalmente após tornar-se alvo de ataques jurídicos por parte das companhias fonográficas.História do Peer-to-PeerO P2P é o resultado da tendência natural do desenvolvimento de engenharia de software com a disponibilidade de tecnologia para a criação de redes maiores.
A tendência das últimas décadas tem crescido com a necessidade das aplicações empresariais, o que resultou na substituição dos sistemas monolíticos por sistemas distribuídos. As redes informáticas começaram a crescer, tornando-se cada vez maiores e mais poderosas, os utilizadores começaram a cada vez ser mais, a banda larga tornou-se cada vez mais barata e poderosa, sendo fácil de aceder. Neste campo houve a necessidade de ter a disponibilidade de pontos interligados, e quantos mais recursos houvesse, mais poderosa se tornava essa rede. A Internet foi um claro exemplo e uma explosão de utilizadores.
Enquanto as redes cresciam, as aplicações P2P desenvolveram-se e a sociedade interessava-se pelo P2P. Aplicações como o Napster, Gnutella e Kazaa ficaram famosos, porque estas colocaram um subconjunto da tecnologia P2P que estava ao alcance de milhares de utilizadores.
Na verdade o P2P surgiu da tecnologia básica que utilizaram nos tempos da USENET e da FidoNet. Eram duas redes totalmente descentralizadas, e sistemas como o DNS.
No inicio eram trabalhos que dois estudantes tinham na licenciatura. Não existia muita informação sobre a partilha, nem Internet como hoje em dia. Os arquivos eram trocados em batch nas linhas telefónicas, porque os computadores eram ligados por cabos coaxiais, não tendo muito mais que 10 computadores em cada rede, ligando-se por um terminador, passando virtualmente por cada nó. No entanto em 1979, como não havia maneira de centralizar, a USENET, era totalmente descentralizada sendo o criador Jim Ellis. (Será explicado mais á frente o que é). A FidoNet também era descentralizada, mas servia para troca de mensagens. Esta aplicação foi criada em 1984 por Tom Jennings para trocar mensagens de sistemas (BBS) diferentes.
O DNS tornou-se uma necessidade, porque em 1983 já existiam milhões de hosts na Internet. Na altura a forma de navegar na Internet era através de um ficheiro.txt, nomeado de hosts.txt. O nome "cin" era associado um determinado ip do ficheiro hosts.txt. Como a Internet cresceu, este sistema tornou-se impossível e foi então que surgiu o DNS.
O conceito de DNS é comparado às aplicações de ficheiros actuais.
Mas foi na década de 1990 que as redes P2P apareceram com toda a força, quando aplicações como o Napster e o Gnutella foram desenvolvidas. Cada nó neste tipo de rede é conhecido como peer, e pode servir com os mesmos direitos de cada peer da rede, serve tanto de cliente como de servidor. Os recursos e as informações passaram a ser disponibilizados de forma mundial. Estas redes tinham características, que quantos mais peers existissem mais escabilidade e mais autonomia tinham, e a rede tornava-se mais eficiente e mais rica em recursos com a comunicação directa que os peers tinham.Distribuição HorizontalA organização de uma aplicação cliente-servidor numa arquitetura multi-camadas distribui o processamento colocando componentes logicamente diferentes em máquinas diferentes. A essa distribuição se dá o nome de distribuição vertical. Uma distribuição vertical facilita o gerenciamento dos sistemas pois divide as funções lógica e fisicamente entre várias máquinas, onde cada máquina é responsável por um grupo especifico de funções.
Uma abordagem alternativa à distribuição vertical, bastante comum nas arquiteturas modernas, se baseia na distribuição dos clientes e dos servidores, o que se chama de distribuição horizontal. Nessa distribuição, um cliente ou um servidor pode estar fisicamente divididos em partes logicamente equivalentes, onde cada parte opera sobre a sua própria porção dos dados, o que balanceia a carga. Os sistemas peer-to-peer se baseiam na distribuição horizontal.
Olhando de uma perspectiva de alto nível, os processos que constituem um sistema peer-to-peer são todos iguais. Isso significa que as funções necessárias devem estar em todos os processos que constituem o sistema distribuído. Como consequência, a maior parte da interação entre os processos é simétrica: cada processo atua como um "cliente" e um "servidor" ao mesmo tempo.[2]CaracterísticasSistemas peer-to-peer compartilham essas características:O seu design garante que cada usuário contribui com recursos para o sistema. 
Apesar de que eles podem diferir nos recursos que contribuem, todos os nodos em um sistema peer-to-peer possuem as mesmas capacidades funcionais e responsabilidades. 
&nbsp; 
DescentralizaçãoA correta operação de sistemas P2P não depende da existência de um sistema de administração centralizado. Assim, sistemas P2P se confudem com sistemas descentralizados. Num sistema totalmente descentralizado, não só todos os hospedeiros são iguais, mas também não há hospedeiros com atribuições especiais, como administração e descoberta de serviços. Na prática, construir sistemas totalmente descentralizados pode se tornar difícil, o que faz os projetistas geralmente adotarem paradigmas híbridos na construção de aplicações P2P. O DNS por exemplo, é um protocolo peer-to-peer, porém com um senso embutido de hierarquia. Há outros exemplos de sistemas P2P no seu núcleo e com alguma organização semi-centralizada, como o Napster[3] e BitTorrent[4]HeterogeneidadeEm redes peer-to-peer, a heterogeneidade dos recursos envolvidos é uma preocupação que deve ser levada em conta durante o seu projeto. Computadores e conexões administrados por diferentes usuários e organizações não têm garantias de ficarem ligados, conectados ou sem falhas, o que os torna necessariamente recursos voláteis. Isso torna a disponibilidade dos nodos de uma rede peer-to-peer imprevisível. Essa imprevisibilidade não permite garantir acesso a recursos individuais, já que eles podem falhar. Para contornar isso, é possível lançar mão da técnica de replicação, diminuindo consideravelmente a probabilidade de falha ao acessar um objeto replicado. A replicação pode também tornar o sistema mais confiável se utilizada para neutralizar a ação de nodos maliciosos, que interceptam o sistema e corrompem os dados, através de técnicas de tolerância à falhas bizantinas.Sistemas HíbridosOs sistemas centralizados são simples de implementar e gerenciar, entretanto são um gargalo em potencial, uma vez que o servidor central tem capacidade limitada e pode não suportar o aumento da demanda. Por outro lado, os sistemas descentralizados são escaláveis e robustos, mas isso demanda certa complexidade de implementação, principalmente nas questões de tolerância à falhas e descoberta de recursos. Muitos sistemas distribuídos combinam características das duas arquiteturas, parte do sistema no tradicional modelo cliente-servidor e outra parte peer-to-peer.
Estruturas híbridas são implantadas notavelmente em sistemas distribuídos colaborativos. A principal preocupação em muitos desses sistemas é como se juntar ao sistema, para o qual muitas vezes um esquema tradicional cliente-servidor é adotado. Uma vez que o nodo se junta ao sistema, ele pode utilizar um esquema totalmente descentralizado para colaboração. Um exemplo de servidor que utiliza essa abordagem é o BitTorrent.[4]
Para um usuário de um serviço de comunicação instantânea, a aplicação parece peer-to-peer ao enviar os dados diretamente ao amigo sendo contactado. Mas todos os serviços de comunicação instantânea possuem uma espécie de servidor por trás que facilita a comunicação entre os nodos. Por exemplo, o servidor mantém uma associação entre o nome do usuário e o seu endereço IP, grava mensagens quando o usuário está offline, e roteia mensagens para usuários que estão atrás de firewalls. Um sistema totalmente descentralizado de comunicaçao instantânea não iria funcionar na Internet de hoje, mas existem grandes vantagens de escalabilidade em pemitir comunicação cliente-cliente, quando possível. Assim, grande parte dos sistemas utiliza um esquema de diretório centralizado enquanto a função é distribuída.Requisitos de uma Aplicação Peer-to-PeerPara funcionar eficientemente, sistemas peer-to-peer devem se preocupar com os seguintes requisitos não-funcionais:[5]Escalabilidade globalUm dos objetivos das aplicações peer-to-peer é explorar os recursos de hardware de um grande número de hospedeiros conectados à Internet. Assim, essas aplicações devem ser projetadas de modo a suportar o acesso a milhões de objetos em dezenas ou centenas de milhares de hospedeiros.
cançado através da colocação aleatória de recursos, juntamente com a utilização de réplicas dos recursos mais utilizados.Otimização de interações locais entre nodos vizinhosA "distância de rede" entre os nós que interagem tem um impacto substancial na latência das interações individuais, como por exemplo, clientes requisitando acesso à recursos. A carga do tráfico da rede também é impactada por isso. As aplicações devem colocar os recursos perto dos nós que mais os utilizam.DisponibilidadeA maioria dos sistemas peer-to-peer são constituídos de computadores hospedeiros que são livres para se juntar ou sair do sistema à qualquer hora. Além disso, os segmentos de rede utilizados nos sistemas peer-to-peer não são gerenciados por alguma autoridade; nem possuem garantias de qualidade de serviço. Um grande desafio para os sistemas peer-to-peer é prover um sistema confiável apesar desses fatos. Quando novos hospedeiros se juntam, eles devem ser integrados ao sistema e a carga deve ser redistribuída para explorar esses novos recursos. Quando eles saem do sistema voluntariamente ou involuntariamente, o sistema deve detectar a partida deles, e redistribuir as suas cargas e os seus recursos.Segurança dos dadosEm sistemas de escala global com participantes de origens diversas, confiança deve ser construída com o uso de autenticação e mecanismos de criptografia para garantir a privacidade dos dados e da informação.Anonimidade, negabilidade e resistência à censuraAnonimidade é uma preocupação legitima em muitas situações que demandam resistência à censura. Um requisito relacionado é que hospedeiros que guardam dados devem ser capazes de negar plausivelmente a responsabilidade sobre a posse e o suprimento deles. A utilização de um grande número de hospedeiros em sistemas peer-to-peer pode ser útil em alcançar essas propriedades.Redes P2P estruturadas e não-estruturadas
Rede SobrepostaUm conceito importante do paradigma P2P é a rede sobreposta, ou rede overlay. Na rede overlay, os nós são formados pelos processos e os enlaces são representados pelos possíveis canais de comunicação (que são tipicamente conexões TCP). No geral, um processo não pode se comunicar diretamente com outro processo arbitrário, mas só pode enviar mensagens através dos canais de comunicação disponíveis. Nesse sentido, cada nó possui um conjunto de vizinhos, que por sua vez possuirão outros conjuntos de vizinhos. A figura abaixo ilustra a rede sobreposta sobre a camada de rede (p.e. Internet). Observe que dois nós que são vizinhos na rede overlay não são necessariamente vizinhos na rede física.
Rede overlay P2PA localização de nós e objetos é realizado na rede overlay através de um algoritmo de roteamento distribuído. Esse algoritmo é implementado sobre a camada de aplicação, não tendo nenhuma ligação com o roteamento implementado pelos roteadores da camada de rede. Através desse algoritmo que as requisições dos cliente são roteadas para um hospedeiro que possui o objeto pela qual a requisição está endereçada. Os objetos de interesse são colocados e relocados em qualquer nó na rede sem o envolvimento do cliente.
O roteamento garante que qualquer nó pode acessar qualquer objeto na rede overlay, explorando o conhecimento de cada nó na rede para localizar o objeto de destino. Sistemas peer-to-peer geralmente armazenam múltiplas réplicas de um mesmo objeto para garantir disponibilidade. Dessa forma, o algoritmo de roteamento mantém o mínimo de informação possível sobre a localização de todas as réplicas, e envia as requisições para o nó "vivo" (p.ex. não falho) mais próximo que mantém uma cópia do objeto relevante. Existem basicamente dois tipos de redes sobrepostas: as redes estruturadas e as redes não-estruturadas. Esses dois tipos de rede são discutidos extensivamente em.[6]Arquiteturas Peer-to-Peer Estruturadas
Numa rede peer-to-peer estruturada, a rede sobreposta é construída através de um procedimento determinístico. O procedimento mais utilizado, de longe, é organizar os processos através de uma tabela hash distribuída (DHT). Num sistema baseado em DHTs, os dados recebem uma chave aleatória de um extenso espaço de identificadores, tipicamente um identificador de 128 ou 160 bits. Os nodos da rede também recebem um identificador do mesmo espaço. O grande desafio num sistema baseado em DHT é implementar um esquema eficiente e determinístico que mapeia unicamente a chave de um ítem para o identificador do nodo responsável pelo ítem desejado. A partir disso, é possível retornar o endereço de rede do nodo responsável pelo ítem desejado, que pode ser contactado diretamente.Uma tabela hash distribuída.Várias implementações e protocolos baseados em DHT foram desenvolvidos. Dentre eles, as mais populares são o Chord.[7] NodeWiz[8] é um serviço de descoberta em grids (GIS) que utiliza uma estrutura de árvores para organizar os seus nós na rede sobreposta. Para tal, cada nó na árvore é responsável por um subespaço do espaço completo dos atributos. Assim, é possível realizar eficientemente consultas por faixas de valores, ao contrário do que acontece na DHT, onde as consultas se dão por valores exatos.Arquiteturas Peer-to-Peer Não-EstruturadasSistemas peer-to-peer não-estruturados geralmente se baseiam em algoritmos aleatorizados para a construção da rede sobreposta. A idéia principal é que cada nó mantenha uma lista de vizinhos, que é construída mais ou menos de forma aleatória. Da mesma forma, se assume que os dados são colocados de forma aleatória nos nodos. Assim, quando um nó necessita localizar um ítem específico, a única coisa que pode fazer é inundar a rede com uma busca.[9] Uma desvantagem desse tipo de busca é que consultas podem não ser respondidas caso o cliente e o hospedeiro estejam muito afastados na rede. Isso acontece, devido a mecanismos que impedem que mensagens se propaguem indefinidamente na rede (p. ex. TTL). Outra desvantagem é que mecanismos de inundação geralmente causam grande tráfico de sinalização, o que, muitas vezes, torna esse tipo de busca lenta.
Muitos sistemas peer-to-peer não-estruturados constroem redes sobrepostas que remetem a um grafo aleatório. O modelo básico é que cada nó mantém uma lista com c vizinhos, onde, idealmente cada um desses vizinhos representa um nodo escolhido aleatoriamente dentre o conjunto dos nodos "vivos". Essa lista de nós pode ser chamada de visão parcial. Dentre os sistemas P2P que utilizam arquiteturas não-estruturadas podemos citar o BitTorrent[4] que constrói sua overlay de forma aleatória, as Content Delivery Networks (CDNs), e o Gnutella.Plataformas, Frameworks e Aplicações Peer-to-PeerInicialmente, as aplicações Peer-to-Peer surgiram monolíticas, ou seja, o programa precisava implementar seu próprio protocolo de comunicação Peer-to-Peer para permitir a interoperabilidade entre os nós constituintes do seu sistema em rede. Porém, além de um grande re-trabalho, estes esforços em requisitos não-funcionais das aplicações implicavam na impossibilidade de comunicação entre sistemas diferentes, mesmo que os serviços providos por eles fossem equivalentes. Por exemplo, arquivos compartilhados em sistemas como o Kazaa, eMule e Gnutella ficam acessíveis exclusivamente dentro de suas próprias redes, levando usuários a manterem instalados em suas máquinas clientes para cada um dos sistemas de compartilhamento de arquivos que pretenda usar.
Com a popularização deste tipo de aplicação, surgiu um esforço em prover plataformas para desenvolvimento de aplicações Peer-to-Peer, de tal maneira que estas possam comunicar-se entre si. Entre elas, destacam-se o JXTA, o Windows Peer-to-Peer Networking e o XNap.
O JXTA e o Windows Peer-to-Peer Networking são especificações de protocolos Peer-to-Peer e de uma API para utilização dos serviços, sendo o primeiro com implementações em Java e em C.
O XNap provê, além de uma API de serviços Peer-to-Peer, também um framework para desenvolvimento das aplicações em si, incluindo recursos de interface gráfica com o usuário. Um Framework Peer-to-Peer, portanto, vai além de uma plataforma para comunicação Peer-to-Peer, provendo serviços adicionais não necessariamente relacionados com a comunicação em si, mas indispensáveis para o desenvolvimento rápido de aplicações baseadas nesta arquitetura.
Outros exemplos de frameworks para desenvolvimento de aplicações Peer-to-Peer são o Oog (Duke University), o Lancaster´s P2P Framework (University of Lancaster) e o COPPEER (UFRJ), sendo os dois últimos abstrações construídas sobre o JXTA.KademliaKademlia é conceito de rede altamente descentralizada baseada em "nós" de rede. Os próprios usuários constituem a estrutura da rede dispensando servidores. Várias redes utilizam o conceito Kademlia.OvernetA rede Overnet é uma espécie de eDonkey "paga". É preciso comprar o programa da empresa que a desenvolveu. É uma variante do eDonkey totalmente descentralizada e mais rápida seguindo o conceito Kademlia e foi a primeira implementação da mesma.GnutellaRede open-source surgida no final de 2000 utilizada inicialmente por usuários do sistema Linux. Possui uma estrutura altamente descentralizada não havendo mesmo nenhum servidor central sequer. Os usuários constituem a estrutura da própria rede. Entre os programas que a utilizam, estão o BearShare , LimeWire, Azureus e agora o Shareaza.Gnutella 2Segundo projeto da rede Gnutella mas agora com servidores centrais optimizando buscas e o desempenho geral da rede. É conhecida principalmente no programa Shareaza. Recebeu críticas quando foi criada pelos criadores da Gnutella original.Kad NetworkRede paralela do programa eMule introduzida pelo autor deste em 2004; é uma implementação fiel ao conceito Kademlia. Essa rede tinha por objetivo inicial oferecer mais fontes aos usuários do programa e mais tarde se tornar uma rede P2P completa.OpenFTOpenFT é um protocolo desenvolvido pelo projeto giFT. O nome "OpenFT" significa "Open FastTrack". Entretanto, o OpenFT é um protocolo completamente novo, apenas algumas poucas vieram do pouco que se sabia sobre a FastTrack quando o OpenFT foi desenvolvido. Assim como a FastTrack, o OpenFT é uma rede onde nodos enviam listas de arquivos compartilhados para outros nodos. Isso reduz o consumo de banda necessário para a pesquisa, entretanto, consumindo mais recursos do processador e mémoria nos nodos.AudioGalaxyProjeto antigo da empresa de mesmo nome, o Audiogalaxy centralizava todo o seu acervo indexando-o em seu sítio oficialmente. Foi facilmente fechada por um processo judicial na Inglaterra. Era uma implementação de FTPs sendo mais superficial ao usuário.SoulSeekRede introduzida para trocas de músicas em 2000. Utiliza programa de mesmo nome. Caracteriza-se pelo fato de ter um grande número de arquivos raros, e principalmente música alternativa. O programa cliente tem uma interface simplificada, e permite a adição de usuários em uma hotlist, ou seja, uma lista de contatos que permite saber quando um usuário que tem arquivos relevantes está conectado à rede. Também há na rede SoulSeek um serviço de bate-papo (chat) parecido com o IRC, que possibilita uma melhor interação entre os usuários, que também podem criar seus próprios canais de chat.DNSO DNS (Domain Name System - Sistema de Nomes de Domínios) é um exemplo de sistema que mistura os conceitos de rede peer-to-peer com um modelo hierárquico de posse da informação. O mais incrível do DNS é quão bem ele tem escalado, dos poucos milhares de hospedeiros que ele foi projetado para suportar, em 1983, para as centenas de milhões de hospedeiros atualmente na Internet. Os problemas encontrados pelas aplicações P2P atuais, tais como compartilhamento de arquivos, são os mesmos problemas que foram resolvidos pelo DNS há 10 ou 15 anos atrás. Assim, vários elementos-chave no projeto do DNS são replicados nos sistemas distribuídos atuais. Um elemento é que hospedeiros podem operar tanto como clientes quanto como servidores. O segundo elemento é um método natural de propagar as requisições de dados pela rede. A carga é naturalmente distribuída pela rede, tanto que qualquer servidor individual de nomes só precisa servir as demandas dos seus clientes e o espaço de nomes que ele gerencia.TorrentBitTorrent é um sistema de download de arquivos P2P. A idéia basica é que quando um usuário procura por um arquivo, ele baixa "pedaços" do arquivo de outros usuários até que o arquivo fique completo. Um importante objetivo de projeto foi garantir colaboração. Na maioria dos sistemas de compartilhamento de arquivo, uma fração significante dos usuários somente baixa os arquivos e contribuem perto de nada. Para isso, um arquivo pode ser baixado somente quando o cliente que está baixando também está provendo conteúdo para alguém.Redes, protocolos e aplicativosAres: Ares Galaxy, Warez P2P, AlterGalaxy 
BitTorrent: AllPeers, ABC [Yet Another BitTorrent Client], Azureus, BitComet, BitSpirit, BitTornado, Bitlord, Burst!, G3 Torrent, KTorrent, mlMac, MLDonkey, QTorrent, Shareaza, Transmission,Tribler, µTorrent 
CSpace: Uma rede peer-to-peer baseda em sistemas de comunicações 
Direct Connect: DC++, NeoModus Direct Connect, BCDC++, ApexDC++, StrongDC++ 
Domain Name System 
eDonkey: aMule, eDonkey2000 (descontinuado), eMule, DreaMule, LMule, MLDonkey, mlMac, Shareaza, xMule, iMesh 
FastTrack: AlterGalaxy, giFT, Grokster, iMesh, iMesh Light (sem adware), Kazaa, Kazaa Lite (sem adware), KCeasy, Mammoth, MLDonkey, mlMac, Poisoned 
Freenet: Entropy (em sua própria rede), Freenet 
GNUnet: GNUnet, (GNUnet-gtk) 
Gnutella: AlterGalaxy, Acquisition, BearShare, Cabos, Gnucleus, Grokster, iMesh, gtk-gnutella, Kiwi Alpha, LimeWire, FrostWire, MLDonkey, mlMac, Morpheus, Phex, Poisoned, Swapper, Shareaza, XoloX 
Gnutella2: Adagio, Caribou, Gnucleus, iMesh, Kiwi Alpha, MLDonkey, mlMac, Morpheus, Shareaza, TrustyFiles 
Kad (rede) (usando o protocolo Kademlia): aMule, eMule, MLDonkey 
MANOLITO/MP2P: Blubster, Piolet 
MFPnet: Amicima 
Napster: Napigator, OpenNap, WinMX 
P2PTV type networks: TVUPlayer, CoolStreaming, Cybersky-TV, TVants 
Peercasting type networks: PeerCast, IceShare, FreeCast 
Pichat protocolo: Pichat, Pidgin, Moonchat, C4 
SoulSeek: SoulSeek, Nicotine 
Usenet 
WPNP: WinMX 
ZPoC&nbsp; 

Direitos AutoraisAs redes P2P são acusadas no mundo todo de ferir os direitos autorais, por disponibilizar arquivos sem a autorização dos proprietários do copyright. Muitos usuários destas redes P2P defendem que a ausência de lucro na reprodução do copyright não deveria ser criminalizado. No Brasil, a lei dos direitos autorais, proíbe qualquer tipo de reprodução de conteúdo protegido que não seja autorizado (art. 105). 

Caso do NapsterOs desenvolvedores do Napster argumentaram que eles não eram culpados pelo infrigimento dos direitos autorais porque eles não participavam do processo de cópia, que foi interamente realizado por máquinas de usuários. Esse argumento foi derrubado porque os servidores de indexação foram anexados como parte essencial do processo. Como esses servidores eram localizados em endereços conhecidos, os seus operadores foram incapazes de se manterem anônimos e então se tornaram alvos dos processos.
Um sistema de compartilhamento mais distribuído teria alcançado uma maior separação legal de responsabilidades, distribuindo a responsabilidade entre todos os usuários do Napster, e tornando o processo muito difícil, senão impossível.
Qualquer que seja a visão que alguém tenha sobre a legitimidade de cópia de arquivos para o propósito de compartilhamento de material protegido por direitos autorais, existe uma legítima justificativa social e política para a anonimidade de clientes e servidores em alguns contextos de aplicações. A justificativa mais persuativa é usada quando anonimidade é utilizada para superar censura e manter a liberdade de expressão para indivíduos em sociedades e organizações opressivas.
 
Referências↑ Shirky, C. (2000) What's P2P and What's not, 24/11/2000. Internet Publication. 
↑ a b Tanenbaum, A. S., Steen, M. V. - Distributed Systems&nbsp;: Concepts and Design. 4th Edition (2005). 
↑ a b c OpenNap: Open Source Napster Server, Beta release 0.4, September 2001. 
↑ a b c d Cohen, B. (2003). Incentives Build Robustness in BitTorrent, May 2003, Internet Publication. 
↑ Kubiatowicz, J. (2003). Extracting Guarantees from Chaos, Communications of the ACM, pp. 33-38, vol. 46, No. 2, February 
↑ Lua, E. K., Crowcroft, J., PIAS, M., SHARMA, R., and LIM, S.: "A Survey and Comparison of Peer-to-Peer Overlay Network Schemes." IEE Communications Surveys &amp; Tutorials, (7)2:22-73, Apr. 2005. 
↑ Stoica, I., Morris, R., Liben-Nowell, D., Karger, D. R., Kaashoek, M.F., Dabek, F., e Balakrishnan, H.: "Chord: A Scalable Peer-to-peer Lookup Protocol for Internet Applications." IEEE/ACM Trans. Netw., (11)1:17-32, Feb. 2003 
↑ Basu, S., Banerjee, S., Sharma, P., and Lee, S. 2005. NodeWiz: peer-to-peer resource discovery for grids. In Proceedings of the Fifth IEEE international Symposium on Cluster Computing and the Grid (Ccgrid'05) - Volume 1 - Volume 01 (May 09 - 12, 2005). CCGRID. IEEE Computer Society, Washington, DC, 213-220. 
↑ Risson, J. and Moors, T.: "Survery of Research towards Roubust Peer-to-Peer Netwroks: Search Methods." Comp. Netw., (50), 2006. 
↑ Adar, E. and Huberman, B.A.: "Free Riding on Gnutella." Hewlett Packart, Information Dynamics Lab, Jan.2000. 
↑ Saroiu, S., Gummadi, P.K., and Gribble, S.D.: "Measuring and Analyzing the Characteristics of Napster and Gnutella Hosts." ACM Multimedia Syst., (9)2:170-184, Aug. 2003. 
↑ Yang B. and Garcia-Molina, H.: "An Empirical Study of Free-Riding Behavior in the Maze P2P File-Sharing System" Proc. Fourth Int'l Workshop on Peer-to-pEer Systems, Lect. Notes Comp. Sc., (Ithaca, NY). Berlin: Springer-Verlag, 2005 
↑ Coulouris, G., Dollimore, J., Kindberg, T. Distributed Systems&nbsp;: Concepts and Design. 4th Edition (2005).