:. Usando o Bittorrent

 Por Carlos E. Morimoto
 http://www.guiadohardware.net
 02/06/2002


"Bittorrent" significa algo como "correnteza de bits". Ele foi feito para facilitar a distribuição de arquivos muito procurados, como por exemplo novas versões das distribuições, musicas ou games gratuitos e assim por diante. Claro que além destes exemplos, é possível distribuir qualquer tipo de arquivo, legal ou não através dele.

Não existe uma interface centralizada como em outros programas. Os arquivos são distribuídos na forma de pequenos arquivos .torrent que contém algumas informações sobre o arquivo, um código de verificação de integridade e o endereço do tracker onde ele pode ser encontrado.

O tracker é um host que serve como ponto de encontro, ele não disponibiliza nenhum arquivo diretamente e por isso é capaz de lidar com um número muito grande de requisições. Um tracker rodando numa conexão ADSL com 128k de upload pode dar conta de milhares de downloads simultâneos.

Como disse, o tracker só centraliza informações sobre os hosts que estão compartilhando o arquivo, não disponibiliza nada diretamente. Para colocar um arquivo em circulação é criado um seed (semente), um host que será responsável por servir como um ponto inicial para download do arquivo.

A partir do momento em que outras pessoas começam a baixar o arquivo elas automaticamente também compartilham os pedaços já baixados e conforme mais e mais gente vai tentando baixar a oferta do arquivo fica cada vez maior e o download mais e mais rápido. Com o tempo algumas pessoas começam a deixar o bittorrent aberto compartilhando o arquivo completo e o seed passa a nem ser mais necessário.

É exatamente o contrário do que aconteceria caso o arquivo fosse disponibilizado num FTP comum. Uma simples conexão ADSL pode distribuir o arquivo para milhares de pessoas e um mesmo tracker pode coordenar a distribuição de vários arquivos.

O ponto fraco do bittorrent é quando é preciso distribuir um monte de arquivos que individualmente possuem pouca procura. Se apenas uma ou duas pessoas tentarem baixar de cada vez, quase todo o trafego vai recair sobre os micros que estiverem disponibilizando o arquivo de qualquer forma.

Existem versões para Linux e Windows, a versão Linux pode ser baixada no:

http://bitconjurer.org/BitTorrent/download.html

Procure pelo link "some RPMs" que levará a alguns pacotes pré-compilados para várias distribuições. Se você estiver no Debian ou Kurumin a instalação será mais fácil, pois ele está disponível no apt-get. Basta um:

# apt-get install bittorrent

Existem duas opções de cliente. O btdownloadcurses e o btdownloadgui. Os dois fazem exatamente a mesma coisa, a única diferença é que o primeiro mostra a barra de progresso numa janela de terminal, enquanto o outro mostra uma barra gráfica.

Para usá-los, basta copiar o link do arquivo .torrent desejado e usar o comando "btdownloadcurses --url", como em:

btdownloadcurses --url http://www.levien.com/mandrake9.1.torrent

Depois é só deixar a janela aberta o máximo de tempo possível, mesmo depois de terminar de baixar o arquivo, para ajudar outras pessoas que também estejam tentando baixá-lo. Se o download for interrompido, basta usar o comando novamente, no mesmo diretório. O programa verifica a integridade do arquivo e continua da onde parou.

Outra opção é copiar o arquivo .torrent para uma pasta do HD e usar o comando btdownloadcurses sem o "--url" para baixá-lo, como em: "btdownloadcurses mandrake9.1.torrent"

Se você instalou a partir de um dos pacotes RPM, então os comandos serão btdownloadcurses.py e o btdownloadgui.py

Você pode também configurar o navegador para associar a extensão .torrent com os programas, assim você não precisará ficar dando os comandos no terminal. O Mozilla 1.4 já vem configurado.

Para disponibilizar arquivos você precisa antes de mais nada criar os arquivos .torrent a partir dos arquivos originais. Para isso, use o comando btmakemetafile (ou btmakemetafile.py), fornecendo o nome do arquivo e o endereço do tracker, como em:

btmakemetafile.py kurumin-1.4.iso http://algum-lugar.com:6969/announce

O "kurumin-1.4.iso" é o nome do arquivo enquanto o "http://algum-lugar.com:6969" é o endereço do tracker que será usado, incluindo a porta tcp onde ele está escutando. O comando gerará um arquivo .torrent de uns 20 kb que você pode colocar no seu site ou enviar por e-mail aos interessados. Não retire o "/announce" do comando, ele é necessário, independentemente de como o tracker esteja configurado.

Como disse, um tracker pode gerenciar vários downloads simultâneos, você pode encontrar vários endereços de trackers simplesmente abrindo os arquivos .torrent que encontrar por aí num editor de textos. Você pode pedir permissão para usar um tracker de alguém, ou criar o seu. Neste caso, use o comando:

./bttrack.py --port 6969 --dfile dstate

Substitua o "6969" pela porta TCP desejada.

Depois de criar os arquivos .torrent e verificar o tracker, você precisa de um seed, uma máquina para iniciar a disseminação do arquivo. Pode ser a sua própria máquina.

Acesse a pasta onde está o arquivo completo e use o comando:

btdownloadheadless.py --url http://guiadohardware.net/kurumin-1.4.iso.torrent
--saveas kurumin-1.4.iso

O "http://guiadohardware.net/kurumin-1.4.iso.torrent" onde você hospedou o arquivo .torrent gerado na etapa anterior. O parâmetro "--saveas kurumin-1.4.iso" força ele a salvar o arquivo com o nome especificado.

Como já existirá um arquivo completo na pasta, ele simplesmente verificará a integridade e iniciará o compartilhamento do arquivo completo imediatamente. Agora é só divulgar a localização do seu arquivo .torrent e iniciar a reação em cadeia. Quanto mais gente tentar baixar, mais rápido será o download.



:. Mais dicas:


:. Dica para quem utiliza o bittorrent por trás de um firewall ou NAT

Assim como outros programas P2P, o bittorrent consegue funcionar sem maiores problemas por trás de um firewall ou através de uma conexão compartilhada via NAT. Mesmo sem nenhuma porta de entrada disponível, o cliente consegue se conectar ao tracker e negociar o download e upload dos arquivos.

Mas, ao mesmo tempo, muita gente que o utiliza desta maneira reclama da lentidão para baixar arquivos. No caso de arquivos muito procurados, onde existe uma oferta muito grande é possível conseguir baixar na velocidade máxima da conexão, mas no caso de arquivos onde a oferta é menor é comum baixar a 3 ou 4 KB/s numa conexão via ADSL, o que faz os downloads demorarem uma eternidade...

Isso acontece por um motivo simples. O bittorrent aceita conexões nas portas 6881 à 6889 (ele tenta primeiro a 6881 e depois vai tentando as demais caso ela esteja fechada). Estas portas são usadas para que o tracker (o servidor que coordena o download e upload dos arquivos) possa requisitar que o seu micro envie dados para outros micros da rede.

Se estas portas estão fechadas no seu micro as suas taxas de upload serão mais baixas, já que o tracker não tem como "mandar" o seu micro transmitir dados a outros o que torna a negociação muito mais lenta. Muita gente vai achar isso bom, afinal o que interessa é baixar logo os arquivos o mais rápido possível e sair de fininho não é mesmo?

Se você é dessa opinião, lamento dizer que no bittorrent as coisas não funcionam assim. O protocolo tem um sistema de compensação, que faz com que você consiga baixar os arquivos na medida que você também contribui. Isso significa que se você contribui pouco, também vai demorar mais para baixar.

No bittorrent o tracker rastreia as taxas de upload e download de cada micro, e mantém um cálculo da "oferta" e da "demanda" de um determinado arquivo. Se temos 10 micros compartilhando e mais 10 micros tentando baixar, então a oferta é de mais ou menos 2/1 (os que estão baixando também compartilham o arquivo), de modo que você vai conseguir baixar aproximadamente 2 KB para cada 1 KB que der de upload.

Se por outro lado tem muita gente tentando baixar e poucos com o arquivo completo dando upload, então a taxa pode ser de 1/1 ou menos.

Numa linha ADSL a taxa de upload é apenas metade da taxa de download. Numa situação normal o upload ficará estável em uns 13 KB/s e o download ficará um pouco acima disso. Se as portas 6881 à 6889 estão fechadas, então o upload provavelmente será mais baixo, mas o download ficará muito mais lento e instável.

- Ok, ok, eu entendi, como eu faço então para abrir as tais portas e poder baixar os arquivos mais rápidos

Se você está rodando o firewall localmente, ou seja você está usando o micro que está conectado na Internet, então você precisa apenas abrir as portas. No linux a regra para o iptables será:

iptables -A INPUT -p tcp --destination-port 6881:6889 -j ACCEPT

Se por outro lado você está usando o micro Linux para compartilhar a conexão com outros micros da rede local, então você deve usar as linhas abaixo para redirecionar as portas (forward) para o micro onde você está usando o bittorrent:

iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 6881:6889 -j DNAT --to-dest 192.168.0.3
iptables -A FORWARD -p tcp -i ppp0 --dport 6881:6889 -d 192.168.0.3 -j ACCEPT
iptables -t nat -A PREROUTING -i ppp0 -p udp --dport 6881:6889 -j DNAT --to-dest 192.168.0.3
iptables -A FORWARD -p udp -i ppp0 --dport 6881:6889 -d 192.168.0.3 -j ACCEPT

