Redes Par-a-Par (P2P)

Disciplina: Redes de Computadores I

Professor: Luís Henrique M. K. Costa

Grupo: Lucas Macedo, Luiz Moraes e Ivan Júlio

Template HTML retirado de: HTML5 Templates

 

Este trabalho foi totalmente produzido pelos autores que declaram não terem violado os direitos autorais de terceiros, sejam eles pessoas físicas ou jurídicas. Havendo textos, tabelas e figuras transcritos de obras de terceiros com direitos autorais protegidos ou de domínio público tal como idéias e conceitos de terceiros, mesmo que sejam encontrados na Internet, os mesmos estão com os devidos créditos aos autores originais e estão incluídas apenas com o intuito de deixar o trabalho autocontido. O(s) autor(es) tem(êm) ciência dos Artigos 297 a 299 do Código Penal Brasileiro e também que o uso do artifício de copiar/colar texto de outras fontes e outras formas de plágio é um ato ilícito, condenável e passível de punição severa. No contexto da Universidade a punição não precisa se restringir à reprovação na disciplina e pode gerar um processo disciplinar que pode levar o(s) aluno(s) à suspensão.

Introdução

A arquitetura peer-to-peer (P2P) é um tipo de arquitetura de aplicação, uma forma de estruturar aplicações nos sistemas finais que as executam. Existem duas arquiteturas de aplicação que são mais amplamente utilizadas: a arquitetura cliente-servidor e a arquitetura peer-to-peer. A primeira é uma arquitetura assimétrica, em que um servidor que permanece sempre em funcionamento fornece serviços a vários clientes simultaneamente. Em contraste, a arquitetura peer-to-peer é simétrica, todos os membros da rede são consumidores e fornecedores de recursos, se conectam diretamente e podem estar em funcionamento de forma intermitente. Além desses dois tipos, algumas aplicações podem utilizar uma arquitetura híbrida, em que parte de sua funcionalidade é oferecida por um servidor central, enquanto outra parte é fornecida pela rede P2P.

Uma das principais vantagens da arquitetura P2P é a sua escalabilidade. Cada par adicionado à rede representa um aumento da demanda por recursos (poder de processamento, armazenamento, etc), mas, ao mesmo tempo, pode oferecer seus próprios recursos, aumentando a capacidade da rede. Além disso, essa arquitetura também apresenta uma vantagem em termos de redução de custo para o provedor do serviço, uma vez que não é necessária a aquisição de infraestrutura (servidores e banda), ou a infraestrutura utilizada pode ser de menor escala.

No entanto, a utilização da arquitetura P2P apresenta também alguns desafios. Por exemplo, a tecnologia ADSL (Asymmetric digital subscriber line), amplamente utilizada em redes residenciais, fornece uma taxa de upload menor que a taxa de download, o que atende bem aplicações de transferência de arquivos cliente-servidor, em que a maior parte do tráfego ocorre do servidor para os usuários, mas não aplicações P2P, que exigem que os usuários também enviem dados.

Outro desafio dessa arquitetura está relacionado a criação de incentivos para os usuários. Se, em uma aplicação P2P, existe alguma forma de um usuário apenas utilizar os recursos da rede sem ceder seus próprios recursos, existe, então, a necessidade de criar incentivos para que os usuários compartilhem seus recursos voluntariamente, de forma a assegurar o funcionamento da aplicação.

Figura 1: Arquiteturas cliente-servidor e P2P

Histórico

P2P (Peer-2-Peer) ou ponto-a-ponto causou uma mudança de paradigma em relação ao modelo cliente - servidor, possibilitando uma distribuição de conteúdo mais rápida e barata, que possui alta resistência a acidentes e desastres, pois é possível ter o conteúdo em computadores e redes distribuídos pelo globo. Quanto mais usuários mais confiável, pois isto permiti que as implementações sobrevivam aos problemas citados, que afetam a infraestrutura por onde os dados circulam no mundo real, já que devido a capilaridade da sua rede outros caminhos podem ser utilizados para transmitir e receber arquivos. O movimento P2P data do início da internet e deu origem a diversos protocolos.

Devido a suas características o protocolo P2P é amplamente utilizado para pirataria, mas não se pode desconsiderar tudo de útil que se pode fazer com ele. Este protocolo é auto escalável, é anônimo, resistente a censura e suas implementações são robustas. Pode-se utilizar o P2P até para resistir a opressão disseminando informação, o que se faz com a ferramenta depende de quem a usa.

