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

10. 上位層とのインターフェース (Interface with Upper Layer)

本章では、SCTPと上位層プロトコル (ULP) 間のインターフェースサービスを定義します。これらは抽象インターフェースであり、実際の実装はオペレーティングシステムによって異なる場合があります。

10.1. ULPからSCTPへ (ULP-to-SCTP)

ULPは以下のプリミティブを使用してSCTPにコマンドとデータを送信します:

10.1.1. Initialize

フォーマット: INITIALIZE([local port], [local eligible address list])

目的: SCTPエンドポイントを初期化します。

パラメータ:

  • local port: ローカルポート番号 (オプション)
  • local eligible address list: ローカル適格アドレスリスト (オプション)

結果:

  • 成功: ローカルエンドポイントハンドルを返す
  • 失敗: エラーコードを返す

説明:

- SCTPエンドポイントのリソースを割り当て
- 指定されたローカルポートとアドレスにバインド
- ポートが指定されていない場合、システムが自動割り当て
- アドレスが指定されていない場合、すべての利用可能なローカルアドレスを使用

10.1.2. Associate

フォーマット: ASSOCIATE(local SCTP instance name, destination transport addr, outbound stream count)

目的: リモートSCTPエンドポイントとの新しいアソシエーションの確立を要求します。

必須パラメータ:

  • local SCTP instance name: ローカルSCTPインスタンス名
  • destination transport addr: 宛先トランスポートアドレス (IPアドレスとポート)
  • outbound stream count: 要求するアウトバウンドストリーム数

オプションパラメータ:

  • destination transport addr list: 宛先トランスポートアドレスリスト (マルチホーミング用)
  • stream payload protocol identifier: ストリームペイロードプロトコル識別子

結果:

  • COMMUNICATION UP: アソシエーションが正常に確立された
  • COMMUNICATION LOST: アソシエーション確立が失敗した

説明:

1. INITチャンクを生成
2. T1-initタイマーを開始
3. 宛先アドレスにINITを送信
4. INIT ACKを待機
5. COOKIE ECHOを送信
6. COOKIE ACKを待機
7. ESTABLISHED状態に入る

10.1.3. Send

フォーマット: SEND(association id, buffer address, byte count [,context] [,stream id] [,life time] [,destination transport address] [,unordered flag] [,no-bundle flag] [,payload protocol-id])

目的: ユーザーメッセージをSCTPに渡して送信します。

必須パラメータ:

  • association id: アソシエーション識別子
  • buffer address: バッファアドレス
  • byte count: バイト数

オプションパラメータ:

  • context: ユーザーコンテキスト (エラー報告用)
  • stream id: ストリーム識別子 (デフォルト0)
  • life time: メッセージライフタイム (ミリ秒)
  • destination transport address: 宛先トランスポートアドレス
  • unordered flag: 順序なし配信フラグ
  • no-bundle flag: バンドル禁止フラグ
  • payload protocol-id: ペイロードプロトコルID

結果:

  • 成功: メッセージが送信のために受け入れられた
  • 失敗: エラーコードを返す

説明:

- ユーザーデータをDATAチャンクにセグメント化
- ストリームIDとSSNに従って割り当て
- ライフタイムが指定されている場合、タイムアウト時に破棄
- デフォルトで主要宛先アドレスを使用

10.1.4. Shutdown

フォーマット: SHUTDOWN(association id)

目的: アソシエーションを優雅にクローズします。

必須パラメータ:

  • association id: アソシエーション識別子

結果:

  • SHUTDOWN COMPLETE: シャットダウン成功
  • COMMUNICATION LOST: シャットダウン失敗

説明:

1. 新しいユーザーデータの受け入れを停止
2. すべての未送信データの送信を完了
3. すべてのデータが確認されるまで待機
4. SHUTDOWNチャンクを送信
5. SHUTDOWN ACKを待機
6. SHUTDOWN COMPLETEを送信
7. TCBを破棄

10.1.5. Abort

フォーマット: ABORT(association id [,Upper Layer Abort Reason])

目的: アソシエーションを即座に終了します。

必須パラメータ:

  • association id: アソシエーション識別子

オプションパラメータ:

  • Upper Layer Abort Reason: 上位層中止理由

結果:

  • COMMUNICATION LOST: アソシエーションが中止された

説明:

1. ABORTチャンクを送信 (理由を含む)
2. すべての未送信および未確認データを破棄
3. TCBを破棄
4. ULPにCOMMUNICATION LOSTを報告

10.1.6. Set Primary

フォーマット: SET PRIMARY(association id, destination transport address)

目的: 主要宛先アドレスを設定します。

必須パラメータ:

  • association id: アソシエーション識別子
  • destination transport address: 宛先トランスポートアドレス

