Bittorrent: Rapport av projektarbetet i kursen Datakommunikation och Distribuerade System Magnus Gunnarsson, D-linjen
1. Inledning Bittorrent protokollet skapades utifrån behovet att på ett snabbt sätt kunna distribuera olika typer av filer över Internet. Detta sker genom att man istället för att använda den klassiska server klient uppsättningen där en server servar många klienter så använder sig bittorrent protokollet sig av många till många teknik, där varje klient i bittorrent nätverket agerar även som server. Enligt den officiella hemsidan för bittorrent så tog det två år av utveckling för att färdigställa protokollet, bittorrent är ursprungligen skrivit av programmeraren Bram Cohen. 2. Hur fungerar Bittorrent Man kan beskriva hela proceduren genom att en användare laddar ner en Bittorrent fil från en webbsida med hjälp av en vanlig webbläsare, han eller hon laddar in Bittorrent filen i sin klient programvara. Bittorrent klienten ansluter sig då till en så kallad bittorrent tracker, som i sin tur skickar information till klienten om andra användare som är anslutna till det nätverk som finns för den specifika filen. Klienten skapar sedan dubbelriktade kommunikations anslutningar till de andra andvändarna i nätverket, och nedladdningen startar genom att klientprogramvaran tar emot data från de användare som klienten har anslutit till. Klientprogramvaran kommer även att agera som server genom att den kommer att dela med sig av redan nedladdad data till andra användare som den har anslutning till. 3.1 Torrentfiler För att man ska på ett enkelt sätt kunna publicera materiell som ska göras tillgängliga publikt via bittorrent protokollet, så använder man sig av en så kallad bittorrent fil. Bittorrent filen innehåller information on den fil som man vill publicera, bland annat innehållet bittorrent filen information om filens storlek och webb adressen till bittorrent trackern. Dessutom innehåller bittorrent filen information om hur många delar man valt att dela upp filen som skall i, detta är en av hörnstenarna i bittorrentprotokollet. Anledningen till att man valt att specificera upp filen som en summa av mindre del block är att man på ett enkelt sätt ska kunna hantera dataströmmar från flera källor och inte bara en. För att kunna bibehålla en bra dataintegritet så har man implementerar checksummor för samtliga del block, checksumman genereras av en kryptografisk hash algoritm kallad SHA1. 3.2 Distribution av torrentfiler Den stora fördelen med bittorrent är att torrentfilerna distribueras via ett webbgränssnitt. Detta innebär att även en ovan dator användare kan känna sig bekväm med bittorrent på grund av att det bara är att trycka på en hyperlänk, och klienten startar automatiskt nedladdningen av den fil man vill ha. 4. Bittorrent tracker Bittorrent trackerns enda uppgift är att hjälpa användare att få kontakt med varandra, det kommunikations protokoll som trackern använder sig av är baserat på http protokollet. Detta innebär att man kan ha en gemensam webbserver programvara för att hosta bittorrentfiler samt bittorrent trackern.
4.1 Bittorent trackerns funktion Bittorrent trackern är den enda möjligheten en klient har för att ansluta sig med andra bittorrent klienter inom peer to peer nätverket, så bittorrent trackern har som enda uppgift att förmedla kontakter mellan användare i nätverket. När en ny bittorrent klient ansluter till bittorrent trackern skickar den ut en slumpmässigt utvald lista av de andvändarna som redan är anslutna till peer to peer nätverket till klienten, det är sedan klientens ansvar att upprätta en dedikerad anslutning till de klienter som den blev tilldelad. Bittorrent trackern håller i viss mån reda på vilken status olika användare har det vill säga, hur många och vilka block en användare har laddat ner. Det är dock inte bittorrent trackerns uppgift att förmedla kontakt mellan olika beroende på vilka block som en användare har eller inte har utan detta sker enbart för statistik insamling. 5. Bittorrent klient Bittorrent klienten är den enda del i hela bittorrent nätverket som hanterar den fil som ska distribueras, man kan säga att torrent filen pekar ut vilken filen är och var man hittar den, trackern sköter bara om att förmedla kontakten mellan de användare (leechers och seeders) som har tillgång till den begärda filen. Därför blir fildistributions nätverket och klienterna helt frikopplade från det gamla systemet att förmedla filer över Internet, där en dedikerad server stod för all uppladdnings bandbredd. Hela ansvaret för distributionen av filen faller på klienterna som ingår i nätverket. Användarna i bittorrent nätverket kommer hädanefter att delas upp i två kategorier seeder och leecher. En seeder är en användare som innehar alla blocken av filen som delas i nätverket, en leecher är en användare som inte ännu har alla block av filen. Seederns uppgift i nätverket är att enbart ladda upp block till användare som det ännu fattas delar för. Leechern kommer att göra två saker dels kommer den att ladda ner block som den ännu inte har, men den kommer även att ladda upp block som den besitter men som en annan leecher ännu inte har laddat ner. 5.1 Nedladdnings tekniker Klient delen av bittorrent klienten har som uppgift att så snabbt som möjligt ladda ner den begärda filen från bittorrent nätverket, det vill säga att klienten har ett eget ansvar att maximera sin nedladdnings hastighet. Det är även klientens uppgift att begära de delar (block) av filen som den inte har från de seeders eller leechers i nätverket som besitter dessa. Eftersom trackern inte skickar information om vilken andvändare som besitter vilka delar så är det upp till klienterna i nätverket att samordna den informationen. Detta sker genom att klienterna med jämna mellanrum skickar ut status medelanden till alla klienter som den är ansluten till. Genom att låta klienterna själva sköta uppdateringen av sin status, kostar mindre än en tiondels procent i bandbred samtidigt som man åter kan spara bandbredd för bittorrent trackern. 5.1.1 Pipelining När man använder sig utav TCP som datakommunikations protokoll så som bittorrent gör så är det viktigt att man hela tiden har ett flertal data anrop väntande åt gången och när en är servad så begär man ytterligare ett datasegment. Detta kallas för att man pipelinar överföringen i bittorrent har man löst detta genom att man delar upp varje block i flera delar, dessa kallas för sub-block som till exempel: ett block som har storleken 256 kilobyte delas upp i sexton sub-block, eller ett block som har storleken 1024 kilobyte delas upp i sextiofyra sub-block. Från detta kan man se att då varje sub-block har en storlek på 16 kilobyte så kommer det att rymmas inom ett TCP segment utan att behöva fragmenteras.
5.1.2 Block vals algoritm När en ny klient ansluter till nätverket så är det viktigaste att klienten snabbt får ett block som den kan dela med sig utav eftersom bittorrent har en inbyggd funktion som belönar de klienter som kan ha en hög uppladdnings hastighet, och nedprioritera de klienter som inte delar med sig, mer om detta nästa paragraf. På grund av denna funktion så är det alltså viktigt för klienten att så snabbt som möjligt få tillgång till data block som den kan dela med sig utav. Klienten kommer dock ha ett problem, om den alltid väljer block med hög tillgänglighet så riskerar men att få en ojämn distribution av den utdelade filens block, man riskerar med andra ord att inte ha några block att dela med sig utav till de andra användarna i bittorrent nätverket, eller att man bara har block som ingen annan har. Detta medför att det är viktigt ha en bra fungerande algoritm för att välja ut block. 5.1.3 Strikt prioritet Bittorrent's första policy när det gäller att välja datasegment för nedladdning är att, så fort ett sub-block har begärts så kommer resterande sub-block från det specifika blocket alltid begäras före sub-block från andra block, detta görs på grund av att man alltid vill ha nya block att dela med sig utav. Denna policy har visat sig fungera mycket bra för att hela tiden få ned block så fort som möjlig. 5.1.4 Det ovanligaste blocket först När klienten väljer block för nedladdning så sker det oftast genom att klienten först väljer det block som den lägsta andelen användare har tillgång till, denna teknik kallas för rarest first eller ovanligast först. Tekniken gör ett bra jobb att förse sin klient med block som de övriga klienter (noder) som den har kontakt med vill ha, algoritmen gör också att de block som har flest källor lämnas till senare. Detta gör att sannolikheten att en nod som för tillfället erbjuder uppladdnings bandbredd, senare inte ska ha något intressant att erbjuda blir reducerad. Informations teorin dikterar att ingen leecher kan göra färdigställa nedladdningen förrän alla bitar av filen har laddats upp av den seeder som publicerade filen. Om man till exempel tar och publicerar en fil med bara en seeder, och denna seeder har betydligt lägre uppladdnings hastighet än den nedladdnings hastighet som de leechers som laddar ned information från seedern har. Så kan man enkelt förstå att det tar betydligt längre tid att få ut alla filen block om seedern hela tiden måste ladda upp samma block ett flertal gånger, än om alla leechers begär olika block. Det är också självklart att multipla uppladdningar av samma block från seedern är ett slöseri i tillgänglig bandbredd inom bittorrent nätverket. Rarest first algoritmen fungerar bra på att lösa detta problem då en leecher får fortlöpande information om vilka block som de andra noderna i nätverket laddat ned från seedern. Ett annat exempel på de fördelar med rarest first algoritmen är att man ibland utav bandbredds kostnadssjäl tar ner den ursprungliga seedern och låter all distribution av filen ske av de leechers som finns i nätverket, denna taktik kommer medför en betydande risk att det kommer att fattas något betydande block bland de leechers som för närvarande är aktiva i nätverket. Rarest first algoritmen kommer även har att verka för att den risken minimeras genom att den hela tiden försöker att ta hem de block som minst noder har tillgång till.
5.1.5 Slumpmässigt första block Ett undantag från rarest first algoritmen sker när en leecher precis har anslutit sig till bittorrent nätverket men ännu inte har hunnit ladda ner ett komplett block. Under hela det skedet då leechern inte har någon del att dela med sig utav så kommer klienten kontinuerligt och slumpmässigt välja ut block för nedladdning, detta beteende fortgår till dess att leechern har lyckats få ett komplett block. Efter att leechern har ett komplett block så kommer leecher klienten att övergå till rarest first algoritmen. Den här funktionen gör att klinten så fort som möjligt får tillgång till materiell som klienten kan dela med sig av. 5.1.6 Slutskedes mode Ibland så begär klienten data från en nod med mycket låg uppladdningshastighet, normalt så är detta inget problem, men kan om det sker under slutskeendet av nedladdningsfasen vara en betydande orsak till att den totala nedladdnings tiden förlängs. För att motverka att just detta sker i slutet av nedladdningssessionen så har bittorrent protokollet implementerar något som dom kallar för Endgame Mode eller slutskedes mode, detta mode träder i kraft då alla subblock som klienten inte har efterfrågas aktivt av klienten. Slutskedes mode har följande taktik, för att komma runt problemet med att en nod har låg uppladdningshastighet så kommer klienten när den väl har aktiverat slutskedes modet att skicka ut begäran av samtliga subblock som klienten inte besitter till samtliga noder i nätverket. För att motverka att bandbredd ska gå förlorad till ingen nytta på grund av att klienten kan få multipla nedladdningar av samma sub-block så kommer klienten att skicka ut avbrottsmedelanden för de sub-block som aktivt håller på att laddas ned. I praktiken så slösar inte den här tekniken på särskilt mycket bandbredd eftersom att slutskedes perioden i allmänhet är mycket kort eftersom det är så begränsad del av filen som det handlar om, tekniken hjälper till att säkerställa att nedladdningen av de sista bitarna av filen sker snabbt. 5.2 Uppladdnings tekniker Bittorrent har inga funktioner för att centralt kunna administrera bandbredds fördelningen, utan varje nod är själv ansvarig för maximalt utnyttjade av den bandredd som just den noden har tillgång till. Noderna löser detta genom ladda ned block / sub-block ifrån vemhelst som erbjuder, noden kommer sedan bestämma vilka noder som den ska ladda upp information till genom en variant av tit-for-tat. Tit-for-tat är en spel strategi teori som introducerades av Anatol Rapoport, kortfattad beskrivning är att spelaren som använder sig av tekniken hela tiden anpassar sin respons till vad motståndaren gör. Tit-for-tat spelaren kan göra två saker: han kan samarbeta eller motarbeta, i bittorrent så samarbetar noden om den tillåter uppladdning och kväver choke genom att temporärt vägra uppladdning. När klienten kväver så stoppar den all uppladdning till en specifik nod men klienten kan fortfarande ladda ner information från den berörda noden. Med andra ord så avslutas inte uppkopplingen mellan noderna, det betyder att klienten kan återuppta uppladdning till noden när kvävningen upphör utan att göra om hela uppkopplingsförfarandet. Kvävnings algoritmen ingår rent tekniskt i bittorrent protokollet men är ändå en nödvändig del för att man ska uppnå bra prestanda. En bra kvävnings algoritm ska utnyttja alla tillgängliga resurser, kunna leverera någorlunda konsekventa nedladdnings hastigheter för alla noder och vara någorlunda resistent mot noder som bara laddar ned information och inte ger något tillbaka till nätverket.
5.2.1 Pareto Effektivitet Att ett system är Pareto effektivt innebär att två motparter inte kan göra ett utbyte och att båda är nöjda, ett sådant system kallas Pareto effektivt efter en italiensk ekonom vid namn Vilfredo Pareto. Det visar sig att ett pareto effektivt system uppvisar samtliga av de egenskaper som bedömdes som önskvärda för bittorrent nätverket. I datorlogi är att söka pareto effektivitet en lokal optimeringsalgoritm där par av motparter tillsammans försöker hitta en så optimal lösning som möjligt, sådana algoritmer tenderar att leda till globala optima. Som exempel två noder for dålig motprestationen i förhållande till den uppladdnings hastighet som dom tillhandahåller, så kan dom börja ladda upp till varandra istället och på det sättet få betydlig högre nedladdnings hastigheter än vad dom fick innan. Bittorrents kvävnings algoritm försöker att uppnå pareto effektivitet genom att använda en lite annorlunda variant av tit-fortat än den som ursprungligen var använd i strategi spelet Prisoner s dilemma. Noder återgäldar andra noder som laddar upp information genom att ladda upp information till dem i sin tur, målet är att hela tiden ha flera uppkopplingar som är aktiva med att skicka information i båda riktningarna. Outnyttjade anslutningar kommer också att nyttjas genom att klienten laddar upp information i syfte att se om den kan hitta någon annan nod som har ännu högre överförings hastigheter. 5.2.2 Bittorrent s kvävnings algoritm Varje bittorrent nod kommer alltid ha ett visst antal antal anslutningar som inte är kvävda, default värdet är fyra stycken anslutningar. Så det stora problemet är vilka anslutningar ska algoritmen välja ut, i den följande lösningen så låter man TCP protokollets inbyggda congestion control mekanism se till att uppkopplingen mellan noderna utnyttjas till fullo. Valet av noder baseras enbart på vilken nod som levererar den högst nedladdnings hastigheten vid just den specifika tidpunkten. Att just bestämma nedladdnings hastigheten har visats sig vara ett mer komplicerat problem än vad skaparna av bittorrent protokollet hade förutsett. Den nuvarande realisationen av kvävnings algoritmen anväder sig idag av ett rullande 20 sekunders medelvärde för att bestämma nedladdnings hastigheten hos de anslutna noderna. I tidigare realisationer så användes informationen om hur mycket data de olika noderna hade skickat, men denna teknik visade sig fungera dåligt då värdet på överföringshastigheterna skiftar kraftigt över tiden samt att noder kopplas till och från hela tiden. För att undvika situationer där resurser slösas bort på grund av allt för snabb växling av kvävning och att man tillåter uppladdning för noder igen, så gör bittorrent klienten sina urvals beräkningar om vilken nod som ska kvävas och så vidare med tio sekunders intervall. Tio sekunder är tillräckligt lång tid för att TCP protokollet ska hinna med att maximera överföringen mellan de två noderna till dess fulla kapacitet. 5.2.3 Optimistisk unchoking Att bara ladda upp till noder som har bäst nedladdnings hastighet kommer inte heller fungera tillfredställande, detta är för att klienten har ingen metod att avgöra om en outnyttjad uppkoppling till någon annan nod har högre överförings hastighet. För att komma till rätta med och adressera det problemet så har bittorrent klienten alltid en uppkoppling som den unchokes för att på prov kunna avgöra om den noden är på något sätt bättre än de noder som den för tillfället använder sig av. Vilken nod som ska vara optimistiskt unchoked sker slumpmässigt och roterar mellan alla tillgängliga uppkopplingar med ett trettio sekunders intervall.
Detta ger tillräklig tid för att kunna maximera uppladdnings hastigheten och för den andra noden att kunna återgälda genom att även nedladdningshastigheten når sin fulla kapacitet. 5.2.4 Anti-snubbing Det kan ibland ske att bittorrent klienten blir kvävd av alla noder som klienten laddade ned ifrån, om detta sker så kommer klienten att ha dåligt eller ingen nedladdnings hastighet att tala om överhuvudtaget. Nät detta inträffar så kommer klienten att ha det dåliga resursutnyttjandet ända till dess den optimistiska unchoking algoritmen hittat någon bättre nod att kommunicera med. För att överbrygga det här problemet så har en timer funktion integrerats i bittorrent klienten, om en minut har fortskridit utan att något sub-block har laddats ned så kommer klienten att anta att den har blivit nonchalerad av de andra noderna. Om detta inträffar så kommer all uppladdning till de berörda noderna att omedelbart att avbrytas, istället så kommer klienten att initiera multipla optimistiska unchoking uppkopplingar, detta är ett undantag till föregående paragrafs regel men den hjälper till att få nedladdnings hastighet att återhämta sig betydligt snabbare. 5.2.5 Enbart uppladdning När en nod har lyckats att hämta ner samtliga block och sub-block så övergår klientens roll till att bara fungera som server. Eftersom noden inte har någon nedladdnings hastighet att åtgå ifrån när det gäller att välja ut de noder som den ska ladda upp information till, noden kommer nu istället enbart att utgå ifrån sin egen uppladdnings hastighet det vill säga den väjer den nod som den har bäst uppladdnings hastighet till vi just det tillfället. Detta gör att klienten hela tiden strävar efter ett maximalt utnyttjande av de bandbredds resurser som den har till sitt förfogande. 6 Prestanda Bittorrent protokollet ger en genomsnittligt mycket bra prestanda inom peer to peer nätverket, dock så kommer den totala prestanda vara beroende på den ursprungliga seederns förmåga att ladda upp block i snabb takt eftersom det är den som kommer att bestämma tids åtgången för de första noderna. Likaså kan man se att för att prestanda ska kunna var tillfredsställande för samtliga användare så behöver alla leechers stanna kvar som seeders efter att de blivit färdiga med sin egen nedladdning, även om det inte är ett krav så ses det som god sed. Om så inte sker kommer prestanda i nätverket att bli lidande. Vidare kan man dra slutsatsen att eftersom bittorrent noderna hela tiden strävar efter att optimera sin egen nedladdnings hastighet så kommer det innebära att noderna kommer att skifta sina datakällor allt eftersom datavägarna blir överbelastade respektive fria, vidare så kommer noderna att använda källor som finns i deras närhet eftersom det är där de får störst överföringshastigheter. 7 Fördelar respektive nackdelar Bittorrents absolut största tillgång är att man kan sprida filer på ett mycket bandbredds ekonomiskt sätt eftersom i teorin så behöver bara den ursprungliga seedern bara ladda upp en kopia av filen, detta kräver dock att de andvändare som är dom första att ansluta till nätverket är solidariska med sin egen bandredd för att på så sätt hjälpa till med spridningen av det publicerade materialet.
Om man jämför med det mer traditionella sättet att sprida filer via nätverk där en server skapar dedikerade anslutningar till alla som vill ha den information som erbjuds så kommer bittorrent vara mer: Bandbreddsekonomisk Skonsam mot hela distributions nätverket eftersom man hämtar data från flera håll samtidigt Robust då bittorrent hela tiden strävar mot att sprida de delar av filen som har minst antal källor. Dock så kommer bittorrent alltid vara beroende av att det finns användare som fortsätter att sprida materialet detta kan vara ett problem om filen har funnits ute en längre tid eftersom färre och färre användare då kommer att finnas kvar inom nätverket. En annan stor nackdel är att man har inget sätt att söka efter filer direkt inom bittorrent nätverket, utan man är hela tiden hänvisad till de webbsidor som publicerar.torrent filer och de tracker servrarna som finns tillgängliga. 8 Alternativ protokoll Även om bittorrent löser många praktiska problem så är det inte det enda peer to peer nätverket som har fått stor spridning, några andra alternativ som fått en stor spridning är direct connect, emule, Kazza och gnutella. Det finns även exempel på de protokoll som har bittorrent som grund till exempel Exeem. 9 Säkerhet Bittorrent protokollet verifierar samtliga nedladdade block emot en kryptografisk hash algoritm kallad SHA1, den gör att man med precision kan säkerställa att det block man precis laddat ned motsvarar exakt den ursprungliga filen. Användandet av SHA1 algoritmen för att generera checksumma för filen gör det mycket svårt att förfalska data som redan är introducerad i bittorrent nätverket. Man ska dock observera att det inte finns något som hindrar någon med suspekta avsikter att på eget bevåg sprida modifierad och i vissa fall skadlig data via bittorrent, dock lär en sådan spridning bli begränsad. En stor anledning till att bittorrent har blivit mer accepterat än vissa andra peer to peer nätverk är att all kommunikation sker öppet och vem som helst kan ansluta sig, detta gör att bittorrent blir mindre eftertraktat som medium att sprida upphovsrätts skyddat materiell. Men även om så är fallet så bittorrent till stor del ersatt kazza som det medium där lite mindre erfarna personer kan få tillgång till piratkopierat materiell. 10 Slutsats Som avslutning så kan man inte annat än reflektera över de möjligheter som bittorrent öppnar upp. Den teknik som har presenterat på föregående sidor har gett Internet användare världen över ett mycket kompetent och lätt använt verktyg för att kunna sprida stora filer i en skala som tidigare krävde att mycket stor andel bandbredd. Även företag har fått upp ögonen för den här tekniken och till exempel spelföretaget Blizzard publicerar och sprider spel patchar och film klipp genom bittorrent även många open source projekt så som Linux distributioner sprider sina filer via bittorrent. Framtiden kommer troligtvis visa på en ökad användning av protokollet, då protokollet bygger på öppen källkod så kommer nog många nätverksbaserade programvaror protokollet inbyggt. 11 Källförteckning 1. BitTorrent Economics Paper, http://www.bittorrent.com/bittorrentecon.pdf 2. BitTorrent protocol specification, http://www.bittorrent.com/protocol.html 3. Wikipedia, http://en.wikipedia.org/wiki/bittorrent