4.2. 拡張仕様で定義する必要のある項目

4.2.1. トランスポートの信頼性

リクエストメッセージの送受信や QoS=RELIABLE のストリームでの伝送を確実に行うため、iSCP 2.0 ではかならず信頼性のあるトランスポートが必要です。 このトランスポートを実現するプロトコルとしては、TCPのような順序付けされたストリーム志向のプロトコルを使用しても、 WebSocket のようなメッセージ志向のプロトコルを使用しても構いません。 メッセージ志向のプロトコルの場合でも、メッセージの順序保証メカニズムは必須ではなく、 例えば QUIC のように、信頼性を持ちつつ、ストリーム間の順序関係を維持しないプロトコルも使用することができます。

iSCP 2.0 は、QoS=UNRELIABLE のストリームを構築するために、信頼性のあるトランスポートの他に信頼性のないトランスポートを併用することができます。 このトランスポートを実現するプロトコルとしては、UDPのようなコネクションレス型のプロトコルを使用しても、 DTLSのようなコネクション型のプロトコルを使用しても構いません。 なお、iSCP 2.0 は、最低でも1つの信頼性のあるトランスポートを必要とするため、 UDPやDTLSなどの信頼性のないプロトコルのみを使用する場合は、UDPやDTLS上に信頼性を担保するためのメカニズムを定義するか、 もしくは信頼性のある別のプロトコルを併用する必要があります。 また、 QoS=UNRELIABLE の伝送を、信頼性のあるトランスポートを用いて実現しても構いません。

これらのトランスポートでの各メッセージの伝送方法は、第1-2層を定義する拡張仕様内で規定され、本仕様では規定しません。

4.2.2. メッセージのエンコード

トランスポートプロトコルのペイロードに iSCP メッセージを格納するには、 iSCP メッセージをバイナリもしくは文字列の形式にエンコードする必要があります。 このエンコード方法については、エンコーディング層の拡張仕様により規定され、本仕様では規定しません。

4.2.3. メッセージ境界

トランスポートとして使用するプロトコルがストリーム志向である場合、トランスポート層の拡張仕様は、 メッセージ境界の特定方法を定義する必要があります。

たとえば、 WebSocket は、メッセージ志向のプロトコルでありメッセージ境界の特定方法をその仕様として持つため、 1つの iSCP メッセージを 1つの WebSocket メッセージに格納する限りにおいて、メッセージ境界を拡張仕様内で規定する必要はありません。 一方で、TCP は、ストリーム志向のプロトコルでありメッセージ境界を特定する方法を持たないため、 TCPを使用する拡張仕様はメッセージ境界の特定方法を定義しなければなりません。

4.2.4. メッセージ分割

トランスポートとして使用するプロトコルが、メッセージ志向であり、かつ、そのメッセージのサイズに上限がある場合、 トランスポート層の規定は、メッセージの分割方法とトランスポートのメッセージへの割当て方法を定義する必要があります。

たとえば、UDPは、メッセージ志向のプロトコルでありかつメッセージに格納できるデータサイズに上限があるため、 UDPを使用する拡張仕様はメッセージ分割の方法を定義しなければなりません。 一方で、TCPは、ストリーム志向のプロトコルであるため、メッセージ境界を拡張仕様内で規定する必要はありません。

4.2.5. トランスポート層での事前ネゴシエーション

そのコネクションにおいて使用するエンコーディングの種類や圧縮の有無など、 メッセージの送受信前に事前に取り決めておく必要のある情報が存在します。 トランスポート層の規定は、これらの情報を事前に取り交わす方法を定義する必要があります。

表 74 取り決めが必要な情報

名称

内容

エンコーディング名

使用するエンコーディングの名称(例: proto)

圧縮のタイプ名

圧縮のタイプ(例: per-message, context-takeover)

圧縮レベル

圧縮の強さ(例: 1, 2, ... 9)

圧縮ウィンドウサイズ

context-takeover 圧縮時のウィンドウサイズ(例: 8, 9, ... 15)

4.2.6. 推奨されるトランスポート

信頼性のないトランスポートをサポートする場合、 iSCP 2.0 は、 【拡張仕様】 WebTransport トランスポート で規定される WebTransport を使用するトランスポート、または、【拡張仕様】 QUIC トランスポート で規定される QUIC を使用するトランスポートの採用が推奨されます。 推奨の理由として、次のような点が挙げられます。

  • 単一のコネクション内で信頼性のあるトランスポートと信頼性のないトランスポートの双方を実現可能であり、 追加すべき仕様の量と、それに伴う実装難易度を最小限に抑えられる点

  • コネクションマイグレーションにより、IPアドレスやポート番号が変化しても接続を継続できる点

  • 暗号化などのセキュリティ機能を内包しており、セキュリティ機能の実現のために拡張仕様を必要としない点

また、信頼性のないトランスポートをサポートしない場合、iSCP 2.0 は、 【拡張仕様】 WebSocket トランスポート で規定される WebSocket を使用するトランスポートの採用が推奨されます。 推奨の理由として、次のような点が挙げられます。

  • Webブラウザを始めとする、幅広いプラットフォームでサポートされている点

  • WebSocket の拡張仕様として圧縮機能を利用でき、伝送効率の向上を見込める点

  • メッセージ志向のプロトコルであり、拡張仕様においてメッセージ境界を定義しなくてよい点