Como funciona o Bittorrent?

31

Eu quero aprender mais sobre o modo bittorrent de compartilhamento de arquivos. Eu sou um usuário tecnicamente avançado (programador), então material tecnicamente avançado não é problema, mas deve ser conciso e direto ao ponto. Eu preciso de um bom livro de recursos / web que explique a arquitetura geral do bittorrent.

Não estou interessado em detalhes, apenas na arquitetura geral e na terminologia como sementes, pares etc.

Alguma sugestão?

    
por explorest 13.02.2011 / 21:39

4 respostas

29

Visão geral de como o bittorrent funciona:

  • Você tem pares e rastreador . Todos os pares juntos em qualquer momento são os swarm . A situação normal é que um ou alguns pares tem o conjunto de arquivos completo e deseja disponibilizá-lo para outros colegas.

  • Um par adquire um arquivo .torrent, que terá entre outras coisas: A) o hash SHA-1 do conjunto de arquivos, B) a URL do rastreador e C) o número de partes que o arquivo é quebrada, assim como um hash SHA-1 de cada peça. O tamanho das peças é determinado pela própria torrente.

  • O peer se conecta ao rastreador usando o URL especificado no torrent. O rastreador responde com uma lista de pares. Rastreadores falam HTTP pela porta 80 ou 443.

  • O peer seleciona outro peer, usando as informações do rastreador, e o contata diretamente para configurar uma sessão de troca, tentando obter uma peça. Note que as sessões de troca são feitas diretamente pelos pares e o rastreador NÃO está envolvido na transferência. O rastreador só fornece informações.

  • Quando o peer tiver uma parte, ela a verifica no hash SHA-1 e a grava no arquivo. Ele pode oferecer essa peça ao selecionar outro par. Sessões de troca subseqüentes envolvem peças "negociadas". Acredito que os colegas geralmente só lhe darão a primeira peça se você não tiver outras peças.

  • O par reconsulta o rastreador de vez em quando para obter uma lista atualizada de colegas. O peer não precisa esperar que uma troca termine antes de iniciar outra, se ela tiver várias partes, então, assim que o par tiver um monte de peças, a transferência pode realmente acelerar. É por isso que os torrents começam devagar, mas ganham velocidade rapidamente à medida que o par adquire peças.

  • Quando um par possui todas as partes, o arquivo inteiro é verificado em relação ao hash SHA-1 do conjunto de arquivos. Então, ele se torna um semeador e agora não está fazendo nada além de ajudar o conjunto de arquivos a ser mais altamente disponível. Pares que não têm todas as peças são leechers .

  • Se uma torrente não tiver sementes, ela estará morta, embora, se houver uma cópia completa do arquivo entre todas as partes mantidas por todos os pares, elas eventualmente serão negociadas para obter uma cópia completa entre si.

  • O hash SHA-1 é como o rastreador e os pares "sabem" qual arquivo deve ser invadido. Nomes de arquivos na torrente não são usados para identificar os dados. Peças que não são verificadas contra os hases do arquivo .torrent são descartadas. Pares que continuamente enviam peças ruins são esnobados por outros colegas e acabarão não conseguindo se conectar a ninguém no enxame.

  • Um tamanho de peça menor significa que o torrent é mais robusto, pois os colegas podem trocar itens mais rapidamente, mas também significa que mais hashes de peças no arquivo .torrent devem ser listados e, portanto, o arquivo .torrent pode ser grande.

  • Se você está publicando algo via BitTorrent, é melhor distribuir o arquivo contanto que você deseje disponibilizá-lo. Outros colegas o ajudarão, já que a maioria do software BitTorrent implementa algoritmos que favorecem a tentativa de espalhar coisas entre o maior número possível de pares para maximizar as conexões concomitantes. Desta forma, o BitTorrent pode ajudá-lo a publicar coisas e economizar custos de largura de banda.

por 25.04.2011 / 05:44
18

Belo artigo sobre o assunto aqui

link (Nota é na verdade um arquivo .pdf e pode ser visualizado com o Acrobat Reader.)

Aqui está um arquivo de imagem que alguém fez de seu conteúdo:

    
por 13.02.2011 / 22:23
8

Há um vídeo bastante interessante no YouTube explicando isso de maneira visual com recortes de papelão. Não é uma explicação altamente técnica, mas é ótima para explicar a idéia por trás do BitTorrent para as pessoas de uma maneira simples e compreensível.

    
por 25.04.2011 / 04:33
2

Uma visão geral do protocolo de mensagens peer .

O cliente pode usar dois protocolos para compartilhar informações com pares, TCP ou uTP (por meio de UDP). Estes dados seguem a especificação do protocolo bittorrent , seção mensagens entre pares .

Então, programaticamente, uma conexão tem que começar entre dois clientes. Depois que a conexão é definida (através de TCP ou UTP), um aperto de mão bittorrent é iniciado pelo cliente, que captura informações de peers remotos (ip & port) do rastreador ou através de DHT . Este handshake contém o info_hash que identifica o torrent que esta conexão será.

Vamos ver primeiro como os dados do Torrent são truncados pelo protocolo. Uma peça é uma parte dos dados que você está compartilhando através da rede. Não se confunda com um bloco , que é uma seção de uma peça embrulhada em um pacote. O bloco é a granularidade para compartilhar uma peça através de pacotes, e uma peça é a granularidade para compartilhar um Torrent através de pares.

Quando a conexão é iniciada, os clientes (cliente local, que chamarei de LC e cliente remoto, RC ) são bloqueados e desinteressado . Choked significa "Não vou responder a nenhuma das suas mensagens, muito ocupado, mas posso levá-las em conta". Desbloqueado significa "Eu responderei suas mensagens". Interessado significa, claro, que eu gostaria de alguns pedaços que você tem. Portanto, o estado de uma conexão entre dois peers poderia ser definido com esses quatro estados: LC_chocked ?, LC_interested ?, RC_chocked ?, RC_interested? Para avisar RC que estou (des) chocked ou (des) interessado , tenho que enviar-lhe (un) interested e (des) chocked mensagens e reciprocamente.

Para informar uns aos outros quais são os pedaços , eles podem enviar uma mensagem bitfield logo após o handshaking. Como o nome sugere, é uma string de bits onde cada bit é definido como 1 se o cliente tiver essa peculiar peça , 0 caso contrário.

Então, se LC estiver chocked e interessado e RC tiverem desarmado ele , então ele pode enviar uma mensagem request para pedir um bloco pertencente a uma peça ele sabe que LC tem agradecimentos para a mensagem bitfield .

Quando um par recebeu toda a peça , ele pode enviar uma mensagem peça para informar todos os seus pares remotos para que eles atualizem o campo de bits eles estão segurando.

Essa é uma visão geral muito básica, e é claro que nem todos os detalhes são fornecidos aqui, como o algoritmo de sufocação etc ... Se você quiser mais detalhes, verifique os dois links que eu postei acima, em a seção de comentários (como um novo usuário eu não posso ter mais de dois links dentro de um post).

    
por 25.10.2014 / 22:52

Tags