Aqui conheceremos de forma resumida dez aplicações do protocolo P2P que foram de maior importância histórica. Há diversas iniciativas que foram criadas ao longo do tempo, que se mencionadas tornariam este artigo muito extenso. Como o foco é elucidar a evolução dos usos do Peer-to-Peer, focaremos apenas em algumas de maior relevância, para propósitos narrativos. Um fato interessante sobre essas ferramentas é que a maioria de seus criadores ainda estão entre nós.

ARPANET

Em 1969 surgiu a ARPANET que originalmente conectou o Stanford Research Institute, a Santa Barbara e a Universidade de Utah não em um formato cliente / servidor, mas tratando-os como pares de computação iguais. Alguns dos primeiros aplicativos populares da Internet, como o FTP e o Telnet, seguiam arquiteturas do tipo cliente / servidor, mas como os hosts podiam atuar como servidores para outros hosts, padrões de uso simétricos surgiram.

Figura 2: Mapa da ARPANET em março de 1972.

Usenet

Em 1979, a Usenet foi desenvolvida por estudantes de pós-graduação americanos, com base no protocolo Unix-to-Unix-copy (UUCP). Por meio dele, uma máquina Unix poderia discar automaticamente para outra, trocar um arquivo e desconectar, no que lembrava um sistema de quadro de avisos (BBS), o que é precursor dos fóruns e feeds que temos hoje. Usenet, sem dúvida, deu origem a termos como FAQ e spam.

Figura 3: Estrutura da Usenet.

Napster

Durante os anos 80 e 90, o modelo cliente / servidor floresceu, numa época em que a capacidade de processamento dos computadores disponíveis para o consumidor ainda era pequeno, embora estivesse aumentando. A maioria das transferências de arquivos ocorreu por telefone fixo, com FTP e USENET ganhando uso ao longo do período, e o IRC sendo inventado em 88. No final dos anos 90, novas tecnologias de compactação de dados (MP3, MPEG) atingiram uso em larga escala.

Com esse marco da Internet, tivemos a introdução do Napster em 1999, desenvolvido por Shawn Fanning, ainda na Universidade Northeastern. Os usuários baixaram um programa gratuito que pesquisava os discos locais dos computadores vizinhos em busca de arquivos MP3 e depois conseguiam baixá-los diretamente um do outro. Em menos de um ano, o Napster tinha mais de um milhão de membros. Em menos de dois, o Metallica encheu uma ação contra a empresa. Em menos de três (julho de 2001) foi encerrada após sufocação legal e uma tentativa fracassada de se tornar um serviço pago.

Figura 4: Estrutura do Napster e logo.

Gnutella

O Napster ainda dependia da operação de servidores centrais de indexação e, portanto, era suscetível ao desligamento. Uma nova geração de compartilhamento de arquivos encabeçada por Gnutella, que surgiu em 2000, eliminou essa vulnerabilidade, permitindo que os usuários se encontrassem e se conectassem remotamente. Ao empregar um modelo de flooding de consulta, o protocolo fazia com que cada pesquisa fosse transmitida sucessivamente para outras máquinas na rede (o que, no caso, era significativamente menos eficiente do que a consulta ao indexador central). Outra diferença entre o Gnutella e seus antecessores foi a quantidade de clientes agora disponíveis para executar o protocolo. O LimeWire era um dos exemplos mas famosos entre muitos clientes Gnutella.

Figura 5: Estrutura do Gnutella e logo.

Freenet

Em 2000 também houve o surgimento da Freenet, esta ferramenta trouxe uma grande melhoria em relação ao anonimato do usuário, inaugurando o que mais tarde seria rotulado como a categoria darknet. Isso fazia com que os usuários armazenassem fragmentos criptografados de arquivos, conectando-os apenas através de computadores intermediários que repassavam e retornavam solicitações sem conhecer o conteúdo solicitado. O design assemelha-se a como os roteadores da Internet trocam pacotes sem saber nada sobre eles.

Figura 6: Roteamento de redes Freenet.

Bittorrent

