Em termos simples, como um cliente BitTorrent inicialmente descobre peers usando DHT?

43

Eu já li esta resposta do superusuário e este artigo da Wikipedia , mas ambos são muito técnicos para mim, para realmente envolver minha cabeça.

Eu entendo a ideia de um rastreador: os clientes se conectam a um servidor central que mantém uma lista de pares em um enxame.

Eu também entendo a ideia de troca de pares: os clientes que já estão em um enxame enviam a lista completa dos seus pares uns aos outros. Se novos pares forem descobertos, eles serão adicionados à lista.

Minha pergunta é: como funciona o DHT? Ou seja, como um novo cliente pode participar de um enxame sem um rastreador ou o conhecimento de pelo menos um membro do swarm para trocar de par com ele?

(Nota: explicações simples são melhores.)

    
por Steve V. 06.05.2013 / 21:53

5 respostas

46

Resumo

How can a new client join a swarm without either a tracker or the knowledge of at least one member of the swarm to exchange peers with?

Você não pode. É impossível. *

* (A menos que um nó na sua rede local seja um nó no DHT. Nesse caso, você poderia usar um mecanismo de transmissão, como Avahi, para "descobrir" esse peer, e fazer o bootstrap a partir deles. Mas como eles se auto-inicializaram? Eventualmente, você vai encontrar uma situação na qual você precisa se conectar à Internet pública. é somente unicast, não multicast, então você está preso a usar listas pré-determinadas de pares.)

Referências

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, quando você entra na rede, você passa por um procedimento bootstrapping , que requer absolutamente que você sabe, antecipadamente , o endereço IP e a porta de pelo menos um nó já participando da rede DHT. O rastreador ao qual você se conecta, por exemplo, pode ser um nó DHT. Quando você estiver conectado a um nó DHT, prossiga com o download de informações do DHT, que fornece informações de conectividade para mais nós e, em seguida, navega pela estrutura "graph" para obter conexões com mais e mais nós, que podem fornecer conectividade com outros nós e dados de carga útil (partes do download).

Eu acho que sua pergunta real em negrito - de como entrar em uma rede Kademlia DHT sem conhecer qualquer outro membro - é baseada em uma suposição falsa.

A resposta simples à sua pergunta em negrito é você não . Se você não sabe QUALQUER informação sobre um único host que possa conter metadados DHT, você está preso - você não pode nem mesmo começar. Quero dizer, claro, você poderia tentar a força bruta descobrir um IP na Internet pública com uma porta aberta que transmitisse informações sobre DHT. Mas o mais provável é que o seu cliente BT esteja codificado para algum IP ou DNS estático específico que resolva para um nó DHT estável, que apenas fornece os metadados DHT.

Basicamente, o DHT é tão descentralizado quanto o mecanismo de junção, e porque o mecanismo de junção é bastante frágil (não há como "transmitir" por toda a Internet! então você tem que unicast um host pré-designado individual para obter os dados do DHT), o Kademlia DHT não é realmente descentralizado. Não no sentido estrito da palavra.

Imagine este cenário: alguém que quer que o P2P pare e apareça em todos nós de DHT estáveis comumente usados que são usados para bootstrapping. Uma vez que eles encenaram o ataque, eles colocam todos os nós todos de uma vez. Wham ; cada nó DHT bootstrapping é baixo tudo de uma só vez. O que agora? Você está preso a conectar-se a rastreadores centralizados para baixar as listas tradicionais de seus pares. Bem, se eles atacam os rastreadores também, então você está realmente em um riacho. Em outras palavras, o Kademlia e toda a rede da BT são limitados pelas limitações da própria Internet, na medida em que há um número finito (e relativamente pequeno) de computadores que você teria que atacar com êxito ou desativar offline para evitar > % de usuários de se conectar à rede.

Uma vez que os nós bootstrapping "pseudo-centralizados" se foram, os nós internos do DHT, que não são bootstrapping porque ninguém na parte externa do DHT sabe sobre os nós interiores , são inúteis ; eles não podem trazer novos nós para o DHT. Assim, como cada nó interior se desconecta do DHT ao longo do tempo, seja devido a pessoas desligando seus computadores, reiniciando para atualizações, etc., a rede entraria em colapso.

