Gnutella

Origem: Wikipédia, a enciclopédia livre.

Gnutella é uma rede de compartilhamento de arquivos usada principalmente para a troca de músicas, filmes e softwares. É uma verdadeira rede peer-to-peer, ou seja, opera sem um servidor central. Os arquivos são trocados diretamente entre os usuários.

O software cliente Gnutella conecta-se à rede e compartilha arquivos. As pesquisas são passadas de um nó para o outro circularmente. Clientes Gnutella estão disponíveis em várias plataformas.

De acordo com o extinto site de compartilhamento de arquivos Sklick.com, a Gnutella é a segunda rede de troca de arquivos mais popular da Internet, perdendo apenas para a eDonkey 2000.

História[editar | editar código-fonte]

O primeiro cliente foi desenvolvido por Justin Frankel e Tom Pepper, da Nullsoft, no início do ano 2000, logo após a aquisição da companhia pela AOL. Em 14 de março, o programa se tornou disponível para download dos servidores da Nullsoft. O evento foi prematuramente anunciado no Slashdot, e milhares de usuários baixaram o programa naquele dia. O código-fonte seria liberado mais tarde, supostamente sob licença GPL (GNU General Public License).

No dia seguinte a AOL tirou do ar a disponibilidade de download do software por causa de interesses legais e proibiu a Nullsoft de fazer quaisquer tipos de avanços no projeto. Isso não parou a Gnutella. Após alguns dias, o protocolo passou por um processo de engenharia reversa, e clones compatíveis de código aberto começaram a aparecer. Este desenvolvimento em paralelo de diferentes clientes por diferentes grupos é que mantém em operação o desenvolvimento do Gnutella hoje.

A rede Gnutella é uma alternativa completamente distribuída para sistemas semi-centralizados, como KaZaA, e sistemas centralizados, como Napster. A popularidade inicial da rede foi acelerada pela ameaça legal de morte do Napster no início de 2001. Esta onda crescente de popularidade revelou os limites de escalabilidade do protocolo inicial. No início de 2001, variações do protocolo (primeiro implementado em clientes de código proprietário) permitiram uma melhora na escalabilidade. Em vez de tratar todo usuário como cliente e servidor, alguns usuários passaram a ser tratados como "ultrapeers", direcionando requisições de busca e respostas para usuários conectados a eles.

Isto permitiu a rede a crescer em popularidade. Na segunda metade de 2001, o cliente Gnutella LimeWire tornou-se código aberto. Em fevereiro de 2002, o Morpheus, um grupo comercial de compartilhamento de arquivos, abandonou o seu software peer-to-peer baseado no FastTrack e lançou um novo cliente baseado no Gnucleus, que era um software de código aberto compatível com Gnutella.

A palavra "Gnutella" não se refere a algum projeto ou software, mas ao protocolo aberto usado por vários clientes. Já que vários desenvolvedores estão criando novos clientes, e o protocolo provavelmente continuará a evoluir, é difícil dizer o que a palavra 'Gnutella' significará no futuro.

O nome é uma fusão de Gnu e Nutella: supostamente, Frankel e Pepper comeram uma grande quantidade de Nutella enquanto trabalhavam no projeto original, e pretendiam lançar o seu programa finalizado sob licença GNU General Public License. Gnutella não está associado ao Projeto GNU.

Como funciona[editar | editar código-fonte]

Para entender como o Gnutella funciona, imagine um grande círculo de usuários (chamados nós), onde cada um possui um cliente Gnutella. O software cliente no seu uso inicial precisa encontrar pelo menos um dos outros nós. Métodos diferentes vêm sendo usados para isto, o que pode incluir uma lista preexistente de endereços de nós possivelmente ativos enviada com o software, o uso de sites Gwebcache para encontrar nós, como também o uso de IRC para encontrar nós. As chances são de que ao menos um nó (que chamaremos de B) irá funcionar. Uma vez conectado, o nó B enviará ao nó A sua própria lista de nós ativos. O nó A tentará se conectar aos nós de sua lista, assim como aos nós das listas que recebe de outros nós, até alcançar uma certa cota, normalmente classificável por usuário. Se conectará apenas a esses nós, mantendo os nós que ainda não foram tentados e descartando os nós que foram tentados mas não funcionaram.

Agora, quando o usuário A quer fazer uma busca, ele envia o pedido para cada um dos nós aos quais ele está ativamente conectado. É possível que alguns deles não esteja mais funcionando. Nesse caso o usuário A tentará se conectar aos nós que ele salvou como backup. O número de nós ativamente conectados para o usuário A é normalmente bem pequeno (em torno de 5), então cada nó reenvia o pedido para todos os outros nós aos quais estão conectados. Estes, por sua vez, repassam o pedido e assim por diante. Teoricamente, o pedido irá alcançar todos os usuários da rede Gnutella. Como o tamanho da rede Gnutella tem crescido e seus desenvolvedores têm lutado contra o excesso de tráfego, o tempo de procura global da rede tem se depreciado.