O protocolo criado por Bram Cohen permitia que os pares se comunicassem diretamente através de uma porta TCP, mas contavam com rastreadores centrais para registrar a localização / disponibilidade de arquivos e coordenar os usuários. O Vuze (ex-Azureus) foi o primeiro cliente de BitTorrent a migrar para um sistema sem tracker implementando uma tabela de hash distribuída (DHT) para a descoberta de pares, outros tiveram logo em seguida. A partir daí, o BitTorrent surgiu em 2001.

Figura 7: Estrutura de uma rede Bittorrent para compartilhamento de dados com peers na rede.

Bitcoin

O Bitcoin, que surgiu em 2009, não foi projetado com o compartilhamento de arquivos em mente, mas gerou uma nova classe de estruturas de armazenamento P2P. O blockchain é um registro distribuído com uma finalidade diferente da DHTs. Satoshi queria armazenar com cada nó um registro de transação sempre crescente, sem qualquer chance de adulteração e revisão. Já os DHTs visam fornecer uma estrutura eficiente (em termos de tempo de pesquisa e espaço de armazenamento) para dividir os dados em uma rede, em que a imutabilidade não é a principal prioridade.

O que os mineradores provavelmente não esperavam era que sua atividade central logo seria resumida na categoria genérica de mecanismos de consenso e aplicada a casos de uso muito diferentes dos de armazenamento e transação de valor financeiro.

Figura 8: Estrutura da rede Bitcoin.

Namecoin

O Namecoin, em 2011, nasceu da vontade de registrar dados no blockchain e torná-lo menos específico da aplicação, é o principal uso do domínio .bit. O primeiro fork do Bitcoin, é aproximadamente um sistema de registro e transferência de pares de chave é valor baseado em sua tecnologia de geração. Pode ser justo dizer que o Namecoin representou a primeira abordagem não monetária de uma blockchain.

Figura 9: Estrutura da rede Namecoin.

Diaspora

A Diaspora se comercializou como um servidor web pessoal de código aberto e uma rede social descentralizada em 2012. Ela foi financiada com mais de U $ 200.000,00 através do Kickstarter em 2010, e lançou um alfa de consumo de curta duração pouco tempo depois, mas alcançou uma versão estável da comunidade apenas em 2012.

Nele, os usuários configuram seu próprio pod para hospedar o conteúdo e interagem através de um cliente de desktop. O conceito sempre girava em torno da agregação de conteúdo de outras redes sociais, permitindo que os posts fossem facilmente importados do Facebook, Twitter e assim por diante, mas muitas das APIs necessárias nunca foram feitas. O projeto girou por alguns anos antes de ser abraçado por Eben Moglen e pela Freedom Box Foundation. A Diaspora provocou na média uma reação anti-Facebook que é semelhante ao que vimos em relação a redes sociais mais recentes e recentemente tokenizadas.

Figura 10: Representação da rede social descentralizada idealizada na aplicação Diaspora.

DSNs (Filecoin / Swarm / Sia / Storj / Maidsafe)

A ideia por trás das redes de armazenamento descentralizadas é basicamente transformar o armazenamento em nuvem em um mercado algorítmico, incentivando os nós mineradores a compartilhar o espaço de armazenamento para serem recompensados em um token nativo. Incentivar é a palavra-chave aqui. No BitTorrent, nós já tínhamos algum tipo de sistema endereçado ao conteúdo, onde nós semeamos os arquivos dos outros. Além disso, já existia um mecanismo básico para o mecanismo tat para punir os nós mal comportados.

Há, sem dúivida, melhorias técnicas no BitSwap (módulo de troca de dados do IPFS) sobre o BitTorrent: não se está limitado ao pacote de dados no torrent original, mas é capaz de buscar blocos de arquivos completamente não relacionados e identificar com precisão o que está sendo fornecido ou solicitado, independentemente de ser uma parte de um arquivo, uma entrada de um conjunto de dados ou um grande conjunto de arquivos. A grande melhoria está em como isso é alcançado:

Fornecer as estruturas de dados e redes adequadas para interagir.

Criando um mercado descentralizado alimentado por um token nativo para o armazenamento e recuperação de pedaços de arquivos ou arquivos completos. Uma visão geral do esquema Filecoin (IPFS).

