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


45

Eu já li esta resposta do Superusuário e este artigo da Wikipedia, mas ambos são técnicos demais para eu realmente entender .

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

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

Minha pergunta é: como funciona o DHT? Ou seja, como um novo cliente pode se juntar a um enxame sem um rastreador ou o conhecimento de pelo menos um membro do enxame para trocar pontos?

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

Respostas:


48

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.


A maneira como você descreve o DHT parece o mesmo que a troca entre pares.
Celeritas

O que é distribuído sobre o DHT é que a carga útil real dos dados - ou seja, a lista de IPs e portas nas quais os arquivos podem ser baixados - é distribuída. Em uma troca entre pares, a lista inteira é armazenada em um computador, geralmente o rastreador, e baixada de maneira não semelhante a um download de arquivo. Eu poderia mencionar isso na minha resposta, mas toda essa pergunta (e as respostas) é apenas sobre a descoberta inicial ou a junção da rede DHT, não sobre o que acontece depois que você entra.
Allquixotic

1
Atingir todos os nós de autoinicialização impediria novos usuários de autoinicialização, mas não necessariamente usuários existentes que ficam offline e depois voltam. Tenho a impressão de que vários clientes se lembram do conjunto de nós ativos e os usam para se reconectar, em vez de fazer o bootstrap sempre.
26515 clacke

Com projetos como o masscan ( github.com/robertdavidgraham/masscan ), a descoberta de nós DHT sem um diretório centralizado deve ser viável
newlog

19

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

Um dicionário de torrent sem rastreador não possui uma tecla "anunciar". Em vez disso, um torrent sem rastreador possui uma chave "nós". Essa chave deve ser definida como os nós mais próximos da tabela de roteamento do cliente que gera o torrent. Como alternativa, a chave pode ser configurada para um nó válido conhecido, como um operado pela pessoa que gera o torrent. Por favor, não adicione automaticamente "router.bittorrent.com" aos arquivos torrent ou adicione este nó automaticamente às tabelas de roteamento dos clientes.

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.


3
Esta é uma informação boa e explicativa. Eu acho que sua resposta explica o que os clientes atuais do BitTorrent fazem para lidar com as limitações e problemas teóricos identificados na minha resposta. Esperamos que ambas as nossas respostas sejam votadas, pois explicam diferentes aspectos da resposta.
Allquixotic

3
É por isso que o "mesclar novo arquivo torrent com o download torrent" em muitos clientes faz com que um torrent morto ganhe vida?
Jesvin Jose

2
@aitchnyu sim, mas o arquivo torrent também pode ter rastreadores adicionais / diferentes.
longneck

2
Parece que nenhum cliente BitTorrent realmente inclui as informações dos nós. Testaram Transmissão, Vuze, Dilúvio, Linha Principal e outros.
Aeyoun

1

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


0

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?

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.


0

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.


Os links estão mortos
zella 06/06
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.