Se um pedido de busca retornar um resultado, o nó que obteve o resultado contata o que fez a busca direta ou indiretamente. Se o nó que enviou o pedido de busca não estiver por trás de um Firewall, o nó com o resultado retorna o resultado diretamente. Se o nó que enviou o pedido de busca estiver por trás de um firewall (muitos estão), então o resultado é (indiretamente) direcionado. Depois que o resultado é retornado, eles negociam a transferência do arquivo e os procedimentos de transferência. Se mais de uma cópia do mesmo arquivo for encontrada, o buscador pode realizar um download em grupo. Partes do arquivo são baixadas de nós diferentes a la BitTorrent. O resultado são altas taxas de transferência.

Finalmente, quando o usuário A desconecta, o software cliente salva a lista de nós aos quais ele estava conectado e a que estava mantendo como backup para usar da próxima vez que se conectar.

Na prática, uma procura na rede Gnutella é frequentemente pouco confiável. Cada nó é um usuário de computador, portanto eles estão constantemente conectando-se e desconectando-se, o que faz com que a rede nunca fique completamente estável. Como o tamanho da banda de cada usuário é limitada, alguns pedidos de busca podem ser interrompidos antes de alcançarem toda a rede. Como resultado, a maioria das buscas nunca alcançarão mais de 50% da rede.

O real benefício de se ter a Gnutella tão descentralizada é fazer com que seja muito difícil da rede cair. Diferente do Napster, onde a rede inteira depende de um servidor central, a rede Gnutella não cai ao se desligar qualquer um dos nós. Como é preciso ter pelo menos dois usuários, a Gnutella continuará existindo.

Características do protocolo e extensões[editar | editar código-fonte]

Gnutella opera em um protocolo de fluxos de pedidos. A versão ultrapassada 0.4 de Gnutella emprega cinco tipos de pacotes diferentes, chamados:

  • ping: descobre servidores na rede
  • pong: responde a ping
  • query: procura por um arquivo
  • query hit: responde a query
  • push: solicitação de download para um nó situado atrás de um firewall

Eles estão principalmente interessados na busca da rede Gnutella. As transferências de arquivos são feitas usando HTTP.

O desenvolvimento do protocolo Gnutella é atualmente liderado pelo GDF (Gnutella Developer Forum). Muitas extensões de protocolo foram e estão sendo desenvolvidas pelos fornecedores de software e pelos desenvolvedores Gnutella do GDF. Essas extensões incluem direcionamento inteligente de requisições, controle SHA-1, query hit transmission via UDP, requisições via UDP, requisições dinâmicas via TCP, transferência de arquivos via UDP, meta dados XML, troca de fontes e download pararelo em pedaços.

Existem esforços para finalizar essas extensões de protocolo na especificação Gnutella 0.6 no site de desenvolvimento do protocolo Gnutella. O padrão Gnutella 0.4, apesar de ainda ser a última especificação do protocolo já que todas as extensões só existem como propostas, está desatualizado. De fato, vai de difícil a impossível conectar hoje com o padrão 0.4.

O protocolo Gnutella continua em desenvolvimento e ainda existem tentativas de fazer uma limpeza na complexidade herdada do Gnutella 0.4 e criar uma arquitetura nova e limpa (tal como Gnutella2). Apesar disso, ainda é um dos protocolos de compartilhamento de arquivos de maior sucesso até hoje.

Software[editar | editar código-fonte]

Nome Plataforma Licença
Acquisition Mac OS X software proprietário
Acqlite Mac OS X GNU GPL
AlterGalaxy Microsoft Windows freeware
Apollon (GUI) Unix-like/KDE GNU GPL
BearShare Microsoft Windows software proprietário
Cabos Java GNU GPL
CocoGnut RISC OS freeware
DM2 Microsoft Windows freeware
FrostWire Java GNU GPL
giFT Unix-like, Microsoft Windows, Mac OS X, AmigaOS GNU GPL
Gnucleus Microsoft Windows GNU GPL, GNU LGPL
Gtk-gnutella Unix-like GNU GPL
Gluz Java software proprietário
iMesh Microsoft Windows software proprietário
KCeasy Microsoft Windows GNU GPL
Kiwi Alpha Microsoft Windows software proprietário
LimeWire Java GNU GPL
MLdonkey Unix-like, Microsoft Windows, Mac OS X, MorphOS GNU GPL
Morpheus Microsoft Windows software proprietário
Mutella Unix-like GNU GPL
Phex Java GNU GPL
Poisoned Mac OS X GNU GPL
Qtella Unix-like GNU GPL
Shareaza Microsoft Windows GNU GPL
Swapper.NET Microsoft Windows software proprietário
Symella SymbianOS GNU GPL
XFactor Mac OS X Código aberto
XNap Java GNU GPL
XoloX Microsoft Windows software proprietário

Ver também[editar | editar código-fonte]

  • Kad network, rede semelhante à Gnutella, desenvolvida pelos criadores do eMule
  • GnuFU, Gnutella For Users: Um descritivo dos trabalhos internos da rede Gnutella em um estilo mais amigável para o usuário
  • WASTE, uma rede diferente, desenvolvido por Justin Frankel
  • Freenet, uma rede diferente com foco no anonimato

Ligações externas[editar | editar código-fonte]

Ícone de esboço Este artigo sobre redes de computadores é um esboço. Você pode ajudar a Wikipédia expandindo-o.