O primeiro item tem muitos exemplos vivos. Já o segundo tem poucas implementações de trabalho, e muitos projetos interessantes agora estão colhendo os frutos de pesquisas de ponta apoiadas por pesados financiamentos. É importante notar que soluções totalmente descentralizadas, como as que estão sendo desenvolvidas para rodar em IPFS e Swarm, por exemplo, ainda não estão perto de serem implementadas funcionalmente, embora as redes subjacentes estejam lá.

Prova de recuperabilidade, prova de armazenamento, prova de espaço-tempo são tópicos de pesquisa quentes que basicamente remontam à mesma questão: como recompensar os nós de espaço em disco e largura de banda de forma nativa, sem muita sobrecarga sobre as provas devem apresentar e de maneira confiável e eficaz? Com base nesses protocolos, os aplicativos podem reduzir os custos relacionados à distribuição e são induzidos a permitir a negociação direta entre os pares, o que leva a fluxos de valor descentralizados e ciclos de feedback saudáveis. O sucesso dos DSNs é fundamental para a disseminação de dApps e para acelerar a transformação gradual de modelos de negócios em modelos de incentivo de rede.

Figura 11: Estrutura da rede Filecoin, uma DSN.

Segurança em P2P

Como dito anteriormente, redes que adotam o protocolo P2P são robustas contra problemas externos, mas não citamos o que pode acontecer em relação a invasões do sistema e ataques de hackers. Existem várias formas de estruturar uma rede P2P e não há um esquema que seja particularmente mais seguro que os demais. Sabe-se que sistemas estruturados são mais resistentes a ataques que sistemas hierárquicos, porque os nós do primeiro nível oferecem grande vulnerabilidade a ataques de negação de serviço.

Um atacante participa de um overlay P2P conectando ao mesmo tempo um ou mais nós maliciosos. Tais nós, ao contrário dos corretos, param de seguir os protocolos de roteamento e manutenção do overlay. Tipicamente, assume-se que nós maliciosos possam fazer conluios para atacar um overlay P2P em conjunto. É possível que tais nós estejam geograficamente espalhados. Isso pode ser obtido, por exemplo, através da distribuição de software para acesso P2P contendo um cavalo de tróia. Em certos casos, o sistema de autenticação é fraco e um nó malicioso é capaz de obter para si múltiplos identificadores, permitindo a um único nó se passar por diferentes nós, estes nós virtuais são chamados de Sybil.

Redes P2P podem ser prejudicadas ao se reduzir a disponibilidade de acesso por parte dos usuários, isso pode ser feito por meio de ataques de roteamento e por meio de negação de serviço. Ataques DoS podem ocorrer em nível de rede e em nível de aplicação, sendo que no nível de rede se pode utilizar um ataque DoS convencional sobre uma máquina que executa um nó P2P. Uma forma de ataque DoS é fazer que um ou mais nodos maliciosos enviem muitas mensagens de busca, sobrecarregando o overlay P2P.

Essa classe de ataques são anomalias de roteamento em que mensagens transmitidas através do overlay são desviadas para longe de seu destino, para nodos maliciosos, ou descartadas. Este tipo de ataque aumenta a chance de falhas na busca, e possui impacto negativo no custo e desempenho do sistema. Para que este tipo de ataque ocorra, as informações de roteamento ou sobre outros nodos em nodos corretos são “envenenadas” por nós maliciosos. Isto ocorre, por exemplo, quando nodos maliciosos respondem com rotas incorretas a mensagens de busca.

O funcionamento eficiente e correto de um sistema P2P depende da participação voluntária de seus usuários. Quando os nodos de um sistema P2P não colaboram, as consequências são sérias e podem causar danos individuais a usuários ou mesmo levar o sistema ao colapso. Sistemas tradicionais assumem que usuários são “obedientes”, que aderem a um protocolo especificado sem questionar a utilidade do mesmo para si. Esta obediência não é uma premissa realística em sistemas P2P [Feldman and Chuang, 2005]. É necessário, portanto, que o sistema controle de certa maneira os nodos, responsabilizando-os pelas suas ações quando eles se recusam a colaborar, e recompensando-os quando colaboram adequadamente. Popularmente, nodos que usam muito mais recursos do que oferecem (quando oferecem) são conhecidos como free-riders ou “nós carona”. Estudos em [Adar and Huberman, 2000, Saroiu et al., 2002] mostram que free-riders são comuns em diversas aplicações P2P de compartilhamento de arquivos, e a explicação para tal fenômeno está relacionada à “Tragédia dos Comuns” [Harding, 1968], que argumenta que as pessoas tendem a abusar do uso de certos recursos se elas não têm que pagar por eles de alguma forma.Segundo [Marti and Garcia-Molina, 2006], nodos de um overlay P2P que não colaboram podem ser divididos em egoístas e maliciosos. O objetivo de egoístas é usufruir o máximo do sistema P2P contribuindo o mínimo de recursos para o mesmo. Em contraste,o objetivo dos maliciosos é causar mal a um dos nodos ou ao sistema como um todo,como explorado nas demais subseções deste capítulo. Nodos maliciosos estão dispostos a empregar recursos no ataque, tal como injetar arquivos corrompidos, o que não ocorre com nodos egoístas.