結果:

  • 成功: 主要アドレスが更新された
  • 失敗: アドレスがアソシエーションのピアアドレスリストにない

説明:

- 現在の主要宛先アドレスを変更
- トラフィックエンジニアリングまたは障害回復に使用
- アドレスはアソシエーションの有効なピアアドレスである必要がある

10.1.7. Receive

フォーマット: RECEIVE(association id, buffer address, buffer size)

目的: SCTPからデータを受信します。

必須パラメータ:

  • association id: アソシエーション識別子
  • buffer address: 受信バッファアドレス
  • buffer size: バッファサイズ

戻り値:

  • byte count: 受信したバイト数
  • stream id: ストリーム識別子
  • stream sequence number: ストリームシーケンス番号
  • partial flag: 部分配信フラグ
  • delivery number: 配信番号
  • transport address: ソーストランスポートアドレス

説明:

- 受信キューからユーザーメッセージを抽出
- データがない場合はブロックする可能性がある (実装依存)
- ストリームIDとSSNの順序で配信 (順序なしでない限り)

10.1.8. Status

フォーマット: STATUS(association id)

目的: 現在のアソシエーションステータスを照会します。

必須パラメータ:

  • association id: アソシエーション識別子

戻り値:

  • association connection state: アソシエーション接続状態
  • destination transport address list: 宛先トランスポートアドレスリスト
  • destination transport address reachability states: 宛先トランスポートアドレス到達可能性状態
  • current receiver window size: 現在の受信ウィンドウサイズ
  • current congestion window sizes: 現在の輻輳ウィンドウサイズ
  • number of outbound streams: アウトバウンドストリーム数
  • number of inbound streams: インバウンドストリーム数
  • primary path: 主要パス

10.1.9. Change Heartbeat

フォーマット: CHANGE HEARTBEAT(association id, destination transport address, new state [,interval])

目的: 特定の宛先アドレスのハートビートを有効または無効にします。

必須パラメータ:

  • association id: アソシエーション識別子
  • destination transport address: 宛先トランスポートアドレス
  • new state: 新しい状態 (有効/無効)

オプションパラメータ:

  • interval: ハートビート間隔 (ミリ秒)

10.1.10. Request Heartbeat

フォーマット: REQUEST HEARTBEAT(association id, destination transport address)

目的: 特定の宛先アドレスへのハートビート送信を要求します。

必須パラメータ:

  • association id: アソシエーション識別子
  • destination transport address: 宛先トランスポートアドレス

用途:

  • 特定のパスの到達可能性をテスト
  • パスのRTT推定を更新

10.1.11. Get SRTT Report

フォーマット: GET SRTT REPORT(association id, destination transport address)

目的: 特定の宛先アドレスのSRTT (平滑化往復時間) を取得します。

戻り値:

  • srtt: 現在のSRTT値
  • last update time: 最終更新時刻

10.1.12. Set Failure Threshold

フォーマット: SET FAILURE THRESHOLD(association id, destination transport address, failure threshold)

目的: パス障害閾値を設定します。

パラメータ:

  • association id: アソシエーション識別子
  • destination transport address: 宛先トランスポートアドレス
  • failure threshold: 障害閾値

10.1.13. Set Protocol Parameters

フォーマット: SET PROTOCOL PARAMETERS(association id, [,destination transport address,] protocol parameter list)

目的: SCTPプロトコルパラメータを設定します。

設定可能なパラメータ:

  • RTO.Initial: 初期再送信タイムアウト
  • RTO.Min: 最小再送信タイムアウト
  • RTO.Max: 最大再送信タイムアウト
  • RTO.Alpha: SRTT推定器のアルファ値
  • RTO.Beta: SRTT推定器のベータ値
  • Max.Burst: 最大バーストサイズ
  • Association.Max.Retrans: アソシエーション最大再送信回数
  • Path.Max.Retrans: パス最大再送信回数
  • Valid.Cookie.Life: 有効なCookieライフタイム
  • SACK.Delay: SACK遅延

10.1.14. Destroy SCTP Instance

フォーマット: DESTROY(local SCTP instance name)

目的: SCTPインスタンスを破棄します。

説明:

1. すべてのアクティブなアソシエーションを中止
2. すべてのリソースを解放
3. ポートとアドレスのバインドを解除

10.2. SCTPからULPへ (SCTP-to-ULP)

SCTPは以下のプリミティブを使用してULPにイベントを報告します:

10.2.1. COMMUNICATION UP

フォーマット: COMMUNICATION UP(association id, destination transport address list, outbound stream count, inbound stream count)

トリガー条件:

  • 新しいアソシエーションが正常に確立された (ASSOCIATE完了)
  • パッシブ側として新しいアソシエーションを受け入れた (INITを受信し4ウェイハンドシェイクを完了)

