Redes P2P
VoltarAvançar
Gnutella
 
 

Redes P2P > Sistemas > Gnutella >> eMule

Gnutella

GNUTELLA

I - Histórico

           O Gnutella (neologismo proveniente da junção de GNU – de GNU General Public License – com Nutella, sobremesa da Ferrero feita de chocolate com avelãs) surgiu em março de 2000, criado por Justin Frankel e Tom Pepper, da Gnullsoft, também criadores do Winamp, e foi desenvolvido em apenas 14 dias, como um experimento. Inicialmente tinha por objetivo compartilhar receitas culinárias. Porém, a AOL (America Online), que comprou a companhia, descontinuou o desenvolvimento do mesmo por seu envolvimento com a indústria fonográfica (o caso Napster já estava em discussão).

            Foi então que desenvolvedores de software livre intervieram: Bryan Mayland realizou a engenharia reversa do programa e Ian Hall-Beyer e Nathan Moinvaziri criaram um site e um canal de IRC com toda a documentação necessária, com o objetivo de buscar novos desenvolvedores.

            Desde então, o Gnutella tem evoluído mais como uma rede do que um software propriamente, visto que existem atualmente vários softwares clientes que o utilizam, como o LimeWire e o Phex (com versões para Windows, Mac e Linux), o Morpheus e o BearShare (para Windows), o Mutella e o Qtella (para Linux). Só o Limewire contabiliza em média 1,5 milhão de usuários por dia (http://www.limewire.com/english/content/uastats.shtml).

II – Roteamento

           O protocolo Gnutella restaura a simetria original da Web, capacitando mesmo os computadores transitórios a participar efetivamente como servidores. A relação entre Gnutella e a Web é portanto bastante simples: embora transitórios, os hosts da Gnutella são Websites, e baixar um arquivo de um host Gnutella é tecnicamente equivalente a buscar um arquivo em um Website. A maioria das aplicações Gnutella combina a funcionalidade de servidores e clientes num pacote chamado 'servent'. Mesmo os usuários que não disponibilizam arquivos para compartilhamento, e que apenas usam Gnutella para fazer buscas e baixar arquivos, disponibilizam Websites (vazios) quando rodam seus servents. (Truelove, 2001, s.p.)

            A rede Gnutella cria uma camada de aplicativo sobre a Internet e muda constantemente sua infra-estrutura. Seu funcionamento é descentralizado, e se baseia no princípio de que o nó se conecta a um host qualquer e a partir daí faz parte da rede. Além disso, todo nó é cliente, servidor e a própria rede. Dessa forma, qualquer um que participe da rede contribui, mesmo que seja apenas com a banda passante para que os dados trafeguem de um nó para outro.

            Diferentemente de outras redes em nível de aplicativo, o Gnutella não é baseada em circuitos e sim em mensagens. Ou seja, não se cria um circuito virtual persistente que manterá a conexão entre dois nós, dando uma topologia interconectada e redundante à rede.

            Além disso, outra grande diferença é que, apesar de ser baseado em TCP, o Gnutella não faz unicast, mas broadcast para realizar uma comunicação. A junção dessas duas características gera o que é chamado de Broadcasting de Mensagens, que é útil em casos onde redes diferentes geram resultados válidos para a mesma busca.

            Para evitar que essas mensagens fiquem eternamente na rede, elas recebem um UUID (universal unique identifier) de 128 bits que é memorizado quando a mensagem passa por um host e, caso ela passe por ele novamente não será retransmitida. Outra alternativa é o uso de TTL (time-to-live), uma espécie de bomba relógio. Quando a mensagem é criada ela recebe TTL 7. A cada host que é transmitida, o TTL é decrementado e, quando atinge 0, o pedido não é mais retransmitido.

            O Broadcasting de Mensagens é útil para buscas, mas não para respostas. Para isso, foi criado o roteamento dinâmico. Como já citado, ao passar por um host a mensagem tem seu UUID armazenado. Assim, quando um host tem a resposta necessária,  ele vai enviar apenas para o host que lhe enviou (ou repassou o pedido), repetindo-se isso sucessivamente até a resposta chegar à origem do pedido. Para evitar conflitos, quando um nó sai da rede todas as informações referentes a ele presentes em outros nós são apagadas.

            Um aspecto interessante da rede Gnutella é que, apesar de usar o TCP (que é normalmente confiável), ela não tem sempre essa característica. Quando o tráfego é maior do que a banda permite, os pacotes excedentes não são armazenados, fazendo com que haja perdas. Isso é feito para que a natureza de quase-tempo-real da rede não se perca. Essa característica gera também um problema quando nós muito lentos se conectam a nós muito rápidos, fazendo com que ao receber mais informação do que sua capacidade, boa parte da informação se perde antes mesmo de ser entregue. Um lado positivo disso é a possibilidade de identificar se essa perda é grande constantemente, possibilitando reorganizar a rede, de forma a melhorar o tráfego.

            Para evitar esse tipo de problema e os gargalos de baixa velocidade que ocorrem em uma rede desse tipo, a organização da rede Gnutella não é feita geograficamente, mas de acordo com a velocidade da conexão. Ao se conectar pela primeira vez, um nó se encaixa em uma parte aleatória da rede. Após a constatação da velocidade média de conexão daquele nó, ele é movido para uma parte da rede mais adequada a sua velocidade. Assim, cria-se um backbone com nós extremamente rápidos (conexões a fibra óptica, por exemplo), localizados no centro da rede, e há a redução gradual das velocidades de conexão até se chegar às bordas, com conexões lentas (discadas, por exemplo).

III – Mecanismo de busca          

            O Gnutella trabalha com mensagens do tipo Ping, Pong, Query, Query Hit e Push. O Ping é utilizado para descobrir informações sobre outros nós da rede (contém o TTL e o número de hosts pelos quais passou). O Pong é a resposta a essa mensagem, e contém a porta a ser utilizada na conexão, o IP do nó, um contador do número de arquivos compartilhados e o tamanho total de dados que ele possui. A Query é a mensagem de busca, e contém a velocidade mínima de conexão e a busca propriamente dita. O QueryHit é a resposta positiva a uma busca, e é composta pelo número de arquivos correspondentes à busca, o IP do nó que enviará o arquivo, o número da porta de conexão, a velocidade de transferência do nó, um campo de detalhes do arquivo e o PeerID (que identifica o nó na rede). Por fim, há o Push, que é o tipo de mensagem utilizada para que o Firewall permita o tráfego de mensagens de troca de arquivos, contendo o PeerID (recebido no QueryHit), o File Index (descrição de qual o arquivo a ser baixado dentre as opções recebidas no QueryHit), o número de IP do receptor e o número da porta de conexão do receptor. Uma busca é realizada na ordem apresentada acima, mostrada na figura a seguir:

Extraído de: www.tml.tkk.fi/Studies/T-111.590/2004/papers/ContentSearchinAd-hocP2P-networks.pdf

           O Gnutella apresenta como característica a Inteligência Distribuída, ou seja, cada cliente interpreta as buscas à sua maneira, seja apenas pelo nome do arquivo, pelo seu conteúdo ou por algum metadado (como o ID3 Tag, por exemplo), sendo todas as respostas referentes a essa busca consideradas válidas. Assim, pode-se, por exemplo, realizar uma busca por uma equação e obter como resultado uma imagem, um arquivo ou até mesmo uma página html com a resposta da equação, calculada pelo nó calculadora (uma calculadora online que se comunica também pelo Protocolo Gnutella).

            Outra característica da rede Gnutella é o conceito de horizonte. Como já citado, toda busca recebe um TTL que restringirá sua circulação pela rede, de forma que se cria um "horizonte", que nada mais é que a área até onde um nó tem conhecimento da rede que o cerca. Assim, evita-se um tráfego desnecessário pela rede. Esse modo de organizar a rede permite que cada nó "enxergue" aproximadamente 10 mil outros nós (Oran, 2001, p. 72)

            Restringindo o horizonte de acesso aos dados, a localização do usuário e a largura de banda de sua conexão conformam um padrão em que “a maior parte do tráfego P2P permanece dentro de uma área geográfica específica” (Gordon e Malecki, 2002, p. 405). As formas de definição do raio de alcance e as altíssimas demandas impostas à infra-estrutura da rede ajudam a compreender, ainda, porque metade das buscas na rede Gnutella são respondidas por apenas 1% dos 'servents' (Gordon e Malecki, 2002, p. 403).

Redes P2P > Sistemas > Gnutella >> eMule

 

VoltarAvançar