Sumário
Como um novo cliente pode participar de um enxame sem um rastreador ou o conhecimento de pelo menos um membro do enxame para trocar pontos?
Você não pode. É impossível.*
* (A menos que um nó na sua rede de área local já seja um nó no DHT. Nesse caso, você pode usar um mecanismo de transmissão, como o Avahi, para "descobrir" esse par e inicializá-lo. eles se auto-iniciam? Eventualmente, você atingirá uma situação em que precisa se conectar à Internet pública. E a Internet pública é somente unicast, não multicast, portanto, você está preso ao uso de listas pré-determinadas de pares.)
Referências
O Bittorrent DHT é implementado através de um protocolo conhecido como Kademlia , que é um caso especial do conceito teórico de uma tabela de hash distribuída .
Exposição
Com o protocolo Kademlia, ao ingressar na rede, você passa por um procedimento de inicialização , o que exige absolutamente que você conheça com antecedência o endereço IP e a porta de pelo menos um nó que já participa da rede DHT. O rastreador ao qual você se conecta, por exemplo, pode ser um nó DHT. Depois de conectar-se a um nó DHT, prossiga para o download de informações do DHT, que fornece informações de conectividade para mais nós, e navegue nessa estrutura de "gráfico" para obter conexões com mais e mais nós, que podem fornecer ambos conectividade com outros nós e dados de carga útil (partes do download).
Eu acho que sua pergunta real em negrito - a de como participar de uma rede Kademlia DHT sem saber quaisquer outros membros - é baseado em uma premissa falsa.
A resposta simples para sua pergunta em negrito é que você não . Se você não conhece QUALQUER informação sobre um único host que possa conter metadados DHT, você está parado - você não pode nem começar. Quero dizer, com certeza, você pode tentar forçar uma tentativa de descobrir um IP na Internet pública com uma porta aberta que transmita informações de DHT. Mas o mais provável é que o seu cliente BT seja codificado para algum IP ou DNS estático específico, resolvido para um nó DHT estável, que apenas fornece os metadados DHT.
Basicamente, o DHT é apenas como descentralizado como o mecanismo de adesão, e porque o mecanismo de junção é bastante frágil (não há nenhuma maneira de "broadcast" em toda a Internet! Então você tem que unicast para um host individual pré-designado para obter a DHT dados), o Kademlia DHT não é realmente descentralizado. Não no sentido mais estrito da palavra.
Imagine este cenário: alguém que deseja que o P2P pare sai e prepara um ataque a todos os nós DHT estáveis usados com freqüência que são usados para inicialização. Depois de encenar o ataque, eles o lançam em todos os nós de uma só vez. Wham ; todo nó DHT de bootstrap está inativo de uma só vez. O que agora? Você está preso à conexão com rastreadores centralizados para baixar listas tradicionais de pares deles. Bem, se eles atacam os rastreadores também, então você é realmente, realmenteaté um riacho. Em outras palavras, o Kademlia e toda a rede BT são limitados pelas limitações da própria Internet, pois há um número finito (e relativamente pequeno) de computadores que você precisaria atacar ou colocar offline com sucesso para evitar> 90% de usuários de se conectarem à rede.
Depois que os nós de inicialização "pseudo-centralizados" desaparecem, os nós internos do DHT, que não são inicializados porque ninguém na parte externa do DHT conhece os nós internos , é inútil; eles não podem trazer novos nós para o DHT. Portanto, à medida que cada nó interno se desconecta do DHT ao longo do tempo, devido ao desligamento dos computadores, à reinicialização de atualizações etc., a rede entra em colapso.
Obviamente, para contornar isso, alguém poderia implantar um cliente BitTorrent corrigido com uma nova lista de nós DHT estáveis ou endereços DNS pré-determinados e anunciar em voz alta à comunidade P2P para usar essa nova lista. Mas isso se tornaria uma situação "whack-a-mole", em que o agressor (o comedor de nós) faria o download progressivo dessas listas por conta própria e visaria os bravos novos nós de bootstrapping, e os colocaria offline também.
Resposta curta: Ela recebe-lo do arquivo .torrent.
Quando um cliente BitTorrent gera um arquivo .torrent sem rastreador (ou seja, quando alguém está se preparando para compartilhar algo novo via BitTorrent), ele adiciona uma chave "nós" (chave como em "par chave / valor"; como um cabeçalho de seção, não é uma chave criptográfica) para o arquivo .torrent que contém os nós DHT K mais próximos conhecidos por esse cliente.
http://www.bittorrent.org/beps/bep%5F0005.html#torrent-file-extensions
Portanto, quando você alimenta o seu cliente BitTorrent com o arquivo .torrent de um torrent sem rastreador que deseja baixar, ele usa o valor dessa chave "nós" do arquivo .torrent para encontrar seus primeiros nós DHT.
fonte
você não pode! você precisa conhecer pelo menos um IP de um dos grupos, essa é a fraqueza de uma rede p2p. Você pode transmitir às cegas para encontrar o primeiro IP, mas em uma rede grande, se todo mundo estiver fazendo isso, teremos um problema de congestionamento. Você pode usar um cache, mas é possível apenas para enxames grandes (cache de endereço de ponto maior). Você sempre precisa conectar um rastreador para solicitar apenas o primeiro IP.
Distribuído no DHT significa que os clientes não precisam manter toda a lista que contém a soma md5 do nome dos arquivos compartilhados, com os pares correspondentes. A lista de hash é formada por partes iguais e distribuída com redundância por todo o enxame. Se um ponto de desconexão de pares existir em outro lugar com a mesma parte da lista de hash. Os colegas compartilham o endereço para o titular da parte da lista de hash.
torrent-freak escreveu um post sobre este assunto
fonte
Ele pede por isso.
Os clientes Bittorrent que oferecem suporte ao DHT executam dois aplicativos ponto a ponto separados.
O primeiro faz o compartilhamento de arquivos: Um enxame no jargão bittorrent é um grupo de pares que compartilham um objeto bittorrent (por exemplo, uma estrutura de arquivos ou diretórios). Cada objeto bittorent possui alguns metadados salvos em um arquivo .torrent. (Inclui o tamanho do objeto, o nome da pasta, possivelmente as informações do rastreador ou os nós. Ect.) O hash dos metadados necessários para fazer o download desse objeto bittorrent é chamado de infohash.
O DHT é basicamente um segundo aplicativo P2P com o objetivo de substituir os rastreadores: ele armazena pares de (infohash, swarm) e atualiza o swarm se receber mensagens de anúncio. Um novo cliente deve ter conhecimento de algum "nó" (linguagem bittorrent para um par do DHT) para inicializar suas informações do DHT. Aqui os argumentos apresentados por @allquixotic se aplicam. Como o MDHT atualmente consiste em mais de 7 milhões de pares, um ataque contínuo de negação de serviço parece improvável.
Em seguida, ele pode consultar o DHT com relação a um infohash e não precisa usar um rastreador ou conhecer um colega que já fazia parte do enxame. Se um dos colegas com quem ele contatar suportar o compartilhamento de metadados, ele precisará apenas do infohash para recuperar o arquivo .torrent do enxame.
fonte
A maioria dos clientes de rede p2p é inicializada a partir de uma lista de pares de sementes aos quais eles se conectam inicialmente ... uma vez que eles se conectam a um ponto inicializado, ele baixa o restante de maneira distribuída. Ele se conecta ao ponto de bootstrap e baixa sua lista DHT de pares e depois vai para cada um deles e faz o mesmo, etc. etc.
Por exemplo:
Aqui está uma lista de nós de autoinicialização:
https://github.com/dontcontactme/p2pspider/blob/master/lib/dhtspider.js#L10
Aqui é onde o cliente se conecta a eles para hidratar a lista de pares:
https://github.com/dontcontactme/p2pspider/blob/master/lib/dhtspider.js#L60
Isso é semelhante ao funcionamento de um rastreador, exceto que praticamente qualquer pessoa pode ser um nó de autoinicialização, por isso é quase impossível desativá-lo.
A carteira principal do Bitcoin funciona da mesma maneira. Ele permite que você altere os pares de sementes de autoinicialização se, por algum motivo, os padrão forem desativados.
fonte