Blocks Extensible Exchange Protocol
Blocks Extensible Exchange Protocol (BEEP) (davor BXXP) ist ein generisches Netzwerkprotokoll. BEEP bietet grundlegende Funktionen für verbindungs- und nachrichtenorientierte Peer-to-Peer (P2P) Protokolle und unterstützt asynchrone Vollduplex-Kommunikation. BEEP-Profile definieren Syntax und Semantik von Nachrichten und können innerhalb einer Session mit einem oder mehreren Kanälen verbunden werden. Jeder BEEP-Kanal verhält sich dabei wie eine Vollduplex-Pipe. Ein Frame-Mechanismus ermöglicht eine gleichzeitige und unabhängige Kommunikation zwischen Peers. BEEP ist in RFC 3080[1] unabhängig vom Transport-Mechanismus definiert. Wie BEEP auf unterschiedlichen Transport-Mechanismen aufsetzt, wird in anderen Dokumenten beschrieben. ÜberblickBEEP verwendet Profile, Kanäle und einen Frame-Mechanismus, um verschiedene Arten von Nachrichten auszutauschen. Für Inhaltstyp und Kodierung wird die Voreinstellung durch die BEEP-Spezifikation vorgegeben. Der Protokoll-Designer legt fest, ob entweder ein binäres oder ein beliebiges textbasiertes Nachrichtenformat verwendet wird. Profile definieren Syntax und Semantik des Nachrichtenformats und bestimmen die Funktionalität des Protokolls. Kanäle sind Vollduplex-Pipes, die mit einem Profil verbunden sind. Nachrichten, die über verschiedene Kanäle gesendet werden, sind unabhängig voneinander (asynchron). Es können beliebig viele Kanäle mit einem Profil verbunden werden. BEEP stellt darüber hinaus TLS für Verschlüsselung und SASL für Authentifizierung zur Verfügung. GeschichteMarshall T. Rose, der ebenfalls an Protokollen wie POP3, SMTP, und SNMP mitgearbeitet hat,[2] begann 1998 mit der Arbeit an BXXP, dem Vorgänger von BEEP, und übergab die Spezifikation im Sommer 2000 an eine Arbeitsgruppe der Internet Engineering Task Force (IETF) zur Bearbeitung. Die IETF veröffentlichte 2001 BEEP (RFC 3080[1]) und BEEP über TCP (RFC 3081[3]) mit einigen Erweiterungen gegenüber BXXP. Drei der Erweiterungen sind:
BEEP Session![]() Eine BEEP-Session wird gestartet, wenn sich ein Peer (Initiator) mit einem anderen (Listener) verbindet. Beide Peers schicken sofort und gleichzeitig eine Nachricht (RPY) mit einer Begrüßung (greeting). Das greeting-Element kann bis zu drei Elemente enthalten:
Ein Beispiel für den Austausch von Begrüßungen: L: <wait for incoming connection> I: <open connection> L: RPY 0 0 . 0 110 L: Content-Type: application/beep+xml L: L: <greeting> L: <profile uri='http://iana.org/beep/TLS' /> L: </greeting> L: END I: RPY 0 0 . 0 52 I: Content-Type: application/beep+xml I: I: <greeting /> I: END ProfileProfile legen das Nachrichtenformat fest und definieren die Funktionalität des BEEP basierten Protokolls. Eine BEEP-Session kann mehrere Profile gleichzeitig zur Verfügung stellen. Um ein Profil eindeutig identifizieren zu können, wird jedem eine Zeichenkette (Profil ID) zugewiesen. Die Profil ID hat das Format eines Uniform Resource Identifier (URI) oder eines Uniform Resource Name (URN). In der Vergangenheit führte das URI-Format, wegen seiner Ähnlichkeit zu einer Internetadresse, zu Verwirrung. Um Missverständnisse zu vermeiden, sollten neue Profile das URN-Format verwenden. Beispiele für Profil-IDs:
Nachrichten und FramesFür BEEP-Nachrichten wird das MIME-Format verwendet. Nachrichten transportieren einen Inhalt, dessen Format vom Profil-Designer festgelegt wird. Textbasierte Formate wie JSON oder XML wie auch binäre Formate sind möglich. Die Kanalverwaltung über Channel 0 und das TLS-Profil verwenden eine Untermenge von XML, die für den Profil-Designer transparent ist. Beispiel aus RFC 3080[1] – Schließen eines BEEP-Kanals: C: MSG 0 2 . 235 71 C: Content-Type: application/beep+xml C: C: <close number='1' code='200' /> C: END S: RPY 0 2 . 392 46 S: Content-Type: application/beep+xml S: S: <ok /> S: END Größere Nachrichten werden über mehrere Frames (Sequence Frames) verteilt. Nachrichten-TypenBEEP definiert 5 Nachrichtentypen für die häufigsten Muster in Anwendungsprotokollen:
Einige der häufigsten Protokollmuster werden wie folgt implementiert:
FlusskontrolleFür die Flusssteuerung in Kanälen verwendet BEEP Sequenz-Frames (SEQ). Sequenz-Frames sind in RFC 3081, Abschnitt 3.1 beschrieben.[5] Für die gesamte Verbindung wird vom Transmission Control Protocol (TCP) ebenfalls einen Sequenz-Mechanismus zur Flusssteuerung verwendet. Damit jedoch ein Kanal oder eine große Nachricht nicht die gesamte Bandbreite beansprucht, wird eine Flusskontrolle für einzelne BEEP-Kanäle benötigt. Sequenz-Frames werden für die Unterstützung von Quality of Service (QoS) und zur Staukontrolle verwendet[6]. Weblinks
Einzelnachweise
|
Portal di Ensiklopedia Dunia