200px|direita|thumb|Um sistema P2P sem uma infraestrutura central. thumb|200px|direita|Disposição de uma rede usual centralizada, baseada em servidores. Peer-to-peer (em português, par a par, ou simplesmente ponto a ponto) ou P2P é uma arquitetura de redes de computadores onde cada um dos pontos ou nós da rede funciona tanto como cliente quanto como servidor, permitindo compartilhamentos de serviços e dados sem a necessidade de um servidor central ou hierárquica.
Uma rede peer-to-peer é mais conveniente para o armazenamento de objetos imutáveis. Seu uso em objetos mutáveis é mais desafiador, e pode ser resolvido com a utilização de servidores confiáveis para gerenciar uma sequência de versões e identificar a versão corrente. Pode ser usada para permitir a troca de dados (como músicas, vídeos, imagens, dados e etc), entre pares de computadores não conectados à Internet por meio de um cabo crossover. Enfim, qualquer coisa com formato digital. Um exemplo de transmissão de dados via peer-to-peer são os Torrents.
Os sistemas cliente-servidor tradicionais gerenciam e fornecem acesso a recursos como arquivos, páginas web ou outros objetos localizados em um único computador servidor. Nesses projetos centralizados, são exigidas poucas decisões sobre a distribuição dos recursos ou sobre o gerenciamento dos recursos de hardware. Os sistemas peer-to-peer fornecem acesso a recursos de informação localizados em computadores de toda a rede. Os algoritmos para a distribuição e recuperação de objetos são um aspecto importante do projeto do sistema. Seu projeto tem como objetivo distribuir um serviço totalmente descentralizado e organizado, equilibrando, automaticamente, as cargas de armazenamento e processamento de forma dinâmica entre todos os computadores participantes à medida que as máquinas entram e saem do serviço. Porém, um problema que acarreta perigo para esse tipo de rede são as ameaças cibernéticas que podem decorrer de falhas no servidor devido a falta de energia ou avarias de componentes internos. No entanto, as redes P2P objetivam contornar este problema ao interconectar logicamente os pares. Seguindo neste modelo, cada nó da rede pode atuar como cliente ou servidor, ou seja, pode compartilhar ou adquirir conteúdo ao mesmo tempo.
Esse tipo de arquitetura de rede é muito conhecido pelo compartilhamento de arquivos. No entanto, as redes P2P são utilizadas para outras áreas, tais como, armazenamento distribuído em meios acadêmico, científico e de telecomunicações, por exemplo.
Um outro bom exemplo de rede rede peer-to-peer é o Torrent onde o cliente (pessoa que baixa o arquivo) recebe os dados do servidor (pessoa que tem o arquivo extraído do computador) e também o e-mail.
Vantagens Por não se basear em uma arquitetura cliente-servidor, onde apenas o servidor é responsável pela execução de todas as funções da rede, o P2P tem uma enorme vantagem justamente por não depender de um servidor e por todos os nós estarem interconectados, permitindo o acesso a qualquer nó a partir de qualquer um desses. Por esse motivo, a rede tem uma elevada disponibilidade.
Essa arquitetura depende da alta performance da internet. Como os recursos necessários são distribuídos (carga computacional, tráfego de rede, espaço de armazenamento, etc.) entre os nós, é possível conseguir um melhor desempenho de forma econômica, diferentemente da rede cliente-servidor, onde a performance depende do desempenho do servidor.
A arquitetura P2P apresenta maior disponibilidade de dados, visto que o objeto pode ser disponibilizado em inúmeros nós da internet. Porém, a garantia da segurança é inferior aos outros projetos de compartilhamento de dados.
Em contexto geral, bons resultados em experiências de pesquisa são trazidos por essa tecnologia por usar métodos para intercâmbio de informações sem recursos adicionais.
Arquitetura P2P Um sistema peer-to-peer implementa uma rede abstrata sobreposta, em cima da topologia da rede. Essa sobreposição é utilizada para descobrir e indexar os pares da rede, tornando o sistema P2P funcional, independente da topologia da rede física. O conteúdo é trocado diretamente sobre o protocolo IP. Sistemas peer-to-peer anônimos são exceções, pois implementam camadas extras de roteamento para ocultar sua identidade de origem ou de destino.
Em uma arquitetura P2P padrão, não existe a noção de cliente ou servidor, mas apenas pares de nós que funcionam tanto como cliente, quanto como servidor, para outros nós da rede. Um exemplo de transferência de arquivos que não utiliza o P2P é o File Transfer Protocol (FTP), onde os programas de cliente e servidor são distintos.
A rede Overlay P2P consiste em uma forma em que todos os pares da rede funcionem como apenas um nó dessa. Existe uma ligação entre dois nós que se conhecem na rede. Isto é, um nó participante conhece a localização de outro nó da rede P2P. Então, existe uma aresta que liga o primeiro nó existente ao segundo na rede sobreposta. Com base em como os nós estão conectados na rede, podemos classificar a rede P2P como estruturada ou não estruturada.
Na estrutura P2P, os pares são organizados de acordo com critérios e algoritmos, que realizam a sobreposição com topologias específicas. Normalmente, usam tabelas hash distribuídas para indexação. Sistemas P2P estruturados são adequados para implementações em larga escala devido à alta escalabilidade e algumas garantias sobre o desempenho (normalmente, aproximando O(log N), onde N é o número de nós no sistema P2P).
Não é imposta pela rede P2P uma estrutura padrão para a rede Overlay (sobreposta). Na ideologia, não existe no sistema de estrutura P2P um elemento centralizador. Entretanto, na prática existe, em sistemas estruturados, vários graus de centralização. Três categorias se destacam:
Peer-to-peer pura: toda rede consiste unicamente em pares equipotentes, existindo apenas uma camada de encaminhamento e nenhum sistema de infraestrutura especial. Peer-to-peer centralizada: é utilizado um servidor central para indexar as informações e iniciar o sistema inteiro. As conexões entre pares não são gerenciadas por qualquer algoritmo. Peer-to-peer híbrida: permite que os nós da infraestrutura coexistam.
O primeiro e popular sistema peer-to-peer de compartilhamento de arquivos, o Napster, foi um exemplo do modelo centralizado. Freenet e implementações iniciais do protocolo Gnutella, por outro lado, são exemplos de modelo descentralizado. Implementações Gnutella modernas, Gnutella2, bem como a agora substituída rede Kazaa, são exemplos do modelo híbrido.
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, excluindo qualquer requisito por servidores gerenciados separadamente e a sua infraestrutura 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 proliferado.
ShirkyShirky, C. (2000) What's P2P and What's not, 24 novembro 2000. Internet Publication. definiu as aplicações P2P como "aplicações que exploram recursos disponíveis nas bordas da Internet - armazenamento, ciclos, conteúdo, presença humana".Tanenbaum, A. S., Steen, M. V. - Distributed Systems: Concepts and Design. 4ª Edição (2005).
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 consideradas de igual nível e assumem o papel de cliente ou de servidor dependendo da transação que será iniciada ou recebida de um a 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 arquivos. Em outras palavras, programas que possibilitam a distribuição de arquivos em rede, permitindo o acesso de qualquer usuário dessa a este recurso. Outros tipos de recursos podem ser compartilhados em redes par-a-par, tal como a 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-peer O 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 usá-las cada vez ser mais; e 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 famosas, porque estas traziam 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 usavam sistemas como o DNS.
No início, 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 dez 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.
Na altura, a forma de navegar na Internet era através de um ficheiro .txt, nomeado de hosts.txt. O nome "cin" era associado a 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 desse é comparado às aplicações de ficheiros atuais.