パラメータ:

  • association id: 新しく確立されたアソシエーション識別子
  • destination transport address list: ピアアドレスリスト
  • outbound stream count: ネゴシエートされたアウトバウンドストリーム数
  • inbound stream count: ネゴシエートされたインバウンドストリーム数

10.2.2. DATA ARRIVE

フォーマット: DATA ARRIVE(association id, stream id, stream sequence number, flags, payload protocol identifier, user data)

トリガー条件:

  • ピアからユーザーデータを受信

パラメータ:

  • association id: アソシエーション識別子
  • stream id: ストリーム識別子
  • stream sequence number: ストリームシーケンス番号
  • flags: フラグ (例: 順序なしフラグ)
  • payload protocol identifier: ペイロードプロトコル識別子
  • user data: ユーザーデータ

説明:

- ULPに新しいデータが利用可能であることを通知
- ULPはRECEIVEプリミティブを使用してデータを取得する必要がある
- データはストリームIDとSSNの順序で配信 (順序なしでない限り)

10.2.3. COMMUNICATION LOST

フォーマット: COMMUNICATION LOST(association id, status)

トリガー条件:

  • アソシエーションが失敗または中止された
  • ピアエンドポイント障害が検出された
  • ABORTチャンクを受信
  • SHUTDOWNが失敗

パラメータ:

  • association id: アソシエーション識別子
  • status: 失敗理由
    • Association exceeded maximum retransmissions: 最大再送信回数を超えた
    • Peer sent ABORT: ピアがABORTを送信
    • Peer unexpectedly closed: ピアが予期せずクローズ
    • Resources unavailable: リソースが利用できない

10.2.4. COMMUNICATION ERROR

フォーマット: COMMUNICATION ERROR(association id, error info)

トリガー条件:

  • 回復可能な通信エラーが検出された
  • ERRORチャンクを受信
  • パス障害 (ただしアソシエーションは依然としてアクティブ)

パラメータ:

  • association id: アソシエーション識別子
  • error info: エラー情報

10.2.5. RESTART

フォーマット: RESTART(association id, peer's new tag)

トリガー条件:

  • ピアエンドポイントの再起動が検出された

パラメータ:

  • association id: アソシエーション識別子
  • peer's new tag: ピアの新しいタグ

説明:

- ULPにピアが再起動したことを通知
- ULPは処理方法を決定する必要がある (再確立または終了)
- アプリケーション層状態の再同期が必要な場合がある

10.2.6. SHUTDOWN COMPLETE

フォーマット: SHUTDOWN COMPLETE(association id)

トリガー条件:

  • 優雅なシャットダウンプロセスが正常に完了した

パラメータ:

  • association id: アソシエーション識別子

説明:

- アソシエーションが正常にクローズされた
- すべてのデータが確実に配信された
- TCBが破棄された

10.2.7. SEND FAILURE

フォーマット: SEND FAILURE(association id, data retrieval id, cause code, context)

トリガー条件:

  • 何らかの理由でデータの送信に失敗した
  • 最大再送信回数に達した
  • メッセージライフタイムが期限切れになった

パラメータ:

  • association id: アソシエーション識別子
  • data retrieval id: データ取得識別子
  • cause code: 失敗原因コード
  • context: ユーザーコンテキスト (SENDプリミティブから)

原因コード:

  • Message expired: メッセージが期限切れ
  • Association aborted: アソシエーションが中止された
  • Send failed: 送信失敗

10.2.8. NETWORK STATUS CHANGE

フォーマット: NETWORK STATUS CHANGE(association id, destination transport address, new status)

トリガー条件:

  • 宛先トランスポートアドレスの状態が変更された
  • パスがアクティブまたは非アクティブになった

パラメータ:

  • association id: アソシエーション識別子
  • destination transport address: 宛先トランスポートアドレス
  • new status: 新しい状態
    • Active: パスが現在利用可能
    • Inactive: パスが現在利用不可
    • Unconfirmed: パスが未確認

まとめ

SCTPのULPインターフェースは以下を提供します:

  1. 完全なアソシエーション管理: 初期化、確立、クローズ、中止
  2. 柔軟なデータ送信: マルチストリーム、順序あり/なし、ライフタイムをサポート
  3. パス管理: ハートビート、障害検出、主要パス選択
  4. ステータス監視: アソシエーションステータス照会、ネットワークステータス変更通知
  5. パラメータ構成: プロトコルパラメータのランタイム調整

ベストプラクティス:

  • すべてのSCTPからULPへの通知を適切に処理
  • ストリームIDを使用して論理的なデータ分離を実現
  • 合理的なメッセージライフタイムを設定
  • ネットワークステータスの変更を監視して応答
  • 強制中止よりも優雅なシャットダウンを優先