Torrent
Sisukord
Sisejuhatus
Torrent'it http://en.wikipedia.org/wiki/BitTorrent_(protocol) (ehk täpsemalt bittorrent'it, mis protokolli ametlikuks nimeks) seostatakse enamasti ebaseaduslike ja autoriõigusteta materjalide levitamises. Tegelikult on torrent mõeldud kõiksuguse materjali mugavaks levitamiseks (nagut iso tõmmitsad, vabavaralised materjalid jms.), mida teeb ka veebiserver Apache. Tegemist on võimsa ja pidevalt areneva ning täieneva protokolliga.
Võib tekkida juhus kui on vaja arvutite vahel vahetada suuri andmehulki, samas tsentraalses serveris aga kettaruumi ja võrguressurssi napib. Klient arvutitesse mingi teenuse (näiteks FTP, Apache) installeerimine on paraku ebapraktiline ja tülikas.
Torrent'i üheks suurimaks eeliseks on see, et andmete allatõmbamise hetkel jagab ta seda ka teiste klientidega, kiirendades sedasi klient-arvutites allalaadimist ning hajutades sujuvamalt võrgukoormust.
Torrent kasutab klient<->server arhidektuuri. Jagamine koosneb kahest osast: tracker kui server ning klient nt. utorrent windowsis (http://www.utorrent.com/) ja ktorrent (http://ktorrent.org Linuxis/FreeBSD's). Failide vahetamiseks tekitatakse klientprogrammiga .torrent fail, mis sisaldab kohalikus failisüsteemis olevate failide infot, mida soovitakse jagada ning tracker'i infot, läbi mille faile jagatakse. Peale .torrent faili laadimist klientprogrammi, teatatakse trackerile et fail on jagamiseks valmis. Kliendid, kes laevad oma arvutisse .torrent faili ning selle avavad, saavad trackeri käest infot, kellelt võimalik faili alla laadida. Kõik jagatavad failid lammutatakse nö. tükkideks (chunk), mida tõmbajate vahel vahetatakse.
Kirjeldatud tööpõhimõtet iseloomustab ehk kõige paremini allolev skeem.
1. Kasutaja C loob torrent faili video.iso alusel ja seob selle trackeriga torrent.zoo.tartu.ee. seejärel saadab ta torrent faili kahele oma sõbrale B ja A.
2. B ja A laevad torrent faili oma torrenti klienti ning alustavad selle tõmbamist. Trackeri kaudu vahetatavad kõigi kolme osapoole kliendid seejuures infot selle kohta mis tükid on kõigil olemas ning lisaks C'lt tõmbamisele jagavad A ja B klientprogrammid ka omavahel neid tükke mida teisel poolel pole veel hangitud (näiteks on B ja C võrguühendus kiirem kui A'l ning seetõttu suudab B hankida faili kiiremini).
3. B ja A on lõpetanud tõmbamise ja fail on neil tervikuna olemas. Ilmub välja kasutaja D kes saab nüüd tõmmata neilt kõigilt kolmelt ja märksa suurema kiirusega. Tõmbamine ei katke samuti kui näiteks faili algselt üles laadinud kasutaja C otsustab oma arvuti välja lülitada.
Opentracker
Järgnevas tekstis vaadeldakse üht lihtsat robustset ja kergelt seadistatavat trackerit. Server kasutab libowfat'i ning vajab tööks suvalist POSIX ühilduvat OSi. Seda trackerit kasutab ka The Pirate Bay.
Tekst on kirjutatud opentracker-0.2009.06.27 kohta, uuematel versioonide seadistuses võib esineda pisierinevusi. Olgu kohe ka öeldud, et antud tarkvara on mõeldud peamiselt avatud trackerite loomiseks, mistõttu kinniste passkeydega (võtmetega) süsteemide jaoks tuleb uurida pigem teisi tarkvarasid.
Kogu trackeri häälestus toimetatakse läbi opentrackeri seadistusfaili, nimega opentracker.conf, mis paigaldatakse installeerimisel operatsioonisüsteemi /etc/opentracker nimelisse kausta. Häälestusvõimalusi on palju: white ja blacklist ning nende asukoht (korraga saab vaid üht kasutada neist), statistika, opentracker'i port, teiste trackeritega syncimine jms. Muide, kõiki parameetreid saab enne seadistusfaili kirjutamist proovida ka käsurealt.
Trackeri tarkvara seadistamine
Tarkvara on peale paigaldamist kasutatav vaikimisi seadistusfailiga.
Serveri saame käivitada käsuga
# opentracker -i 127.0.0.1 -P 6969 -p 6969
Peale startimise näeb programmi kuulamas udp ja tcp pordil
nobody opentracke 47997 4 tcp4 *:6969 *:* nobody opentracke 47997 6 udp4 *:6969 *:*
Mis tähendab, et meie tracker on tööks valmis ja kuulab näiteserveris nimega torrent.zoo.edu.ee nii TCP kui UDP pordil numbriga 6969
Internetis jagamisele minevast failist/failidest torrent'i faili tekitamine
Avame testimiseks enda torrenti kliendi ja valime new torrent. Valime faili või kausta, mida soovime jagada. Lülitame sisse valiku, et tahame koheselt ka seda jagada (seedida). Lisame trackeri aadressi, mis on antudjuhul http://torrent.zoo.edu.ee:6969/announce ning salvestame torrentifaili kettale nimega test.torrent.
Nende toimingute peale võttis torrenti klient faili või failid. Tükeldas need mõtteliselt 256Kb (see vaikesuurus võib torrenti klienditi erineda) suurusteks juppideks, genereeris igale jupile oma kontrollsumma ning pani selle kõik kirja faili test.torrent koos trackeri aadressi, failinime jms vajalikuga.
Üks tavaline de-bencoded torrent faili sisu mis genereeritud Debiani ISO faili alusel.
{'announce': 'http://bttracker.debian.org:6969/announce' 'info': {'name': 'debian-503-amd64-CD-1.iso', 'piece length': 262144, 'length': 678301696, 'pieces': '841ae846bc5b6d7bd6e9aa3dd9e551559c82abc1 ... d14f1631d776008f83772ee170c42411618190a4' } }
- announce rida sisaldab trackeri aadressi
- info sisaldab faili nime
- piece lengt kui suurteks mõttelisteks osadeks fail jaotatakse (262144 baiti ehk 256Kb)
- lenght näitab fili kogusuurust baitides (678301696 baiti ehk 647Mb)
- pieces rida sisaldab kõikide tükkide kontrollsummat, see rida on tõenäoliselt
kõige mahukam, käesoleval juhul peab ta sisaldama üle 2500 kontrollsumma.
Seejärel võime saata test.torrent faili neile, kellega soovime andmeid jagada. Torrent faili suurus on üldjuhtudel mõnikümmnest kilobaidist kuni paaro megani. Faili suurus oleneb jagatavate failide hulgast ning suurusest, mõnekümne gigabaidi puhul võib suurus kasvada megabaitideni, kuna .torrent faili peavad ära mahtuma kõik kontrollsummad. Väga suurte jagatavate failide puhul on mõistlik torrenti loomisel määrata piece size'i, mis näitab kui suurteks tükkideks fail mõtteliselt jagatakse, vaikeväärtusest suuremaks, et kontrollsummasid oleks vähem. uTorrent toetab 4MB ja KTorrent isegi 8MB suurusi tükke.
Juhul kui klientprogramm ei hakka mingil põhjusel seed'ima (jagama), siis tuleks torrent peatada ja uuesti käivitada (stop & start).
Opentracker'i statistikat näeb url'il http://torrent.zoo.edu.ee:6969/stats
2 2 opentracker serving 1 torrents opentracker
XML formaadis väljunid kuvamiseks http://torrent.zoo.edu.ee:6969/stats?mode=everything
Käsurealt torrenti faili tegemiseks Linuxi ja BSD OS'ide pakihalduses tarkvara nimega createtorrent, mille kasutamiseks tuleb anda käsk createtorrent -a <tracker> <jagatav fail> <torrenti nimi>.
Näiteks:
$ createtorrent -a http://torrent.zoo.edu.ee:6969/announce fail.txt test.torrent
Käsurea torrenti kliendi Rtorrenti kasutamine
Esimese sammuna tuleb opsüsteemi vahenditega paigaldada rtorrent tarkvara
Seejärel tuleb tekitada kasutaja (selle kelle õigustes edaspidi hakkame rtorrentit kasutama) ja kodukataloogi edaspidiseks info hoidmiseks vajalikud kaustad nimedega: muutuv, muutuv/torr, muutuv/torr_session ja torrporr/
Lõpuks tuleb tekitada kasutaja kodukataloogi fail .rtorrent.rc kahe reaga:
session = muutuv/torr_session schedule = watch_directory_2,10,10,"load_start=muutuv/torr/*.torrent,d.set_directory=torrporr"
Esimene rida tähendab, et ühenduste info hoitakse kaustas kasutaja/muutuv/torr_session Teine, et rtorrent jälgib pidevalt kataloomas kasutaja/muutuv/torr asuvaid torrenti faile ning lisab koheselt iga lisandunud uue torrenti tõmbamise - uploadimise nimistusse. Lisaks sellele määratakse antud real paika ka kataloog kuhu kõik allalaetud torrenti failid paigaldatakse, milleks antud näites kasutaja/torrporr/.
Lisaks võiks lisada sinna seadistusfaili read
port_range = 49164-49164 port_random = no
Rtorrenti käivitamiseks tuleb anda käsk
$ rtorrent
Rtorrenti tasuks üldiselt käivitada taustal kasutades selles screen tarkvara. Soovides, et rtorrent hakkaks taustal tööle juba kohe reboodil võib lisada kasutaja croni rea
@reboot screen -d -m /usr/local/bin/rtorrent
Croni saab muuta käsuga:
$ crontab -u kasutaja -e
keerkamaid kasutusnäiteid (veebihaldusliideseid jms) leiab tarkvara kodulehelt http://libtorrent.rakshasa.no/
Keerukamad kasutusjuhused
Mustad nimekirjad, krüpteerimine, klastrid ja privaatsed failid.
TODO
Väike terminite sõnastik
- .torrent file = Väike kontrollfail, mis sisaldab endas nimekirja failidest ja kõigist tükkidest milledeks fail jagatud (chunks) ning nende kontrollsummasid SHA1 hashing algoritmis koos muu infoga.
- Swarm = Hulk kasutajaid (peers) kes omavahel ühendatud ning jagavad kindlat torrenti faili
- Peer = Kasutaja, kes kasutades bit-torrent klienti jagab mõnd faili
- Seed = Uploader e. üleslaadija, kellel terviklik(ud) fail(id) olemas ja jagab seda teistele
- Leech = Downloader e. allatõmbaja
- Client = programm, mis laeb torrent faili nii alla kui üles
- Tracker = server, mis ühendab omavahel seed'id ja peer'id. Tegeleb ainult andmebaasi pidamisega ning ei uploadi ega downloadi
- Chunk = Iga jagamisele minev fail on jaotatud tükkideks. Tüki suurus on 256K kuni 8M. sõltuvalt määrangust .torrent faili loomisel. Tükkide info talletatakse .torrent faili
- Error-correction = Igast allalaetud tükist genereeritakse kontrollsumma, mida võrreldakse .torrent failis oleva summaga. Kui see ei klapi, siis tõmmatakse tükk uuesti alla.
Lingid
http://valadilene.org/2009/06/24/how-to-create-a-torrent-tracker-with-php-and-xbtt-part-1/
http://egopoly.com/2008/05/22/how-to-set-up-a-private-bittorrent-tracker/
http://ashughes.com/?q=node/85 opentracker ja torrent /usr/ports/net/opentracker
http://morehawes.co.uk/a-beginners-guide-to-bittorrent kuidas torrent töötab
http://torrentfreak.com/the-pirate-bay-tracker-shuts-down-for-good-091117/ Piratebay ja magnet
http://torrentfreak.com/download-torrentless-torrents-from-torrentz-with-firefox-091109/ tracker ja magnet
http://www.btiteam.org/ veebiportaal torrentite jagamiseks
http://libtorrent.rakshasa.no/ käsurea torrenti klient
http://maketecheasier.com/create-torrent-tracker-with-rivettracker/2010/03/02
http://sourceforge.net/projects/tbsource/ tbdev tracker
http://en.wikipedia.org/wiki/Torrent_file
http://wiki.theory.org/BitTorrentSpecification#Metainfo_File_Structure