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

9. アソシエーションの終了 (Termination of Association)

SCTPは、アソシエーション終了のために2つのメカニズムを提供します:正常シャットダウン (Shutdown) と強制中止 (Abort) です。

9.1. アソシエーションの中止 (Abort of an Association)

ABORTチャンクは、アソシエーションを即座に終了するために使用されます。これは異常終了であり、データ配信の保証はありません。

9.1.1. ABORTの送信

エンドポイントは、以下の状況でABORTチャンクを送信してもよい (MAY):

  • プロトコル違反の検出
  • 回復不能なエラーの受信
  • アプリケーション層が即座の終了を要求
  • リソース枯渇

ABORTチャンクフォーマット:

ABORTチャンクには以下が含まれる:
- Chunk Type = 6
- Tビット:Verification Tagの使用を示す
- エラー原因 (オプション):中止理由を記述

9.1.2. ABORTの受信

ABORTチャンクを受信すると、エンドポイントは以下を行わなければならない (MUST):

1. そのアソシエーションへの新しいデータの送信を停止
2. すべての未送信および未確認データを破棄
3. 上位層にアソシエーション中止を報告
4. TCBを破棄
5. 応答を送信しない

重要:ABORTは一方向であり、受信側は応答を送信してはならない (MUST NOT)。

9.1.3. ABORTの原因

一般的なABORT原因は以下の通り:

原因コード名前説明
1Invalid Stream Identifier無効なストリーム識別子
2Missing Mandatory Parameter必須パラメータの欠落
3Stale Cookie Error古いCookie
4Out of Resourceリソース不足
5Unresolvable Address解決不能なアドレス
6Unrecognized Chunk Type認識できないチャンクタイプ
7Invalid Mandatory Parameter無効な必須パラメータ
8Unrecognized Parameters認識できないパラメータ
9No User Dataユーザーデータなし
10Cookie Received While Shutting Downシャットダウン中にCookieを受信
11Restart with New Addresses新しいアドレスで再起動
12User Initiated Abortユーザー開始の中止
13Protocol Violationプロトコル違反

9.1.4. Tビットの使用

Tビット (T bit) は、ABORTチャンクでのVerification Tagの選択を制御します:

T=0:

- 通常のVerification Tagを使用
- 通常のアソシエーション内のABORTに使用

T=1:

- 受信したパケットのVerification Tagを使用
- "Out of the Blue"パケットへの応答に使用
- または正しいTagが不明な場合に使用

9.2. アソシエーションのシャットダウン (Shutdown of an Association)

SHUTDOWNは、すべてのデータが確実に配信されることを保証する、正常で秩序あるアソシエーション終了プロセスです。

9.2.1. シャットダウンプロセスの概要

正常シャットダウンは3つのチャンクの交換を含みます:

エンドポイントA                                エンドポイントZ

(送信データなし)
--------[SHUTDOWN]--------->
(残りのデータを送信)
<------[SHUTDOWN ACK]-------
-----[SHUTDOWN COMPLETE]---->

両側がTCBを破棄

9.2.2. SHUTDOWNの開始

ULPがアソシエーションのクローズを要求すると:

送信側の動作:

1. 新しいユーザーデータの受け入れを停止
2. すべての未送信データの送信を完了
3. すべての未確認データが確認されるまで待機
4. 累積TSN Ackを含むSHUTDOWNチャンクを送信
5. T2-shutdownタイマーを開始

SHUTDOWNチャンクフォーマット:

0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type = 7 | Flags | Length = 8 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Cumulative TSN Ack |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

9.2.3. SHUTDOWNの受信

SHUTDOWNチャンクを受信すると、エンドポイントは以下を行わなければならない (MUST):

1. 新しいユーザーデータの受け入れを停止
2. Cumulative TSN Ackまでのすべてのデータが送信されたことを確認
3. 未送信データがある場合は、送信を継続
4. すべてのデータが確認されたら、SHUTDOWN ACKを送信
5. T2-shutdownタイマーを開始

状態遷移:

ESTABLISHED -> SHUTDOWN-RECEIVED

9.2.4. SHUTDOWN ACKの送信

SHUTDOWN ACKチャンクフォーマット:

0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type = 8 | Flags | Length = 4 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

送信タイミング:

  • すべての受信データがULPに配信された
  • すべてのローカルデータがピアによって確認された

9.2.5. SHUTDOWN ACKの受信

SHUTDOWN ACKを受信すると、エンドポイントは以下を行わなければならない (MUST):

1. SHUTDOWN COMPLETEチャンクを送信
2. T2-shutdownタイマーを停止
3. ULPにアソシエーションのクローズを報告
4. TCBを破棄

状態遷移:

SHUTDOWN-SENT -> CLOSED

9.2.6. SHUTDOWN COMPLETE

SHUTDOWN COMPLETEチャンクフォーマット:

0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type = 14 |Reserved |T| Length = 4 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Tビットの使用:

  • T=0:通常の場合、ローカルTagを使用
  • T=1:予期しないSHUTDOWN ACKに応答する場合に使用

SHUTDOWN COMPLETEの受信:

1. T2-shutdownタイマーを停止
2. ULPにアソシエーションのクローズを報告
3. TCBを破棄

状態遷移:

SHUTDOWN-ACK-SENT -> CLOSED

9.2.7. T2-shutdownタイマー

目的:SHUTDOWNプロセスが無期限に待機しないことを保証します。

タイムアウト処理:

SHUTDOWN-SENT状態の場合:
- SHUTDOWNチャンクを再送信
- RTOを2倍にする
- T2-shutdownタイマーを再開始

SHUTDOWN-ACK-SENT状態の場合:
- SHUTDOWN ACKチャンクを再送信
- RTOを2倍にする
- T2-shutdownタイマーを再開始

再送信回数がAssociation.Max.Retransを超えた場合:
- ULPにエラーを報告
- TCBを破棄

9.2.8. シャットダウン中のデータ処理

SHUTDOWN-PENDING状態:

  • データの通常の送受信を継続
  • すべての未確認データが確認されるまで待機

SHUTDOWN-SENT状態:

  • 新しいユーザーデータを受け入れない
  • ピアのデータを受信してもよい
  • 受信したデータを確認するためにSACKを送信

SHUTDOWN-RECEIVED状態:

  • 新しいユーザーデータを受け入れない
  • 未送信データの送信を継続
  • ピアのデータを受信および確認

SHUTDOWN-ACK-SENT状態:

  • 新しいユーザーデータを受け入れない
  • 新しいデータを送信しない
  • 重複したSHUTDOWNに応答してSHUTDOWN ACKを再送信

9.2.9. SHUTDOWNとABORTの比較

特徴SHUTDOWNABORT
データ保証すべての送信データが確認されるデータ保証なし
終了速度遅い(ハンドシェイクあり)即座
リソースクリーンアップ優雅なクリーンアップ即座のクリーンアップ
使用ケース正常なクローズエラーまたは緊急事態
応答要求ピアの応答が必要一方向、応答なし

まとめ

SCTPは柔軟なアソシエーション終了メカニズムを提供します:

  1. SHUTDOWN:正常なクローズに適しており、データの整合性を保証
  2. ABORT:例外的な状況に適しており、即座の終了

ベストプラクティス

  • 正常なクローズにはSHUTDOWNを優先
  • エラーまたはリソース問題の場合のみABORTを使用
  • T2-shutdownタイマーのタイムアウトを適切に処理
  • 適切な再送信メカニズムを実装