Figura 12: Ilustração com tema segurança na rede.

BitTorrent

Ocupando cerca de 53% de todo o tráfico P2P em Junho de 2004, o BitTorrent surgiu como uma aplicação de compartilhamento de arquivos entre usuários do mundo todo. Diferente de outras aplicações semelhantes, o BitTorrent é completamente descentralizado em termos posse de arquivo. Para baixar um dado arquivo, aqui chamado de torrent, o usuário deve contatar um tracker que é uma lista que é obtida através de compartilhamento direto entre os usuários que contém todos os outros “nós” que possuem ao menos em parte o arquivo desejado. Após contatar os outros nós, o usuário começa a baixar deles blocos que variam entre 32 e 256 kB de tamanho do arquivo. Desse modo, a distribuição do arquivo é feita inteiramente pelos vários usuários presentes na lista tracker. Isso foi a principal característica que levou ao sucesso do protocolo, visto que qualquer tipo de arquivo pode ser compartilhado com raras chances de rastreamento dos usuários e visto que não há um responsável central pela distribuição dos arquivos.

Aplicações Proprietárias

  • “Otimização de entrega”: Desenvolvido pela Microsoft, o sistema foi criado com o intuito de melhorar os downloads de atualizações em PCs. A Otimização funciona dividindo o download entre os próprios Data Centers da Microsoft e computadores que já possuem o pacote na mesma rede em que a máquina que está baixando a atualização. Desse modo, há uma redução em problemas de ping e banda que acometeriam o download caso o computador que estivesse baixando o arquivo estivesse distante ou tivesse uma conexão não confiável com a Microsoft;
  • Napster: Surgido como uma solução para compartilhamento descentralizado de arquivos entre os usuários, o Napster logo se tornou um lugar onde os usuários compartilhavam e baixavam músicas, filmes e jogos sem a necessidade de pagar por nada disso. Sua vantagem era a de conectar em um mesmo lugar um grande número de pessoas que possuíam um arquivo de modo que aqueles que procuravam por ele conseguissem facilmente achá-lo;
  • Skype: É considerado uma aplicação mista pois ainda usa o modelo cliente-servidor para que os usuários encontrem uns aos outros e sejam autenticados no processo. Os usuários mantém uma lista de conexões e seus caminhos. Ao conectar-se a outro usuários, basta apenas pesquisar nesta lista e estabelecer a conexão.

Conclusão

As aplicações baseadas em protocolos P2P são bastante democráticas tendo em vista ao seu baixo custo, se comparadas com implementações desenvolvidas com protocolos cliente-servidor. Devido ao fato de os usuários já possuírem as máquinas que são os nós e caminhos da rede. São robustas, sendo resistentes a problemas e acidentes externos como incêndios. Uma parte da rede cai, mas outros caminhos continuam existindo e assim o impacto é mínimo. Também, quando bem projetada, com o devido uso de ferramentas de autenticação confiáveis e grande números de usuários contribuintes, se mostra confiável contra ataques hackers. A arquitetura Peer-to-Peer é de fato uma ferramenta muito útil se bem aplicada.

Perguntas

Pergunta 1: Quais são as principais vantagens da arquitetura P2P? Explique.

Resposta:

Escalabilidade: cada nó utiliza recursos da rede mas também os fornece, assim, conforme mais nós são adicionados, a capacidade da rede se expande. Tolerância a falhas: mesmo que um nó da rede seja desconectado, o funcionamento da rede não é prejudicado. Redução de custo: não é necessária a aquisição de infraestrutura para garantir o funcionamento da rede, uma vez que ela é descentralizada.

