1 / 63

mit Java implementiert (Java 2 Standard Edition)

P2P Seminar – JXTA im Detail. mit Java implementiert (Java 2 Standard Edition). Nicole Hänelt, Mike Rohland, Julia Schenk, Rafael Grote. P2P – JXTA – Überblick. Definition Welche Protokolle gibt es? Peer Discovery Protocol API Peer Resolver Protocol API Peer Membership Protocol API

tekli
Download Presentation

mit Java implementiert (Java 2 Standard Edition)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. P2P Seminar – JXTA im Detail mit Java implementiert (Java 2 Standard Edition) Nicole Hänelt, Mike Rohland, Julia Schenk, Rafael Grote

  2. P2P – JXTA – Überblick • Definition • Welche Protokolle gibt es? • Peer Discovery Protocol API • Peer Resolver Protocol API • Peer Membership Protocol API • Peer Information Protocol API • Pipe Binding Protocol API • Peer Endpoint Protocol API • Beispiel

  3. P2P – JXTA – Definition Ein Protokoll ist ein wieder verwendbares Verfahren um die Datenübertragung zwischen Computern zu regeln.(JXTA: Java P2P Programming; 22. March 2002) Ein Protokoll (engl.: protocol) enthält Standards für die kontrollierte Übermittlung von Daten (www.net-lexikon.de; gesehen am 14.05.2004)

  4. P2P – JXTA – Überblick • Definition • Welche Protokolle gibt es? • Peer Discovery Protocol API • Peer Resolver Protocol API • Peer Membership Protocol API • Peer Information Protocol API • Pipe Binding Protocol API • Peer Endpoint Protocol API • Beispiel

  5. Welche Protokolle gibt es? P2P – JXTA – Protokolle Grundservices, die in einem P2P-Netzwerk ausgeführt werden können müssen: • Discovery • Membership • Communication • Pipe Binding Protocol • Endpoint Protocol • Resolver Protocol • Peer Information Protocol

  6. P2P – JXTA – Protokolle (JXTA: Java P2P Programming; 22. March 2002)

  7. P2P – JXTA – Überblick • Definition • Welche Protokolle gibt es? • Peer Discovery Protocol API • Peer Resolver Protocol API • Peer Membership Protocol API • Peer Information Protocol API • Pipe Binding Protocol API • Peer Endpoint Protocol API • Beispiel

  8. P2P – JXTA – Peer Discovery API Advertisements • Dienen zur generellen Beschreibung einer jeden Resource, die im P2P-Netz bereitgestellt wird • Werden in XML-Dokumente gefasst • Es gibt keine DTDs oder Schemata für Advertisments, es reicht wenn ein Advertisment wohlgeformt ist • von JXTA vorgegebene Lebensdauer • Löschen • flushAdvertisements( String id, int type ) throws IOException;

  9. Peer Group Advertisement P2P – JXTA – Peer Discovery API 1 <?xml version="1.0"?> 2 <!DOCTYPE jxta:PGA> 3 <jxta:PGA xmlns:jxta="http://jxta.org"> 4 <GID> 5 urn:jxta:uuid-AAA122616461AAAAAAA124615032503302 6 </GID> 7 <MSID> 8 urn:jxta:uuid-DEADBEEFDEAFBABAFEEDBABE000000010306 9 </MSID> 10 <Name> 11 Test 12 </Name> 13 <Desc> 14 Wir testen…. 15 </Desc> 16 </jxta:PGA>

  10. Discovery Query Message P2P – JXTA – Peer Discovery API <?xml version=“1.0“ encoding=“UTF-8“?> <jxta:DiscoveryQuery> <Type>2</Type> <Threshold>1</Threshold> <Attr>Name</Attr> <Value>*pader*</Value> <PeerAdv> <?xml version=“1.0.“?> <!DOCTYPE jxta:PA> <jxta:PA xmlns=jxta=“http://jxta.org“> <PID>urn:jxta:365738865...7424832749C</PID> </jxta:PA> </PeerAdv> </jxta:DiscoveryQuery>

  11. Discovery Response Message P2P – JXTA – Peer Discovery API <?xml version=“1.0“ encoding=“UTF-8“?> <jxta:DiscoveryResponse> <Type>2</Type> <Count>1</Count> <Attr>Name</Attr> <Value>*pader*</Value> <PeerAdv> <?xml version=“1.0.“?> <!DOCTYPE jxta:PA> <jxta:PA xmlns=jxta=“http://jxta.org“> <PID>urn:jxta:1235738865...742483DE4</PID> </jxta:PA> </PeerAdv> <Response Expiration=“36000000“> <?xml version=“1.0“?> <!DOCTYPE jxta:PipeAdvertisement> <jxta:PipeAdvertisement xmlns=“http://jxta.org“> <Id>urn:jxta:uuid-05773264AB...EF56A468375</Id> <Type>JxtaUnicastSecure</Type> <Name>Jxta.webcam.paderborn</Name> </jxta:PipeAdvertisement> </Response> </jxta:DiscoveryResponse>

  12. P2P – JXTA – Peer Discovery API (JXTA: Java P2P Programming; 22. March 2002)

  13. Local Discovery P2P – JXTA – Peer Discovery API Im lokalen Cache (Cache Management Ordner) nach Advertisements suchen getLocalAdvertisements(int type, String attribute, String value); Veröffentlichung von Advertisements publish(Advertisement adv, int type); Suche nach einem Peer „Bla“ getLocalAdvertisements(DiscoveryService.PEER, „Name“, „Bla“);

  14. P2P – JXTA – Peer Discovery API Mögliche Implementierung 1 private void findLocalAdvertisements ( ) { 2 System.out.println( ”looking local: ” ); 3 try { • Enumeration enu = discoveryService.getLocalAdvertisements(DiscoveryService.ADV, null ,null); 5 if ((enu != null) && enu.hasMoreElements( )) { 6 System.out.println(”found local Advertisement: ”); 7 while (enu.hasMoreElements( )) { 8 Advertisement adv = (Advertisement)enu.nextElement( ); 9 try { 10 Document doc = adv.getDocument(new MimeMediaType (”text/xml”)); 11 doc.sendToStream(System.out); 12 } 13 catch (IOException e) { 14 e.printStackTrace(System.err); 15 } 16 } 17 } 18 } 19 catch (IOException e) { 20 e.printStackTrace(System.err); 21 } 22 } (Oliver Steinhauer: JXTA Seminar, FU Gießen-Friedberg, SS03)

  15. Remote Discovery P2P – JXTA – Peer Discovery API Eine Anfrage an alle RendezvousPeers senden um ihre lokale DB zu durchsuchen getRemoteAdvertisements( String peerid, int type, String attribute, String value, int threshold ); Problem: Der Peer weiß nicht, wann die Advertisements gefunden wurden. Veröffentlichung von Advertisements remotePublish(Advertisement adv, int type);

  16. Remote Discovery mit Listener P2P – JXTA – Peer Discovery API getRemoteAdvertisements( String peerid, int type, String attribute, String value, int threshold, DiscoveryListener listener ); Bei jeder Antwort wird der DiscoveryListener aufgerufen. discoveryEvent(DiscoveryEvent discoveryEvent); // behandelt // Event vom Discovery Service Das DiscoveryEvent Objekt getResponse(); // liefter DiscoveryResponseMsg DiscoveryResponseMsg getResponses(); // liefert Aufzählung der Advertisements zurück

  17. P2P – JXTA – Überblick • Einführung • Welche Protokolle gibt es? • Peer Discovery Protocol API • Peer Resolver Protocol API • Peer Membership Protocol API • Peer Information Protocol API • Pipe Binding Protocol API • Peer Endpoint Protocol API • Beispiel

  18. P2P – JXTA – Peer Resolver API Peer Resolver API • wird zur Suche im P2P Netz benutzt • dazu werden Anfragen (query) an andere Peers versendet • und Antworten (response) empfangen • keine Übermittlungsgarantien • Rendezvous Peers können Übermittlung ablehnen oder • dabei ausfallen • keine Antwortgarantien • weder wenn keine Antworten vorhanden noch Antworten • vorhanden

  19. P2P – JXTA – Peer Resolver API Resolver API Classes • ResolverInterface – Interface zur Implementierung • des ResolverServices • ResolverService – Interface definiert QueryHandler Verwaltung • GenericResolver – Interface definiert senden von Messages • QueryHandler – Interface zur Message Verarbeitung • ResolverQuery – Standardimplementierung • ResolverResponse – Standardimplementierung

  20. P2P – JXTA – Peer Resolver API QueryHandler im Detail • int processQuery(ResolverQuery query) • Ablaufsteuerung mittels Rückgabewert: • ResolverService.OK • ResolverService.Repropagate • void processResponse • (ResolverResponse response); • keine weitere Ablaufsteuerung da Endpunkt

  21. P2P – JXTA – Peer Resolver API I Benutzen des ResolverServices Starten: ResolverServiceImpl resolver; resolver = (ResolverServiceImpl)group. getResolverService(); TestQueryHandler handler = new TestQueryHandler(handlerName,credential); resolver.registerHandler(handlerName, handler); Beenden: resolver.unregisterHandler(handlerName);

  22. P2P – JXTA – Peer Resolver API II Benutzen des ResolverServices Abfragen: // xml AbfrageDokument erstellen StructuredTextDocument doc = null; doc = (…)StructuredDocumentFactory. newStructuredDocument( new MimeMediaType("text/xml"),"Pong"); Element e = doc.createElement("timestamp 1", format.format(new Date(now))); doc.appendChild(e); String credential = „p2pSeminar";

  23. P2P – JXTA – Peer Resolver API III Benutzen des ResolverServices // Query erstellen ResolverQueryMsg message = null; String xml = serializeDoc(doc); message = new ResolverQuery(handlerName , credential , group.getPeerID().toString() , xml , 1); // und versenden; löst eine RunTimeException // aus, sofern der Peer nicht vorhanden resolver.sendQuery(peerID, message);

  24. P2P – JXTA – Überblick • Einführung • Welche Protokolle gibt es? • Peer Discovery Protocol API • Peer Resolver Protocol API • Peer Membership Protocol API • Peer Information Protocol API • Pipe Binding Protocol API • Peer Endpoint Protocol API • Beispiel

  25. P2P – JXTA – Peer Membership API Peer Membership API • Mechanismus um PeerGroup beizutreten • nicht zum Management einer PeerGroup gedacht • Peer muss Anforderungen des Membership Protokolls erfüllen • im Erfolgsfall wird ein credential vergeben • kein zentrales Verzeichnis aller Gruppenmitglieder

  26. P2P – JXTA – Peer Membership API AuthenticationCredential und Credential • Credential -> Berechtigungsnachweis (dict.leo.org; gesehen am 19.05.2004) • AuthenticationCredential enthält: • Authentifizierungsmethode • anfängliche Identifizierungsinformationen • Credential enthält: • Identifizierungsinformationen

  27. P2P – JXTA – Peer Membership API MembershipService Service

  28. P2P – JXTA – Peer Membership API I Ablauf eines PeerGroup Beitritts // 1. MembershipService von der PeerGroup // empfangen MembershipService membership; membership = (MembershipService) newGroup.getMembershipService(); // 2. AuthenticationCredential erstellen AuthenticationCredential authCred authCred = new AuthenticationCredential (newGroup,authenticationMethod);

  29. P2P – JXTA – Peer Membership API II Ablauf eines PeerGroup Beitritts // 3. Authenticator vom MembershipService // empfangen Authenticator authenticator = (Authenticator)membership.apply(authCred); // 4. Authenticator Objekt ausfüllen authenticator.methodXYZ(valueABC);

  30. P2P – JXTA – Peer Membership API III Ablauf eines PeerGroup Beitritts /* 5. Authenticator mittels isReadyForJoin() testen und 6. mit Authenticator beim MembershipService anmelden */ if( authenticator.isReadyForJoin()) { finalCredential = membership.join(authenticator); }  Credential empfangen

  31. P2P – JXTA – Überblick • Einführung • Welche Protokolle gibt es? • Peer Discovery Protocol API • Peer Resolver Protocol API • Peer Membership Protocol API • Peer Information Protocol API • Pipe Binding Protocol API • Peer Endpoint Protocol API • Beispiel

  32. P2P – JXTA – Peer Information API Protokollhierarchie von JXTA Peer Discovery Protokoll (Standard) Peer Information Protokoll (Standard) Pipe Binding Protokoll (Standard) Peer Resolver Protokoll (Core) Peer Endpoint Protokoll (Core) Rendezvous Protokoll (Standard) Core - required components and behaviours for all JXTA implementations Standard –optional but recommended

  33. P2P – JXTA – Peer Information API Peer Information Protokoll - Sobald ein Peer lokalisiert ist, ist es interessant seinen Status und seine Fähigkeiten abzufragen  PIP - Zwei Nachrichtentypen: - Peer Info Query Message (Status des Remote Peers abfragen) - Peer Info Response Message (Seinen Status einem anderen Peer zugänglich machen) - Spezielle Implementation des Peer Resolver Protokolls - Peer publiziert seine PeerAdvertisement  andere Peers lokalisieren diese und ziehen daraus Informationen über den zugehörigen Peer - Dient dem Standard JXTA Service PeerInfoService (optional aber empfohlen)

  34. P2P – JXTA – Peer Information API PIP Query Message <xs:element name="PeerInfoQueryMessage" type="jxta:PeerInfoQueryMessage"/> <xs:complexType name="PeerInfoQueryMessage"> <xs:sequence> <xs:element name="sourcePid" type="jxta:JXTAID"/> <xs:element name="targetPid" type="jxta:JXTAID"/> <!-- if not present then the response is the general peerinfo --> <xs:element name="request" type="xs:anyType" minOccurs="0"/> </xs:sequence> </xs:complexType> request Feld kann genutzt werden um einen speziellen Request zu bezeichenen, wenn nicht  Anfrage liefert default Set von Informationen

  35. P2P – JXTA – Peer Information API PIP Response Message <xs:element name="PeerInfoResponse" type="jxta:PeerInfoResponse"/> <xs:complexType name="PeerInfoResponseMessage"> <xs:sequence> <xs:element name="sourcePid" type="jxta:JXTAID"/> <xs:element name="targetPid" type="jxta:JXTAID"/> <xs:element name="uptime" type="xs:unsignedLong" minOccurs="0"/> <xs:element name="timestamp" type="xs:unsignedLong" minOccurs="0"/> <xs:element name="response" type="xs:anyType" minOccurs="0"/> <xs:element name="traffic" type="jxta:piptraffic" minOccurs="0"/> </xs:sequence> </xs:complexType> <xs:complexType name="piptraffic"> ... <xs:complexType name="piptrafficinfo"> .......

  36. P2P – JXTA – Peer Information API PeerInfoService Interface - Peer Informationen lokalisieren und speichern in Form des PeerInfoAdvertisements.

  37. P2P – JXTA – Peer Information API PeerInfoAdvertisement

  38. P2P – JXTA – Überblick • Einführung • Welche Protokolle gibt es? • Peer Discovery Protocol API • Peer Resolver Protocol API • Peer Membership Protocol API • Peer Information Protocol API • Pipe Binding Protocol API • Peer Endpoint Protocol API • Beispiel

  39. P2P – JXTA – Pipe Binding API JXTA ... Pipes ... - Virtuelle Kommunikationskanäle zwischen Computern, beschrieben durch PipeAdvertisements - Bieten virtuelle Eingangs – und Ausgangsmailboxen, die nicht physisch an eine spezielle Peer Lokation gebunden sind - Eindeutig identifiziert durch Pipe ID - Zwei Enden: - Input Pipe (empfangendes Ende) - Output Pipe (sendendes Ende)

  40. P2P – JXTA – Pipe Binding API Pipe Binding Protokoll - Regelt den Aufbau eines virtuellen Kanals zwischen zwei oder mehreren Knoten - JXTA HTTP Transport, JXTA TCP/IP Transport, JXTA TLS Transport - Wird verwendet um die Enden einer Pipe mit den jeweiligen Endpunkten der Knoten zu verbinden

  41. P2P – JXTA – Pipe Binding API PipeAdvertisement - Wird vom Pipe Service genutzt, um die Endpunkte für lokalen Input und Output der Pipe zu erstellen - Enthält Pipe ID - Muss Pipe Type enthalten - JxtaUnicast: unsicher und nicht zuverlässig - JxtaUnicastSecure: Sicher (nutzt TLS) - JxtaPropagate: senden an mehre - Kann optionalen symbolischen Namen enthalten

  42. P2P – JXTA – Pipe Binding API Pipe Advertisement Schema <xs:element name="PipeAdvertisment" type="jxta:PipeAdvertisment"/> <xs:complexType name="PipeAdvertisement"> <xs:sequence> <xs:element name="Id" type="jxta:JXTAID"/> <xs:element name="Type" type="xs:string"/> <xs:element name="Name" type="xs:string" minOccurs="0"/> </xs:sequence> </xs:complexType>

  43. P2P – JXTA – Pipe Binding API PipeService

  44. P2P – JXTA – Pipe Binding API Der Pipe Prozess Ich such mir jemanden zum reden Ich hab ein offenes Ohr, wer erzählt mir was Peer der Information möchte öffnet eine input Pipe Peer der Information möchte veröffentlicht seine Pipe Peer mit Daten öffnet output Pipe zur input Pipe Peer mit output Pipe sendet Daten Gruppe veröffentlicht Pipe Advertisement Listener Peer erstellt input Pipe aus Advertisement Talk Peer erstellt output Pipe, die an den listener Peer adressiert ist Talk Peer sendet Nachricht auf die Pipe Listener empfängt Nachricht

  45. P2P – JXTA – Pipe Binding API Verbinden von Pipes - Blind Pipe - Listener Pipe ist immer blind und akzeptiert Verbindung von jedem Peer - Blind Output Pipe - Blind Output Pipe with Listener - Blind Input Pipe - Blind Input Pipe with Listener - Peer-addressed Pipe - Adressed Output PipeOutput Pipes können sowohl blind als auch explizit adressiert sein

  46. P2P – JXTA – Pipe Binding API Pipes, Pipes, Pipes… - Bidirektionale Pipes - Der BidirectionalPipeService ist ein optionaler Service, mit dem (welch Wunder !) bidirektionale Pipes erzeugt werden können - Reliable Pipes - Mit dem ReliablePipeService können Nachrichten zuverlässig über Pipes gesendet werden - Nachrichten werden in der Reihenfolge empfangen in der sie auch gesendet wurden - Die Nachricht erreicht garantiert ihren Empfänger - Können auch verschlüsselt werden

  47. P2P – JXTA – Überblick • Einführung • Welche Protokolle gibt es? • Peer Discovery Protocol API • Peer Resolver Protocol API • Peer Membership Protocol API • Peer Information Protocol API • Pipe Binding Protocol API • Peer Endpoint Protocol API • Beispiel

  48. P2P – JXTA – Peer Endpoint API Peer Endpoint Protocol • Nachrichtenaustausch zwischen Peers • wird hauptsächlich von anderen Protokollen benutzt • direkte Benutzung sinnvoll für • Implementierung neuer Endpoint-Protokolle • Implementierung eigener Pipes • Überwachung bzw. Steuerung des Netzes • Zugriff über Interface PeerGroup: EndpointService getEndpointService(); 19.05.04 48

  49. P2P – JXTA – Peer Endpoint API Filter Listener • zum Manipulieren oder Blockieren von Nachrichten • Registrieren in EndpointService void addIncomingMessageFilterListener( MessageFilterListener listener, String namespace, String name); • Interface MessageFilterListener Message filterMessage(Message message, EndpointAddress srcAddr, EndpointAddress dstAddr); 19.05.04 49

  50. P2P – JXTA – Peer Endpoint API Ping boolean ping(EndpointAddress addr); - prüft Erreichbarkeit eines Peers - ist unabhängig vom benutzten Protokoll - unterscheidet sich vom traditionellen Netzwerk-Ping • einzige Information: true oder false • Verlässlichkeit hängt vom Protokoll ab 19.05.04 50

More Related