要約

  • RFC 6525 は、SCTP アソシエーションと対象外のストリームを維持したまま、選んだストリームのシーケンス状態をゼロへ戻せるようにした。
  • Sender’s Last Assigned TSN が旧時代の終端を示す。累積確認点がそこに達するまでは、受信側は「In progress」と応答し、境界より新しいデータを保留する。
  • 再構成要求自体にも単調増加する番号、再送時に同じ結果を返す規則、拒否権がある。データの履歴を忘れる処理は、制御の履歴を正確に覚えていなければならない。

ゼロは過去の消滅を意味しなかった

SCTP のアソシエーションは複数の単方向ストリームを収容する。RFC 4960 では DATA 断片にアソシエーション全体の Transmission Sequence Number が付き、順序付きメッセージにはストリーム内の Stream Sequence Number が付いた。RFC 9260 も、確認と重複検出を担う TSN と、ストリーム単位の配送順序を分けている。

アプリケーションがストリーム 3 の用途を終えても、古い断片は再送中かもしれない。即座に SSN をゼロへ戻せば、その断片が新しい時代のデータに見える。一方、アソシエーション全体を閉じれば、変更不要なストリームや経路状態まで失う。

RFC 6525 は 2012 年、RE-CONFIG チャンクを定義した。目的は飛行中のデータを削除することではなく、旧番号の終わりと新番号の始まりを両端で一致させることだった。

最終割当 TSN が境界線を引いた

Outgoing SSN Reset Request は、再構成要求番号、応答番号、Sender’s Last Assigned TSN、任意のストリーム一覧を含む。一覧がなければ全送信ストリーム、あれば指定したストリームだけが対象になる。

最終割当 TSN は「次に割り当てる TSN から 1 を引いた値」である。要求前に送信側は対象ストリームへの新しい SSN 割り当てを止め、後続メッセージを待ち行列へ置く。結果が不明なまま送れば、要求喪失時にどちらの時代の番号か判定できなくなる。

受信側は境界と累積確認点を比較する。確認点が手前なら deferred reset processing に入り、対象ストリームの境界より大きい TSN を保持し、「In progress」を返す。要求を理解したという証拠ではあるが、完了の証拠ではない。

累積確認が境界へ達して初めて、指定ストリームの次の期待 SSN をゼロにし、保持データを解放して成功を返す。指定されなかったストリームは変わらない。新時代は一方の宣言ではなく、双方が古いデータを区別できる地点で始まる。

忘却を命じる交換には記憶が必要だった

RE-CONFIG 要求番号は初期 TSN を起点に単調増加する。応答には要求番号が写され、成功、拒否、誤った SSN、処理中の要求、誤った要求番号、進行中などの結果が入る。

直前の要求が再送されても、受信側は以前と同じ応答を返し、二度目のリセットを実行しない。「In progress」を受けた要求側はタイマーを再始動できるが、アソシエーションのエラー回数は増やさない。これは経路障害でも輻輳でもない。

相手は要求を拒否できる。RFC はこれを管理上の判断とし、アソシエーション成立後も設定可能だとする。拡張を理解できることと、個々の変更に同意することは別である。

要求が重なる場合も、完全な重複と部分的な重複は分けられる。すでに待機中の送信リセットに全て含まれる要求なら「Nothing to do」と応答できるが、一部だけ重なる要求は通常どおり処理される。ゼロのストリームを再びゼロにする余分な交換は、異なる要求を勝手に同一視するより安全だった。

入方向と出方向では支配者が違った

SCTP ストリームは単方向であり、逆方向の同じ番号が自動的に一つの双方向会話になるわけではない。受信側の順序をリセットしたい端点は、相手にその送信ストリームをリセットしてもらう。旧データの終端を知るのは番号を割り当てた側だからだ。

SSN/TSN Reset はさらに広い操作で、全方向の SSN と TSN の起点を変える。処理中は新しい TSN の割り当てを止め、最大セグメント寿命を使って番号周回の曖昧さを避ける。選択ストリームのリセットとは同じではない。

RFC 6458 は SCTP の番号や通知をアプリケーションへ公開する。そのため再構成機能と通知は明示的に有効化される。単調増加を前提にするアプリケーションへ、時代の変更を隠してはならない。

I-DATA は数え方を変え、境界を消さなかった

RFC 8260 のメッセージインターリーブでは、I-DATA が 32 ビットの Message Identifier を使う。リセット時には、順序付きと順序なしの二つの MID カウンターをゼロにする。遅い TSN 割り当てを使うスケジューラは実装を難しくするが、旧時代の区切りは依然必要である。

RFC 7496 の部分信頼性ポリシーは、優先度や再送回数に基づいてメッセージを諦める条件を定める。メッセージ放棄は「いつ再送をやめるか」、ストリームリセットは「いつ番号を再利用できるか」を扱う。

IANA の SCTP パラメータ登録簿 は RE-CONFIG にタイプ 130 を割り当てる。番号を解読する根拠ではあるが、実装、交渉、アプリケーションでの有効化を証明しない。

同じ拡張にはストリーム数を増やす要求もあるが、新しい送信ストリームは肯定応答まで使用できない。構造の変更も、番号のリセットと同じく、相手が確認した境界を必要とした。

情報源