メインコンテンツまでスキップ

6. データチャネルのための SCTP の使用 (The Usage of SCTP for Data Channels)

6.1 SCTP プロトコルの考慮事項 (SCTP Protocol Considerations)

[RFC8261] で説明されている SCTP パケットの DTLS カプセル化を使用しなければなりません (MUST)。

この SCTP プロトコルスタックとその上位層は、複数の SCTP ストリームの使用をサポートしなければなりません (MUST)。ユーザーメッセージは順序付きまたは順序なしで、部分的または完全な信頼性で送信できます。

以下の SCTP プロトコル拡張が必要です。

  • [RFC6525] で定義されたストリーム再設定拡張 (Stream Reconfiguration Extension) をサポートしなければなりません (MUST)。チャネルを閉じるために使用されます。
  • [RFC6525] で定義されたストリームリセット拡張のサポートをシグナリングするために、[RFC5061] で定義された動的アドレス再設定拡張 (Dynamic Address Reconfiguration Extension) を使用しなければなりません (MUST)。
  • [RFC3758] で定義された部分信頼性拡張 (Partial Reliability Extension) をサポートしなければなりません (MUST)。

6.2 SCTP アソシエーション管理 (SCTP Association Management)

WebRTC コンテキストでは、WebRTC PeerConnection の 2 つのエンドポイントが SCTP アソシエーションを開くことに合意した場合にアソシエーションが確立されます。

SCTP アソシエーション確立中にネゴシエートされるストリーム数は 65535 であるべきです (SHOULD)。これはアソシエーション確立中にネゴシエートできる最大ストリーム数です。

6.3 SCTP ストリーム (SCTP Streams)

SCTP はストリームを SCTP アソシエーション内の別の SCTP エンドポイントへの単方向論理チャネルとして定義します。ストリームは順序付き配信の概念と多重化を提供するために使用されます。

6.4 データチャネルの定義 (Data Channel Definition)

データチャネルの実装は、同じ SCTP ストリーム識別子 (Stream Identifier) を持つ受信ストリームと送信 SCTP ストリームのペアです。これにより双方向通信が可能になります。

各データチャネルは各方向に以下の属性を持ちます。

  • 信頼性のあるまたは信頼性のないメッセージ転送: 信頼性のない転送の場合、同じレベルの信頼性のなさを使用します。
  • 順序付きまたは順序なしのメッセージ配信
  • 優先度 (Priority): 2 バイトの符号なし整数。これらの優先度は [RFC8260] の対応するストリームスケジューラの定義に従って加重公平キューイングスケジューリング優先度として解釈されなければなりません (MUST)。WebRTC での使用では、使用する値は 128(「通常以下」)、256(「通常」)、512(「高」)、または 1024(「超高」)のいずれかであるべきです (SHOULD)。
  • オプションのラベル (Label)
  • オプションのプロトコル (Protocol)

6.5 データチャネルのオープン (Opening a Data Channel)

データチャネルは、SCTP アソシエーション内でのネゴシエーション(帯域内ネゴシエーション)または帯域外ネゴシエーションを使用してオープンできます。[RFC8832] で帯域内ネゴシエーションのための簡単なプロトコルが規定されています。

6.6 データチャネルでのユーザーデータの転送 (Transferring User Data on a Data Channel)

データチャネルで双方向に送信されるすべてのデータは、データチャネルをオープンする際に定義された信頼性を使用して基礎となるストリームを通じて送信されなければなりません (MUST)。

SCTP ペイロードプロトコル識別子 (Payload Protocol Identifiers, PPIDs) は「ペイロードデータ」の解釈をシグナリングするために使用されます。以下の PPID を使用しなければなりません (MUST)。

WebRTC String: UTF-8 エンコードされた空でない JavaScript 文字列を識別するために使用。

WebRTC String Empty: UTF-8 エンコードされた空の JavaScript 文字列を識別するために使用。

WebRTC Binary: 空でない JavaScript バイナリデータを識別するために使用。

WebRTC Binary Empty: 空の JavaScript バイナリデータを識別するために使用。

SCTP は空のユーザーメッセージの送信をサポートしません。したがって、空のメッセージを送信する必要がある場合は、適切な PPID(WebRTC String Empty または WebRTC Binary Empty)を使用し、ゼロバイトの SCTP ユーザーメッセージを送信します。

6.7 データチャネルのクローズ (Closing a Data Channel)

データチャネルのクローズは、対応する送信ストリームをリセット [RFC6525] することでシグナリングしなければなりません (MUST)。一方が データチャネルをクローズすることを決定した場合、対応する送信ストリームをリセットします。ピアが受信ストリームがリセットされたことを確認すると、対応する送信ストリームもリセットします。完了すると、データチャネルはクローズされます。