|
Universidade
Federal do Rio de Janeiro
Departamento de Engenharia Eletrônica e de Computação
Disciplina: Redes de Computadores I
Professor: Otto Carlos M. B. Duarte
Aluno: Gabriel Barros Durante
|
|
Este trabalho contém
diversas seções a respeito de várias áreas da tecnologia e arquitetura
Peer-to-Peer (P2P). A rede peer-to- peer (P2P) difere da rede cliente/servidor convencional
porque seus métodos envolvem sistemas servindo outros sistemas. Em redes P2P cada
estação possui as mesmas capacidades e responsabilidades.
Com o aparecimento
do Napster foi dada maior atenção à tecnologia P2P e com isso um
grande número de redes foi surgindo. Logo, diversos estudos relacionados às redes P2P
como, arquiteturas de rede, mecanismos de procura, roteamento e segurança entre vário
outros também apareceram. Este trabalho tem o objetivo de comentar as principais tecnologias
a respeito das redes P2P, assim como suas principais ferramentas.
|
|
As redes Peer-to-Peer
(P2P) atraem muita atenção da comunidade de Rede de
computadores, apesar de haver uma discordância à respeito do seu significado. A tecnologia
P2P promete alterar o futuro das redes, porém seu conceito já existe há muitos anos.
Cresce
também as questões de interesse cultural, como no caso do Napster, apesar das políticas
de
livre arquitetura de rede. Aparentemente esses paradoxos apenas acrescentam mais misticismo
que ronda o assunto P2P.
Um tipo de
rede de computadores onde cada estação possui capacidades e
responsabilidades equivalentes. Isto difere da arquitetura cliente/servidor, no qual alguns
computadores são dedicados a servirem dados a outros.
Esta definição
captura o significado tradicional da rede Peer-to- Peer. Computadores de um
determinado grupo, ou computadores domésticos, são configurados para compartilhar
recursos como arquivos e impressoras, Embora um computador possa atuar como servidor de
arquivos ou de impressora a qualquer momento, todos os computadores da rede geralmente
podem realizar essas funções por um curto período. Em particular, os computadores poderão
estar situados fisicamente à uma distância curta uns dos outros e poderão protocolos
de rede.
Uma boa proposta
técnica para P2P tem sido feita por Dave Winer da UserLand Software.
Dave sugeriu que os sistemas P2P envolvam essas sete características chave:
|
|
A história
das redes P2P não pode ser contada sem mencionarmos o Napster. O Napster se
tornou o mais popular sistema P2P quase que da noite para o dia.
Tudo começou
em 1999 quando o estudante de 18 anos, Shawn Fanning, deixou a faculdade
no primeiro semestre para se dedicar ao Napster. O Napster se tornou o software de
crescimento mais rápido de toda a história da Internet.
A idéia que
fez com que o Napster se tornasse esse fenômeno foi o fato de que fornecer P2P
gratuitamente a todos. Bastava baixar o software pela Internet, instalar e procurar por uma
música para obtê-la gratuitamente. No entanto o rápido crescimento do Napster se tornou
uma
grande preocupação para as empresas Fonográficas ao redor do mundo, e em 13 de abril
de
2000, logo após o lançamento de seu último álbum a banda Metallica abre um processo
contra
o Napster por ter infringido a lei de direitos autorais. Após uma longa batalha judicial as partes
chegam a um acordo em 25de setembro de 2001. O Napster deverá para 26 milhões de
dólares para autores e gravadoras, além de uma porcentagem de tudo o que o sistema
arrecadar até o início de 2003.
Desde o aparecimento
do Napster, muitos outros sistemas P2P surgiram como Gnutela,
KaZaa e WinMP e o mundo do P2P passou a ser muito mais do que a troca de músicas no
formato MP3.
|
|
O número de
usuários de tecnologia P2P tem crescido exponencialmente desde o surgimento
do Napster. O vazio deixado pelo Napster foi preenchido por diversas companhias/aplicativos
como KaZaa e o Gnutela. Tem se verificado que o tráfego referente a estes dois aplicativos
tem sido da ordem de 40% a 60% de todo o tráfego da Internet. Diferentemente das técnicas
centralizadas do Napster, os novos aplicativos tem adotado um abordagem descentralizada,
fazendo com que o controle à esses sistemas seja muito mais difícil.
Ao longo desses
anos tem se verificado que diversas companhias tradicionais de grande porte
têm tentado aproveitar o grande potencial da tecnologia P2P. Dois grandes exemplos são a
Deloitte Touche Tomatsu e a Intel. Central de Banco de Dados não é mais necessária quando
se usa P2P. Isso significa que a escalabilidade se torna mais barata e muito mais rápida. A Intel
utiliza redes P2P desde 1992 privando-se então da utilização de grandes servidores. Bancos
de dados tradicionais ainda são largamente utilizados, porém cada vez mais empresas tomam
Intel como exemplo e logo todos os bancos de dados tradicionais serão substituídos por redes
P2P.
Uma grande virada
no desenvolvimento de redes P2P aconteceu quando recentemente a
Microsoft anunciou o investimento de 51 milhões de dólares numa companhia chamada
Groove Networks. Quem está a frente desta empresas é Ray Ozzie, o inventor do Lotus Note.
A Groove Networks está implementando uma técnica híbrida no seu desenvolvimento de P2P.
Isto significa que a empresa utilizará tanto técnicas de descentralização quanto
de centralização
esperando pegar o melhor dos dois mundos.
O desenvolvimento
de tecnologias P2P tem sido impedido por várias questões legais. Os
softwares como KaZaa tem aprendido com o exemplo do Napster a ter maiores proteções
legais. Eles argumentam que não são responsáveis por nenhuma atividade ilegal que seja
realizada por meio do aplicativo. Existem muitos argumentos legais que atribuídos ao uso de
redes P2P e isto pode garantir o seu futuro. Porém existe o problema da troca ilegal de
arquivos de multimídia. Até o momento não existe solução para o problema, mas
as pesquisas
avançam nesta direção.
Como muitos estão
expostos ao risco, as empresas Fonográficas estão atualmente procurando
um meio de impedir que as pessoas utilizem o aplicativos de trocas ilegais de arquivos. A
natureza destes sistemas permite que as gravadoras possam atacar de dentro. Criando seus
próprios pseudo- usuários que compartilham arquivos corrompidos ou com nomes que
confundam os outros usuário, ou sobrecarregando as redes com
suas próprias consultas. No
entanto a legalidade dessas ações está sendo questionada. É sugerido que os usuários
sejam
processados aleatoriamente, ou então que sejam identificados os usuários mais pesados, os
chamados fornecedores. Estas medidas parecem, nos dias de hoje, serem as mais aceitas para se
impedir esse tipo de ação.
|
|
É difícil
prever qual o futuro do P2P enquanto não for determinada a situação legal não se
tornar clara. As companhias terão que gastar muitos recursos para se protegerem dos
processos legais. Sempre haverá troca ilegal de arquivos e quebra de direitos autorais, porém
essas ações acontecerão sempre nas periferias. Qualquer sistema que se torne muito grande
terá mesmo fim que teve o Napster. A não ser que ele seja tão descentralizado e anárquico
que nenhum usuário possa ser responsabilizado. Muitos dependem de legislações de
responsabilidades dos governos a respeito do P2P. Enquanto isso o fardo de impedir as
quebras de direitos autorais cai nas mãos dos desenvolvedores de sistemas P2P ou dos
usuários. O P2P também se expandirá além do PC e aparecerá nos PDA´s e
telefones
celulares com acesso à Internet.
Uma das questões
que deverão ser abordadas no futuro é a questão dos freeloaders
usuários que obtém algum tipo de recurso do sistema P2P, mas não contribui. De acordo
com
pesquisadores da Xerox PARC, 70% dos usuários não contribui com nenhum recurso,
enquanto 1% dos pares (peers) é responsável por 50% das cargas. Em um sistema gratuito,
aberto e sem obrigações sempre existirão usuários que sempre irão pegar,
mas nunca
contribuir. Quanto ao compartilhamento de banda em uma rede P2P, modelos tradicionais
de gerenciamento de recursos necessariamente não utilizam nenhuma ferramenta que realize
essa função porque a banda é reabastecida periodicamente e a banda não
utilizada não pode
ser armazenada.
Uma proposta para
sistemas P2P é utilizar alguma forma de moeda digital para beneficiar os
usuários mais robustos ajudar a diminuir de alguma forma a existência dos freeloaders.
No
caso do MojoNation [OR] é criado um mercado digital no qual os usuários que possuem
o
maior número de arquivos para compartilhamento são beneficiados com o mojo, uma
espécie de incentivo interno, e quanto mais arquivos compartilhados forem consumidos
mais
mojo é ganhado. Sempre haverá uma maneira tecnológica de se conseguir algo sem pagar.
Esses sistemas tem que botar fé na própria moeda e na massa crítica de usuários,
o que a
MojoNation ainda falta atingir. Além disso, dissuadindo os freeloaders poderemos
desencorajar o crescimento da rede e melhorar potencialmente os usuários mais freqüentes.
Outro problema
a ser enfrentado é a confiança de que um dos maiores problemas na
comunidade da Internet como, spammers, crackers e coisas do tipo não atinjam
as redes
P2P. Sua natureza aberta as tornam alvos fáceis. Qualquer um pode se juntar à rede e se seus
pares não puderem confiar na rede eles não irão usá-la. Permitir o acesso de estranhos à sua
rede doméstica pode provar ser uma má idéia.
A busca é
uma área definida na qual o P2P prosperará muito no futuro. As redes P2P
permitem que uma consulta seja enviada a certo número de máquinas. Se a consulta inicial não
tiver sucesso, a consulta é passada por cada uma das máquinas iniciais para tantas outras
máquinas posteriores. Assim a área de busca cresce exponencialmente até que a busca forneça
um resultado. Este processo elimina a necessidade de grandes centrais de mecanismos de
busca.
Os grandes como
a Intel, Microsoft e Xerox têm estressado o potencial das redes P2P e a
probabilidade é que ela continue a ser adotada por grandes negócios como uma maneira mais
barata de armazenar e compartilhar arquivos internamente. É como se as companhias
tradicionais fossem abraçar e realçar (embrace and enhance) o P2P ao invés
de tentar (em
vão) sufocá-lo. O futuro do P2P pode vir a aparecer de uma idéia original e crescer assim
como aconteceu com o Napster. Porém é mais provável que as grandes empresas explorem
qualquer possibilidade que possa vir a ter o P2P e tirar alguma vantagem disso. De qualquer
maneira, o futuro do P2P existe e estará disponível tão quanto for possível.
|
|
|
|
|
|
A internet nasceu
como um sistema P2P no final da década de 1960 para compartilhar
recursos entre computadores dentro dos Estados Unidos. No início os principais usuários eram
pesquisadores que não precisavam de nenhuma espécie de proteção entre eles e servidores
de
proxy e firewall praticamente não existiam fazendo com que a Internet fosse muito menos
particionada do que é hoje. Entretanto em 1994 a estrutura da Internet mudou drasticamente
com milhões de pessoas aderindo à rede. Protocolos de conexão de Modem como SLIP e
PPP foram largamente utilizados. Aplicações como os navegadores de Internet são baseados
no protocolo cliente-servidor. A estrutura da Internet mudou do modelo P2P para o modelo
cliente-servidor.
Entretanto muitas
aplicações ainda utilizam o modelo P2P. Uma de grande sucesso foi o
Napster. Criado pelo estudante Shawn Fanning de 19 anos da Universidade Northeastern em
Boston, Tudo começou quando seu colega de quarto começou a reclamar dos links
quebrados de MP3 espalhados pela rede e então veio a idéia do Napster. Fanning disse: Eu
tive essa idéia de que existia um monte de material parado nos discos rígidos das pessoas
e eu
tinha que pensar numa maneira de ir lá e pegá- los.. Ele queria encontrar um caminho
fácil
para que as pessoas que escutam músicas no formato MP3 pudessem trocar suas músicas
favoritas através da Internet. Ele conhecia o bastante de programação UNIX e sabia que
o
objetivo era alcançável e dedicou todo o seu tempo e esforço para conseguir seu objetivo.
Toda a concepção do projeto o tomou pro completo e ele teve que largar a universidade para
terminar seu trabalho. Uma vez completo, o Napster se tornou um grande sucesso e foi um dos
site de maior crescimento de toda história da Internet.
Antes do Napster
havia alguns sites que disponibilizavam musicas no formato MP3 porém
quando havia alguma atualização do site era difícil encontrar as músicas que se
queriam pois a
maioria dos sites não possuíam muita capacidade de armazenamento, e por isso os links que
apontavam para algumas músicas já não serviam pois o arquivo tinha sido substituído
por
outro. Outro problema era que não se sabia quando um novo arquivo seria disponibilizado.
Como Napster esses problemas foram solucionados. Os link provenientes de uma busca pela
música desejada eram todos funcionais. E qualquer atualização também era fornecida
pela
busca. Os Servidores do Napster lidavam com a transferência dos arquivos entre os clientes,
porém não os armazenavam. O protocolo de rede do Napster criava um acesso P2P entre
seus clientes. A simplicidade de uso que o P2P fornece fez com que o Napster e outros
sistemas que o utilizam tivessem enorme sucesso.
|
|
A internet nasceu
como um sistema P2P no final da década de 1960 para compartilhar
recursos entre computadores dentro dos Estados Unidos. No início os principais usuários eram
pesquisadores que não precisavam de nenhuma espécie de proteção entre eles e servidores
de
proxy e firewall praticamente não existiam fazendo com que a Internet fosse muito menos
particionada do que é hoje. Entretanto em 1994 a estrutura da Internet mudou drasticamente
com milhões de pessoas aderindo à rede. Protocolos de conexão de Modem como SLIP e
PPP foram largamente utilizados. Aplicações como os navegadores de Internet são baseados
no protocolo cliente-servidor. A estrutura da Internet mudou do modelo P2P para o modelo
cliente-servidor.
Entretanto muitas
aplicações ainda utilizam o modelo P2P. Uma de grande sucesso foi o
Napster. Criado pelo estudante Shawn Fanning de 19 anos da Universidade Northeastern em
Boston, Tudo começou quando seu colega de quarto começou a reclamar dos links
quebrados de MP3 espalhados pela rede e então veio a idéia do Napster. Fanning disse: Eu
tive essa idéia de que existia um monte de material parado nos discos rígidos das pessoas
e eu
tinha que pensar numa maneira de ir lá e pegá- los.. Ele queria encontrar um caminho
fácil
para que as pessoas que escutam músicas no formato MP3 pudessem trocar suas músicas
favoritas através da Internet. Ele conhecia o bastante de programação UNIX e sabia que
o
objetivo era alcançável e dedicou todo o seu tempo e esforço para conseguir seu objetivo.
Toda a concepção do projeto o tomou pro completo e ele teve que largar a universidade para
terminar seu trabalho. Uma vez completo, o Napster se tornou um grande sucesso e foi um dos
site de maior crescimento de toda história da Internet.
Antes do Napster
havia alguns sites que disponibilizavam musicas no formato MP3 porém
quando havia alguma atualização do site era difícil encontrar as músicas que se
queriam pois a
maioria dos sites não possuíam muita capacidade de armazenamento, e por isso os links que
apontavam para algumas músicas já não serviam pois o arquivo tinha sido substituído
por
outro. Outro problema era que não se sabia quando um novo arquivo seria disponibilizado.
Como Napster esses problemas foram solucionados. Os link provenientes de uma busca pela
música desejada eram todos funcionais. E qualquer atualização também era fornecida
pela
busca. Os Servidores do Napster lidavam com a transferência dos arquivos entre os clientes,
porém não os armazenavam. O protocolo de rede do Napster criava um acesso P2P entre
seus clientes. A simplicidade de uso que o P2P fornece fez com que o Napster e outros
sistemas que o utilizam tivessem enorme sucesso.
|
|
Primeiramente cada
computador deveria ter o Napster instalado no seu computador. Uma vez
acionado o programa verifica a conexão com a Internet. Se existir a conexão com a Internet
o
computador se conecta com o servidor central do Napster. Essa conexão é feita através
do
software de troca de arquivos do Napster. O servidor centrar concentra o diretório de todos
os computadores clientes conectados a ele armazena informações de determinada maneira. Se
um usuário deseja certo arquivo, ele faz um requerimento ao servidor central do Napster ao
qual ele está conectado. O servidor verifica em seu diretório se existe um arquivo que
corresponda ao requerimento feito pelo usuário. O servidor então envia ao usuário todos
os
arquivos encontrados (se existirem) juntamente com o endereço IP, nome do usuário, tamanho
do arquivo, tempo de ping e taxa de transferência de cada um. Depois o usuário escolhe o
arquivo desejado da lista correspondente ao requerimento e tenta estabelecer uma
comunicação direta com o local onde se localiza o arquivo escolhido. O usuário tenta
fazer isto
enviando uma mensagem ao outro computador cliente juntamente com seu próprio endereço
IP e o nome do arquivo desejado. Se a conexão é estabelecida então o computador cliente
onde se localiza o arquivo é agora considerado o host. O host agora transfere
o arquivo
para o usuário. Quando a transferência é completada o host então interrompe
a conexão.
|
|
O Napster procura por arquivos usando um protocolo cliente/servidor. Este protocolo
utiliza o
protocolo de comunicação TCP/IP. O servidor mantém uma “master list” de todos os
computadores conectados a ele e então ele faz a busca por arquivos procurando pelo diretório
destes computadores conforme descrito anteriormente.
O Napster permite transferência de arquivos que sejam independentes do servidor central.
Esta
transferência ocorre entre computadores cliente. Existem quatro modos de transferência: “upload”,
“download”, “firewall upload”, “firewall download”.
|
|
|
|
Gnutella foi inventada
na Nullsoft, uma subsidiária da AOL, por Justin Frankel e Tom Pepper.
O programa foi disponibilizado em14 de março de 200 para o publico geral através do site da
Nullsoft. Ao mesmo tempo o Napster vinha sendo investigado pelo fato de estar permitindo a
distribuição de material ilegal de acordo com seus direitos autorais. Uma vez que foi conhecido
que o Gnutella era capaz de realizar a mesma função do Napster e que a AOL iria se fundir
com a Time Warner Music, a AOL forçou a Nullsoft a remover todos os links para o Gnutella
do seu site. Porém era tarde, apesar de ter estado apenas algumas horas no site, um grande
número de pessoas já tinham baixado o programa.
Uma vez que o programa
esteve na Internet, as pessoas que conseguiram adquiri-lo
começaram a fazer engenharia reversa a fim de obter o protocolo de comunicação do
programa. Em alguns dias o protocolo foi quebrado e o programa foi relançado na Internet.
Como diferentes pessoas conseguiram quebrar o protocolo, diferentes versões de programas
usando o protocolo da Gnutella foram disponibilizados na Internet como Morphues, LimeWire,
GNUcleus e outros. Todos eles usam o protocolo da Gnutella para se interagirem, porém cada
um é um programa diferente programado para agir da sua maneira.
Quando a Nullsoft
lançou sua versão original do Gnutella ele foi da forma de uma versão beta
da qual os programadores da Nullsoft tinham a intenção de desenvolver e otimizar. Como o
projeto foi colocado na prateleira, isto nunca aconteceu e o programa foi deixado para que os
usuários da rede se preocupassem em atualizá-lo. Quando o Gnutella foi lançado ele saiu
na
versão 0.4, versão que continua até hoje. Esta implementação, porém, sofreu
muitos
problemas substanciais que serão examinados em maiores detalhes mais tarde.
Um dos princípios
dos designers do Gnutela era lançá-lo como um protocolo aberto e utilizar
a licença General Public License (GPL) para permitir o envolvimento do protocolo em outros
projetos. Como os designers foram proibidos de fazer qualquer trabalho no programa, isto
nunca aconteceu realmente. Ao invés disso um consórcio de programadores foi feito para se
ter uma visão geral a respeito das mudanças e avanços do protocolo. A razão para
que este
programa não seja verdadeiramente um programa aberto é que seus idealizadores não estavam
à frente deste consórcio, como geralmente acontece com outros programas abertos sobre a
licença GPL. Também o código real do protocolo nunca foi de fato revelado, portanto o
consórcio só tinha a versão do protocolo da qual tinham feito a engenharia reversa. Para
se
ater à idéia geral da GPL, um site central foi criado para facilitar a discussão em torno
do
Gnutella. O site se encontra no endereço Gnutella.wego.com.
Gene Kan tomou
a frente do consórcio em torno do Gnutella. Ele se tornou líder do consórcio
através dos esforços aplicados nas semanas iniciais para garantir que Gnutella tivesse um
protocolo. Sua maior contribuição foi começar um projeto, com uma semana de planejamento,
que rapidamente solucionou diversos problemas do protocolo. Ele também montou o site de
discussão sobre o Gnutella. Como resultado dos seus esforços e de outros o Gnutella se
estabeleceu como um protocolo de redes P2P.
Como líder
do consórcio, Kan foi responsável pela divulgação e suporte do protocolo assim
como seu desenvolvimento. Com este fim ele realiza uma publicação periódica a respeito
do
Gnutella e informa o mundo a respeito dos benefícios do protocolo.
|
|
O protocolo Gnutella,
na versão 0.4, executa sobre o TCP/IP um protocolo de conexão
orientada. A sessão típica inclui uma conexão entre cliente servidor. O cliente então
envia um
pacote do Gnutella avisando sua presença. Esse aviso é então propagado pelo servidor
por
toda a rede através de um encaminhamento recursivo para os servidores seguintes. Todos os
servidores que recebem esses pacotes respondem com outro pacote similar a respeito deles
mesmos.
Consultas são
propagadas da mesma maneira, com os resultados sendo retornados pelo
mesmo caminho. Quando um recurso é encontrado e selecionado para ser transferido, uma
conexão ponto-a-ponto é estabelecida entre o cliente e o host do recurso, e o
arquivo é
transferido diretamente usando HTTP. O servidor neste caso irá agir como um servidor web
capaz de responder ao pedido de HTTP GET.
Os pacotes Gnutella
são da forma:
Message ID (16 bytes)
|
Function ID (1 byte)
|
TTL (1 byte)
|
Hops (1 byte)
|
Payload length (4 bytes)
|
Onde:
Message ID em
conjunto ao TCP/IP é usado unicamente para identificar uma transação.
Function ID é
utilizado como: aviso (resposta), consulta (resposta), ou requisição.
TTL é
o tempo de vida do pacote (time-to-live), isto é, quantas vezes mais o pacote será
encaminhado.
Hops conta
o número de vezes que um dado pacote é encaminhado.
Payload length é
o tamanho em bytes do corpo do pacote.
Conectando
O cliente encontra
um servidor por tentar se conectar a algum da lista local de servidores
conhecidos que são igualmente disponibilizados. Esta lista pode ser conseguida da internet ou
pode ser compilado por um usuário final. Os pacotes de aviso (também conhecidos como Ping
ou Init) contêm um número de arquivos que o cliente está compartilhando, e o tamanho
em
Kilobytes do dado compartilhado. A resposta do servidor (Pongs) contém as mesmas
informações. Então, uma vez conectado, o cliente sabe quantos dados estão disponíveis
na
rede.
Consultas
Como mencionado
acima, as consultas são propagadas da mesma maneira que os avisos. Para
economizar banda, os servidores que não contém resultados para a consulta não precisam
enviar uma resposta.
A semântica
dos resultados da procura não é definida no protocolo atual. Os detalhes são
dependentes de cada servidor. Por exemplo, a busca por .mp3 pode ser interpretada como
todos os arquivos como a mesma extensão ou qualquer arquivo que contenha mp3 no seu
nome, etc.
Fazendo um Download
Um cliente que
deseja fazer uma transferência de download abre uma conexão de HTTP
(Hyper-Text Transfer Protocol) como o host e faz uma requisição do recurso enviando
um
GET>URL< que é um tipo de comando HTTP onde a URL (Uniform Resource Locator) é
retornado pela requisição da consulta. Portanto, um cliente compartilhando um recurso tem
que implementar um servidor web básico.
|
|
Escalabilidade
O sistema foi desenvolvido
em um laboratório e foi concebido para funcionar para apenas
umas centenas de usuários. Quando este foi disponibilizado na Internet, ele rapidamente
cresceu para ter uma base de dez mil usuários. Infelizmente naquele estágio o sistema ficou
sobrecarregado não foi capaz de lidar com tamanho tráfego e nós que existiam na rede.
Vida dos pacotes
Para achar outros
usuários, um pacote tinha que ser enviado através da rede. Logo foi
percebido que o tempo de vida de alguns pacotes não foi configurado corretamente o que fazia
com que eles ficassem rodando pela rede indefinidamente. Isto resultava numa disponibilidade
menor de banda para os usuários da rede.
Velocidade de
conexão dos usuários
Usuários do
sistema agem como gateways para outros usuários para buscarem os dados que
estes últimos necessitam. Entretanto, nem todos os usuários possuem a mesma velocidade de
conexão. Isto resulta num problema como de usuários com uma banda de baixa velocidade
agindo como conectores para outros com uma velocidade maior. Isto resulta numa velocidade
de conexão que é ditada pelos usuários que possuem as menores velocidades de conexão
fazendo com que ocorram gargalos na comunicação.
Além do mais
a rede não é todo visualizada por todos os clientes. Usando o tempo de vida
padrão durante o aviso e a procura, apenas cerca de quatro mil pares são alcançados.
Isto
acontece pelo fato de que cada cliente mantém apenas quatro outros clientes e o pacote de
busca/init é encaminhado apenas cinco vezes. Na prática isto significa que mesmo que alguns
recursos estejam disponíveis na rede, eles podem não estar visíveis para quem está
procurando
porque ele pode está a muitos nós de distância. Para se aumentar a quantidade de pares
alcançáveis na rede Gnutella, precisaríamos aumentar o tempo de vida dos pacotes e número
de conexões que podem ser abertas. Infelizmente estas ações trariam outros problemas.
Se
aumentássemos tanto os números conexões quanto o número de hops para oito, 1,2 gigabytes
de dados agregados poderiam potencialmente cruzar a rede apenas para realizar uma consulta
de 18 bytes.
Outra questão
significante que pode ser identificada é a susceptibilidade do Gnutella para
negação de ataques ao serviço (denial of service attacks). Por exemplo, uma rajada de
pedidos pode facilmente saturar toda banda disponível à vizinhança do agressor, sem que
os
pares percebam que se trata de uma requisição maliciosa. Alguns trabalhos têm sido feitos
para poder minimizar esses tipos de problemas, porém muitos compromissos ainda precisam
ser acordados. Cada vez mais o serviço da rede Gnutella tem piorado. Isto se deve a uma
combinação de fatores, alguns se devem à característica do protocolo, outros induzidos
pelos
próprios usuários.
|
|
|
|
Freenet é
um sistema P2P completamente descentralizado e distribuído. Toda a comunicação é
coordenada pelos pares em nível global.
O Freenet opera
como um sistema de arquivos distribuído independente da localização entre
vários computadores que permitem que a inserção, armazenamento, e requisição
de dados
anonimamente.
Um nó é
um simples computador que percorre todo o sistema, e todos os nós são tratados
como iguais pela rede. Cada nó mantém sua própria unidade de armazenamento a qual é
disponibilizada para a rede tanto para leitura e escrita quanto para a tabela de roteamento
dinâmico que contém endereços de outros nós. Isto exclui qualquer ponto de falha
ou controle.
Seguindo pelo protocolo do Freenet, seus nós se organizam espontaneamente dentro de uma
rede eficiente.
É sistema
foi designado a se adaptar ao uso de padrões (patterns) movendo-se
transparentemente, replicando, e apagando arquivos de acordo com a necessidade para
fornecer um serviço eficiente sem recorrer a broadcast de busca ou a índices de
localização
centralizados.
A pretensão
da maioria dos usuários do sistema é utilizar nós para promover uma segurança
garantida contra outros nós hostis e aumentar a capacidade de armazenamento da rede como
um todo.
O Freenet pode
habilitar a usuários compartilharem espaços de disco inutilizados, como
sistemas de rede distribuída que permitem que usuários compartilhem ciclos de processamento.
O sistema opera
na camada de aplicação e assume a existência de uma camada de transporte
segura, embora seja um transporte independente. Ele não procura providenciar anonimato para
utilização comum de rede, só entre transações de arquivos do Freenet.
|
|
No começo
o sistema existia apenas na cabeça de Ian Clarck. Após ter estudado na escola
Dundalk Grammar onde ganhou o prêmio nacional de jovens cientistas por dois anos seguidos,
Ian deixou a Irlanda, em 1995, em favor da graduação em inteligência artificial e ciência
de
computação da universidade de Edimburgo na Escócia.
Em julho de 1999
Ian escreveu um artigo intitulado: A Distributed Decentralized Information
Storage and Retrieval System". O artigo continha a idéia básica para o Freenet. Mantendo
sua
filosofia quanto à liberdade de informações com a sua intenção de por em prática
sua idéias
recrutou vários ajudantes através da Internet. Logo os trabalhos começaram a dar resultado
e
a versão 0.1 foi lançada em março do ano seguinte. Desde então o sistemas tem sido
freqüentemente atualizado e diversas versões já foram lançadas.
O ponto básico
do Freenet é que ele foi designado a permitir o total anonimato a autores e
fornecedores de informação, porque sua arquitetura distribuída torna impossível
a localização
de qualquer artigo por um nó e, portanto de seu autor. As pessoas que se submetem à rede
quem ou o que está utilizando sua máquina. Ian descreveu esse fenômeno como machine
anarchy (anarquia das máquinas). Ao mesmo tempo em que as noticias em torno da
potencialidade filosófica do sistema eram de grande euforia, a preocupação quanto ao
seu mau
uso já era uma preocupação. No mesmo mês em que foi lançado o Freenet, Roger
Darlington,
executivo da Internet Watch Foundation, falou para a revista New Scientist: There is clear
potential for misuse by criminals, terrorists and pedophiles (Há um claro potencial para
a
má utilização por parte dos criminosos, terroristas e pedófilos).
A publicidade em
torno do Freenet provavelmente ocorreu na mesma época do fim do
Napster, que foi vista por muitos como a melhor alternativa de segurança. A aquela altura era
óbvio que as críticas a respeito do Freenet não eram nada boas em grande parte devido
a
industria musical que queria defender seus direitos a qualquer custo. O interessante é que
desde então novos sistemas descentralizados de troca de arquivos como o KaZaa e o
Morpheus se tornaram os grandes programas de trocas de músicas digitais. E provavelmente
não é totalmente coincidência que Ian atinou para a nova possibilidade de utilização
que era
explorar aplicações comerciais do Freenet. Ao especular sobre o que esperar do futuro do
Freenet Ian considerou um importante ponto de vista. Ele disse: Much like de WWW, it is a
plataform on which people build (Parecido com o WWW, que é uma plataforma onde as
pessoas constroem). Ele também disse que as expectativas de como as pessoas vão utilizar o
Freenet sempre foram contrárias às verdadeiras atitudes dos seus usuários. Portanto os
avanços do sistema devem ser feitos da forma mais flexível possível.
|
|
O freenet está
implementado como uma rede P2P adaptativa de nós que se consultam para
armazenar ou fornecer arquivos de dados, que são chamados de chaves de localização
independente (location-independent keys). Existem três tipos básicos de chave:
No modelo básico,
primeiramente uma chave é passada de nó a nó através de uma cadeia de
requisições no qual cada nó estabelece um local de decisão sobre onde irá enviar
a próxima
requisição, no estilo do roteamento IP. Depois dependendo da chave requisitada a rota irá
mudar. O algoritmo de roteamento se ajusta adaptativamente à rota de tempos em tempos
para promover um desempenho eficiente. Em seguinte cada nó possui apenas conhecimento a
respeito de seus nós vizinhos, para manter a privacidade. Para cada requisição é
dado um
tempo de hops limite (hops-to-live), que é decrementado a cada nó para evitar
cadeias
infinitas. Posteriormente cada requisição assume um identificador único, que faz com
que os
nós possam prevenir loops rejeitando requisições que eles já viram antes. Este processo
continua até que a requisição é satisfeita ou o tempo de hops (hops-to-live)
exceda o limite
estipulado. Então o sucesso ou a falha é retornado pela cadeia para informar ao nó.
|
|
O usuário de um sistema P2P quer saber quanto tempo ele levará para obter um determinado
arquivo e quanto de banda sua consulta irá consumir. Esses dois parâmetros têm um impacto
direto na utilização e no sucesso de um sistema.
Dentre os problemas
que podem afetar o desempenho da rede P2P descentralizada do
Freenet, podemos citar a comunicação de rede. A velocidade de conexão é menos do
que a
velocidade de E/S (entrada/saída) e de processamento, o que causa um gargalo na
comunicação. Este problema é enfatizado pela grande natureza paralela do Freenet. Outro
ponto é que como não existe um armazenador central de índices, as mensagens devem passar
por muitos hops, para buscar através do sistema o arquivo desejado. Cada hop
não só
adiciona carga à banda total como também aumenta o tempo necessário para a realização
da
consulta. Se um para for inalcançável, pode levar vários minutos até que a comunicação
seja
interrompida. Uma necessidade que ocorre em todos os sistemas P2P é a dependência da
presença de uma base de usuários participativa, cooperativa e suficiente para que o sistema
possa funcionar com agilidade.
Efeito small
world
Duas características
que podem distinguir um sistema small world são:
O efeito small
world é fundamental para a operação do Freenet. Ele é importante porque
define o problema do posicionamento do arquivo numa rede P2P descentralizada e auto-
configurável como o Freenet. No Freenet as consultas são repassadas através dos nós
para o
próximo local de decisão no qual o recipiente potencial pode trazer maior progresso para o
alvo. As mensagens não são alvo de um específico par mas relaciona qualquer par que tenha
o
arquivo desejável no seu disco.
Apesar de a rede
ser longa, deve existir rotas curtas. Numa simulação da rede Freenet, com
mil nós idênticos, que estavam inicialmente vazios, metades das requisições da rede
obtiveram
sucesso com seis hops. Um quarto das requisições obtiveram sucesso com três
ou menos
hops. Comparado com a Internet como uma rede small world com tamanho de percurso
característico de 19, o Freenet obteve uma boa média de desempenho, mas um fraco pior
caso, por causa de algumas escolhas de rota ruins que podem lançar a requisição
completamente fora do percurso.
Alguns aspectos
de robustez afetam o Freenet assim como os sistemas P2P. Desde que os
paras tendem a ser computadores pessoais ao invés de servidores dedicados, eles são
desligados da rede aleatoriamente.
O roteamento de
requisições é a chave da eficiência e escalabilidade do Freenet. Ele também
permite aos dados se movimentarem. Cada nó tenta encaminhar sua requisição
cada vez
mais próximo do dado, a busca é muita mais poderosa que uma busca linear e muito mais
eficiente que um broadcast.
Questões
de desempenho
Confiança
Uma vez ativado
o sistema, o usuário está apto o realizar transferência de arquivos, podem
providenciar alguma garanta de que seus códigos não sejam corrompidos e facilitem a
construção de uma reputação associada a seus nomes chave.
Contabilidade
A lição
principal para um desenvolvedor P2P é que sem contabilidade é difícil executar regras
de responsabilidade social. Como o Usenet e o e-mail, hoje os sistemas P2P correm o risco
de sofrerem abusos de propagadas não solicitadas (spams).
Segurança
Firewalls, IP dinâmico
e NAT cresceram além da necessidade na arquitetura da Internet de se
tornar um sistema escalável e seguro. Novas aplicações P2P desafiam essa arquitetura
demandando que os participantes sirvam recursos como também os usem.
Interoperabilidade
através de gateways
Firewalls são
colocados nos gateways entre a rede interna e a Internet. Ele é uma ferramenta
de segurança muito útil, porém é um sério obstáculo para o modelo de comunicação
P2P.
Largura de Banda
Assimétrica
Em conexões
de rede como as ADSL (Assimetric Digital Subscribe Line), existe um
favorecimento ao uso dos clientes frente aos servidores. O problema hoje é que as aplicações
P2P estão mudando a concepção de que os usuários finais desejem apenas realizar
downloads da Internet, nunca uploads. Isto resultou numa infra-estrutura de
rede que é
otimizada para computadores que são apenas clientes, não servidores. Porém a tecnologia
P2P faz com que cada par aja tanto com o cliente quanto como servidor tornando a
concepção anterior incorreta. Portanto a arquitetura de rede que existe hoje terá que
passar
por uma grande mudança para lidar com este novo modelo de tráfego.
Abuso da porta
80
A porta 80 é
a porta utilizada para o tráfego http quando as pessoas navegam pela Internet.
Os Firewalls basicamente filtram o tráfego baseado na sua direção e na sua porta de destino.
As mais atuais aplicações P2P utilizam de alguma forma a porta 80 para burlar uma eventual
política de segurança de rede. O problema é que não existe uma boa maneira de identificar
qual aplicação está passando por uma porta. Também mesmo que a aplicação
possua uma
razão legítima para atravessar o Firewall, não existe uma maneira simples de se pedir
uma
permissão.
Anonimato
Como nenhum nó
pode dizer de onde chegou um pedido além do nó que o enviou, é muito
difícil encontrar a pessoa que começou esse pedido. O Freenet não fornece um anonimato
perfeito porque isto causaria um desequilíbrio entre eficiência e usabilidade. Se alguém
quer
saber exatamente o que outro usuário está fazendo, dados os recursos do sistema, ele
conseguirá. Entretanto o Freenet busca parar a indiscriminada fiscalização maciça
das pessoas.
|
|
|
|
Neste capítulo
iremos introduzir o conceito de mecanismo de busca e descrever como
tradicionalmente funciona um mecanismo de busca numa rede cliente/servidor.
A World Wide Web
(WWW) consiste em literalmente bilhões de páginas, distribuídas através
de milhares de servidores ao redor do mundo. Desde que se tornou fisicamente impossível
para um indivíduo examinar todas as páginas à procura de uma determinada informação,
alguns
mecanismos de busca surgiram para fazer isto pelos usuários.
Os mecanismos de
busca utilizam softwares chamados de spiders vagam através da web
automaticamente seguindo hiperlinks de um documento para o outro extraindo importantes
informações textuais deles. Ele utiliza essas informações para construir um enorme índice
correlacionando palavras-chave a páginas da web. Os mecanismos de busca não podem
simplesmente inventar URL´s. Invés disso todas as buscas originadas das páginas da web
especificadas manualmente pelos usuários e os spiders subsequentemente seguem os links
destas páginas para outras. A rede web possui suas proteções e uma grande parte dela
está
invisível para os spiders. Entretanto o Google possui cerca de dois bilhões de páginas
em seu
banco de dados.
Quando um usuário
faz uma consulta em um mecanismo de busca no seu navegador da web,
sua entrada é processada e usada para procurar o banco de dados para a ocorrência de
determinada palavra-chave. As páginas se encontradas são ordenadas usando um ranking
escolhido através de um algoritmo particular para cada mecanismo de busca.
Obviamente a página
do topo do ranking deve ser a página que tenha mais afinidade com o
interesse do usuário. Esses rankings são geralmente baseados numa média de pesos de um
número relevante de pontos que são derivados de um número de ocorrências das palavras-
chave na página.
Portanto atualmente
os mecanismos de busca não procuram na web diretamente. Eles
meramente se referem ao banco de dados localizados em um servidor central. É claro que
quando as páginas mudam seus conteúdos, isto significa que quando uma busca é realizada
na
verdade é amostrada uma cópia da página que pode não ter mais relevância ou
nem existir.
Então para lidar com a questão de páginas modificadas, movidas, apagadas ou renomeadas,
o
índice no banco de dados precisam ser atualizados periodicamente para manterem a qualidade
do mecanismo utilizado. O problema é que no caso do Google que possui um banco de dados
imenso, se torna inviável fazer uma atualização.
Além do mais,
empresas como Google utilizam uma grande capacidade de armazenamento e
uma imensa largura de banda que custam uma fortuna. No lado do software, soluções de
compressão personalizada para reduzir os custos de armazenamento e algoritmos como o
hashing para aumentar a velocidade de indexação do banco de dados são algumas
das
técnicas utilizadas para assegurar maior eficiência e velocidade.
Enquanto os mecanismos
de busca atuais são adequados para a busca geral na web, eles
continuaram tendo muitas desvantagens. Os custos de construção e manutenção da infra-
estrutura são muito altos, eles não lidam adequadamente com páginas dinâmicas, eles
ignoram
a maioria das páginas disponíveis na web que são invisíveis pelos spiders. É
claro que todos
esses problemas estão sendo exacerbados, pois a medida que a rede cresce se torna cada vez
mais impossível para qualquer mecanismo de busca centralizada repetidamente visitar e indexar
todas as páginas acessíveis na web.
|
|
Efetivos métodos
de busca devem confiar na grande variedade de informação sobre o recurso
desejado, tipicamente na forma de meta dado.
A maioria dos tipos
de métodos de busca está descrita aqui.
A implementação original do Gnutella é um exemplo de mecanismo
de busca de
transmissão de inundação. Quando um par faz uma consulta, esta consulta é transmitida
para todos os seus pares vizinhos. Se um par vizinho não fornecer resultados então esta
consulta e transmitida para os pares vizinhos do vizinho. Se o recurso é encontrado,
aquele par envia uma mensagem para o par que originou a consulta indicando que
encontrou resultados para a consulta, e então estabelece uma conexão P2P.
Cada consulta tem um contador de TTL (Time-To- Live). Tipicamente, o TTL é
ajustado entre cinco e sete, e o valor é decrementado à medida que a consulta passa
por um nó. Outro contador informa o número de saltos (hops). Uma vez que o
contador TTL atinge o valor zero, a consulta é então descartada.
Dada a natureza da transmissão de cada nó, o sistema não possui
um boa
escalabilidade (O(n²)), a largura de banda assume valores que crescem
exponencialmente com um aumento linear do número de pares. O crescimento do
número de pares no sistema causará uma rápida saturação da banda disponível
para a
rede.
Este tipo de método possui suas vantagens de flexibilidade no processamento
de
consultas. Cada par pode determinar como será processada consulta e responder de
acordo. Isto é fácil de desenvolver e eficiente. Infelizmente este método só é
apropriado para redes pequenas. Além do que este mecanismo é muito susceptível às
atividades maliciosas. Algum par pode enviar um número muito grande de consultas
que produziria uma carga significativa na rede.
Estes sistemas são mais escaláveis que os de transmissão e inundação.
Além de enviar
a consulta para todos ao pares, ele encaminha seletivamente a consulta para específicos
pares que são considerados possíveis locais onde o recurso pode ser encontrado. Os
pares se tornarão super pares automaticamente se eles tiverem largura de banda
suficiente para processarem suas potencialidades. Pares com conexão através de linha
discada (banda pequena) poderão fazer consultas à super pares. Este tipo de sistema
utiliza algoritmo de controle de fluxo (FCA Flow Control Algoritm) que tenta aplicar
uma forma inteligente de controlar o fluxo de como um par encaminhará e responderá a
uma mensagem e um esquema sensível de prioridade para como descarta mensagens
que não caibam na conexão.
Com essa abordagem, ocorre uma grande redução da limitação
de largura de banda
para a escalabilidade. Mas esse sistema também esta susceptível a atividades ilegais.
Pares podem se inserir na rede em vários pontos diferentes e desorientando a rota das
consultas fazendo com que elas sejam descartadas.
Cada par pode conter também uma série de informações usadas
para o roteamento ou
para recebimento direto de consultas. O tamanho dessas informações é insignificante
numa rede de pequeno porte, mas numa rede grande, este overhead pode crescer a
níveis insuportáveis.
Neste tipo de rede, cada arquivo armazenado no sistema possui uma identidade
(id)
única, tipicamente um hash sha-1 do seu conteúdo, que é usado para identificar
e
localizar um recurso. Dado essa id única, um recurso pode ser localizado rapidamente
apesar do tamanho da rede. Como cada recurso é identificado pela sua chave, é
impossível realizar uma busca nebulosa (fuzzy) dentro da rede. Se um par está
procurando um arquivo de um outro par, ele tem que conter essa chave antes para
poder receber o arquivo.
Estes sistemas também são, como todos os outros, susceptíveis
a atividades ilegais.
Um par pode descartar uma consulta, inserir uma porção de dados sem importância
para desordenar as chave, ou inundar a rede de consultas para denegrir o desempenho.
O Napster utiliza índices centralizados e sistema de repositório. Índices
de todos os
pares e seus recursos são armazenados em um grande servidor principal. Uma consulta
é enviada ao servidor e o servidor procura pelo índice correspondente, se a consulta
fornecer um resultado então o servidor envia uma mensagem para o par que realizou a
consulta sobre onde ele pode conseguir o arquivo.
Índices centralizados têm promovido o melhor desempenho para mecanismos
de
busca, porém a banda e o hardware necessários para uma rede P2P de grande porte
exigem um custo muito alto para o sistema.
Uma deficiência que pode ser observada neste sistema é que se ocorrer
alguma falha
no servidor principal toda rede vem a baixo. No caso do Napster, o sistema possuía
um cluster de servidores, se um falhar o resto dos servidores continuam a suportar a
rede.
Com esta abordagem nós podemos eliminar a necessidade dos caros servidores
centralizados. A idéia de índices distribuídos é que cada nó da rede contenha
um índice
de arquivos local assim como índices de arquivos armazenados de alguns pares
vizinhos. Quando um nó recebe uma consulta de um par, ele primeiro verifica se esta
consulta pode ser satisfeita naquela localidade. Se não puder, ele usa o índice local
para determinar para qual nó será encaminhada a consulta. O índice em cada máquina
local não é estático e muda de acordo com o movimento dos arquivos no sistema.
Se o sistema for bem elaborado, é fornece o melhor desempenho e a melhor
escalabilidade que qualquer outra solução assim como uma grande tolerância quanto à
falha num ponto, porque o nó apenas contém uma quantidade relativa de índices muito
pequena se comparado com o modelo centralizado, então se um nó cair a rede
continuará funcionando apropriadamente.
O problema mais complicado neste tipo de modelo é manter a coerência
de todos os
dados indexados. Se um arquivo é mudado de localização pó rum determinado par, o
nó não será informado que aquele arquivo em particular mudou posteriormente,
quando outro par requisitar este arquivo, o nó irá retornar uma cópia desatualizada.
O
overhead para manter todos atualizados e eficientemente distribuídos é o que mais
prejudica o sistema em nível de escalabilidade.
Invés de realizar uma consulta básica num determinado par, ele utiliza
um banco de
dados de informações existentes que o par acumulou para determinar quais recursos
encontrados podem ser relevantes ou não, ou são interessantes para o par.
Com o tempo, uma grande gama de informações é acumulada. Estas
informações são
analisadas para determinar quais elementos comuns o par achou ser relevante. O
crawler então atravessa a rede geralmente inserindo novas informações em
documentos em html que são comparados com o perfil destilado das informações do
par anterior.
O tempo necessário para que o crawler atravesse um número
muito grande de
índices é muito longo. Portanto esse sistema não é apropriado para redes de grandes.
|
|
Como dito anteriormente
existem dois tipo principais de modelos de rede P2P para a troca de
arquivos, o modelo centralizado usando cliente-servidor e o modelo descentralizado.
Os sistemas P2P
que utilizam em alguns aspectos redes cliente- servidor que estão operando
atualmente incluem:
-
Edonkey: Também
uma rede semi-centralizada, onde qualquer pessoa pode
rodar um servidor. Quando um cliente envia uma requisição de busca a um
servidor, apenas neste servidor é realizada a busca e quando essa busca se
completa o cliente pode enviar esta mesma requisição ao próximo servidor da sua
lista se necessário. Uma vez que um arquivo está na fila de download do cliente
outros servidores são consultados. Isto acontece porque o Edonkey foi a primeira
aplicação de cliente que possibilitou a realização simultânea de download de
múltiplas fontes, e também suporta o compartilhamento de arquivos parcialmente
baixados o que permite outros clientes a começarem a fazer download de um
arquivo de uma lista que ainda esta sendo carregado.
Redes P2P descentralizadas de busca
O conceito de descentralização é remover uma estrutura central de uma rede fazendo com que
um par possa se comunicar de igual para igual com outro par.
Embora este conceito
permita teoricamente a construção de uma rede infinita, em prática o
valor de TTL é usado para controlar o número de nós que uma consulta pode alcançar.
A vantagem de uma
arquitetura de rede descentralizada é que ela é bem mais difícil de ser
interrompida, pois não existe mais um ponto de falha. Porém a busca neste tipo de rede é
muito lenta e não é garantido que a consulta terá algum resultado, porque o arquivo desejado
pode estar a uma distância muito grande para ser alcançado.
As redes P2P descentralizadas que estão operando atualmente incluem:
|
|
O JXTA foi criado
pela empresa de Gene Khan, a Infrasearch. A companhia o desenvolveu
depois que o Gnutella foi lançado como uma solução de busca que podia acessar todos os
formatos de arquivos além do MP3. Khan descobriu que crawlers da web detinham dados
desatualizados por que levavam semanas para serem postados como recentes e
disponibilizados na rede, e em alguns casos não possuíam acesso a grandes bancos de das que
eram abertos na web especialmente depois de um ? na URL. Para resolver esses problemas
ele desenvolveu um protótipo do Infrasearch baseado no Gnutella, além de também usar
o
backend do Gnutella. A idéia básica do Infrasearch era distribuir a consulta até
os limites da
rede e deixar que a inteligência do par destinatário processe a consulta qualquer que seja
o
formato apropriado e o responda. O Infrasearch foi comprado pela Sum Microsystem em
março de 2001 e o time de desenvolvimento dentro do projeto do JXTA da Sum com a
intenção de usar as idéias do Infrasearch na elaboração de um mecanismo de
busca para o
projeto JXTA. O time do Infrasearch decidiu não utilizar mais o backend do Gnutella
e
desenvolveram um protocolo próprio baseado em XML que foi de alguma forma utilizado no
protocolo do Gnutella, por exemplo, a noção de deixar cada par processar a consulta como
achar mais apropriado, e a distribuição das consultas entres os pares.
O mecanismo de
procura do JXTA possui os seguintes participantes:
-
Hub
de busca JXTA, é um mecanismo que facilita um roteamento eficiente de
consulta na rede JXTA traçando rotas entre consumidores e fornecedores. Os
fornecedores registram suas próprias descrições nos hubs e esperam por uma
comparação com êxito. Os consumidores consultam a rede através do hub e
esperam por um resultado. Os hubs também podem ser fornecedores ou
consumidores e podem ser cascateados numa rede.
Métodos extensos e profundos de busca
A busca JXTA possui
duas técnicas complementares de busca, a busca extensa (wide) e a
busca profunda (deep).
Numa busca JXTA de contexto extenso significa enviar dados de um hub de procura
para outro hub de procura. Estes hubs de procura são uma garantia eficiente entre uma
questão de gargalo em um extremo e uma questão de desperdício de banda em outro
extremo completamente conectado à rede. Cada hub pretende se especializar de
alguma maneira, isto é, uma aplicação de índice, etc. e se um hub não puder
responder
a uma consulta ele encaminha a consulta a outro hub.
Web crawlers freqüentemente possuem dados desatualizados e são apenas
eficientes
com conteúdos estáticos como algumas páginas da Internet. Páginas dinâmicas
com o
site de notícias não são indexadas com eficiência pelos crawlers. Mecanismos de
busca
profunda localizam dados em grandes bancos de dados como os da Amazon o de
grande sites de notícias. O JXTA decide que tipo de consulta deverá ser enviada e
então retorna os resultados. A intenção dos desenvolvedores do JXTA é de promover
um mecanismo de busca muito mais corajoso dos que os mecanismos convencionais
existentes.
O futuro do JXTA
O projeto JXTA da Sun foi lançado em uma comunidade de código aberto
com a
iniciativa de que outras pessoas contribuam com soluções que possam tornar o JXTA a
plataforma P2P número um do mundo. Este foi um passo muito importante para o
projeto porque afinal será a quantidade de pessoas que decidirá se a plataforma se
tornou a número um ou não. Até a presente data a Sun contabilizou mais de dezessete
mil membros da comunidade e ela continuou crescendo incluindo a comunidade de
código aberto o que faz com que sejam desenvolvidas cada vez mais aplicações
usando a plataforma do JXTA.
|
|
Existem muitas
redes P2P nos dias de hoje, cada uma utilizando uma maneira diferente de
rotear dados de um par para outro para descobrir novos recursos e se adaptar a mudanças de
topologia. Este capítulo descreve as técnicas de roteamento aplicada por quatro sistemas
diferentes a fim de atingir esses objetivos.
|
|
Como dito anteriormente
o sistema Gnutella é um sistema descentralizado onde os pares
possuem iguais responsabilidades e deveres. Os pares se comunicam através de cinco tipos de
descritores: Ping, Pong, Query, QueryHit e Push. Cada descritor é precedido por um descritor
de cabeçalho (Descriptor Header) que já foi explicado anteriormente e possui o seguinte
formato:
Descriptor Header
Byte
Positions
|
0
- 15
|
16
|
17
|
18
|
19
- 22
|
Contents
|
Descriptor
ID
|
Function
ID
|
Time
To Live
|
Hops
|
Payload
Length
|
Ping
Um par utiliza
este mecanismo para descobrir sobre outros pares na rede. Este mensagem é
enviada sem payload. Isto significa que o descritor de cabeçalho possui toda a informação
necessária.
Pong
Byte
Positions
|
0
- 1
|
2
- 5
|
6
- 9
|
10 13
|
Contents
|
Port
|
IP
Address
|
File
Count
|
Total
File Size
|
È uma resposta
que um par realiza ao recebimento de um ping. Esta responta contém os
seguintes campos:
Port: è a
porta que o par utiliza para se comunicar.
IP Address: o endereço
IP do par.
File Count: Um
contador que possui o número de arquivos que o par compartilha com ouros
pares.
Total File Size:
o tamanho total de todos os arquivos que o par compartilha com outros pares
na rede em kilobytes.
Query
Byte
Positions
|
0
- 1
|
2
- N
|
Contents
|
Minimum
Speed
|
Search
Query
|
Quando um par deseja
encontrar arquivos na rede ele envia um descritor de consulta (query
descriptor), que contém os seguintes campos.
Minimum Speed:
Se um par em particular quer se comunicar com um par requisitor, ele deve
ser apto a fazê-lo a uma velocidade mínima ou maior. Só os pares que se encaixam neste
critério podem enviar uma resposta à consulta.
Search Query: Esta é uma string de dados de busca que contém a requisição do par. Esta
string deve conter um caractere vazio para marcar o fim do descritor.
QueryHit
Byte
Positions
|
0
|
1
- 2
|
3 6
|
7 10
|
11
- (N-1)
|
N
- (N+16)
|
Contents
|
Number
of Hits
|
Port
Number
|
IP
Address
|
Speed
|
Result
Set
|
Peer
ID
|
Este descritor é enviado em resposta a query posicionada na rede, mas apenas se o par puder
se comunicar à velocidade mínima especificada no campo de Query e se este par possuir um
arquivo que corresponda a string de busca. Este descritor possui os seguintes campos:
Number of hits:
O número de arquivos que correspondem à string de busca. Os detalhes
individuais de cada arquivo são agrupados. Esta estrutura de agrupamento será descrita
posteriormente.
Port Number: A
porta na qual o par fica escutando para estabelecer uma comunicação.
IP Address: O endereço
do par.
Speed: Velocidade
de transferência em kilobytes por segundos.
Result set: Este
campo possui os detalhes do arquivo. Ele manda o índice do arquivo
armazenado no par hospedeiro (este é um número dado a um arquivo pelo Gnutella), o
tamanho do arquivo em particular, em bytes, e uma string com o nome do arquivo encontrado.
Este campo é terminado por dois caracteres vazios. O índice e o tamanho do arquivo são
ambos de quatro bytes de comprimento. A string para o nome do arquivo é de pelo menos um
byte de comprimento.
Peer ID: Ele apenas
identifica um par na rede.
Push
Byte
Positions
|
0
- 15
|
16
- 19
|
20
- 23
|
24 25
|
Contents
|
Peer
ID
|
File
Index
|
IP
Address
|
Port
|
Se um par se encontra
protegido por um Firewall que não permita conexões externas, o cliente
pode utilizar um descritor push para receber os dados. O descritor contém os seguintes
campos:
Peer ID: Esta é
a única identidade de um par que possui o arquivo requerido. Este é campo é
obtido do descritor QueryHit retornado por um determinado par.
File index: Este é o mecanismo pelo qual o par requisitor para indicar qual arquivo ele que do
par com o peer ID. Este índice é obtido pelo descritor Query Hit.
IP Address: É
o endereço do par hospedeiro que contém o arquivo a ser transferido.
Port: Número
da porta pela qual o arquivo é transferido.
Regras de roteamento
para descritores
Para tentar minimizar
a quantidade de tráfego e nós envolvidos na transferência de pacotes
pela rede cada par deve possuir alguma forma de tabela de roteamento. Esta tabela é usada
para determinar quando um determinado descritor foi enviado antes. Desta maneira o par pode
decidir se a mensagem precisa ser encaminha a ou removida da rede.
Assuma a situação
onde um nó A se junta à rede e quer obter informações sobre outros nós.
Ele faz isso enviando um ping ao nó B. Ao receber um ping o nó B verifica sua tabela de
roteamento se já recebeu este ping particular antes. Inicialmente isto não aconteceu. Então
B
inclui os detalhes da mensagem na tabela de roteamento. Depois ele responde para A enviando
um pong contendo seus detalhes. B então encaminha o ping de A para seus vizinhos C, E e F.
Esses nós realizam as mesmas operações de B, armazenando os detalhes nas suas respectivas
tabelas de roteamento se necessário, retornam um pong par A e encaminha a mensagem
adiante. Devido de B ser vizinho desses nós ele irá receber novamente o ping. Porém
ao fazer
a verificação desse ping ele não irá armazenar suas informações e não
encaminhará mais o ping
a seus vizinhos. Quando B receber um pong de seus vizinhos ele encaminhará as informações
de desses nós vizinhos para A.
Se a rede for mais
extensa o ping irá se propagar até que o TTL deste ping se expire, que
ocasionará na remoção da mensagem da rede.
Desta mesma forma
o roteamento é usado para realizar consultas na rede e retornar
QueryHints.
Vantagens
A maior vantagem
do sistema de roteamento do Gnutella é que diferentemente do protocolo
do Napster ele não utiliza um servidor centralizado. Uma menor dependência de um servidor
significa que as falhas nesse sistema irão afetar poucos pares.
Gnutella foi desenvolvido
para transferir qualquer tipo de arquivo, diferentemente do seu
antecessor o Napster que transferi apenas arquivos MP3.
Desvantagens
A maior desvantagem é que quando se utiliza descritores como ping e query, o descritor deve
ser encaminhado pelo nó pata todos os seus vizinhos ou até que o TTL atinja o valor zero.
Isto
significa que um simples ping faz com que os vizinhos também enviem pings podendo gerar
milhares de pongs de retorno. As respostas à esses descritores são enviados de uma maneira
mais eficiente através do caminho percorrido pela requisição inicial.
Outra desvantagem
está no fato de que cada nó deve armazenar algumas informações sobre
quais pacotes foram vistos em um certo período de tempo. Para poder manter um bom
histórico do roteamento de pacotes é necessário que o par possua uma boa disponibilidade
de
memória. Por outro lado se o par possuir pouca memória ele pode ter que interromper
encaminhamentos de pacotes que foram previamente enviados criando tráfego desnecessário
na rede.
O protocolo depende
de que um par produza globalmente um único identificador para uma
mensagem particular. Isto em prática não acontece e como resultado uma falha geral no
sistema pode ocorrer se duas mensagens que supostamente deveriam ser únicas, isto é, foram
enviadas por dois servidores diferentes, acabam tendo o mesmo identificador.
Também ocorrerão
problemas se um par que está prestes a receber arquivos de um outro par
e o par remetente é desconectado da rede e ao ser reconectado recebe um índice diferente.
O
par requerente pode, portanto, estar pedindo um arquivo que não existe ou pedindo o arquivo
errado por estar indexando erradamente no arquivo do sistema. Isto caso também pode
significar que o par pode ter perdido todo o seu histórico de roteamento.
|
|
Mensagens JXTA
No JXTA, a comunicação
entre os pares utiliza documentos XML. Mensagens são enviadas
de um par para outro como uma seqüência ordenada de bytes numa simples unidade de
mensagem. Mensagens são enviadas entre pares endpoints. Um endpoint é
um local em
qualquer rede capaz de receber mensagens no estilo de datagrama. O mapeamento dos
endpoints para um endereço físico é realizado em tempo real pela camada de envio. JXTA
pode usar protocolos de comunicação orientada (TCP/IP) como também pode usar
protocolos de transporte sem comunicação (UDP). Além de aceitar protocolos de transporte
emergentes.
As mensagens podem
ser vistas como envelopes com uma pilha de cabeçalhos de protocolos.
O envelope contém um cabeçalho, sumário da mensagem, endpoint fonte e endpoint de
destino. O endpoint fonte é opcional. O cabeçalho consiste em um rótulo do protocolo
e um
comprimento do corpo da mensagem. O rótulo do protocolo especifica qual o protocolo em
uso. O tamanho do corpo da mensagem depende do protocolo em uso. Quando se usa um
protocolo de comunicação não confiável as mensagens podem chegar ao endpoint mais
de
uma vez, numa ordem diferente da que foi enviada ou pode não chegar. Camadas superiores à
camada de transporte são responsáveis pela retransmissão e duplicação de uma
mensagem.
O corpo da mensagem
também possui uma chave credencial que é usada no endpoint para
identificar o remetente. E também verificar se o remetente tem direito de enviar uma mensagem
para aquele endpoint específico. Esta credencial deve ser usada cada vez que uma mensagem
é enviada.
Pipes do JXTA
Pipes formam um
canal de comunicação virtual usado para enviar e receber mensagens entre
pares. Eles são unidirecionais, stateless e promove uma abstração do tipo
de rede utilizada.
Os pipes podem se conectar um ou mais endpoints. Em cada endpoint é ssumido que existe
um software que controlará o envio e recebimento de mensagens usando o pipe. Entretanto
isto não é obrigatório. Cada endpoint possui dois pipes associados. Um pipe de entrada
e um
pipe de saída. Usando o protocolo de ligamento de pipe os pipes separados em tempo real.
Quando um par envia uma mensagem através de um pipe todo os outros pipes conectados à
esse pipe receberam a mensagem.
Os pipes podem
suportar dois tipos de comunicação. Primeiramente existe o modo padrão
ponto-a-ponto. Usando este modo apenas dois pipes não conectados, um pipe de entrada e
um pipe de saída. O pipe de entrada receberá mensagens enviadas através do pipe de saída.
Não existe apoio para uma operação de reposta. Uma informação adicional no
envelope da
mensagem como a chave credencial é usada para tratar as conjuntas. O segundo modo
utilizado é o modo propagado. É quando múltiplos pipes de entrada e de saída são
conectados
para ligar endpoints. Usando este modo, uma mensagem pode ser enviada para todos os pipes
de entrada que estiverem escutando. Também pode causar a duplicação de uma mensagem.
Como conseqüência, esse modo não é o favorito, especialmente quando se tem necessidade
de otimização de velocidade e tempo para a comunicação.
Protocolo de
roteamento de mensagens JXTA
O JXTA utiliza
seis protocolos especialmente desenvolvidos para atuarem em conjunto para
permitir o descobrimento, o monitoramento, a organização e a comunicação entre pares.
Os
protocolos são utilizados para anunciar e descobrir recursos disponíveis. O roteamento de
mensagens permite cooperativamente que todos os pares estejam conectados. Os protocolos
são:
-
Peer Discovery
Protocol
- Peer Resolver Protocol
- Peer Information Protocol
- Pipe Binding Protocol
- Endpoint Routing Protocol
- Rendezvous Protocol
Peer Discovery Protocol
Este protocolo
permite ao pares noticiarem seus recursos e buscarem recursos que estão
disponíveis de outros pares. Os recursos anunciados são representados como documentos
XML. Estes protocolos permitem que pares sejam encontrados sem que conheçam seus
nomes. Usando um processo conhecido como screening ele pode também ser usado para
sondar grupos de pares da rede para pares que pertençam a um grupo específico. Screening
funciona apresentando cada possível candidato com um nome de grupo de par. Qualquer par
que pertencer ao grupo responderá a mensagem. Uma lista de pares pode ser armazenada
permitindo uma comunicação unicast ao invés de usar mensagens broadcast. Mensagens para
conseguir anúncio de uma certa parte da rede nem sempre retornará uma lista exaustiva e
podia mesmo estar vazia.
Mensagens utilizadas:
Peer Resolver Protocol
Este protocolo
permite pares enviarem uma consulta para um ou múltiplos pares e receberam
uma resposta a uma consulta realizada. A consulta é enviada com uma identidade única que é
usada na resposta para identificar qual resposta pertence a que pergunta. Tais consultas podem
ser enviadas a um grupo intero de pares ou a um par específico. Este protocolo realiza uma
confirmação de mensagens e descarta qualquer mensagem inválida.
Mensagens utilizadas:
Peer Information Protocol
Permite a um par
descobrir informações de status sobre outros pares, isto é, estado, uptime e
capacidades. A mensagem é enviada pelo remetente original contento uma identidade única
q
deve ser utilizada na resposta. Este protocolo pode também ser usado para obter informações
do peer. Na mensagem de resposta cada propriedade é listada como um par nome/valor.
Mensagens utilizadas:
Pipe Binding Protocol
É um mecanismo
que permite aos pares realizarem um canal de comunicação virtual (pipe)
entre dois ou mais pares. Essencialmente ele liga dois finais de um pipe criando um canal
virtual. Pipes são os dispositivos mais utilizados para realizar uma comunicação entre
pares.
Mensagens utilizadas:
Endpoint Routing Protocol
Este protoolo permite
aos pares descobrirem uma rota entre dois pares. Esta rota poderia ser
usada para enviar uma mensagem para um par. Se o par X e o Y desejarem se comunicar mas
ainda não existe um link direto entre os dois este protocolo deve ser usado. Ele encontrará
o
par imediato através da mensagem que será roteada. Se aquela rota estiver interrompida o
protocolo pode ser usado para achar uma rota alternativa.
Mensagens utilizadas:
Rendezvous Protocol
Este protocolo
permite os pares se tornarem membros de um serviço de propagação. Como
membros de um serviço de propagação, pares receberão mensagens e informações
enviadas
por todos os membros daquele serviço. Então se um protocolo permite os pares enviarem
mensagens a todos os membros do serviço. Para se tornar um membro de um grupo de pares
um formulário deve ser obtido listando os requerimentos necessários para que seja efetivada
a
integração. Este formulário é um documento estruturado.
Mensagens utilizadas:
Figura 1– Protocolo de transporte de mensagens
retirada da página http://ntrg.cs.tcd.ie
|
|
Usando apenas ligações
ponto-a-ponto e recursos descentralizados, o Tapestry é uma infra-
estrutura de roteamento e de cobertura de posição que fornece um roteamento independente
da localização de mensagens diretamente a uma cópia mais próxima de um objeto ou
serviço.
O tapestry pode ostentar características como o balanceamento de carga, fault-resilience,
robustez, escalabilidade e auto-organização.
|
|
Usando a localização
Plaxton as metas do mecanismo de roteamento do Tapestry são
adaptativas, auto-gerenciáveis e fault-resiliance. A arquitetura de roteamento do Tapestry
eficientemente roteia requisições mesmo na presença de falhas nos nós
ou uma carga alta na
rede. Através do uso de aleatoriedade ele realiza o roteamento localmente e carrega a
distribuição. O Tapestry vai lidar com os problemas da rede desviando se das rotas com
falhas, removendo nós sobrecarregado por um serviço, transparentemente mascarando
componentes com falhas e rapidamente adaptando a topologia de comunicação às
circunstâncias que dependem dos tipos de problemas encontrados.
Por ter suas rotas
fortemente ligadas ao mecanismo Plaxton, é apropriado discutir o que é
basicamente o método Plaxton para que se possa entender o mecanismo de roteamento do
Tapestry.
Arquitetura
de roteamento do Plaxton
O mecanismo de
roteamento do Plaxton possui em cada nó mapas de roteamento locais
chamados mapas de vizinhança (neighborhood maps) que incrementalmente roteiam as
mensagens cobertas ao local de destino (destination ID). Cada nó possui um mapa de
vizinhaça com múltiplas camadas. Cada camada possui um número de entradas igual à
base do
ID, onde uma de i entradas de uma das j camadas é a ID e o local mais próximo do nó.
Na
intenção de achar o próximo nó, procura-se nos n+1 níveis do mapa, e verifica-se
a entrada
correspondente ao valor do próximo dígito no local de destino. Usando este método de
roteamento num namespace de tamanho n e usando ID de base b pode-se garantir que em
no máximo hops lógicos um nó pode ser achado no sistema, assumindo que cada nó
tenha um
mapa de vizinhança consistente.
Como todos os mapas
de vizinhança em cada nó assumem que a predição de dígitos de cada
nó sempre casa com o sufixo do nó atual, ele só precisa manter um tamanho
constante b de
entradas em cada nível da rota:
NeighborMapSize = (entries/map) * (# of maps)
= b *
Mecanismo de
busca do Plaxton
Este mecanismo
permite um cliente localizar e enviar mensagens para um objeto encontrado
num servidor. Isto é realizado pelo servidor anunciando que ele possui o objeto. O servidor faz
isto roteando a mensagem para o nó raiz, um nó único na rede que é usado
para guardar a
raiz do objeto. De acordo com a finalidade crítica do nó raiz e sendo o único nó
deste tipo faz
com que haja no sistema um ponto único de falha. A publicação (publishing) é
o processo no
qual uma mensagem é enviada ao nó raiz e a cada nó ao longo do caminho entre os locais
onde se encontram armazenados o Object-ID (O) e Server-ID (S).
Por outro lado
um local de consulta permite o cliente enviar mensagem para objetos. Como as
mensagens percorrem um determinado caminho, então é verificado o nó por onde a mensagem
passar. A mensagem é redirecionada ao servidor contendo o objeto se a mensagem encontrar
um nó que possua a informação de localização para o objeto procurado. Senão,
a mensagem é
encaminhada um passo mais próximo da raiz. A informação de localização ou mapeamento
(mapping) para um objeto é a garantia de que este objeto será achado uma vez que a
mensagem atinja a raiz. O mecanismo de roteamento do Plaxton escolhe nós raiz usando um
algoritmo determinístico e globalmente consistente.
O mecanismo
de roteamento e localização do tapestry
As características
principais do mecanismo Tapestry são baseadas fortemente no mecanismo
Plaxton. Como o roteamento Plaxton, todos os nós da rede possuem um mapa de vizinhança
com múltiplos níveis de roteamento e cada entrada descreve a localização do seu
vizinho mais
próximo. O mecanismo de localização do Tapestry é similar o do Plaxton.
No método
Plaxton cada nó armazena apenas informação de localização: <Object-ID (O),
Server (S)> armazena o objeto mais próximo do nó. O Tapestry por outro lado armazena a
informação de localização de todos os objetos. Isto tem um efeito de aumento da
flexibilidade
semântica.
A seção
seguinte explica como o mecanismo Tapestry detecta, opera e se recupera de falhas
(faults) que afetam o roteamento e a funcionalidade da localização.
Fault Handling
Uma decisão
desenvolvida pelo Tapestry foi que componentes que lidam com o problema de
falha de adaptatividade usando de um estado suave para manter armazenado um conteúdo
para uma recuperação mais tranqüila, ao invés de um estado pesado que pudesse necessitar
de
providências de segurança. O conteúdo armazenado é atualizado através de mensagens
regulares. Ao invés de tratar as falhas como um caso especial, o Tapestry lida como se elas
fossem partes de uma operação normal.
Fault-tolerant
Routing
Tabelas corrompidas
de mapas de vizinhança, falhas de servidores e de links são tipos de
faltas esperadas que necessitam ser cuidadas pela rede. O sistema deveria, idealmente,
detectar essas faltas rapidamente, operá-las por baixo e recuperar o estado do roteador
quando elas forem corrigidas. O Tapestry confia no timeout do TCP para detectar falhas nos
links e servidores durante uma operação normal. Cada nó da rede contém
ponteiros de
retorno que enviam pacotes UDP´s regularmente para o vizinho mais próximo. Isto é feito
para
garantir que o roteamento pode ser realizado através daquele nó. Tabelas corrompidas podem
ser facilmente e rapidamente detectadas usando se uma mensagem para verificar a ID de cada
nó que ela passar. O mapa de vizinhança de um nó armazena dois vizinhos de backup
em
resposta ao vizinho mais próximo. Se o vizinho primário de um nó falhar então o
nó utiliza um
dos seus vizinhos de backup no lugar. Quando um nó falha, ele é geralmente encontrado
e
reparado rapidamente. Ao invés do nó remover o nó falhado do seu mapa de vizinhança
este
nó é indicado como inválido. O roteamento é então realizado através de
uma rota alternativa
até que o nó seja restaurado. Entretanto o nó permanecerá como inválido na
rede apenas por
um período fixo de tempo para dar uma chance de ele ser reparado. Mensagens de uma rota
falhada são verificadas para observar o momento em que esta rota foi reparada. Se após um
tempo específico o reparo do nó não for realizado então o nó é removido
do mapa de
vizinhança. Este processo é realizado a fim de que se possa evitar uma cara reinserção
dos nós
recuperados.
Fault-tolerant
Location
No mecanismo do
Plaxton o nó raiz é vulnerável no sentido de que ele se torna um ponto único
de falha. No Tapestry múltiplos nós raiz são usados. Cada objeto terá agora várias
raízes
atribuídas a ele. Durante o processo de publicação (publishing) descrito anteriormente
os nós
raízes são usados para inserir informações de localização nos nós.
Os objetos armazenados em
intervalos regulares têm suas informações de localização republicadas por servidores
de
armazenamento.
Surrogate Routing
O Tapestry utiliza
um mecanismo de roteamento substituto, que é na realidade apenas um
algoritmo distribuído que incrementalmente computa um único nó raiz. Este algoritmo é
determinístico, escalável, e pode chegar a resultados consistentes de qualquer ponto na rede.
O roteamento substituto opera escolhendo um objeto do nó raiz que tem o mesmo nome da
sua ID. Isto é, entretanto, improvável devido à natureza escassa do namespace
dos nós. O
Tapestry funciona como se o nó não existisse tentando rotear para ele. Uma rota
para um
identificador não existente irá encontrar entradas de vizinhos vazia em várias posições
ao longo
do percurso. Aqui, o algoritmo seleciona um link existente que aja como uma alternativa
a
um link desejado. Esta seleção é feita através de uma seleção determinística
entre ponteiros de
vizinhos existentes. O roteamento termina uma vez que um mapa de vizinhança foi alcançado
onde a única entrada não nula pertence ao nó atual. Aquele nó é então
designado como uma
raiz substituta para o objeto.
|
|
Kademlia é
um sistema de informação P2P que retorna um resultado de uma busca completa
em uma rede com um tempo de O(), onde o n é o número de nós que existem na rede.
Obviamente este esquema é extremamente escalável, mas deve ser realizado de um outset
que um dado pedaço do conteúdo deve estar num nó em particular para ser achado e
recuperado. Dado isto, nenhuma conta é aceita de uma largura de banda disponível para um
nó, um PC com uma conexão discada de 56kbps pode esperar hospedar, por exemplo, um
grande arquivo de media, e disponibilizar para quem o quiser. Certamente o sistema não é
preparado para um compartilhamento em larga escala como o Napster, mas sim para
armazenar arquivos distribuídos numa rede de alta velocidade e de razoável homogeneidade.
Chaves e conteúdo
Para se decidir
onde o pedaço do conteúdo deve ser colocado na rede, um hash de 160-bits
é primeiramente obtido. Os Hashes devem ser únicos para cada arquivo. Podemos
imaginar
um esquema de hashing onde um arquivo é dividido em 160 partes e o primeiro bit de
cada
parte é guardado. Estes 160 bits podem ser usados como nosso hash, e dessa maneira
seria
muito difícil achar dois hash iguais para dois arquivos diferentes. Kademlia usas uma
técnica
similar a esta. Um hash é obtido e passaremos a se referir a ele como uma chave. Um
arquivo (ou outro conteúdo) é chamado de valor, e no Kademlia o par chave/valor é
armazenado no nó que possui a identidade (nodeID) de 160 bits mais próxima da chave. O
conceito de proximidade será discutido posteriormente. O conteúdo deve estar situado neste
nó em particular para que ele possa ser facilmente encontrado. Por esta razão o Kademlia é
tido como uma tabela de hash distribuída (Distributed Hash Table). De forma a encontrar
um
arquivo, o Kademlia simplesmente obtém a chave desse arquivo é o retira do nó que possui
a
identidade mais próxima dessa chave. A responsabilidade ter que armazenar o conteúdo de
outros faz com que o Kademlia provavelmente não possa ser usado como um compartilhador
de arquivos da maneira com que o Napster e o Gnutella foram.
Distância
Dado que um pedaço
de um conteúdo pode ter qualquer chave de 160 bits, mas apenas uma
fração dos 160 bits da identidade do nó são usados, deve existir um meio de decidir
onde
armazenar um conteúdo ao qual a chave não é exatamente igual a qualquer outra chave.
O
Kademlia resolve este problema inventando uma maneira de aproximação entre dois números
de 160 bits. Estamos nos referindo a uma métrica XOR, porque quando fazemos a operação
de XOR entre dois números obtemos sua diferença, que é tratada como uma distância.
Um
par chave/valor é então armazenado num nó com identidade próxima à da chave.
Esta métrica
é também usada para determinar quão próximo se encontram dois nós, o que importante
quando se realiza uma busca.
Busca
Cada nó da
rede mantém contato informando para apenas outros Logn outros nós que estão
conectados a ele. A informação é composta de identidade do nó (nodeID), endereço
IP, e
porta UDP do nó. Podemos pensar na rede como uma árvore binária de nós organizados
de
acordo com suas identidade (veja a figura abaixo). Qualquer nó dado deve possuir um contato
em cada sub-árvore na qual ele não está contido.
Figura 2
Na realidade cada
nó possui múltiplos (tipicamente 20) contatos em suas sub-árvores. Para
cada sub-árvore os contatos são armazenados num balde (bucket). A figura abaixo mostra um
exemplo onde cada balde guarda no máximo dois contatos.
Figura 3
De maneira a encontrar
uma chave em particular, o nó primeiramente determina a sub-árvore
que contém o nó desejado (baseado no início da chave). Então ele pede a todos os
seus
contatos daquela sub-árvore que o retornem seus contatos. O nó que fez a requisição
então
analisa os contatos e encontra contatos mais próximos do seu alvo. A cada passo a distância é
reduzida em até 50 % até que o alvo é atingido.
Nós entrando
e saindo
Assim que um nó
pede a outro seus contatos, o nó chamado armazena na usa lista de contato
o nó que o chamou. Este é o primeiro mecanismo pelo qual a tabela de roteamento de cada nó
se mantém atualizada. A propriedade simétrica do XOR permite que um nó possa ter o direito
de distribuir seus contatos, isto é, ele terá igual número de contatos que qualquer nó
na figura
3. Dado que cada balde de contatos tem uma capacidade finita se torna necessário descartar
algum contato ao gravar um novo. O Kademlia implementa uma política dos recentemente
visitados, removendo contatos que não se tem se escutado a um grande período de tempo.
Quando um nó
se junta à rede ele agrega alguns contatos de um nó arbitrário e os utiliza para si
próprio. Eles então realizam uma busca para eles próprios. Isto resulta num chamado a
outros
nós, o que faz com que eles sejam avisados quanto a presença desse novo nó. Porque uma
nova identidade foi atribuída, o novo nó pode ter se tornado o nó mais próximo de
alguma
chave. Uma vez avisados quanto a isso, os nós mais próximos replicaram o par chave/valor
apropriado para o novo nó. Desta maneira todos os pares chave/valor serão encontrados em
seus respectivos nós.
|
|
A segurança é um componente essencial para qualquer sistema de computação e é
especialmente relevante para sistemas P2P. Neste capítulo iremos abordar alguns tópicos
principais de segurança de sistemas P2P como: necessidade de segurança, conseqüências
de
uma segurança fraca, métodos de segurança e o futuro da segurança.
|
|
Nestes dias turbulentos
podemos pensar que a segurança P2P é o menor dos problemas do
mundo. Entretanto fraudes nas grandes corporações e perdas de receitas devidos a ataques a
redes internas tem trazido o P2P para a linha de frente no mundo de TI (tecnologia da
informação) O Napster foi o pioneiro mas desde que ele passou a travar brigas judiciais mais
e
mais aplicações P2P têm causado dores de cabeça nas grandes corporações
mundiais. Com
um protocolo de segurança bem desenvolvido essas dores de cabeça poderiam ser revertidas
em recursos valiosos para essas empresas.
O diagrama abaixo
ilustra as fendas na segurança quando usamos aplicações P2P. Podemos
observar que permitindo que essas aplicações sejam colocadas nas rede, essas redes passam
a
correr um risco enorme.
Figura 4- Fendas na segurança de rede com aplicações
P2P retirada da página http://ntrg.cs.tcd.ie
Seguindo este ponto
de vista, devemos estar preocupados de em nos defendermos de nós
mesmos. Os pontos mais importantes para isso são: controle de conexão, controle de acesso,
controle de operação, antivírus e é claro a proteção dos dados armazenados
nos nossos
computadores.
Ameaças externas
As redes P2P permitem
que sua rede principal seja aberta a várias formas de ataque, breack-
in, espionagens e danos maliciosos. O P2P em si não trás nenhuma nova ameaça a rede
apenas os familiares como worms e vírus.
As redes P2P também
podem permitir que um funcionário faça download e utilize materiais
sem permissão e que violem as leis de direitos autorais, e compartilhe arquivos desta mesma
maneira. Aplicações como Napster, KaZaa, Grokster e outros têm sido populares entre os
amantes de música e usuários de Internet por vários anos, e muitos funcionários
tiram vantagem
das redes de alta velocidade para fazer downloads de arquivos nos seus locais de trabalho.
Esta situação representa numerosos problemas para uma rede corporativa que utilizam grandes
largura de banda e estão sujeitos a ataques de vírus através de arquivos infectados que
foram
baixados através das redes P2P.
Roubo (Theft)
Empresas podem
perder milhões em propriedades tal como o código fonte que disfarçados em
outros arquivos usando tecnologias do P2P. Ferramentas de warpping como Warpstar
(freeware) pode disfarçar um arquivo .zip contendo um código fonte de uma empresa,
em
um arquivo de música MP3. Como resultado um cúmplice de fora da empresa pode acessar o
KaZaa e transferir o arquivo disfarçado. Para a segurança dessas companhias esta ação é tida
como uma transação normal, mesmo que as empresas não permitam que os seus funcionários
façam compartilhamento de músicas usando P2P.
Obstrução
da largura de banda e compartilhamento de arquivo
Aplicações
P2P como o KaZaa, Gnutella e FreeNet tornam essas ações possíveis para um
computador que compartilha arquivos com outros localizados em outras localidades na
Internet. O maior problema com o compartilhamento de arquivos é que eles resultam num
enorme tráfego que obstrui a rede das instituições. Isto afeta a comunicação
dos usuários
internos da rede assim como clientes de e-business o que resulta em perdas de capital para a
empresa.
Bugs
Para que as aplicações
de compartilhamento de arquivo funcionem apropriadamente o
software correto deve ser instalado no sistema dos usuários. Se este software contém um
bug isto pode expor a rede a inúmeros ricos.
Quebra de criptografia
Processamento distribuído é outra aplicação P2P. Pegar vários computadores e interligá-los
resulta numa enorme capacidade computacional para solucionar problemas complicados.
Distributed.Net é um exemplo proeminente deste tipo de aplicação. Em 1999 Distributed.Net
junto com o Eletronic Frontier Fondation ( www.eff.org
) lançaram um ataque força bruta no
algoritmo de criptografia de 56 bits DES. Eles quebraram o DES em menos de 24 horas. O
Distributed.Net tinha capacidade de testar 245 bilhões de chaves por segundo. Naquele tempo o
DES era o algoritmo de criptografia mais forte que o governo dos Estados Unidos permitiam
exportar.
Trojans, vírus
e Sabotagens
Um usuário
de um sistema P2P pode sem querer instalar um arquivo contaminado em sua
maquina que pode causar sérios danos. Por exemplo, um pedaço de código que possa parecer
familiar ou um programa de compartilhamento de arquivos poderia incluir uma backdoor que
permita o acesso a outros usuários de computadores. Um infrator poderia ser capaz de causar
sérios danos ou obter informações sigilosas.
Usuários de
sistemas P2P poderiam facilmente configurar suas aplicações para expor
informações confidenciais para ganho próprio. Aplicações de compartilhamento
de arquivos
podem resultar uma perda de controle de quais dados estão sendo enviados para fora de uma
organização.
Aplicativos P2P
burlam arquiteturas de segurança do mesmo modo que os Trojans fazem. A
aplicação P2P é instalada em dispositivos confiáveis que permitem a
comunicação através do
Firewall corporativo com outros usuários P2P. Uma vez estabelecida a comunicação o usuário
externo pode ter acesso remoto ao dispositivo confiável com o propósito de roubar dados
confidenciais da corporação, lançar um ataque de Denial of Service ou simplesmente
garantir
o acesso aos recursos da rede.
Acesso backdoor
Os aplicativos
P2P mais difundidos como KaZaa, Morpheus e Gnutella não foram
desenvolvidos para o uso em grandes corporações e o resultado dessa utilização introduz
sérios riscos de segurança de rede paras empresas. Por exemplo, se um usuário iniciar
o
Gnutella e então usar a Intranet da empresa para acessar a caixa de e-mail, um infrator usar
esse backdoor para ter acesso à LAN corporativa.
Instant
Message (IM) não criptografada
Os aplicativos
de Instant mensage (IM) como MSN, ICQ e o fornecido pela AOL também
são uma ameaça às informações de uma companhia. Se esses aplicativos são
usados a respeito
de informações sigilosas, o infrator pode ler todas as mensagens que são enviadas e recebidas
através da rede ou da internet utilizando um programa de monitoramento de rede.
Aplicações
de IM têm sido desenvolvidas e incrementadas com novas capacidades como
mensagem de voz e compartilhamento de arquivos. Adicionando o compartilhamento de
arquivo também são adicionados todos os riscos que este tipo de aplicação trás
como foi
apresentado anteriormente.
Confidencialidade
O KaZaa e o Gnutella dão acesso direto à arquivos armazenados nos discos rígidos
de outros
clientes. Como conseqüência é possível para um hacker descobrir qual
o sistema operacional
o computador hospedeiro possui e conectar a pastas que não estão permitidas para
compartilhamento obtendo assim acesso a informações sigilosas e arquivos de sistema.
Autenticação
Existe também
a questão da autenticação e autorização. Quando usamos um sistema P2P
temos que ser capazes de identificar se quando um par quiser acessar uma informação esse
usuário realmente é quem ele diz ser e só então autorizar a informação.
Ameaças Internas
Assim como as ameaças
externas existem algumas ameaças internas que deve ser discutidas.
Interoperabilidade
É a área
de maior interesse de segurança a respeito de redes P2P. A introdução de diferentes
plataformas, diferentes sistemas e diferentes aplicações trabalhando juntas numa dada infra-
estrutura abre uma série de questões a respeito de segurança que é associado com
a
interoperabilidade. Quanto maiores forem as diferenças dentro de uma infra-estrutura, maiores
serão os problemas de segurança associados.
Negócio
privado numa rede pública
Muitas companhias
conduzem negócios particulares através de redes públicas. Isto leva a
exposição do sistema a diversos riscos de segurança. Esses riscos devem ser endereçados
de
maneira a evitar a responsabilidade vinculada ao seu uso.
Adicionar e remover usuários
Deve existir um
método praticável para adicionar/deletar usuários para/da rede sem
acrescentar vulnerabilidade. O sistema esta sobre a ameaça de usuário que conhecem todas as
entrada e saídas do sistema, por exemplo, a existência de trapdoors etc.
Segurança
geral
P2P compartilha
muitos problemas de segurança e soluções com o resto da rede e sistemas
distribuídos. Por exemplo, dados corrompidos, transferência não confiável, problemas
de
latência e problemas de identificação etc.
Perigos da distribuição
Quando usamos aplicações
com processamento distribuído é pedido ao usuário para baixar,
instalar e rodar um arquivo executável na sua estação a fim de que ele possa participar.
Uma
negação de serviço (denial of service) poderia acontecer se o software for incompatível
ou se
ele estiver com algum bug.
O problema das
pessoas
Sempre existirão
usuários maliciosos que tem a intenção de ganharem acesso clandestino às
redes corporativas. E não importando qual o protocolo de segurança é colocado para impedir
a ação desses usuários, com o tempo eles encontraram um jeito de burlar esses protocolos.
Então o que os mecanismos de segurança precisam fazer é se manterem à frente desses
hackers criando cada vez maiores e melhores protocolos. Mas isto não tão simples
de ser
realizado.
|
|
Todos os sistemas
de segurança atuais são baseados em criptografia que utiliza tanto chave
simétrica/privada quanto chave assimétrica/publica, ou às vezes uma combinação
das duas.
Nesta sub-seção iremos introduzir os aspectos básicos das técnicas das chaves públicas
e
privadas e compara-los as características principais.
Técnicas
da chave privada
As técnicas
de chave privada são baseadas no fato de que o remetente e o destinatário
compartilham um segredo, que é alterado através de várias operações de criptografia
como a
encriptação de decriptação de mensagens e a criação e verificação
de dados de autenticação
de mensagens. Essa chave pública deve ser trocada através do um processo fora do campo
anterior para a comunicação pretendida (Usando um PKI, por exemplo).
Técnicas da chave pública
Técnicas de
chave pública são baseadas nos pares de chaves assimétricas. Geralmente cada
usuário está em posse de apenas um par de chaves. Uma das chaves do par está publicamente
disponível enquanto que a outra está privada. Porque uma chave está disponível não é
necessária uma troca de chave fora da banda out of band, entretanto existe a necessidade
de
uma infra-estrutura para distribuir a chave pública autenticavelmente. Já que não é
necessário
um pré-compartilhamento dos segredos anteriores para a comunicação, as chaves públicas
são
ideais para apoiar segurança entre partes previamente conhecidas.
Par de chaves
assimétricas
Diferente de uma
chave da porta da frente, que permite ao seu portador bloquear ou
desbloquear esta porta com igual facilidade, a chave pública utilizada na criptografia é
assimétrica. Isto significa que a chave consegue encriptar uma mensagem com extrema
facilidade, porém decriptar como um todo, é considerado muito difícil.
Além disso,
sendo uma função de mão única, as chaves públicas cripitográficas
também
funcionam como trapdoors. O inverso pode ser obtido se a chave privada é conhecida.
|
|
Mecanismos para
estabelecer uma criptografia forte e verificável são muito importantes. Estes
mecanismos são padrões de protocolos de autorização que permitem que pares assegurem
que eles estão falando com o sistema remoto pretendido.
Protocolo Secure
Sockets Layer (SSL)
Para uma proteção
das informações transmitidas em uma rede P2P, alguns sistemas empregam
o protocolo padrão Secure Sockets Level (SSL). Este protocolo garante que um arquivo e
eventos enviados cheguem intactos e invisíveis para qualquer um que um que não seja o
destinatário. Além disso, porque todos os pares usam SSL, ambos os lados automaticamente
provam quem eles são para cada um antes de transferirem qualquer informação pela rede.
O
protocolo providencia mecanismos de comunicação que são à prova de adulteração
e
confidenciais, usando as mesmas técnicas utilizadas pela maioria dos webmasters que
protegem usuário em transações financeiras transmitidas pela Internet.
Tecnologia IPSec
A maioria das VPN´s
(Virtual Private Networks) utilizam a tecnologia IPsec, o framework
que envolve vários protocolos que tem sido o padrão para vários especialistas. O IPsec é útil
porque ele é compatível com os mais diferentes tipos de hardware e software para VPN, e é
o
mais para redes com clientes com acesso remoto. O IPsec requer pouco conhecimento para
os cliente, porque a autenticação não é baseada no usuário, o que significa
que um token
(como um Secure ID ou um Crypto Card) não é utilizado. Invés disso, a segurança
vem do IP
da estação ou o seu certificado (e.g. X.509), que estabelece a identidade do usuário
e garante
sua integridade na rede. Um túnel IPsec basicamente age como uma camada de rede que
protege todos os pacotes de dados que passa por ela qualquer que seja a aplicação.
Infra-estrutura
de chave pública (PKI)
A Public Key Infrastruture
(PKI), toda caracterizada pelo X.509 sobre um backbone de
rede SSL. Essa combinação de X.509, autenticação PKI e encriptação de
transporte SSL é o
estabelecimento de um padrão criptográfico para o e- commerce na Internet.
Este padrão
permite certificados de segurança da Endeavors, ou de qualquer outra
reconhecida autoridade do certificado X.509, para fornecer uma identidade verdadeira a
qualquer par que surja na rede. O uso da encriptação de segurança ponto-a- ponto SSL
habilita cada par de peers que se comunicam a terem uma única chave. A vantagem é
que
quando um peer deixa a comunidade, todas as suas chaves únicas se tornam inválidas, mas as
chaves entre os outros membros da comunidade não são afetadas.
|
|
As redes P2P têm
recebido cada vez mais atenção ao longo da sua existência. Cada vez mais
as pessoas tendem a compartilhar seus recursos e a necessitarem de cada vez mais segurança,
pois a industria da infração eletrônica também acompanha essa evolução.
Muitas propostas
já estão sendo estudadas. Pessoas estão percebendo que a segurança é uma
área muito importante para a credibilidade de uma aplicação P2P.
Usuários
ganhando confiança própria
Uma área de
estudo proposta recentemente é a que os usuários ganhem confiança dentro de
uma comunidade P2P. Todos os usuários devem possuir uma única assinatura digital, como um
IP, mas por usuários não por máquinas. Associada a esta assinatura deverá existir
um nível de
confiança varie de acordo com uma escala. Dependendo do comportamento do usuário o seu
grau de confiança deve aumentar ou diminuir.
A proposta é
que todos os usuários comecem com o grau de confiança mais baixo. Isto ocorre
para impedir que usuários não desejados entrem no sistema e criem novas contas e aumente os
seus próprios níveis de confiança imediatamente. Os usuários tem que estar ativos
na rede por
um certo período de tempo, antes que seus nível de confiança atinja níveis melhores.
Os
usuários também podem guardar seu locais confiáveis em disco, para que ele possa
compartilhar seus recursos sem precisar passar pela política de níveis de confiança.
Biometria
A biometria envolve
o uso de uma característica pessoal para autenticar o usuário.
Características que são comumente usadas incluem uma imagem facial da pessoa, uma
assinatura, uma impressão digital ou um padrão de retina. A vantagem da característica
biométrica é que os usuários não precisam lembra nenhuma senha ou armazenar nenhuma
chave, que são as maiores fraquezas num sistema de autenticação convencional.
Ultimamente, a
tecnologia tem encontrado um papel mais forte como uma integração e
complementação de um sistema de autenticação maior, talvez um em combinação
com um
certificado criptográfico mencionado acima, ao invés de defender um ponto singular de defesa.
Criptografia
por chave quântica
Muitos sistemas
de encriptação modernos dependem da dificuldade em realizar um ataque de
força bruta às chaves privadas, devido às restrições de processamento e de
tempo. Embora
ainda no estágio teórico, a melhoria de desempenho dado por um hipotético computador
quântico renderia uma quantidade bem inferior de algoritmos.
Obviamente novos
algoritmos de criptografia serão necessários. Criptografia quântica utiliza os
estados dos fótons como chaves para codificar informações. De acordo com Heisenberg, é
impossível descobrir ambos o momento e a posição de um fóton em um dado instante
de
tempo. Entretanto, em teoria um invasor não poderia descobrir uma chave privada baseando-
se na informação do estado do fóton; o invasor teria que ter o fóton atual para
decifrar
qualquer dado encriptado com uma chave.
Infelizmente este
conceito é, para o momento, muito complexo para ser implementado. Os
cientistas da IBM construíram o primeiro protótipo funcional de uma chave de distribuição
quântica (QKD) no final dos anos 80. Ainda está muito longe, mas já pudemos observar
grandes progressos nestas áreas. E embora nós não possamos ver o QKD no mercado por
ainda um bom tempo, a tecnologia soa incrivelmente promissora.
|
|
Com
o tempo podemos observar que a tecnologia P2P vem crescendo
assustadoramente, porque hoje em dia praticamente todos os computadores
pessoais possuem alguma forma de aplicação que utilizam conceitos
P2P. E por causa da estrutura de rede existente desde o nascimento
da Internet estes sistemas só tendem a denegrir mais e mais
as condições de tráfego na rede. Já atentando para este fato
começam a surgir tecnologias simétricas de conexão de rede já
visando o tráfego que realmente está mais em foco no momento
por causa das aplicações P2P.
No caso da segurança é obvio pelas afirmações
acima que se trata de uma questão muito importante ainda mais
quando se trata de desenvolvimento de sistemas P2P. No momento,
talvez essas questões sejam o fator principal da inibição de
um crescimento ainda maior desses sistemas. È necessário que
todos os usuários se comprometam a utilizar os métodos P2P de
maneira mais responsáveis e quando qualquer descoberta em relação
a alguma falha geral de proteção de algum sistema que seja reportada
imediatamente.
|
|
|
|
|
|
O que são
redes Peer-to-peer?
São redes
onde todos os computadores que a compõe possuem os mesmos direitos e as
mesmas reponsabilidades, isto é, todos funcionam como clientes e servidores se comparados
com o sistema convencional.
|
|
Descreva os dois
tipos de arquitetura de redes utilizadas em sistema P2P?
Arquitetura centralizada
onde existe um servidor (diretório) que armazenas diversas
informações de cada nó da rede e realiza o controle da transferência de arquivos
entre os
pares.
Arquitetura descentralizada
que não possui servidor central e todo o controle é feito através de
troca de mensagens entre os pares e através de protocolos rígidos de comunicação.
|
|
Cite o nome de
cinco aplicativos desenvolvidos utilizando os métodos de transferência P2P?
Napster, Gnutella,
Morpheus, KaZaa, FreeNet
|
|
Explique como funciona
um mecanismo de busca simples em uma rede descentralizada?
Quando um par faz
uma consulta, esta consulta é transmitida para todos os seus pares vizinhos.
Se um par vizinho não fornecer resultados então esta consulta e transmitida para os pares
vizinhos do vizinho. Se o recurso é encontrado, aquele par envia uma mensagem para o par
que originou a consulta indicando que encontrou resultados para a consulta, e então estabelece
uma conexão P2P.
Cada consulta tem
um contador de TTL (Time-To-Live). Tipicamente, o TTL é ajustado entre
cinco e sete, e o valor é decrementado à medida que a consulta passa por um nó. Outro
contador informa o número de saltos (hops). Uma vez que o contador TTL atinge o valor zero,
a consulta é então descartada.
|
|
Cite dois tipos
de ameaça externas e dois tipos de ameaças internas em uma rede P2P e
explique como elas ocorrem?
Confidencialidade:
O KaZaa e o Gnutella dão acesso direto à arquivos armazenados nos
discos rígidos de outros clientes. Como conseqüência é possível para um hacker
descobrir
qual o sistema operacional o computador hospedeiro possui e conectar a pastas que não estão
permitidas para compartilhamento obtendo assim acesso a informações sigilosas e arquivos de
sistema.
Autenticação:
Existe também a questão da autenticação e autorização. Quando usamos um
sistema P2P temos que ser capazes de identificar se quando um par quiser acessar uma
informação esse usuário realmente é quem ele diz ser e só então autorizar
a informação.
Negócio privado
numa rede pública: Muitas companhias conduzem negócios particulares
através de redes públicas. Isto leva a exposição do sistema a diversos riscos de
segurança.
Esses riscos devem ser endereçados de maneira a evitar a responsabilidade vinculada ao seu
uso.
Adicionar e remover usuários:
Deve existir um método praticável para adicionar/deletar
usuários para/da rede sem acrescentar vulnerabilidade. O sistema esta sobre a ameaça de
usuário que conhecem todas as entrada e saídas do sistema, por exemplo, a existência
de
trapdoors etc.
|
|
|
|
|