1 / 20

BEEP The Blocks Extensible Exchange Protocol Core

BEEP The Blocks Extensible Exchange Protocol Core. KM-/VS-Seminar Wintersemester 2002/2003 Betreuer: Frank Strauß. Übersicht. Einleitung Konzeption von BEEP Core Nachrichtaustausch Frame der Nachrichten Sitzungsverwaltung Abbildung auf TCP

meli
Download Presentation

BEEP The Blocks Extensible Exchange Protocol Core

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. BEEPThe Blocks Extensible Exchange Protocol Core KM-/VS-Seminar Wintersemester 2002/2003 Betreuer: Frank Strauß

  2. Übersicht • Einleitung • Konzeption von BEEP Core • Nachrichtaustausch • Frame der Nachrichten • Sitzungsverwaltung • Abbildung auf TCP • Implementierung der Konzeption mit Java BEEP • Client • Server • Zusammenfassung

  3. 1. Einleitung • BEEP – Ein standardisierter Rahmenwerk für Internet-Protokoll • RFC 3080 und RFC 3081 - Marshall Rose • Zielsetzung des BEEPs • Verbindungsorientierung, • Nachrichtenorientierung, • Asynchronisation

  4. 2. Konzept von BEEP Core • BEEP ist ein Anwendungsprotokoll nach dem Peer-to-Peer-Prinzip. • Funktionalitäten von BEEP: • Trennen einer Nachricht von der Nächsten (Frame), • Kodierung der Nachrichten, • Unterstützung mehrfacher logischer Kommunikationskanäle, • Berichten über Störungen, • Aushandlung von Verschlüsselungsparametern, • Aushandlung von Authentisierungsparametern.

  5. 2.1 Nachrichtaustausch • Rolle • Listening-Rolle – auf eine eingehende Verbindung wartet. • Initiating-Rolle – eine Verbindung zum Listener erstellen will. • Client und Server. • Austauscharten • message/reply • message/error • message/answer

  6. 2.2 Frame der Nachrichten • Die BEEP-Nachrichten sind in der Regel durch MIME ‎[8] strukturiert. • Text oder • binärer Code. • Beschreibung der Inhalttypen durch MIME-Kopf - „entity-headers“. Defaultwerte: • „Content-Type“ - „application/octet-stream“, • „Content-Transfer-Encoding“ - „binary“. • Beschreibung der Nachrichten durch XML.

  7. 2.2 Frame der Nachrichten • Syntax eines BEEP-Frames message frame frame header payload trailer header SP SP SP SP type channel megno more SP CR LF seqno size payload OCTET frame CR LF END

  8. 2.2 Frame der Nachrichten • Kopf eines Frames • channelidentifiziert, auf welchem Kanal die BEEP-Peers miteinander kommunizieren sollen. • msgno identifiziert die Nummern der Nachrichten. • more ist ein Fortsetzungsindikator, der entweder mit „*“ oder mit „.“ gekennzeichnet wird. • seqno identifiziert die Sequenznummer des ersten Oktetts in der Nutzlast. • size kennzeichnet die Anzahl der Oktetts in der Nutzlast eines Frames.

  9. 2.2 Frame der Nachrichten • Nutzlast • Besteht aus null oder mehren Oktetts, • Zugeordnet durch Sequenznummer. • Abschluss • besteht aus der Zeichenkette END <CR> <LF> • Ein Beispiel

  10. session . . . channel 0 (management) channel 1 (profile A) channel n (profile P, Q) 2.3 Sitzungsverwaltung • Verteilung der Sitzung in verschiedenen Kanäle • Kanal 0 - Verwaltungskanal • Regelung durch Profile

  11. 2.3 Sitzungsverwaltung • Nachrichtenelement • Nachrichten wird präsentiert durch Nachrichtenelement (XML-Element). • Fünf Grundtypen von Nachrichtenelement für Sitzungsverwaltung, • Beziehungen zwischen Rolle, Nachrichtenarten und Nachrichtenelement:

  12. 2.3 Sitzungsverwaltung • Greeting-Nachrichten L: RPY 0 0 . 0 110 L: Content-Type: application/beep+xml L: <greeting> L: <profile uri=’http://iana.org/beep/TLS’ /> L: </greeting> L: END I: RPY 0 0 . 0 110 I: Content-Type: application/beep+xml I: <greeting /> I: END • Start-Nachrichten C: RPY 0 1 . 30 120 C: Content-Type: application/beep+xml C: C: <start number=’1’> C: <profile uri=’http://iana.org/beep/SASL/OTP’ /> C: <profile uri=’http://ibr.cs.tu-bs.de/fangming/contact’ /> C: </start> C: END

  13. 2.3 Sitzungsverwaltung • Error-Nachrichten C: RPY 0 2 . 390 80 C: Content-Type: application/beep+xml C: <close number=’1’ code=’200’ /> C: END S: RPY 0 2 . 211 27 S: Content-Type: application/beep+xml S: <error code=’550’>still working</error> S: END • Close-Nachrichten und OK-Nachrichten C: RPY 0 2 . 390 80 C: Content-Type: application/beep+xml C: C: <close number=’1’ code=’200’ /> C: END S: RPY 0 2 . 210 257 S: Content-Type: application/beep+xml S: S: <ok /> S: END

  14. 2.3 Sitzungsverwaltung • Profile • Ein Profile stellt dar, welche Nachrichten über den Kanal übertragen werden sollen/können. • Ein Profile ist durch einen URI identifiziert und regelt die Syntax und Semantik zugelassener Nachrichten. • Vordefinierte Profile für: • Kanalmanagement, • TLS – „Transport Layer Security“ – und • Authentisierung.

  15. BEEP Peer A BEEP Peer B TCP A TCP B Initiator Listener CLOSED CLOSED OPEN-Active OPEN-Passive SYN, … SYN+ACK, … OPEN-Success OPEN-Success ACK, … ESTABLISHED ESTABLISHED . . . SEND (<close>) RECEIVE (<close>) …, <close number=’1’> SEND (<ok>) …, <ok> RECEIVE (<ok>) CLOSE FIN, … CLOSING ACK, … CLOSE TERMINATE FIN, … TERMINATE ACK, … CLOSED CLOSED 2.4 Abbildung auf TCP • Sitzungsverwaltung

  16. BEEP Peer A BEEP Peer B TCP A TCP B . . . Client Server ESTABLISHED ESTABLISHED SEND (<greeting>) …, <greeting> RECEIVE (<greeting>) SEND (<greeting>) RECEIVE (<greeting>) …, <greeting> SEND (<start>) RECEIVE (<start>) …, <start number=’1’> initialchannel 1 successful SEND (<profile>) RECEIVE (<profile>) …, <profile url=’…’> . . . SEND (<start>) RECEIVE (<start>) …, <start number=’2’> initialchannel 2 unsuccessful SEND (<error>) RECEIVE (<error>) …, <error code=’550’> SEND (<query>) RECEIVE (<query>) …, <query uid=’fm007’> search person RECEIVE (<person>) …, <person tel#=’…’> . . . 2.4 Abbildung auf TCP • Nachrichtenaustausch

  17. Message ... getChannel() getMsgno() getAnsno() sendMSG() sendRPY() sendANS() sendERR() sendNUL() ... Channel ... sendMSG() getProfile() getSession() ... Reply ... getNextReply() hasNext() receiveRPY() receiveERR() receiveANS() receiveNUL() 3. Implementierung der Konzeption mit Java BEEP • Bestandteil der BEEP Konzeption – Klassenabstraktion Session ... startChannel() firedChannelClose() firedChannelStarted() firedChannelReceived() sendProfile() ... -zero channel -session TLSProfile Profile Init() ... Init() ...

  18. 3. Implementierung der Konzeption mit Java BEEP • Client import org.beepcore.beep.core.*; import org.beepcore.lib.Reply; import org.beepcore.transport.tcp.*; ... public static void main (String args[]) { Session session; try { session = AutomatedTCPSessionCreator.initiate( "dragon", 8888, new ProfileRegistry()); } catch (BEEPException e) { // exception handling } Channel channel; try { channel = session.startChannel( "http://ibr.cs.tu-bs.de/fangming/ADDRESSBOOK"); //profile uri } catch (BEEPError e) { // catch and deal with errors System.out.print("error code: "+ e.getCode()); } catch (BEEPException e) { // catch lower level exceptions } String message = "<person>"+ "<name>Fangming</name>" + "<tel>0049-531-2145611</tel>"+ "</person>"; ByteDataStream msgst = new ByteDataStream( request.getByes("utf-16")); msgst.setContentType("text/xml"); msgst.setTransferEncoding("utf-16"); Reply reply = new Reply(); channel.sendMSG(msgst, reply); while (true) { Message repmsg = reply.getNextReply(); DataStream ds = repmsg.getDataStream(); InputStream is = ds.getInputStream(); // the reply is a stream, not a string byte inputbuf[]=new byte[256]; int inputlen; String reptxt; while (ds.isComplete() == false || is.available() > 0) { inputlen = is.read(inputbuf); if (inputlen > 0) { reptxt = reptxt.concat(new String(inputbuf, 0, inputlen, "utf-16"); } } System.out.println("got back:" +reptxt); Thread.currentThread.sleep(6000); } // end while } // end main

  19. 3. Implementierung der Konzeption mit Java BEEP • Server public class AddressbookProfile implements Profile, StartChannelListener, MessageListener { ... public StartChannelListener init(String uri, ProfileConfiguration config) throws BEEPException { return this; } public void startChannel( Channel channel, String encoding, String data) throws StartChannelException { channel.setDataListener(this); } public void closeChannel(Channel channel) throws CloseChannelException { channel.setDataListener(null); } public void receiveMSG(Message message) throws BEEPError, AbortChannelException { DataStream ds = message.getDataStream(); AddressbookEntry newentry; String replytxt = "<person uid=\"" + String.valueOf(newentry.getUID()) + \""/>"; DataStream reply=new ByteDataStream( replytxt.getBytes("utf-16")); reply.setContentType("text/xml"); try { message.sendRPY(reply); } catch (BEEPException e) { // exception handling } } ... } // end class AddressbookProfile

  20. 4. Zusammenfassung • BEEP ist ein verbindungsorientiertes Protokoll und unterstützt die asynchrone Interaktion. • Die ausgetauschten Daten werden mit XML kodiert. • BEEP hat die Fähigkeit von Peer-to-Peer, Client-to-Server oder Server-to-Server. • Der „Missbrauch“ von HTTP für Anwendungsprotokolle kann durch BEEP elegant abgelöst werden.

More Related