340 likes | 508 Views
Peer-To-Peer, programiranje socketa sa TCP i UDP, primjeri u Pythonu. Ivana Matišić, 907 Ivana Šimić, 875 Marija Špringman, 876 Ivana Umiljanović, 881. Peer-To-Peer. Što su to P2P mreže ?!. Nema servera i klijent - server modela !!!.
E N D
Peer-To-Peer,programiranje socketa sa TCP i UDP,primjeri u Pythonu Ivana Matišić, 907Ivana Šimić, 875Marija Špringman, 876Ivana Umiljanović, 881
Što su to P2P mreže ?! Nema servera i klijent - server modela !!! Svi čvorovi (eng. peer) istodobno su i klijenti i serveri te dijele podatke između sebe.
Generacijski razvoj • Generacija – potpuno centralizirana – Napster • Generacija – potpuno decentralizirana – prva • verzija Gnutelle • Generacija – uvedena anonimnost i kriptiranje • podataka – BitTorrent
Arhitektura P2P mreža I Centralizirane Decentralizirane
Arhitektura P2P mreža II Strukturirane Nestrukturirane čvorišta organizirana prema specifičnim kriterijima zasnivaju se na ideji distribuiranih hash tablica (DHT) nije bitna struktura mreže i članovi su međusobno spojeni na proizvoljan način
Arhitektura P2P mreža III Čiste Hibridne • ravnopravni čvorovi koji objedinjuju ulogu klijenta i servera • ne postoji centralni server niti neki preferirani čvor s posebnom ulogom mješavina klijent-server i čiste P2P arhitekture postojanje superčvorova
Prednosti i nedostaci dostupnost velike količine podataka putem velikog broja klijenata brz pristup podacima brzina prijenosa podataka jednostavan pogon virusi nezakonit materijal
Podjela P2P aplikacija • Aplikacije za dijeljenje podataka • Aplikacije za IM & online chat • Aplikacije za glasovnu i pisanu komunikaciju (VoIP) • Aplikacije za multimediju • Aplikacije za suradnju i grupe za diskusiju
1. P2P aplikacije za dijeljenje podataka I Prema protokolu koji koriste: BitTorrent: µTorrent, Vuze (Azureus), Bitcomet, rTorrent Gnutella: BearShare, LimeWire, FrostWire, Shareaza Napster: Napster eDonkey: aMule, eMule, Morpheus, Shareaza
µTorrent BitTorrent protokol „mikro“ – način dizajna LimeWire Gnutella protokol 1. P2P aplikacije za dijeljenje podataka II Napster prvi popularni klijent Napster protokol
2. P2P aplikacije za IM & online chat I „instant messaging“ & online chat tri najpopularnije: Windows Live Messenger Yahoo! Messenger Tencet QQ (Kina)
Windows Live Messenger MSN Messinger (1999.) preimenovan 2005. ICQ aktivan od 1998. „I seek you“ Oko 31 milijuna korisnika diljem svijeta 2. P2P aplikacije za IM & online chat II Tencent QQ treći najpopularniji IM klijent u svijetu popularan u Kini (QQ Coin)
3. P2P aplikacije za glasovnu i pisanu komunikaciju (VoIP) Voice over Internet Protocol aplikacije koje podržavaju VoIP: Skype, ICQ, Windows Live Messenger,… Skype glavni i najpopularniji predstavnik preko 310 milijuna korisnika
4. P2P aplikacije za multimediju osim za ilegalnu, koriste se i za legalnu distribuciju softvera i multimedije primjer: Blizzard Downloader (koristi BitTorrent protokol)
5. P2P aplikacije za suradnju i grupe za diskusiju namijenjena lakšoj suradnji i komunikaciji među ljudima koji rade na istom projektu glavni predstavnik: Microsoft Groove
Primjer... Dobro dosli! poruka_klijenta Server primio poruku: poruka_klijenta
Server I import socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) host = '127.0.0.1' port = 54321 s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind((host, port)) s.listen(1) TCP pasivni socket
Server II while True: print "Cekam konekcije..." client_sock, client_addr = s.accept() print "Spojio se ", client_addr client_sock.sendall("Dobro dosli!") data = client_sock.recv(64) print "Klijent salje poruku:", data client_sock.sendall("Server primio poruku: " + data) client_sock.close() print "Klijent", client_addr, "otisao." sendall() recvall() recv()
Klijent I import socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) host = '127.0.0.1' port = 54321 s.connect((host, port)) početak komunikacije klijenta i servera
Klijent II data = s.recv(64) print data message = raw_input("Vasa poruka serveru:\n\r>>") s.sendall(message) data = s.recv(64) print data print "Kraj rada...“ s.close()
UDP UDP (User Datagram Protocol) poruka_klijenta odgovor_servera
Server import socket s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) MAX = 65535 port = 54321 s.bind(('127.0.0.1' ,port)) print 'Cekam konekcije na...', s.getsockname() while True: data, address = s.recvfrom(MAX) print 'Klijent na', address, 'kaze', repr(data) s.sendto('Vasa poruka ima %d bitova' %len(data), address) UDP
Klijent import socket s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) MAX = 65535 port = 54321 print 'Adresa prije slanja:', s.getsockname() s.sendto('Ovo je moja poruka', ('127.0.0.1', port)) print 'Adresa poslije slanja:', s.getsockname() data, address = s.recvfrom(MAX) print 'Server', address, 'kaze:', repr(data) nema bind ?
connect vs. bind s.connect((adresa, port))
Zaključak P2P sva računala u mreži hijerarhijski jednaka chat, razmjena podataka Socketi primaju i šalju podatke TCP mehanizmi koji osiguravaju sigurnu isporuku podataka UDP nema ugrađene takve mehanizme
Literatura: • B. Rhodes, J. Ghoerzen, Foundations of Python Network Programming, 2Ed, Apress, 2009 • J. F. Kurose, K. W. Ross, Computer Networking: A Top Down Approach, 5ed, Pearson, 2010 • Wikipedia • http://docs.oracle.com/javase/tutorial/networking/sockets/index.html (30.4.2012.) • http://docs.python.org/library/socket.html (30.4.2012.) • http://hr.wikipedia.org/wiki/IP (01.05.2012.) • http://msdn.microsoft.com/en-us/library/windows/desktop/ms740506%28v=vs.85%29.aspx (30.4.2012.) • http://www.buyya.com/java/Chapter13.pdf (30.4.2012.) • http://www.cert.hr/sites/default/files/NCERT-PUBDOC-2009-11-282.pdf (02.05.2012.) • http://www.cs.umd.edu/~shankar/417-F01/Slides/chapter2b-aus/sld011.htm (30.4.2012.) • http://www.fer.unizg.hr/_download/repository/p2p_aplikacije.pdf (02.05.2012.) • http://www.itmanage.info/technology/linux/statefull_firewall/Concept_of_State.htm (30.4.2012.)