Sustav ravnopravnih čvorova za razmjenu datoteka
Upcoming SlideShare
Loading in...5
×
 

Sustav ravnopravnih čvorova za razmjenu datoteka

on

  • 636 views

 

Statistics

Views

Total Views
636
Views on SlideShare
636
Embed Views
0

Actions

Likes
0
Downloads
1
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Sustav ravnopravnih čvorova za razmjenu datoteka Sustav ravnopravnih čvorova za razmjenu datoteka Document Transcript

  • –SVEUČILIŠTE U ZAGREBU FAKULTET ORGANIZACIJE I INFORMATIKE VARAŽDINLuka Rajčević SUSTAV RAVNOPRAVNIH ČVOROVA ZA RAZMJENU DATOTEKA ZAVRŠNI RAD Varaždin, 2012.
  • SVEUČILIŠTE U ZAGREBU FAKULTET ORGANIZACIJE I INFORMATIKE VARAŽDINLuka Rajčević38117/09-R Sustav ravnopravnih čvorova za razmjenu datoteka ZAVRŠNI RAD Mentor: dipl. ing. Nikola Ivković Varaždin, lipanj 2012.
  • Sadržaj1. UVOD .............................................................................................................................................................12. P2P TEHNOLOGIJA ....................................................................................................................................3 2.1 UVOD U P2P MREŽE .....................................................................................................................................3 2.2 RAZVOJ P2P MREŽA.....................................................................................................................................4 2.3 PODJELA P2P SUSTAVA ................................................................................................................................6 2.3.1 Decentralizirani P2P sustavi..............................................................................................................6 2.3.2 Centralizirani P2P sustavi ............................................................................................................... 11 2.3.3 Hibridni P2P sustavi ........................................................................................................................ 14 2.4 ETIČNOST I LEGALNOST .................................................................................................................................153. APLIKACIJSKO RJEŠENJE..................................................................................................................... 17 3.1 KORIŠTENE TEHNOLOGIJE .............................................................................................................................. 17 3.2 IMPLEMENTACIJA WCF SERVISA ................................................................................................................... 19 3.3 IMPLEMENTACIJA KLIJENTSKE APLIKACIJE .................................................................................................... 24 3.3.1. Tehnički detalji klijentske aplikacije ..................................................................................................... 24 3.3.2. Grafičko sučelje i opis rada klijentske aplikacije aplikacije.............................................................. 264. ZAKLJUČAK .............................................................................................................................................. 345. LITERATURA ............................................................................................................................................ 35 I
  • 1. UvodSustav ravnopravnih čvorova ili možda poznatiji i bliži naziv peer – to – peer (u daljnjem tekstup2p) sustav je vrlo popularan način povezivanja sudionika u razmjeni podataka i informacija. Zarazliku od nekih drugih načina povezivanja i komunikacije (npr. klijent – server modela), usustavu ravnopravnih čvorova svi sudionici su jednaki, ravnopravni. To znači da nema nekogglavnog računala (servera) na koji se svi sudionici spajaju i komuniciraju s njime. U sustavuravnopravnih čvorova, svaki sudionik je istovremeno i klijent i server. Na taj način se postižedecentralizacija mreže i prevencija mnogih problema koje centralizirani sustav (klijent - servermodel) sa sobom donosi [1]:  Pouzdanost – kada server prestane biti dostupan, nije moguće ostvariti komunikaciju  Skalabilnost – Povećanjem broja korisnika aplikacija mora biti u stanju odgovoriti na povećani broj upita. Dolazi do potrebe za većim kapacitetima serverskih računala.  Trošak – centralna računala moraju biti snažna (snažni procesori, velika memorija, mnogo prostora na diskovima), što iziskuje trošak pogotovo kada se govori o većem broju korisnika  Zagušenje mreže – slabija centralna računala i veliki broj zahtjeva prema istima mogu dovesti do zagušenja mreže a time i do sporijeg prijenosa podataka pa čak i do pada samog centralnog računala„Promet ostvaren peer-to-peer mrežama (procjenjuje se na više od 1.3 petabajta podataka), uposljednjih 5 godina premašio je promet ostvaren pregledavanjem web stranica i drugimaktivnostima. Broj sudionika na peer-to-peer mrežama svakodnevno raste.“ [2, str. 4]Na temelju svih pokazatelja (količine prenesenih podataka, povećanja broja korisnika, povećanjabroja aplikacija za razmjenu podataka itd.) možemo zaključiti kako su P2P sustavi budućnostinterneta, razmjene podataka, umrežavanja i komunikacije općenito. To je jedan od razloga zbogkojih sam odlučio odabrati ovu temu kao svoj završni rad. P2P sustavi ne samo da su iskoristilisav potencijal koji su imali te ispunili sva očekivanja koja su pred njih bila postavljena, otišli sukorak dalje te nam učinili gotovo svaki podatak na dohvat ruke. Pojavom Napstera (prvog peer-to-peer sustava za razmjenu datoteka) dolazi do novog načina za razmjenu podataka, različitogod svih do tada poznatih široj javnosti. Taj novi način je pokrenuo revoluciju u razmjeni datotekameđu korisnicima. Napster je promjenio arhitekturu učinivši svakog sudionika u komunikacijibitnim. Svaki korisnik je bio klijent a u isto vrijeme i server. Taj novi način razmjene datoteka se 1
  • jako brzo proširio računalnim svijetom te su se ubrzo počele pojavljivati mnoge druge aplikacijekoje su omogućavale razmjenu datoteka. Danas, 13 godina nakon Napstera postoji na desetkeiznimno kvalitetnih aplikacija za razmjenu datoteka. Između ostalih valja spomenuti torrentklijente (utorrent, bittorrent, azureus), Limewire, eMule, Shareazu itd. O samoj povijesti razvojaP2P aplikacija će također biti govora u ovome radu.Ipak, nije sve „ružičasto“ u svijetu P2P aplikacija. Postoji veliki broj rasprava o pitanjimalegalnosti i etičnosti besplatne razmjene podataka među korisnicima. Svakodnevno se pokrećunove tužbe i parnice protiv web stranica koje podržavaju razmjenu podataka (najpoznatijiprimjeri se odnose na tužbe protiv torrent trackera – web stranica koje koordiniraju P2Prazmjenu datoteka i omogućavaju preuzimanje .torrent datoteka koje sadrže popis korisnika odkojih se može preuzeti određena datoteka kao i korisnika koji upravo preuzimaju datoteku [3]).Sami spomen na P2P sustave i/ili aplikacije aludira na nešto negativno, nelegalno, a mnogo putai nešto loše, no s druge strane postoji i ogroman broj pobornika upravo ovakvog načina razmjenedatoteka.U ovom završnom radu ću pokušati opisati P2P mreže, njihov nastanak, svrhu te načindistribucije datoteka. Biti će govora o vrstama P2P mreža, načinima povezivanja tekarakteristikama svakog od načina. Biti će govora i o trenutno najpoznatijim aplikacijama zarazmjenu podataka i načinu na koji one ostvaruju razmjenu te naposlijetku ću reći nešto o temikoje sam se ukratko dotaknuo u uvodu a to je etičnost i legalnost P2P razmjene datoteka. To jesamo jedan dio mog završnog rada. U drugom dijelu će biti govora o aplikaciji za razmjenudatoteka preko koju sam izradio koristeći P2P principe i arhitekturu. Reći ću nešto otehnologijama koje sam koristio za izradu aplikacije, prikazati ću način na koji se razmjenadatoteka implementirala, komentirati ću najbitnije dijelove programskog koda koji ostvarujukomunikaciju i sve to popratiti slikama aplikacije uz detaljne opise svih funkcionalnosti. 2
  • 2. P2P tehnologija 2.1 Uvod u P2P mreže „Sustav ravnopravnih čvorova sustav podrazumijeva umrežavanje i komunikaciju računalana način da ne postoji centralno računalo na koje se svi ostali spajaju, nego je svako računalo„inteligentna i ravnopravna stanica u mreži sposobna pronaći druga računala i izravno s njimakomunicirati, bez potrebe autorizacije na nekom centralnom poslužitelju“. [4, str. 3]. Ovakvisustavi, koji za svoj rad ne koriste poslužitelje, su poznati i pod nazivom „čisti P2P sustavi“.Osim njih postoje i P2P sustavi koji koriste i poslužitelje za svoj rad, ali glavninu komunikacijeobavljaju po P2P principu.P2P sustav možemo promatrati i u odnosu na model komunikacije u stvarnom životu. Kada ljudižele komunicirati s nekim, čine to, najčešće, direktno. Kada nešto trebaju, upitaju svoje prijatelje(čvorove) koji imm mogu dati potrebne informacije ili ih mogu uputiti na nekoga tko bi mogaoimati informacije koje su im potrebne. P2P tehnologija nam omogućava da takav načinkomunikacije prenesemo u računalni svijet i nastavimo komunicirati s drugima koristeći računalana isti način kako to činimo i u stvarnom svijetu.U P2P mrežama svi sudionici (čvorovi) se nalaze na istoj razini i, možemo to tako reći, jednakosu važni u ostvarivanju razmjene podataka. Najbitniji aspekti P2P sustava i mreža su navedeni unastavku[4, str.3]: 1. Simetričnost uloga – Svaki sudionik u sustavu obično ima ulogu i servera i klijenta. Ustvari, svaki čvor na svoje računalo instalira aplikaciju koja u sebi sadrži kod i za klijent i za server. Kao takav, svaki čvor može postavljati upite drugim čvorovima u sustavu (kao klijent), ali i odgovarati na upite koje mu postavljaju drugi čvorovi (kao server). 2. Skalabilnost – Za razliku od tradicionalnih distribuiranih sustava i drugih arhitektura, P2P sustavi se mogu skalirati na tisuće čvorova. Kao rezultat toga, oni mogu koristiti snagu svih računala zajedno bez potpune povezanosti svih čvorova (svakog čvora sa svakim drugim). Za taj problem postoji više različitih načina otkrivanja drugih čvorova u mreži. 3. Heterogenost – P2P sustav može biti heterogen u smislu hardvera koji čvorovi koriste. Čvor može biti jako sporo računalo sa zastarjelim hardverom, ali može biti i neko superračunalo. P2P ne pravi razliku između njih. 3
  • 4. Distribuirana kontrola – U svojoj najstrožoj definiciji, P2P zahtjeva da sve bude decentralizirano. U idealnom slučaju ne bi smjela postojati niti jedna centralizirana struktura (središnji server i sl.). 5. Dinamičnost – P2P aplikacije vrlo često rade u jako dinamičnoj okolini. Topologija P2P sustava se može mijenjati jako brzo zbog dolaska novih čvorova ili odlaska postojećih. Sadržaj i količina datoteka u P2P sustavima se također mijenja ovisno o čvorovima koji su u nekom trenutku spojeni na sustav. 2.2 Razvoj P2P mrežaIako se u uvodu spominje Napster kao začetnik P2P sustava, to nije potpuno točno. Napster je tajkoji je pokrenuo revoluciju i radi kojeg se P2P aplikacije danas nalaze u samom vrhu najčešćekorištenih aplikacija, ali sama povijest P2P sustava seže u same početke razvoja interneta, u dobaARPANET-a.„ARPANET mreža je bila dizajnirana za dijeljenje računalnih resursa i dokumenata izmeđuraznih američkih istraživačkih ustanova. Taj početni sustav nije bio klijent – server sustav. Svakikorisnik je bio ravnopravno tretiran. Upravo radi toga bi se ova mreža mogla nazvati i P2Pmrežom. 1979. je razvijen Usenet protokol. To je bila aplikacija vezana za interesne grupe(newsgroups). Imala je neka svojstva P2P mreža iako je ustvari bila obična klijent – serveraplikacija. Devedesetih godina dolazi do naglog razvoja mreža pojavom WWW-a, emaila istreaminga. I dalje je osnova komuniciranja bila klijent - server arhitektura, do pojaveNapstera.“[6]Razvoj P2P sustava se okvirno može podijeliti na 3 razdoblja, na 3 osnovne generacije. a) Prva generacija klijenata - centralizirana Oko 1999. godine, dolazi do pojave prve generacije P2P aplikacija. To su bili klijenti koji nisu bili dovoljno samostalni da dijele podatke bez nekog središnjeg entiteta. Radi toga se nazivaju centralizirani. Postojao je središnji poslužitelj na kojeg su se svi korisnici spajali i sa kojeg su dobivali popis svih drugih korisnika i datoteka koje su oni imali. Bitna značajka ove generacije je ta što su kućna računala prvi put bila nešto više od običnih konzumatora sadržaja. Postala su aktivni sudionik u razmjeni, bitan kotačić u sveopćem razvoju P2P-a. Najpoznatiji, a ujedno i prvi takav klijent je bio Napster. On je bio centralizirana aplikacija za dijeljenje glazbenih datoteka među korisnicima. 4
  • b) Druga generacija klijenata – decentraliziranaNakon prve generacije i njene centralizacije sve više se pokušava maknuti od tog konceptaposlužitelja te nastaju aplikacije kojima se sadržaj dijeli bez prisustva ikakvog središnjegračunala. Njihove osobine su te da svi čvorovi imaju jednake mogućnosti i obaveze premadrugim čvorovima, nema centralnog poslužitelja na kojemu se nalaze metapodaci o drugimkorisnicima itd. Najpoznatiji predstavnik druge generacije P2P mreža je svakako Gnutella.Gnutella je sa svojim emitiranjem (broadcasting) napravila priličan iskorak u odnosu na dotada korištene sustave. Za korištenje Gnutelle nije bio potreban poslužitelj nego se svaki čvormorao u određenom vremenskom intervalu „javljati“ susjednim čvorovima da je prisutan.Pretraga podataka se vršila na sličan način, na mrežu se emitirala poruka o traženom podatkusvim susjednim čvorovima. Oni su na tu poruku odgovarali ukoliko posjeduju traženipodatak, i proslijeđivali ju dalje svojim susjednim čvorovima. Na taj način se jako brzopretraživala mreža.c) Treća generacija klijenataTrenutne P2P mreže su izgrađene na optimiziranim verzijama prethodnih mreža, mreža izprethodnih generacija. Uz optimizaciju, iskorištene su sve dobre stvari svake od prethodnihgeneracija. Tako trenutno postoje 2 tipa P2P mreža[7]:  Friend to Friend – mreža koja je definirana stupnjem poznavanja i odnosa između korisnika. Korisnici ovise o dozvolama drugih korisnika za pristup podacima. Primjeri ovakvih mreža su Metaner, WASTE i MUTE  Anonymous – slično kao u prvoj i drugoj generaciji P2P mreža, korisnici su anonimni i međusobno mogu dijeliti datoteke bez nekih ograničenja. Primjeri mreža su: GNUnet, Entropy, Freenet... 5
  • 2.3 Podjela P2P sustavaNajjednostavniji način podjele (gledajući aktualne P2P aplikacije i sustave) je onaj na dvijekategorije: 1. Centralizirane P2P sustave i 2. Decentralizirane P2P sustaveOsim ovih osnovnih kategorija, često se dodaje još jedna a to je 3. Hibridni P2P sustavHibridni P2P sustav kombinira arhitekturu centraliziranog i decentraliziranog sustava kako bi štobolje iskoristio sve prednosti jedne i druge arhitekture. U nastavku će biti riječi o svakoj od ovihkategorija. Slika 1: Podjela P2P sustava 2.3.1 Decentralizirani P2P sustaviU decentraliziranim P2P sustavima čvorovi imaju jednaka prava i obveze. Na taj način nijedančvor nije superioran drugom. Svaki čvor ima samo djelomičan pregled P2P mreže i nudi podatkeili servise koji odgovaraju ili su potrebni samo nekim upitima i čvorovima. Upravo zbog togalociranje drugih čvorova koji nude podatke koji su nam potrebni je kritični problem ovakvihsustava. Prednosti ovakvih sustava su prilično očite: a) Ne postoji središnja točka sustava te je tako otežano i rušenje samog sustava (ako jedan čvor padne sustav nastavlja s radm kao da se ništa nije ni dogodilo) b) Ranije navedene prednosti P2P sustava (kao npr. visoke performanse, skalabilnost, robusnost) dolaze do izražaja kod ovog tipa P2P sustava 6
  • Slika 2: Decentralizirani P2P sustaviU potpuno decentraliziranoj arhitekturi, ne postoji centralizirani server niti drugi „istaknutiji“član mreže (superčvor) koji bi koordinirao svim ostalim čvorovima i upravljao operacijamameđu čvorovima. Sustav može neometano raditi i prilikom priključivanja novih čvorova iliodlaska postojećih. Nekoliko postojećih P2P sustava pripadaju ovoj kategoriji, kao npr. Gnutella,FreeNet, FreeHaven, Chord itd. Potpuno decentralizirani sustavi se mogu podijeliti na dvijepodkategorije: 1. Nestrukturirani P2P sustavi 2. Strukturirani P2P sustaviPodjela je nastala na temelju strukture mreže, tj. povezanosti strukture mreže s čvorovima koji seu njoj nalaze.U nestrukturiranim P2P sustavima sadržaj koji se nalazi na svakom čvoru nema veze sastrukturom mreže u kojoj se čvor nalazi. Jednostavnije rečeno, svaki čvor sam bira sadržaj kojiće spremiti na svoje računalo. Ako pošaljemo upit za nekom datotekom u ovakvom tipu mreže,jako teško je znati točnu lokaciju gdje bi se ta datoteka trebala nalaziti. Upravo zbog toga,potrebno je pretražiti sve ili određene podskupove čvorova u mreži. Obično je potrebnopregledati puno čvorova kako bi se pronašli potrebni podaci. Većina nestrukturianih P2P sustavaje prihvatila emitiranje kao način pretrage mreže i slanja upita u mreži. U takvom načinupretrage upit se odašilje svim čvorovima s kojima je čvor povezan. Ukoliko oni sadrže datotekukoja se traži, oni šalju odgovor čvoru od kojeg su dobili upit. Ukoliko to nije slučaj, čvoroviproslijeđuju upit novim čvorovima te se na taj način pretražuje mreža. Na ovaj način je pretragamreže prilično brza i jednostavna, ali s druge strane ima i svoje nedostatke. Jedan od glavnihnedostataka je i zagušenje mreže. Pošto se može dogoditi da veliki broj čvorova u istom trenutraži određenu datoteku, broj upita koji se šalju u mreži može postati jako velik, a svakim novim 7
  • upitom se povećava. Najpoznatiji alat koji koristi ovakav način pretrage je Gnutella. Ona koristisvoju inačicu emitiranja koja se razlikuje od standardnih načina. Kod Gnutelle se zahtjev ne šaljebeskonačno dugo svim susjedima pojedinog čvora nego se takvo stanje vrši u vrlo ograničenombroju koraka – 7. Sa tako dozvoljenim brojem koraka postoji vrlo velika vjerojatnost da ćenekakav zahtjev biti pozitivno obrađen bez da pretjerano zakrčava mrežu.Neke od osnovnih karakteristika nestrukturiranog P2P sustava su:  Jednostavnost – protokol iza cijele mreže je vrlo jednostavan  Generira se veliki mrežni promet prilikom pretraživanja  Odličan za pronalaženje podataka koji su replicirani na velikom broju peerova, ali vrlo loše za podatke pohranjene na malome broju peerova (pogotovo ako su udaljeni od nas veći broj „koraka“)  Ne postoji jedna točka raspada. Ukoliko jedan čvor propadne, ostali čvorovi su dovoljno „inteligentni„ da to shvate i povežu se jedni na druge.Strukturirani sustavi se razlikuju od gore opisanih decentraliziranih po smještaju datoteka. Kodnjih je topologija mreže usko kontrolirana. Postoji točno određeni mehanizam za određivanjelokacije podataka u mreži, tj. podaci su spremljeni na točno određene lokacije. Čvorovi radeskupa kako bi održali strukturu mreže usprkos dinamičnosti sustava (dinamičkog spajanja iodspajanja korisnika). Postoji više načina za postizanje strukture mreže, npr. korištenjem hashfunkcija (recimo SHA-1) na imenu podatka kao i imenu čvora, podaci se postavljaju na čvorovečija je hash vrijednost numerički blizu onoj od podatka. Na taj način se ostvaruje mapiranjeizmeđu podataka i čvorova. Slanjem upita u ovakav tip mreže, lokacija podatka koji se tražimože biti određena jako brzo i to bez potrebe za slanjem velikog broja upita kao kod emitiranja.Strukturirani P2P sustav najčešće se zasniva na ideji DHT-a (Distribuirane hash tablice). Hashtablica je struktura podataka koja se sastoji od ključa i vrijednosti. DHT ima dvije osnovnemetode:  put (k,d) – metoda za pridruživanje jedinstvenog ključa k identifikatoru d.  get(k) – metoda za dohvaćanje identifikatora iz poznatog ključaGlavni predstavnici zasnovani na DHT-u su Chord i CAN. Chord je jedan od prvih koji je počeokoristiti DHT. [5]Neka od osnovnih svojstava strukturiranih P2P sustava su činjenica da sustav:  garantira pronalaženje podataka u O(log n) koraka (gdje je n broj čvorova u mreži), što je bolje nego kod nestrukturiranih sustava.  Ima povećanu cijenu objavljivanja novog podatka u odnosu na nestrukturirane P2P sustave 8
  •  Održava dodatne strukture podataka (tablica usmjeravanja) radi usmjeravanja upita prema čvorovima koji pohranjuju tražene podatke.GnutellaNajpoznatiji primjer decentraliziranog P2P sustava je zasigurno Gnutella. Gnutela je potpunodecentraliziran sustav. Nema središnjeg entiteta koji bi bio zadužen za organizaciju mreže nitipostoji diskriminacija između klijenta i poslužitelja. Čvorovi u mreži se spajaju jedan na drugidirektno uz pomoć posebne aplikacije. Gnutella mreža se širi spajanjem novih čvorova a istotako se i smanjuje odlaskom postojećih. To konstantno odlaženje i dolaženje novih čvorovastvara dinamičku mrežu sa varijabilnim brojem članova. Upravo zato su spajanje i odlazak smreže među najbitnijim operacijama Gnutelle (uz pretraživanje i preuzimanje podataka).„Kada se čvor spoji na Gnutella mrežu šalje tzv. „PING“ poruku kako bi objavio svojuprisutnost. „PING“ poruka se prosljeđuje svim ostalim čvorovima emitiranjem. Kada neki čvorprimi „PING“ poruku, on je dužan odgovoriti tzv. „PONG“ porukom koja označava da je čvorsvjestan prisutnosti novopridošlog čvora. Iz „PONG“ poruke, novopridošli čvor može dobitiinformacije o čvorovima i uspostaviti vlastito „susjedstvo“ s nekima od njih. Kada čvor odlazi smreže nije potrebno obavještavati susjede. Također, svaki čvor je dužan u regularnimvremenskim intervalima slati svojim susjedima „PING“ poruke kako bi provjerio jesu li oni jošprisutni na mreži. Ako čvor ne primi odgovor, smatra se da je određeni čvor napustio mrežu iosvježava se lista susjednih čvorova.O pretraživanju mreže u Gnutelli smo već nešto rekli (emitiranje) ali je bitno dodati još nekestvari. Kada čvor želi pronaći određeni podatak on šalje „lookup“ poruku susjednim čvorovima.Susjedni čvorovi šalju tu poruku svojim susjedima itd. Oni čvorovi koji sadrže traženi podatakodgovaraju sa „hit“ porukom koja se šalje natrag putem kojim je „lookup“ poruka išla“.[4,str.22] Slika 3: Mehanizam pretraživanja kod Gnutelle 9
  • Slika 3. prikazuje jednostavan primjer pretraživanja mreže u Gnutelli. Recimo da čvor A želineki podatak koji imaju samo čvorovi D i H. On će poslati „lookup“ poruku svojim susjednomčvorovima (B, E i F). Oni će taj upit slati dalje drugim čvorovima sve dok svi čvorovi nisuispitani. Oni čvorovi koji sadrže traženi podatak (D i H) će odgovoriti čvoru A sa „hit“ porukomte se na temelju te poruke čvor A može povezati sa čvorovima D i H.Svojstva Gnutella mreže: 1. Skalabilnost – emitiranje kao mehanizam pretraživanja je „dvosjekli mač“. S jedne strane, pošto svaki upit može biti poslan svim čvorovima u mreži u kratkom vremenu, Gnutella je snažna u otkrivanju potencijalnih čvorova i rezultata. Međutim, spajanjem više čvorova u mrežu i konstantnim slanjem upita drugim čvorovima mreža se može zakrčiti. Upravo zbog toga je skalabilnost veliki problem ove mreže. 2. Samoorganizacija – Kada se čvor spoji na Gnutella mrežu to je kao kad osoba dolazi u novu okolinu. U početku nezna tko su mu susjedni čvorovi ali kako vrijeme prolazi, upoznaje okolinu i čvorove oko sebe. Isto tako stvara i veze s susjednim čvorovima, iako one nisu trajne. Kako bi osigurao da će njegovi upiti biti odgovoreni što brže i uspješnije, čvor sam mora odlučiti koje nove veze stvoriti a koje postojeće prekinuti. Naravno, čvor pokušava održati veze s drugim čvorovima koji su mu već odgovorili na „PING“ poruke, ali također i s onima koji imaju veliku propusnost. 3. Anonimnost – Gnutella je sustav sa visokim stupnjem anonimnosti. Koristi emitiranje poruka kako bi dostavilo upit svima u mreži. Slanje poruka se temelji na tablicama usmjeravanja Gnutellinih čvorova a ne na IP adresama pojedinog čvora. Na taj način nije moguće otkriti tko točno traži određeni podatak sve do trenutka kad se čvor želi direktno spojiti s drugim čvorom radi razmjene. Tada se im međusobno vidljive IP adrese i anonimnost je narušena. 4. Dostupnost – pošto je Gnutella prilično dinamična mreža i čvorovi se mogu spajati i odspajati bez ikakvog upozorenja, i pošto nema nekog mehanizma za provjeru dostupnosti, ista nije garantirana. Nije moguće garantirati da će upiti koji su poslani biti odgovoreni isto kao niti da će podatak koji se započeo preuzimati biti preuzet do kraja. Kada preuzimanje propadne jedini način je pokrenuti novo od drugog čvora. 10
  • 2.3.2 Centralizirani P2P sustaviCentralizirani P2P sustavi kombiniraju mogućnosti i centraliziranih i decentraliziraniharhitektura. Baš kao i kod klijent - server arhitekture postoji jedan ili više središnjih servera kojipomažu čvorovima u pronalasku željenih podataka. Kako bi locirao podatke čvor šalje upitcentralnom računalu. Međutim, kao i kod decentraliziranog sustava, jednom kada čvor dobijeinformaciju o tome gdje se nalazi podatak koji mu treba, on može direktno komunicirati sdrugim čvorovima (bez potrebe za serverom). Slika 4: Centralizirani P2P sustav (1)Za razliku od decentralizirane P2P mreže u kojoj su svi čvorovi bili jednaki i nije bilo razlikeizmeđu njih kao ni posebnih uloga nekog čvora, kod centraliziranih je situacija drukčija. Ucentraliziranom P2P sustavu se nasljeđuju neki koncepti iz klijent-server arhitekture. Točnije,postoji jedan poslužitelj. Taj poslužitelj upravlja s metapodacima o datotekama koje čvorovidijele u mreži. Svaki upit koji se šalje je prvo usmjeren prema centralnom računalu koje vraćapopis čvorova koji imaju određeni podatak. Nakon toga čvor može direktno komunicirati ipreuzeti podatke koji su mu potrebni. Ukratko rečeno, ono što centralizirani sustav donosi sasobom je: a) Ubrzanje procesa pronalaska resursa – šalje se samo jedan upit i to centralnom računalu koje sadrži podatke o svim čvorovima b) Garancija pronalaska svih čvorova koji sadrže traženi podatak – kako se na serveru nalaze svi čvorovi, može se garantirati da će svi oni koji imaju traženi podatak biti pronađeni. c) Jednostavnije održavanje, organizacija i administracija sustava uz pomoć centralnog servera 11
  • Slika 5: Centralizirani P2P sustav (2)Na slici 5. možemo vidjeti skicu centraliziranog P2P sustava. Recimo da čvor A želi pronaćiodređeni podatak koji imaju samo čvorovi C i B. Čvor A će poslati upit centralnom serveru.Server će obraditi upit i čvoru A vratiti popis svih čvorova u mreži koji imaju traženi podatak.Nakon toga čvor A može direktno komunicirati sa čvorovima iz dobivenog popisa.Jedan od najpoznatijih a definitivno jedan od prvih centraliziraniih P2P sustava je bio Napster. UNapsteru, svaki čvor je pridodavao sadržaj. Svaki čvor je svoju osobnu kolekciju glazbe dijeliosvim ostalim čvorovima u mreži. Kako bi korisnici mogli locirati glazbene datoteke, Napster jekoristio centralizirani server u kojemu su bile premljene lokacije čvorova koji su bili vlasnicipodataka. Općenito, Napster je pružao tri osnovne funkcije: pretraživanje, razmjenu podataka iIRC (čavrljanje). Za pretraživanje se koristio centralni poslužitelj na već objašnjen način.Razmjena podataka se obavljala bez prisustva poslužitelja i bez korištenja njegovog kapaciteta idiskovnog prostora. Najjednostavnija razmjena korištenjem Napstera podijeljena je na tri glavnefaze: 1.) Spajanje na Napster – korisnik je bio obavezan spojiti se na centralni poslužitelj i obaviti proces registracije 12
  • 2.) Otkrivanje podataka – vršeno je slanjem „lookup“ poruke prema centralnom poslužitelju. Poslužitelj bi nakon toga pregledao indeksirani popis korisnika koji se nalaze u bazi i vratio korisniku popis onih koji sadrže traženi podatak (ukoliko ih ima). Bitno za napomenuti je činjenica da se na serveru ne nalaze datoteke koje se preuzimaju. Na njemu se nalaze samo metapodaci (podaci o podacima), tj. popis korisnika s korespondirajućim IP adresama i popisom datoteka dostupnih za razmjenu. 3.) Preuzimanje podataka – se obavljalo bez prisutnosti centralnog računala. Nakon dobivenog popisa korisnika koji imaju traženu datoteku, njih se kontaktira direktno i od njih traži datoteka za preuzimanje.Što se tiče svojstava Napstera (općenito centraliziranih P2P sustava), ona su navedena uslijedećem popisu: a) Ranjivost na napade – pošto Napster koristi centralni server ranjiv je na maliciozne napade koji za njega imaju katastrofalne posljedice. b) Slaba privatnost korisnika – svaki čvor može vrlo jednostavno doći do IP adrese bilo kojeg drugog čvora u mreži pošto se sve one nalaze na centralnom računalu. Upravo radi toga je smanjena anonimnost. Privatnost korisnika nije na visokoj razini kao kod Gnutelle. c) Skalabilnost sustava – pošto je kod Napstera obaveza svakog korisnika da se spoji na centralni server, i pošto svaki upit mora proći kroz njega to može stvoriti popriličnu količinu upita, tj. prometa koji se generira prema središnjem računalu. Povećanjem broja korisnika, a samim time i upita prema serveru, dolazi do sporije reakcije i kašnjenja u odgovoru na upite. Upravo radi toga je Napster prilično slab kad je u pitanju robusnost i skalabilnost, tj. povećanjem broja korisnika se smanjuju performanse sustava. d) Dostupnost – nakon što neki korisnik preuzme datoteku, na njegovo računalo se spremi kopija datoteke te ona automatski bude dostupna drugim čvorovima za preuzimanje. Na taj način se dostupnost podataka povećava i lakše je doći do njih čak i ako originalni djelitelj sadržaja povuče svoje podatke s mreže li bude nedostupan. e) Cijena održavanja – za razliku od klijent – server modela u kojemu se pravi podaci koji se preuzimaju nalaze na poslužiteljima koji radi toga trebaju imati jako velike performanse i kapacitete diskova, kod ovakvih poslužitelja je ipak potrebna manja snaga. Pošto se podaci ne nalaze na središnjem poslužitelju, količina prostora kao i ostale performanse mogu biti puno manje, a s tim je i manja cijena održavanja. 13
  • 2.3.3 Hibridni P2P sustaviSam naziv ovih P2P sustava nam otkriva da oni nastaju kombinacijama već postojećih sustava.Hibridni P2P sustavi koriste sve prednosti drugih P2P arhitektura, tj. centraliziranih idecentraliziranih dok se u isto vrijeme od njih i razlikuju po svojim „elegantnim pomoćnimmehanizmima koji olakšavaju lociranje resursa“. [4, str. 31.] Kod nekih P2P sustava hibridnearhitekture postoje čvorovi koji posjeduju više kapaciteta i imaju više odgovornosti od ostalihčvorova. Ti čvorovi se nazivaju superčvorovi (super korisnici). Ovi čvorovi predstavljaju „višurazinu“ hibridnog sustava. Ova „viša razina“ pruža običnom čvoru usluge slične onima koje npr.server pruža svojim čvorovima u centraliziranim sustavima. Superčvor ima jako bitnu ulogu uhibridnom sustavu, pogotovo kada je riječ o lociranju resursa. Na slijedećoj slici je prikazanaskica hibridne P2P mreže sa običnim i super – čvorovima. Slika 6: Hibridna P2P mreža [7]Sa slike 6. se može vidjeti jednostavna topologija hibridne P2P mreže. U mreži postoje običničvorovi (oni koji samo razmjenjuju datoteke) i superčvorovi (oni koji, osim što razmjenjujudatoteke, sudjeluju u organizaciji mreže i u pretraživanju iste te otkrivanju podataka).„Hibridne mreže koriste efikasnost u pretraživanju od centraliziranih arhitektura. To čine nanačin da svakom od čvorova daju određeni dio mreže. Taj superčvor je dužan indeksirati svedatoteke koje se nalaze u njegovom dijelu mreže. Indeks je potrebno konstantno održavatisvježim (zbog dinamičkog spajanja i odlaska čvorova iz mreže). Kada neki čvor želi preuzetidatoteku, šalje zahtjev svom superčvoru. Superčvor pretražuje indeks i odgovara čvoru s listomkorisnika koji sadrže traženu datoteku. “ [7, str. 169.] 14
  • Tu se u priču ubacuje još jedna značajka hibridnih P2P mreža, a to je emitiranje upita drugimsuperčvorovima s kojima su oni povezani. Ovo neodoljivo podsjeća na Gnutellu i njenoemitiranje upita svim povezanim čvorovima u mreži. Na taj način se koristi prednostdecentralizirane arhitekture, njena brza pretraga svih čvorova.2.4 Etičnost i legalnostNakon što smo se upoznali sa P2P mrežama, s njihovom strukturom, vrstama i načinom rada rećićemo nešto o temi koja je uvijek prisutna kada god se govori o P2P mrežama. naravno, radi se oetičnosti i legalnosti korištenja P2P mreža. Slika 7: Anti piratska kampanjaP2P, kao arhitektura, je u potpunosti legalna i kao takva se može potpuno legalno koristiti zapreuzimanje podataka koji se na internetu (na računalima drugih korisnika) nalaze legalno.Bitno je napomenuti da se ona dosta često koristi u ilegalne svrhe, i to na način da se vršipreuzimanje stvari za koje korisnici koji ih preuzimaju nemaju autorsko pravo. Puno jekontroverzi korištenja P2P aplikacija i postoji mnogo zagovornika ove tehnologije i slobodeširenja podataka, ali također velik je broj i onih koji smatraju da P2P narušava autorska prava teda se tako oštećuju vlasnici (autori) datoteka koje se razmjenjuju ovim putem. Bitno jespomenuti i činjenicu da se, kada je riječ o P2P sustavima, datoteke niti u jednom trenutku ne 15
  • nalaze na serverima tvrtki i wer stranica koje nude razmjenu ili koje su razvile software, pa ipakje kroz povijest bilo dosta slučajeva u kojima su aplikacije morale biti ugašene i prestati s radomzbog kršenja autorskih prava Posljednji takav primjer je vezan za nekad najpoznatiju P2Paplikaciju Limewire koja je prestala s radom zbog tužbi u vezi kršenja autorskih prava. OsimP2P aplikacija, velike probleme imaju i torrent trackeri. Iako kroz njih također direktno neprolaze podaci, niti se oni nalaze na njima, vrlo često su upravo oni optuženi za širenje piratstva ikršenje autorskih prava. Kao što je slučaj s P2P-om i njegovim aplikacijama, i trackeri kao itorrent klijenti su u potpunosti legalni i posao koji oni obavljaju, posrednik između krajnjijhkorisnika, je legalan sam po sebi.Postoje i pokazatelji koji govore da P2P tehnologija ustvari jako dobro utječe na npr. glazbenuindustriju nego se to prikazuje u javnosti [8]:  Većina korisnika koji preuzimaju glazbu putem P2P-a nisu „lopovi“ niti „pirati“ nego ljubitelji glazbe koji su voljni i platiti za glazbu.  Izvođači su zaradili više novca od tih novih ljubitelja glazbe nego što bi to uspjeli bez njih  Pravo značenje razmjene podataka P2P-om nije povreda intelektualnog vlasništva nego stvaranje novog načina za širenje i razvoj tržišta 16
  • 3. Aplikacijsko rješenjeOvaj završni rad je osim teoretskog dijela zahtjevao i implementaciju P2P aplikacije za razmjenupodataka između čvorova. U slijedećim stranicama biti će riječi o načinu na koji jeimplementirana P2P aplikacija i koje tehnologije su korištene za implementaciju. Biti ćeprikazani glavni dijelovi programskog koda, popraćeni slikama aplikacije u najbitnijimtrenucima njenog rada.Općenito, aplikacija je implementacija centraliziranog P2P sustava sa centralnim „računalom“ nakoji se spajaju svi čvorovi. Na tom centralnom računalu su spremljeni podaci o spojenimkorisnicima kao i o datotekama koje oni dijele, njihovoj veličini itd. Slijedi detaljniji opis samogprojekta.3.1 Korištene tehnologije„Sustav distribuiranih čvorova za razmjenu datoteka“ ili kraće P2P aplikacija je implementiranau cijelosti na Microsoftovoj .NET platformi.„.NET je platforma razvijena od strane Microsofta i prvenstveno se koristi na Windowsoperacijskom sustavu. Platforma uključuje veliku biblioteku klasa i omogućava interoperabilnostprogramskih jezika (svaki jezik može koristiti kod napisan u nekom drugom jeziku). Programinapisani u .NET platformi se izvršavaju u programskom okruženju zvanom CLR – CommonLanguage Runtime. Okruženje koje aplikacijama daje na korištenje mnoge usluge (sigurnost,upravljanje memorijom i upravljanje izuzecima (exception handling)). Biblioteka klasa i CLRskupa čine .NET platformu.“Osobno sam najbolje upoznat s tom platformom te jezicima i servisima korištenima na njoj pa jeto bio logičan odabir. Aplikacija je u cijelosti napisana u C# programskom jeziku, izuzevši upiteprema bazi koji su napisani u SQL-u.„C# je namijenjen da bude jednostavan, moderan, objektno-orijentirani programski jezik općenamjene“.[9]Kao i .NET platforma, i C# je odabran iz istih razloga. Kao razvojno okruženje (IDE) je korištenMicrosoftov Visual Studio 2010. Za bazu podataka sam također koristio usluge Microsoftovihalata, korišten je MS SQL Server 2012. 17
  • Osim standardnog programiranja windows aplikacija, za svoj projekt sam odlučio koristiti neštodrukčije od svega na što sam naišao u pripremi ovog rada. Pošto je ovo implementacijacentraliziranog P2P sustava, u središu se nalazi aplikacija koja upravlja spojenim korisnicima inegdje (najčešće u bazu) sprema podatke o njima. Ulogu centralnog servera sam odlučio datiweb servisu implementiranom u C#, uz pomoć WCF tehnologije, koja u posljednje vrijemepostaje sve više popularna.„WCF je razvojna platforma i sustav za izradu, konfiguriranje i razvoj mrežnih distribuiranihservisa. To je jedan od najnovijih servisno-orijentiranih tehnologija. Jedna od glavnihkarakteristika WCF-a je interoperabilnost. WCF je jedinstveni programski model dostupan u.NET frameworku od verzije 3.0. WCF kombinira svojstva web servisa, udaljenog upravljanja(remoting), MSMQ (Microsoft Message Queueing) i COM+ (Component Object Modela).“ [10] Slika 8: Tehnologije koje čine WCF 18
  • 3.2 Implementacija WCF servisaSama implementacija WCF-a se također radi u MS Visual Studiu, samo što je, za razliku odrecimo Windows Forms aplikacije potrebno odabrati WCF servis. Automatski generirani kodnam daje jednostavne funkcije koje su implementirane na servisu. Implementacija se radi nanačin da se u sučelju (IService) definiraju operacije skupa s njihovim argumentima, ali bezimplementacije. Prikaz operacija koje su korištene u ovom projektu može se vidjeti na slici 9. Slika 9: Operacije korištene u implementaciji WCF-aPrije svake operacije potrebno je napisati da se radi o operaciji pomoću ključnih riječi[OperationContract]. Postoji i tzv. [DataContract] koji nije bio korišten u ovom projektu.Implementacija navedenih operacija se radi u posebnoj klasi (može se kreirati nova klasa ilikoristiti već generirana kao što je to napravljeno ovdje). Unutar te klase koja, naravno, nasljeđujesučelje ISevice se radi implementacija svih operacija navedenih u [OperationContract] – u. 19
  • Slika 10: Class dijagram WCF servisaRadi količine koda te uzimajući u obzir broj stranica ovog rada, neću prikazati sav kodimplementacije nego samo najbitnije dijelove implementacije WCF-a.Također, bitno je spomenuti i za što se točno koristi ovaj WCF servis. Dakle, svaki korisnik jebio obavezan spojiti se na servis sa odabranim nadimkom. Na WCF- u je implementiranaoperacija koja je u bazu spremala podatke o korisnicima. Implementacija te operacije vidljiva jena slici 10. Slika 11: Upload podataka o korisniku na servis 20
  • Ovo je prilično jednostavna metoda naziva uploadFilesToService. Prima slijedeće parametre:ime, IP, ime datoteke, putanju do datoteke, veličinu datoteke, hash i UDP port. Ova se metodapoziva za svaku datoteku koja se dijeli. Sama implementacija se sastoji od kreiranja konekcije naSQL Server. Ukoliko je moguće spojiti se na bazu, u istu se upisuju podaci pomoću INSERTnaredbe. Na kraju se zatvara konekcija s bazom kako se ne bi bespotrebno trošili resursi.Servis je, osim mogućnosti spremanja podataka u bazu, zadužen za još neke poslove. Jedan odnjih je i provjera postojećeg imena. Ukoliko se korisnik želi spojiti na servis s već korištenimimenom, servis mu to zabrani. Kod za to se vidi na slijedećoj slici: Slika 12: Provjera postojećih imena u baziOva metoda prima kao parametar ime s kojim se korisnik želi prijaviti. Upitom u bazu (SELECTnaredba) se provjerava postojanost sloga sa imenom koje je prenešeno kao parametar. Ukoliko tonije slučaj, metoda vraća 0, a ukoliko postoji rezultat vraća se 1.Također, servis je bio zadužen i za pretragu baze. Kad se u aplikaciju unese ime datoteke koja setraži, servis je bio zadužen za pronalazak datoteka koje odgovaraju unesenoj riječi. Za to je bilazadužena metoda searchFiles koja je kao parametar primala unesenu riječ i na temelju njeprovjeravala bazu. Slijedi kod: 21
  • Slika 13: Pretraživanje baze po ključnoj riječiDakle, unesena riječ se koristi prilikom upita bazi. Koristi se naredba LIKE kako bi se pronašlisvi rezultati koji zadovoljavaju unesenu riječ (slovo ili dio riječi su također dozvoljeni). Nakonšto su rezultati pronađeni, vraćeni su u obliku tablice koja je primljena u aplikaciji te prikazana.Za prikaz svih datoteka koje su stavljene na servis korištena je funkcija koja uvelike nalikujegore navedenoj, getData. Dakle, prilikom ulaska u aplikaciju, automatski su iz baze preuzete svedatoteke koje su dostupne za dijeljenje. One su dohvaćene u obliku tablice i prikazane uaplikaciji. Kod za tu metodu se, od gore prikazanoga, razlikuje samo po tome što ne koristiključnu riječ LIKE i ne pretražuje bazu po nikakvom kriteriju nego samo prikaže sve što se unjoj nalazi.Za sam kraj opisa WCF-a biti će opisan način na koji su datoteke brisane iz baze nakon štokorisnik više ne bude u mreži. Naime, nakon što se korisnik odjavi nema potrebe držati njegovedatoteke u bazi pogotovo zato što su onda vidljive drugim korisnicima koji pak nisu umogućnosti iste i preuzeti. Prilikom izlaska iz aplikacije, svaki korisnik se mora odjaviti. Taj činodjave je ustvari poziv slijedeće metode: 22
  • Slika 14: Brisanje datotekaMetoda kao parametar prima naziv korisnika koji se želi odjaviti sa sustava. Za obavljanjeodjave potrebno je otvoriti konekciju, spojiti se na bazu te istoj poslati upit koristeći naredbuDELETE koja briše svaki slog koji kao ime ima korisnika koji se upravo odspojio iz mreže.Nakon obavljenog posla, aplikacija vraća vrijednost 1.Pošto je u prethodnih nekoliko stranica bilo riječi o spajanju na bazu i spremanju podataka u istu,bilo bi logično reći nešto i o njoj samoj i njenoj strukturi. Dakle, baza je implementirana naMicrosoft SQL Serveru 2012. Baza podataka se sastoji od samo jedne tablice u koju se spremajupodaci. Naziv tablice je test i ima svoje atribute: Slika 15: ERA dijagram baze 23
  • 3.3 Implementacija klijentske aplikacije3.3.1. Tehnički detalji klijentske aplikacijeKlijentska aplikacija je, kao što je već navedeno, implementirana u C# jeziku, na .NET platformiu Visual Studiu. Također, zbog količine koda koji se u njoj nalazi neće biti prikazana cijelaimplementacija nego samo najbitniji dijelovi, tj. oni dijelovi koji i jesu suština ove aplikacije.Pošto je ovo P2P aplikacija i razlikuje se od obične klijent – server arhitekure, u njoj je bilopotrebno implementirati i klijentsku i serversku stranu. To je bilo potrebno iz razloga što svakičvor treba biti u mogućnosti preuzimati datoteke drugih čvorova, i dijeliti vlastite drugima.Svaka od ovih uloga je implementirana u vlastitim klasama naziva client i server. Osim ovihklasa, u aplikaciji se nalaze još neke koje će biti opisane u daljnjem tekstu. Slika 16: Popis klasa klijentske aplikacije  frmMain je početna klasa. Ona prikazuje početni prozor aplikacije. Preko nje se pozivaju druge klase (frmLogin i frmDataGrid).  frmLogin je klasa koja služi za prijavu korisnika na WCF servis. Ona otvara novi prozor u koji korisnik unosi željeno ime. Ona komunicira sa WCF-om na način da provjerava dostupnost unešenog imena. Ona poziva klasu frmDataGrid.  frmDataGrid je klasa koja prilikom pozivanja (u konstruktoru) stvara novu dretvu koja u pozadini obavlja posao klase Server. Kreira i mapu u kojoj će se nalaziti preuzete datoteke, te komunicira sa servisom na način da pošalje sve podatke o korisniku na WCF skupa sa popisom datoteka za dijeljenje. Osim toga, ova klasa je zadužena i za prikaz 24
  • datoteka sa servisa koje dijele drugi korisnici, preko funkcije getData implementirane u WCF-u [str. 22]. Server klasa je zadužena za obavljanje serverskog posla, tj. osluškivanje zahtjeva za uspostavom veze na određenom portu. Nakon primljene konekcije, ukoliko je to zahtjev za download, šalje se datoteka klijentu koji je isti zatražio, a ukoliko je datoteka koju smo mi tražili, ista se sprema u naš folder kreiran frmDataGrid klasom. Client je klasa zadužena za obavljanje klijentske zadaće, a to je slanje zahtjeva za download datoteke. Dakle sve što je u njoj implementirano je funkcija koja odabranom korisniku šalje zahtjev za preuzimanje odabrane datoteke. helper je pomoćna klasa koja je kreirana kako bi sadržavala podatke o trenutno prijavljenom korisniku (ime, IP adresu, putanju do mape s datotekama te UDP i TCP port). Svaka od varijabli je statička jer se veže za klasu a ne za objekt klase, te kako ne bi morali instancirati klase jer postoji samo jedan korisnik. Implementacija ove klase se može vidjeti na slijedećoj slici: Slika 17: helper klasa FileHandling je klasa koja nasljeđuje klasu helper. Sam naziv klase objašnjava o čemu se tu točno radi. Klasa upravlja datotekama na našem računalu. Radi poslove kao što su. kreiranje direktorija, dohvaćanje popisa datoteka u direktoriju, dohvaćanje imena datoteka, postavljanje podataka na WCF servis, brisanje datoteka sa servisa, kreiranje hash funkcije nad datotekama i sl. Program je automatski generirana klasa Visual Studia. Ona ima veze sa pokretanjem aplikacije. U njoj se odabire koja forma (prozor) će prvi biti pokrenut. U mojoj aplikaciji to je frmMain, odnosno početni prozor. 25
  • 3.3.2. Grafičko sučelje i opis rada klijentske aplikacije aplikacije Slika 18: Izbornik Slika 19: Početni prozor i forma za prijavuNa početnom prozoru nalazi se izbornik [18] kojim se odabiru opcije. Postoji opcija za Loginkoja pokreće formu vidljivu na [19]. Odabir gumba Download files prikazuje formu u kojoj senalazi popis svih datoteka trenutno na mreži. Naravno, to se dogodi samo ukoliko je korisnikprijavljen, ukoliko nije, otvara mu se forma za Login. Slika 20: Popis datoteka dostupnih za preuzimanje 26
  • Osim popisa datoteka, postoji mogućnost pretraživanja. Također tu su gumbi Refresh list – kojisluži za osvježavanje popisa datoteka ukoliko se neki čvor priključio mreži ili je neki drugiotišao. Također tu je i gumb Close za zatvaranje forme. Slika 21: Pretraživanje datoteka Slika 22: Gumbi za osvježavanje i zatvaranje formeU aplikaciji postoji i tab My Files na kojemu se može vidjeti popis datoteka koje se trenutnonalaze u našem direktoriju koji dijelimo na mreži. Također postoji i tab Downloads kojiprikazuje datoteke koje se trenutno preuzimaju. Slika 23: My Files tabNakon što smo se upoznali s izgledom aplikacije, pogledajmo kako to sve izgleda uprogramskom kodu. Dakle, sam proces prijave korisnika je prilično jednostavan. Klikom nagumb Login izvršava se slijedeći kod: 27
  • Slika 24: Login [1]Potrebno je napraviti instancu WCF servisa koji je prethodno trebao biti dodan u aplikaciju kaoreferenca. Instanca se naziva client. Nakon toga slijedeće 4 linije su zadužene za dobivanje IPadrese računala koje se želi spojiti na servis. Ukoliko korisnik nije spojen na internet, njegova IPadresa se automatski postavlja na 127.0.0.1. Na taj način je osigurana mogućnost razmjenedatoteka između više instanci na istom računalu.Kada je to obavljeno provjerava se željeno ime sa onima već postojećima na servisu. Za to sepoziva metoda checkUsername u klasi fileHandling. Radi toga je potrebno instancirati i tu klasu.Ukoliko ime nije zauzeto instancira se forma frmDataGrid. Iz njenog konstruktora pokreću seserverske dretve kao na slici 25: Slika 25: Login[2]Jedna dretva pokreće metodu startUDPServer dok druga pokreće metodu startTCPServer.Možda zvuči čudno što se server odvija na 2 dretve, ali to je zamišljeno na slijedeći način:  Kada korisnik želi preuzeti neku datoteku, šalje zahtjev drugom klijentu i to na port na kojemu radi dretva listeningUDPThread. Dakle slanje zahtjeva za preuzimanje neke datoteke se radi preko UDP protokola. Upravo zato ta dretva radi cijelo vrijeme. Što se tiče same datoteke, nju očekuje dretva listeningTCPThread. Za prijenos datoteka se koristi TCP protokol pošto on osigurava siguran i pouzdan prijenos podataka za razliku od UDP-a koji radi na principu „pošalji i zaboravi“ te ne osigurava da će podaci stići na odredište. 28
  • Nakon prijave na WCF, automatski se pokreću serverske dretve osiguravajući drugimkorisnicima u mreži da preuzimaju datoteke od ove aplikacije.Kako bi išli nekim logičnim rasporedom korištenja ove aplikacije, analizirati ćemo postupakpreuzimanja neke datoteke. Dakle, klijent nakon prijave dobije popis datoteka. Klikom napreuzimanje određene datoteke događa se slijedeće: Slika 26: Download[1]Radi se instanca klase Client te se poziva njena metoda connect. Uz to, toj metodi se kaoargumenti šalju ime datoteke koja se želi preuzeti, IP adresa korisnika koji ima tu datoteku teUDP port. Metoda connect parsira IP adresu iz stringa dobivenog kao parametar, nakon toga sekreira UDP klijent, koji šalje poruku preko IPEndPointa drugom klijentu. Slika 27: Download[2] 29
  • Poruka se šalje u obliku „D + broj porta na kojemu se očekuje datoteka : naziv datoteke“, kao štose vidi iz koda. Nakon toga, koristi se metoda GetBytes kako bi se poruka iz stringa pretvorila ubinarni zapis koji se šalje preko metode Send. Metoda Send prima 3 argumenta, podatke koji sešalju (data), veličinu podataka (data.Length) i odredište na koje se šalje. Sve je obavijeno try –catch naredbom kako ne bi doslo do rušenja aplikacije ukoliko se pokuša kontaktirati korisnikakoji je otišao s mreže. Nakon što je poruka odaslana, korisnik je završio svoj dio posla. Sada nared dolazi druga strana, tj. čvor od kojeg želimo preuzeti datoteku. Kao što smo već rekli, serverčeka sa dvije dretve (jedna za prijenos poruke, druga za prijenos podataka). Kako je klijentposlao poruku da želi datoteku, naš server će tu poruku primiti na dretvi koja čeka UDP porukelisteningUDPThread. Kako izgleda ova metoda, prikazano je na slici 28. Slika 28: Download[3]  UDP server radi na slijedeći način. Dretva listeningUDPThread zove metodu startUDPServer. Unutar te metode se postavlja broj porta na kojemu će UDP server osluškivati. Osim toga, postavlja se i tzv. IPEndPoint koji predstavlja mjesto na koje se druge aplikacije spajaju. Prima 2 argumenta (IP adresu i broj porta). U aplikaciji je postavljena bilo koja adresa što znači da se na klijenta može spojiti aplikacija s bilo 30
  • kojom IP adresom i bilo kojim brojem porta. Također, IPEndPoint nam omogućava da saznamo IP adresu i broj porta osobe koja nam šalje zahtjev za preuzimanje datoteke.Kada je naš UDP server primio poruku i dekodirao ju (provjerio daje u formatu koji smo odrediliranije), kreira novu dretvu koja ima zadatak pozvati metodu fileSearch koja treba poslatidatoteku korisniku koji ju je zatražio. To radi na slijedeći način: 1. Metoda fileSearch iz primljenog stringa pronalazi ime datoteke i odlazi u folder gdje se nalaze datoteke koje ona dijeli. 2. Tu prolazi kroz sve datoteke koje se u njemu nalaze. Ukoliko pronađe datoteku koja odgovara imenu iz primljene poruke, započinje sa slanjem. 3. Slanje se odvija na način da se a. Ime datoteke pretvori u binarni zapis (Encoding.ASCII.GetBytes) b. Sama datoteka (sadržaj) se također pretvara u skup bajtova c. Stvara se nova varijabla veličine 4B + veličina imena datoteke + veličina datoteke d. Sve varijable (duljina imena datoteke, ime datoteke i bajtovi koji čine datoteku) se spremaju u posebnu varijablu koja se šalje korisniku koji je datoteku i zatražio. Slika 29: Download[4] 31
  • Kada je datoteka poslana, red je na klijentu da ju primi, te iz nje uzme sve potrebne podatke.Podatke prima druga dretva koja se pokreće nakon prijave, tj. listeningTCPThread. Kako je tonapravljeno možemo vidjeti sa slika 30 i 31. Slika 30: Download[5] 1. Kreira se TcpListener koji osluškuje na nasumično odabranom slobodnom portu. 2. Unutar while petlje koja se obavlja dok aplikacija radi, kreira se Socket. Kada se netko spoji na Socket, započinje primanje datoteke. 3. Primanje se vrši pozivanjem procedure downloadFile kreiranjem nove dretve. Unutar te procedure postoje slijedeći koraci: a. Kreira se varijabla u koju će biti spremljeno ime nove datoteke b. Pokreće se prijenos podataka sa Socketa pomoću NetworkStreama c. Određuje se folder u koji će se datoteka spremiti d. Uz pomoć metode Receive sa socketa se preuzimaju primljeni podaci. Oni se nakon toga dekodiraju, tj iz originalnih bajtova se uzimaju ime datoteke i njen sadržaj. e. Nakon uspješno dekodiranog primljenog sadržaja, isti se zapisuje na disk primatelja u odabrani folder f. Tok (stream) se zatvara. 32
  • Slika 31: Download[6]To bi bio jedan primjer preuzimanja datoteke od čvora. Dakle, sve počinje sa spajanjem naservis. Time se dobije uvid svih korisnika i njihovih datoteka. Odabirom datoteke šalje se porukačvoru od kojeg ju želimo preuzeti. Nakon što čvor primi poruku, dekodira ju i šalje nam ju prekoTCP protokola. Naš server konstantno osluškuje na određenom portu i kada dobije zahtjev zaprimanje datoteke, prihvati ju i spremi na disk pod istim imenom pod kojim ju je vidio u popisusa servisa.Aplikacija je rađena uz pomoć dretvi (korišten je princip multithreadinga) kako bi čvorovi bili umogućnosti simultano primati/slati više datoteka te kako ne bi došlo do zastoja u radu aplikacijedok se prenosi određena datoteka. 33
  • 4. ZaključakP2P mreže koje su se počele razvijati 1999. pojavom Napstera a kasnije Gnutelle i BitTorrenta,dovele su do revolucije same koncepcije Interneta. Korisnici su prije uglavnom internet koristiliza čitanje maila i pregledavanje weba a sada ih većina aktivno sudjeluje u dijeljenju vlastitihresursa internetom. Rastom popularnosti P2P mreža došlo je do veće potražnje privatnihkorisnika za širokopojasnim internetom sa velikim download i upload brzinama. To je takođerjako utjecalo na P2P tehnologiju jer su sada korisnici u mogućnosti na vlastito računalo spremitivelike datoteke za jako kratko vrijeme. Naravno, mnogi i zloupotrebljavaju ovakav sustav pa seP2P dovodi u mnoge rasprave o etičnosti i legalnosti. O tome je bilo riječi i u ovom radu. Kaozaključak o P2P mrežama možemo reći da su one jedan od najvažnijih a uz to i najviše korištennačin za razmjenu datoteka. Značaj centralnih računala na kojima se drže podaci više nije tolikovelik jer je jako teško održavati servere sa ogromnom količinom podataka, cijena takvogodržavanja je također prevelika, a tu je još i brzina odziva i sl. Tako da, moje skromno mišljenjeo P2P mrežama je to da one svakako imaju budućnost, i to svijetlu. U posljednje vrijeme jačapojava cloud computinga, držanja datoteka na nekom udaljenom računalu. To je jako korisno ipo meni jedina prijetnja P2P tehnologijama. Osobno su mi draže P2P tehnologije i više volimimati stvari na vlastitom računalu (gdje bi cloud storage služio eventualno kao backup zapodatke).Što se tiče aplikacijskog dijela mog završnog rada, mogu reći da sam radeći na aplikaciji naučiojako puno. Počevši od kreiranja servisa, definiranja metoda u sučelju, njihove implemetacije,spajanja servisa s aplikacijom pa sve do kreiranja dretvi i višedretvenog rada. Također sam dostanaučio i o radu s protokolima u jeziku C# (koristio sam i TCP i UDP) kao i o korištenjustreamova za prijenos podataka preko mreže i spremanja podataka na disk. Ovaj rad mi je zbiljapomogao da shvatim bit P2P mreža, barem ovih centraliziranih. Naravno da ova aplikacija nijesavršena, i da postoji još ogroman broj stvari koje se mogu dodati i sl. ali smatram da je dovoljnodobra za jednostavni prijenos podataka a to je i bio cilj ovog rada. 34
  • 5. Literatura[1] „Disadvantages of client-server“, članak dostupan 27.06.2012. nahttp://www.unm.edu/~network/presentations/course/appendix/appendix_k/tsld043.htm[2] „Peer-to-peer mreže“, NCERT i LS&S, dokument dostupan 27.06.2012. nahttp://www.cert.hr/sites/default/files/NCERT-PUBDOC-2009-11-282.pdf[3] „100, 000 P2P users sued in US Mass Lawsuits“, članak dostupan 27.06.2012. nahttp://torrentfreak.com/100000-p2p-users-sued-in-us-mass-lawsuits-110130/[4] „Peer-to-peer computing: Principles and Applications“, Quang Hieu Vu, Mihai Lupu, BengChin Ooi. Springer, 2010.[5] „Distributed hash table“, članak dostupan 28. 06. 2012. nahttp://en.wikipedia.org/wiki/Distributed_hash_table[6] „History“, članak dostupan 28.06. 2012. nahttp://ast-deim.urv.cat/wiki/History[7] „P2P Networking and applications“, John F. Buford, Heather Yu, Eng Keong Lua, 2008.Morgan Kaufmann[8] „The truth about file-sharing“, članak dostupan 29.06. 2012. nahttp://bit.ly/P2dCIf[9] „C Sharp (Programming language)“, članak dostupan 01.07. 2012. nahttp://en.wikipedia.org/wiki/C_Sharp_(programming_language)[10] „Introduction to WCF“, članak dostupan 01. 07. 2012. nahttp://wcftutorial.net/Introduction-to-WCF.aspx[11] „.NET Framework“, članak dostupan 01.07.2012. nahttp://en.wikipedia.org/wiki/.NET_Frameworks 35