
Blocks Extensible Exchange Protocol(BEEP)は、ネットワークアプリケーションプロトコルを作成するためのフレームワークです。BEEPには、接続およびメッセージ指向のピアツーピア(P2P)プロトコル向けに、フレーミング、パイプライン処理、多重化、レポート作成、認証などの構成要素が含まれており、非同期全二重通信をサポートしています。
メッセージの構文と意味は、1つ以上のBEEPチャネルに関連付けられたBEEPプロファイルによって定義され、各チャネルは全二重通信パイプです。フレーミングメカニズムにより、ピア間での同時かつ独立した通信が可能になります。
BEEPは、基盤となるトランスポートメカニズムとは独立してRFC 3080で定義されています。BEEPと特定のトランスポートサービスとのマッピングは、別の文書シリーズで定義されています。
BEEPでは、プロファイル、チャネル、およびフレーミングメカニズムを使用して、さまざまな種類のメッセージを交換します。仕様でデフォルト設定されているのはコンテンツタイプとエンコーディングのみであり、プロトコル設計者はバイナリ形式またはテキスト形式を自由に選択できます。プロファイルは、プロトコルの機能、メッセージの構文、および意味を定義します。チャネルは、特定のプロファイルに接続された全二重パイプです。異なるチャネルを介して送信されるメッセージは互いに独立しています(非同期)。複数のチャネルが1つの接続を介して同じプロファイルを使用できます。
1998年、POP3、SMTP、SNMPプロトコルにも携わったマーシャル・T・ローズ[ 1 ]は、BXXPプロトコルを設計し、2000年夏にインターネット技術タスクフォース(IETF )ワーキンググループに引き渡しました。2001年、IETFはBXXPにいくつかの改良を加えたBEEP(RFC 3080 )とTCP上のBEEP (RFC 3081)を公開しました。最も注目すべき3つの改良点は次のとおりです。
BEEPセッションを開始するには、開始側のピアが受信側のピアに接続します。各ピアは、挨拶要素を含む応答を送信します。挨拶には、最大3つの異なる要素が含まれます。
挨拶と返答の例:
L: <着信接続を待機> I: <接続を開く> L: RPY 0 0 . 0 110 L:コンテンツタイプ: 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 私: 私:<挨拶> 私:終了 プロファイルは、BEEP に基づくメッセージの構文と意味、およびプロトコル機能を定義します。1 つの BEEP セッションで複数のプロファイルにアクセスできます。プロファイルを識別するために、一意の文字列が割り当てられます。このプロファイル識別子は、Uniform Resource Identifier ( URI ) またはUniform Resource Name ( URN ) の形式をとります。以前は、プロファイル識別子のURI形式は Web アドレスに似ているため、混乱を招くことがありました。誤解を避けるため、新しいプロファイルではURN形式を使用する必要があります。
プロファイル識別子の例:
BEEPメッセージはMIME標準に準拠した構造になっています。BEEPがメッセージ内でXMLを使用しているという誤解が時折見られますが、チャネル0で使用されるXMLはごく一部であり、プロファイル設計者(BEEPユーザー)には透過的です。メッセージの内容形式はプロファイル設計者が自由に選択できます。JSONやXMLなどのテキスト形式はもちろん、バイナリデータも使用可能です。XMLはチャネル管理と、 BEEPで定義されるTLS標準プロファイルで使用されます。
RFC3080からの、チャネルクローズメッセージの交換が成功した例。
C: MSG 0 2 . 235 71 C:コンテンツタイプ: application/beep+xml C: C: <close number= '1' code= '200' /> C: END S: RPY 0 2 . 392 46 S:コンテンツタイプ: application/beep+xml S: S: <ok /> S:終了 より大きなメッセージは複数の部分に分割され、複数のシーケンスフレームに分散されます。
BEEPは、必要なほとんどのアプリケーションプロトコルパターンを可能にするために、5つのメッセージタイプを定義しています。
最も一般的なアプリケーションプロトコルパターンは、以下のように実装されます。
BEEP は、チャネル レベルでフロー制御を実装するためにシーケンス フレーム (SEQ) をサポートしています。シーケンス フレームは、RFC 3081 のセクション 3.3で定義されています。伝送制御プロトコル( TCP ) は、トランスポート層レベルでシーケンス メカニズムを定義し、接続に関連するフロー制御をサポートしています。BEEP は、チャネルや大きなメッセージが接続を独占しないようにするために、チャネル レベルでのフロー制御を必要とします。そのため、サービス品質(QoS) をサポートし、飢餓やデッドロックを回避するためにシーケンス フレームが使用されます。[ 2 ]