Pergunta 2: Qual a vantagem do BitTorrent sobre programas como o napster?

Resposta:

Os arquivos são totalmente descentralizados, ficando de responsabilidade dos próprios usuários da rede; A distribuição homogênea do pacote é feita automaticamente pela própria aplicação; Há também o fato de não existir a necessidade de identificação do usuário ao entrar na rede, existe apenas a necessidade de possuir o arquivo (mesmo que apenas em partes).

Pergunta 3: O Bitcoin não foi projetado com o compartilhamento de arquivos em mente, mas acabou gerando uma classe de estrutura de armazenamento P2P. Por que?

Resposta:

O blockchain é um registro distribuído com uma finalidade diferente da DHTs (Tabelas hash distribuidas). Satoshi, o criador do Bitcoin, queria armazenar com cada nó um registro de transação sempre crescente, sem qualquer chance de adulteração e revisão. Já os DHTs visam fornecer uma estrutura eficiente (em termos de tempo de pesquisa e espaço de armazenamento) para dividir os dados em uma rede, em que a imutabilidade não é a principal prioridade. Com isso ele deu origem a classe de armazenamento descentralizado, que mais tarde deu origem às primeiras aplicações Blockchain não monetárias.

Pergunta 4: O que são DSNs e para que servem?

Resposta:

Esta é a sigla para Data Source Name, basicamente um arquivo cuja informação é um caminho para o local deste mesmo arquivo. É usado em redes de armazenamento descentralizadas, a ideia é basicamente transformar o armazenamento em nuvem em um mercado algorítmico, incentivando os nós mineradores a compartilhar o espaço de armazenamento para serem recompensados em um token nativo, moedas digitais como o bitcoin.

Pergunta 5: Quais os dois tipos de ataques mais comuns a redes P2P? O que se pode fazer para aumentar a resistência da rede a este tipo de ataque?

Resposta:

Ataque de negação de serviço e ataque de roteamento são os mais comuns. Para aumentar a resistência da rede baseada em P2P a esse tipo de ofensiva é preciso mantê-la como um sistema estruturado em que todos os pares são de mesmo nível e não ter um sistema parcialmente hierárquico. Também é necessário que os mecanismos de autenticação de usuário tenham mais níveis de validação, além da exigência de uma senha forte por exemplo. Um sistema de validação de nó confiável, de preferência com uma agência de validação é outra medida que afere robustez a rede.

Bibliografia

  1. MACKIE, Kurt. Microsoft Clarifies Windows 10 ‘Delivery Optimization‘. 2016. Disponível em: https://rcpmag.com/articles/2016/08/16/windows-10-delivery-optimization.aspx. Acesso em: 8 maio 2019.
  2. TYSON, Jeff. How the Old Napster Worked. 2000. Disponível em: https://computer.howstuffworks.com/napster.htm. Acesso em: 08 maio 2019.
  3. BASET, Salman A.; SCHULZRINNE, Henning. An analysis of the skype peer-to-peer internet telephony protocol. arXiv preprint cs/0412017, 2004.
  4. BHARAMBE, Ashwin R.; HERLEY, Cormac; PADMANABHAN, Venkata N. Analyzing and improving bittorrent performance. Microsoft Research, Microsoft Corporation One Microsoft Way Redmond, WA, v. 98052, p. 2005-03, 2005.
  5. KUROSE, James F.; ROSS, Keith W. Computer networking: a top-down approach. 6th ed. Pearson; 2013.
  6. WIKIPEDIA, Asymmetric digital subscriber line. Disponível em: https://en.wikipedia.org/wiki/Asymmetric_digital_subscriber_line. Acesso em: 08 maio 2019.
  7. Histórico traduzido e modificado de Medium, A Brief History of P2P Content Distribution, in 10 Major Steps. Disponível em: https://medium.com/paratii/a-brief-history-of-p2p-content-distribution-in-10-major-steps-6d6733d25122. 25 de outubro de 2017.
  8. Extraído e modificado de lume.ufrgs, Segurança em Redes P2P: Princípios, Tecnologias e Desafios. Disponível em: https://www.lume.ufrgs.br/bitstream/handle/10183/7510/000546396.pdf. Data de publicação desconhecida.