Project JXTA juxtapose(umieszczać obok siebie)
1. Wprowadzenie peer-to-peer
Wszyscy pewnie orientują się w zasadach działania serwisów typu peer-to-peer. W skrócie serwisy te umożliwiają wyszukiwanie i współdzielenie zasobów bezpośrednio pomiędzy użytkownikami, a nie jak to typowo jest realizowane z centralnego serwera. Na tego typu rozwiązaniu oparte są najpopularniejsze wyszukiwarki plików mp3 jak Napster, Audio Galaxy oraz różnych plików np. Kaaza. Żaden z tych systemów nie jest kompetybilny z innym (tj użytkownik Napstera nie może korzystać z plików udostępnianych przez użytkowników Kaazy itp). W każdym natomiast zostało stworzone od zera oprogramowanie budujące i kontrolujące sieć peer.
Założeniem projektu JXTA jest stworzenie wspólnej platformy umożliwiającej łatwe i szybkie budowanie rozproszonych serwisów i aplikacji, w których każde urządzenie jest adresowane jako peer. JXTA jest niezależne od platformy oraz od urządzenia na jakim może być zaimplementowane np. telefony.
Co daje technologia peer-to-peer?
Dzisiejsze aplikacje internetowe wykorzystywane sa głównie do wyszukiwania lub oferowanioa zasobów chodzi głównie o media files w przyszłości można znaleźć inne zastosowania tej technologii:
-
Zasoby (informacje jak i moc obliczeniowa) mogą być udostępniane dla tych którzy aktualnie ich potrzebują.
-
Wyszukiwanie informacji jest rozproszone, równoległe, asynchroniczne i umożliwia wykorzystywanie wyszukiwania w głąb. Dziki temu bardzo szybko otrzymuje się wynik wyszukiwania oraz nie ma problemów z przedawnieniami przetrzymywanych przez obecne przeglądarki informacji.
-
Kupujący i sprzedający mogą być połączeni bezpośrednio poprzez P2P aukcje.
2. Projekt JXTA
Co to jest JXTA?
Założeniem JXTA było stworzenie platformy z podstawymi funkcjami do stworzenia sieci P2P. JXTA zostało stworzone by umożliwić węzłom (peer) dostarczanie różnych P2P serwisów, które mogłyby się ze sobą komunikować. Jest to otwarta platforma, dzięki której można stworzyć własny system P2P.
Co można dzięki niemu osiągnąć?
Ponieważ protokoły zdefiniowane przez JXTA są nieniezależne od języka programowania, protokołów transportowych, urządzeń dzięki temu zupełnie różne urządzenia mogą ze sobą współdziałać. Używając JXTA można mapisać aplikację która potrafi:
-
Znaleźć docelowy węzel nawet jeśli jest za Firewallem
-
Łatwo dzielić dokumenty z innymi w sieci
-
Błyskawicznie znajdować dokumenty w sieci
-
Tworzyć grupy węzłów (peer) dostarczających pewien serwis
-
Monitorować zdalnie poczynania peer-a
-
Bezpiecznie komunikować sie z innym użytkownikiem w sieci
3. Architektura platformy
Ogólny schemat
Projekt JXTA tworzy virtualną sieć, system peer-to-peer poprzez stworzenie niezbędnej funkcjonalności, z kórej jak z klocków będą zbudowane pozostałe elementy systemu.
-
JXTA core musi umieć tworzyć, usuwać peer grupy, ogłaszać o ich istnieniu potencjalnym użytkownikom, wyszukiwać, dolączać oraz odłączać od grupy. Pipes dostarczają kanały komunikacyjne pomiędzy peer. Komunikacja odbywa się za pośrednictwem XML-a, przy zapewnieniu bezpieczeństwa i prywatności użytkowników. Peer mionitoring sprawuje kontrolę nad zachowaniem peers i peer groups tj. kontrola dostępu, ustawianie priorytetów, kontrolowanie przepustowości itp.
-
JXTA Services: tu możliwości jądra są wykorzystane do poszerzenia funkcjonalności o indexowanie, wyszukiwanie i współdzielenie plików. Wyszukiwanie opiera sie na rozproszonym równoległym wyszukiwaniu wśród peer groups gdie zapytanie jest przekazywane w postaci dokumentu XML.
-
JXTA Shell oddziela a zarazem pośredniczy pomiędzy peer services a JXTA application. Umożliwia on eksperymentowanie z możliwościami trechnologii JXTA, tworzenie prototypowych aplikacji i kontrolowanie srodowiska aplikacji. Shell posiada funkcje, które pozwalają na korzystanie z funkcji jądra na poziomie linii komend (np można wyszukać grupę)
-
JXTA Application korzysta ze zdefiniowanych niższych warstw do budowy systemu P2P.
Pojęcia
-
Peer: jest to podłączone do sieci urządzenie, które posiada zaimplementowany jakiś protokół definiowany przez JXTA. Może to być sensor, telefon, PDA i PC serwery, jak również superkomputery. Każdy peer działa niezależnie i asynchronicznie od pozostałych i jest identyfikowany przez unikatowy ID. Peer publikuje jeden lub więcej interfejsów sieciowych, które są używane przez protokoły JXTA. Każdy z publikowanych interfejsów jest ogłaszany jako peer endpoint, co go jednoznacznie identyfikuje. Peer endpoints są używane przez peers do ustanowienia bezpośredniego połączenia pomiędzy nimi. Jednakże połączenie nie musi być bezpośrednie.
-
Peer group: zbiór współpracujących peers obsługujących pewne serwisy. Każda grupa ma swój unikatowy identyfikator, oraz ustalone prawa dostępu, sposób uwierzytelniania. Peer może należeć do dowolnej liczby grup. Największą grupą jest Net Peer Group, do której należą wszyscy. JXTA definiuje jak tworzyć, usuwać, dołączać, odłaczać sie od grupy ale nie zdefiniowano nigdzie w jakich sytuacjach należy stworzyć grupę. Jest kilka przypadków kiedy grupa może być potrzebna:
-
By stworzyć bezpieczne środowisko (wyrafinowane sposoby uwierzytelniania, kodowana transmisja)
-
By ograniczyć zakres tematyczny w jakim grupa operuje np biologia, sport itp.
-
By stworzyć testowe środowisko dla jakiegoś problemu, badać przepływ danych, jego szybkość itd.
Peer group dostarcza użytkownikom w grupie zbiór serwisów. JXTA definiuje niezbędny zakres serwisów:
-
Discovery Service: używany do wyszukiwania zasobów takich jak peer group, services, pipe, peer
-
Membership Service: używany przez aktualnych członków grupy do odrzucania lub akceptowania nowych członków. Ktoś nowy pragnący się przyłączyć do grupy musi najpierw otrzymać na to pozwolenie od pozostałych członków (może być też reprezentant który o wszystkim decyduje, lub inne rozwiązanie zależne od grupy)
-
Access Service kontroluje urawnienia do korzystania z zasobów w grupie.
-
Pipe Service do tworzenia i obsługi połączeń pomiędzy członkami w grupie
-
Resolver Service do wysyłania zaoytań do innych członków grupy np. stan połaczenia
-
Monitoring Service do monitorowania poczynań czlonków grupy
-
Network Services: Peers współpracują i komunikują się by odkryć bądź opublikować jakiś serwis w sieci. JXTA protokoły rozpoznają dwa rodzaja serwisów:
-
Peer Services: jest dostępny tylko na węźle, który go dostarcza. Jeśli ten peer padnie serwis padnie razem z nim.
-
Peer Group Services: jest zbudowany z wielu instancji sewisu działających na różnych członkach grupy, współpracujących ze sobą. Nie ma tu problemu z padnięciem serwisu.
-
Identyfiaktory: identyfikatory poszczególnych węzłów systemu dlugość 128bitów
-
Wiadomości: Sa to XML owe dokumenty przesyłane pomiędzy użytkownikami peer.
-
Advertisements: XML-owe dokumenty które nazywają i opisują istnienie zasobów jak peer, peer group, pipe, service. Wszystkie ogłoszenia publikowane są z pewnym czasem życia. Peer odkrywa istnienie poszczególnych elementów sieci poprzez odczytywanie rozesłany ogłoszeń (tylko w taki sposób).
Przykład ogłoszenia dla grupy:
-
Pipe: kanał komunikacyjny łaczący peers umożliwiający przesyłanie wszystkich rodzajów danych w sposób asynchroniczny i wielokierunkowy. Mówiąc o Pipe endpoints mamy na myśli input pipe (koniec otrzym,ujący dane) lub output pipe (koniec wysylający dane).
Są trzy rodzaje kanałów
-
point-to-point pipe łączący bezpośrednio dwa końce input pipe end i output pipe end
-
Propagate Pipe: umożliwiający wysyłanie wiadomości do wielu węzłów jednocześnie
-
Secure Unicast Pipe jest to rodzaj point-to-point pipe, przy zapewnieniu bezpiecznego kanału komunikacyjnego
Architektura sieci
JXTA jest to wirtualna sieć polączonych węzłów nałożona na istniejącą dotychczas sieć połaczeń. Połaczenia w sieci mogą się zmieniać więc wiadomości wędrujące pomiędzy węzłami niedeterministycznymi szlakami.
-
Minimal Peer: możę wysyłać i odbierać wiadomości ale nie przechowuje Advertisements i nie przekazuje wiedomości dla innych peer
-
Simple Peer: może wysyłać i odbierać wiadomości oraz zazwyczaj przechowuje otrzymane ogłoszenia, jednak jedynie odpowiada wskazując kierunek dalszego poszukiwania węzła, a nie przekazuje dalej wiadomości dla innych
-
Rendezvous peer: Jest to specjalny Peer, który trzyma informacje (advertisements) o peer, które zna (bardzo pomocne przy wyszukiwaniu) oraz przekazuja zapytania dla innych umożliwiając tym łatwe znalezienie adresata. Wiadomości mają defaultowy czas życia 7 przeskoków od peer do peer.
-
Relay Peer: przechowuje informacje o kierunkach do innych peers i przekazuje wiadomości dla nich. Jeśli nie zna adresata pyta inne relay peer o kierunek.
Protokoły
-
Peer Discovery Protocol umożliwia wyszukiwanie Advertisements na innych peers, wyszukiwania rówieśników, grup itp. Peer generuje zapytanie by odkryć ogłoszenie wewnątrz grupy. Ta wiadomość zawiera info uwierzytelniające członka w grupie oraz jego ID. Może ona być wysłąna do jakiegokolwiek peer w grupie. Pytający węzeł możę otrzymac zero lub wiele odpowiedzi na swoje zapytanie.
-
Peer Information Protocol umożliwia jednemu rówieśnikowi dowiedzenie się czegoś o innych peer
-
Peer Resolver Protocol służy do wysyłania prostych zapytań o peer, peer groups, pipes oraz o inne informacje. Zarówno Peer Information Protocol jak i Peer Discovery Protocol używaja tego protokolu
-
Peer Memedership Protocol protokół dołączania się do peer group, rezygnowania z uczestnictwa w niej, zmiany rodzaju uczestnictwa w niej, sposobu uwierzytelniania.
-
Peer Binding Protocol umożliwia połączenie peers kanałem komunikacyjnym (jest to taka kolejka komunikatów, dostępne akcje: send, recive, close, open, create, delete). Może być ustanowiony na wielu fizycznych połączeniach sieciowych (pośrednich)
-
Endpoint Routing Protocol umożliwia wypytywanioe peer routerów o ścieżkę do poszukiwanego peer. Każdy peer może stać się routerem.
JXTA a bezpieczeństwo
Technologia JXTA jesrt platformą skupioną na mechanizmach nie na zasadach postępowania. Na przykład używane w JXTA UUID (unique user id), nie mają żadnego znaczenia bez dodatkowego nazewnictwa, serwisów łaczących nazwy. Dlatego JXTA nie definiuje żadnego modelu bezpieczeństwa. Jeśli UUID zostaje dołączony do czegoś autentyczność tego przyłączenia może być zagwarantowane poprzez dodanie podpisu cyfrowego.
JXTA nie narzuca żadnych konkretnych metod kryptograficznych. Wszystko zależy od twórców aplikacji korzystających z systemu. Na przykład każda wiadomość posiada pole na świadectwo wierzytelności ale jak z niego korzystać zależy już od twórców aplikacji.
4. Omówienie zaimplementowanej wersji 1.0
Discovery mechanism
- rozgłaszanie tj. wyszukiwanie w sieci lokalnej
- odkrywanie poprzez odczytywanie informacji o peers z otrzymanych wiadomości od innych
- kaskadowe odkrywanie: jeśl;i peer znajdzie inne peer to następnie to pierwsze z uprawnieniami drugiego może odkrywać peers przed nim.
- poprzez tzw rendezvous peers
Zakresy propagacji zapytań
Specyfikacja JXTA nie określa w jakim zakresie wiadomości mają być przekazywane do innych (czy tylko w lokalnym zakresie czy także na drugi koniec świata). Aktualna implementacja korzysta z peer groups gdzie wiadomości ograniczone są do lokalnej grupy. Planowanym rozwiązaniem jest też dodanie pola, które określałoby zakres wiadomości.
XML
Specyfikacja nie nerzuca by wszystkie węzły potrafiły odcztać każdą wiadomość na telefony mogą umieć odczytać ograniczony zestaw wiadomości, także w obecnej implementacji obsługiwane są tylko najprostsze wiadomości.
Bezpieczeństwo
Wersja 1.0 dostarcza:
-
Prostą bibliotekę kryptograficzną wspierającą funkcje haszujące (MD5), kodowanie symetryczne (RC4) oraz kodowanie asymertyczne (Diffie Hellman i RSA)
-
sposób autentykacji podobny do tego w Unixie (PAM)
-
Prosty mechaniozm dostępu oparty na grupach, prawach dostępu dla grup
-
Bazpieszny mechanizm transportowy SSL/TLS
Peer Monitoring and Metering
Znaczy to zdolność do śledzenia statusu węzłów, ich zachowania, odpowiedzi na akcje, kontrolowania czasu odpowiedzi.
5. Przykład użycia zaimplementowanych bibliotek
Hello world Example
Aby zainstalować JXTA na swoim domowym sprzęcie należy sciągnąć pliki .jar ze strony www.jxta.org i postępować zgodnie z zaleceniami zawertymi w procedurze instalacyjnej.
-
Kompilacja przykładu:
javac -classpath .lib\jxta.jar SimpleJxtaApp.java
-
Uruchomienie przykładu:
java -classpath .\lib\jxta.jar; .\lib\log4j.jar; .\lib\beepcore.jar; .\lib\jxtasecurity.jar; .\lib\cryptix-asn1.jar; .\lib\cryptix32.jar; .\lib\jxtaptls; .\lib\minimalBC.jar;. SimpleJxtaApp
Przykład ten pokazuje jak aplikacja może skorzystać z platformy JXTA. Aplikacja ta instancjonuje platformę JXTA i wypisuje informację o nazwie peer group, peer group ID, peer name, peer ID
Przykładowy wynik działania aplikacji:
Starting JXTA ....
Hello from JXTA group NetPeerGroup
Group ID = urn:jxta:jxta-NetGroup
Peer name = suzi
Peer ID = urn:jxta:uuid-59616261646162614A78746150325033F3B
C76FF13C2414CBC0AB663666DA53903
Metoda startJXTA() instancjonuje platformę JXTA i potem tworzy i zwraca PeerGroup obiekt zawierający domyżlną grupę net peer group. Obiekt ten zawiera domyślne implementacje serwisów DiscoveryService, MembershipService i RendezvousService, a także ID i nazwę grupy.
Kod:
1 import java.io.InputStream;
2
3 import net.jxta.peergroup.PeerGroup;
4 import net.jxta.peergroup.PeerGroupFactory;
5 import net.jxta.exception.PeerGroupException;
6
7 /**
8 * This is a simple example of how an application would start jxta
9 */
10
11 public class SimpleJxtaApp {
12
13 static PeerGroup netPeerGroup = null;
14
15 public static void main(String args[]) {
16 System.out.println ("Starting JXTA ....");
17 SimpleJxtaApp myapp = new SimpleJxtaApp();
18 myapp.startJxta();
19 System.out.println ("Hello from JXTA group " +
20 netPeerGroup.getPeerGroupName() );
21 System.out.println (" Group ID = " +
22 netPeerGroup.getPeerGroupID().toString());
23 System.out.println (" Peer name = " +
24 netPeerGroup.getPeerName());
25 System.out.println (" Peer ID = " +
26 netPeerGroup.getPeerID().toString());
27 System.exit(0);
28 }
29
30 public SimpleJxtaApp() { }
31
32 private void startJxta() {
33 try {
34 // create and start the default JXTA NetPeerGroup
35 netPeerGroup = PeerGroupFactory.newNetPeerGroup();
36 }
37 catch (PeerGroupException e) {
38 // could not instantiate the group, print the stack and exit
39 System.out.println("fatal error : group creation failure");
40 e.printStackTrace();
41 System.exit(1);
42 }
43 }
44 }