É claro que, para contornar isso, alguém poderia implantar um cliente BitTorrent corrigido com uma nova lista de nós DHT pré-determinados ou endereços DNS, e anunciar em voz alta para a comunidade P2P para usar essa nova lista. Mas isso se tornaria uma situação de "besteira", em que o agressor (o comedor de nós) progressivamente baixaria essas listas e direcionaria os bravos novos nós de bootstrapping, além de levá-los offline também.

    
por 06.05.2013 / 22:19
19

Resposta curta: Obtém a partir do arquivo .torrent.

Quando um cliente BitTorrent gera um arquivo .torrent sem tracker (ou seja, quando alguém está se preparando para compartilhar algo novo via BitTorrent), ele adiciona uma chave "nodes" (chave como em "key" / par de valores "; como um cabeçalho de seção, não uma chave de criptografia) para o arquivo .torrent que contém os nós DHT mais próximos de K conhecidos desse cliente.

link

A trackerless torrent dictionary does not have an "announce" key. Instead, a trackerless torrent has a "nodes" key. This key should be set to the K closest nodes in the torrent generating client's routing table. Alternatively, the key could be set to a known good node such as one operated by the person generating the torrent. Please do not automatically add "router.bittorrent.com" to torrent files or automatically add this node to clients routing tables.

Então, quando você alimenta seu cliente BitTorrent com o arquivo .torrent de um torrent sem tracker que você quer baixar, ele usa o valor da chave "nodes" do arquivo .torrent para encontrar seus primeiros nós DHT.

    
por 06.05.2013 / 22:35
1

você não pode! você tem que saber pelo menos um IP de um dos enxames, essa é a fraqueza de uma rede p2p. Você pode transmitir cegamente para encontrar o primeiro IP, mas em uma rede grande, se todos estiverem fazendo isso, teremos problemas de congestionamento. Você pode usar um cache, mas é possível apenas para grandes enxames (cache de endereços de mesmo nível). Você sempre tem que conectar um rastreador para perguntar apenas o primeiro IP.

Distribuído em DHT significa que os clientes não precisam manter toda a lista contendo a soma md5 do nome dos arquivos compartilhados, com pares correspondentes. A lista de hash é formada em partes iguais e distribuída com redundância por todo o enxame. Se um ponto de desconexão houver algum outro lugar com a mesma parte da lista de hash. Os pares compartilham entre si o endereço do bom titular da parte da lista de hash.

torrent-freak escreveu um post sobre este assunto

    
por 06.05.2013 / 22:34
0

How can a new client join a swarm without either a tracker or the knowledge of at least one member of the swarm to exchange peers with?

Ele pede por isso.

Os clientes do Bittorrent que suportam o DHT executam dois aplicativos peer-to-peer separados.

O primeiro faz o compartilhamento de arquivos: Um swarm na linguagem bittorrent é um grupo de pares compartilhando um objeto bittorrent (por exemplo, um arquivo ou estrutura de diretórios). Cada objeto bittorent possui alguns metadados que são salvos em um arquivo .torrent. (Inclui tamanho do objeto, nome da pasta, possivelmente informações do rastreador ou nós. Ect.) O hash dos metadados necessários para baixar esse objeto bittorrent é chamado de infohash.

O DHT é basicamente uma segunda aplicação 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 dados por @ allquixotic se aplicam. Como o MDHT atualmente consiste em mais de 7 milhões de pares, um ataque sustentado de negação de serviço parece improvável.

Ele pode então consultar o DHT com relação a um infohash e não precisa usar um rastreador ou conhecer um par que faz parte do enxame antes. Se um dos colegas que ele contatar apóia compartilhamento de metadados ele só precisa do infohash que pode recuperar arquivo .torrent do enxame.

    
por 21.10.2014 / 23:14
0

A maioria dos clientes da rede p2p é inicializada a partir de uma lista de pares de sementes aos quais eles inicialmente se conectam ... quando se conectam a um ponto de partida, ele faz o download do restante de maneira distribuída. Ele se conecta ao par de bootstrap e faz o download de sua lista de peers DHT e, em seguida, vai para cada um deles e faz o mesmo, etc. etc.

Por exemplo:

Aqui está uma lista de nós de bootstrap:

link

Aqui é onde o cliente se conecta a eles para hidratar a lista de pares:

link

Isso é semelhante a como um rastreador funciona, exceto que praticamente qualquer um pode ser um nó de bootstrap, então é quase impossível desativá-lo.

A carteira de núcleo Bitcoin funciona da mesma maneira. Ele permite que você altere os pares de bootstrap se, por algum motivo, os defaults forem desligados.

    
por 08.12.2016 / 06:46

Tags