Observe que o "ppp0" corresponde à interface que está conectada na Internet. Se você acessa via ADSL PPPoE ou via modem então a interface é essa mesma, mas, se você acessa através de algum serviço que utilize ip fixo, ou o endereço seja obtido via dhcp (sem autenticação) então a interface será eth0 ou eth1. Use o comando "ifconfig" em caso de dúvidas.

Não se esqueça de substituir o "192.168.0.3" pelo endereço IP correto do micro que você deseja que receba as portas.

Se você tem dois ou mais micros na rede interna que vão usar o bittorent, você pode distribuir as portas entre eles. Se forem 3 micros, cada um pode ficar com 3. Você poderia usar as regras abaixo:

iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 6881:6883 -j DNAT --to-dest 192.168.0.3
iptables -A FORWARD -p tcp -i ppp0 --dport 6881:6883 -d 192.168.0.3 -j ACCEPT
iptables -t nat -A PREROUTING -i ppp0 -p udp --dport 6881:6883 -j DNAT --to-dest 192.168.0.3
iptables -A FORWARD -p udp -i ppp0 --dport 6881:6883 -d 192.168.0.3 -j ACCEPT

iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 6887:6889 -j DNAT --to-dest 192.168.0.4
iptables -A FORWARD -p tcp -i ppp0 --dport 6887:6889 -d 192.168.0.4 -j ACCEPT
iptables -t nat -A PREROUTING -i ppp0 -p udp --dport 6887:6889 -j DNAT --to-dest 192.168.0.4
iptables -A FORWARD -p udp -i ppp0 --dport 6887:6889 -d 192.168.0.4 -j ACCEPT

iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 6884:6886 -j DNAT --to-dest 192.168.0.5
iptables -A FORWARD -p tcp -i ppp0 --dport 6884:6886 -d 192.168.0.5 -j ACCEPT
iptables -t nat -A PREROUTING -i ppp0 -p udp --dport 6884:6886 -j DNAT --to-dest 192.168.0.5
iptables -A FORWARD -p udp -i ppp0 --dport 6884:6886 -d 192.168.0.5 -j ACCEPT

Lembre-se que nenhum ser humano normal fica digitando estas linhas manualmente cada vez que ligar o micro. Ao invés disso, simplesmente copie tudo para dentro de um arquivo de texto e transforme-o em um executável usando o comando "chmod +x". Depois disso basta executar o arquivo ou colocá-lo para inicializar junto com o sistema através de algum arquivo de inicialização.


:. Baixando vários arquivos de uma vez

É possível encontrar séries inteiras de desenhos e seriados via bittorrent. Uma simples busca no google já vai trazer muita coisa. Um bom lugar para baixar animes por exemplo é o http://a.scarywater.net/ que hospeda .torrents de vários grupos de fansubs.

A questão é que algumas séries chegam a ter mais de 60 episódios. Ao invés de ficar copiando e colando o endereço de cada um para usar com o btdownloadcurses --url, você pode simplesmente salvar todos os arquivos .torrent desejados numa mesma pasta (/home/joao/bt, por exemplo) e rodar o comando:

btlaunchmanycurses /home/joao/bt

Ele vai iniciar o download de todos os arquivos .torrent colocados dentro da pasta, todos numa única janela. Bem prático para deixar rodando durante à noite por exemplo.


:. Limitando a taxa de upload

Com tantos arquivos, ISOs de novas distribuições, animes, etc. etc. para baixar, às vezes fica difícil resistir à tentação de fechar a janela do bittorrent. O problema é que a natureza "viral" do bittorent faz com que ele sempre acabe consumindo quase toda a banda da conexão, mesmo que você deixe aberta uma única janela.

Para manter o bittorrent aberto e ao mesmo tempo conseguir trabalhar no micro você pode limitar a taxa de upload do cliente. Isto também acabará limitando a taxa de download (lembra-se do sistema de compensação?) fazendo com que parte da banda fique disponível para outras coisas.

Para isso você deve adicionar a opção "--max_upload_rate 8" no comando btdownloadcurses, onde o 8 é a taxa máxima de upload desejada, em kbytes. Como em:

btdownloadcurses --max_upload_rate 8 --responsefile kurumin-2.02.iso.torrent
(se o arquivo kurumin-2.02.iso.torrent já foi baixado para uma pasta)

ou:

btdownloadcurses --max_upload_rate 8 --url https://guiadohardware.info/linux/kurumin/kurumin-2.02.iso.torrent
(para baixar a partir de uma url)




Copyright 2003 Carlos E. Morimoto, http://www.guiadohardware.net - Todos os direitos reservados