3.3. SCTPチャンク定義 (SCTP Chunk Definitions)
このセクションでは、さまざまなSCTPチャンクタイプのフォーマットを定義します.
3.3.1. ペイロードデータ (Payload Data, DATA) (0)
DATAチャンクには、次のフォーマットを使用する必要があります (MUST):
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 = 0 | Reserved|U|B|E| Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| TSN |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Stream Identifier S | Stream Sequence Number n |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Payload Protocol Identifier |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
\ \
/ User Data (seq n of Stream S) /
\ \
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
予約済み (Reserved): 5ビット
すべて'0'に設定し、受信者は無視する必要があります.
Uビット: 1ビット
順序なしビット (Unordered bit). '1'に設定されている場合、これは順序なしDATAチャンクであり、このDATAチャンクにストリームシーケンス番号が割り当てられていないことを示します. したがって、受信者はストリームシーケンス番号フィールドを無視する必要があります (MUST).
再組み立て後(必要な場合)、順序なしDATAチャンクは、受信者によって再順序付けの試みなしに上位層にディスパッチされる必要があります (MUST).
順序なしユーザーメッセージが断片化されている場合、メッセージの各フラグメントはUビットを'1'に設定する必要があります (MUST).
Bビット: 1ビット
開始フラグメントビット (Beginning fragment bit). 設定されている場合、ユーザーメッセージの最初のフラグメントを示します.
Eビット: 1ビット
終了フラグメントビット (Ending fragment bit). 設定されている場合、ユーザーメッセージの最後のフラグメントを示します.
断片化されていないユーザーメッセージは、BビットとEビットの両方を'1'に設定する必要があります. BビットとEビットの両方を'0'に設定すると、次の表に要約されているように、マルチフラグメントユーザーメッセージの中間フラグメントを示します:
B E 説明
============================================================
| 1 0 | 断片化されたユーザーメッセージの最初の部分 |
+----------------------------------------------------------+
| 0 0 | 断片化されたユーザーメッセージの中間部分 |
+----------------------------------------------------------+
| 0 1 | 断片化されたユーザーメッセージの最後の部分 |
+----------------------------------------------------------+
| 1 1 | 断片化されていないメッセージ |
============================================================
| 表1: フラグメント説明フラグ |
============================================================
ユーザーメッセージが複数のチャンクに断片化される場合、TSNは受信者によってメッセージを再組み立てするために使用されます. これは、断片化されたユーザーメッセージの各フラグメントのTSNが厳密に連続している必要がある (MUST) ことを意味します.
長さ (Length): 16ビット (符号なし整数)
このフィールドは、タイプフィールドの先頭からユーザーデータフィールドの末尾までのDATAチャンクの長さをバイト単位で示します(パディングを除く). 1バイトのユーザーデータを持つDATAチャンクの長さは17に設定されます(17バイトを示す).
長さLのユーザーデータフィールドを持つDATAチャンクは、長さフィールドを(16 + L)に設定します(16+Lバイトを示す)。ここで、Lは0より大きい必要があります (MUST).
TSN: 32ビット (符号なし整数)
この値は、このDATAチャンクのTSNを表します. TSNの有効範囲は、0から4294967295(2**32 - 1)です. TSNは、4294967295に達した後、0に戻ります.
ストリーム識別子S (Stream Identifier S): 16ビット (符号なし整数)
以下のユーザーデータが属するストリームを識別します.
ストリームシーケンス番号n (Stream Sequence Number n): 16ビット (符号なし整数)
この値は、ストリームS内の以下のユーザーデータのストリームシーケンス番号を表します. 有効範囲は0から65535です.
ユーザーメッセージがSCTPによって転送のために断片化される場合、同じストリームシーケンス番号がメッセージの各フラグメントに含まれる必要があります (MUST).
ペイロードプロトコル識別子 (Payload Protocol Identifier): 32ビット (符号なし整数)
この値は、アプリケーション(または上位層)が指定したプロトコル識別子を表します. この値は、上位層によってSCTPに渡され、そのピアに送信されます. この識別子はSCTPでは使用されませんが、特定のネットワークエンティティやピアアプリケーションによって、このDATAチャンクで運ばれている情報のタイプを識別するために使用できます. このフィールドは、断片化されたDATAチャンクでも送信する必要があります(ネットワークの中間のエージェントが利用できるようにするため). このフィールドはSCTP実装によって触れられないことに注意してください。したがって、そのバイトオーダーは必ずしもビッグエンディアンではありません. 上位層は、このフィールドへのバイトオーダー変換を担当します.
値0は、上位層がこのペイロードデータに対してアプリケーション識別子を指定していないことを示します.
ユーザーデータ (User Data): 可変長
これはペイロードユーザーデータです. 実装は、すべてゼロバイトでデータの末尾を4バイト境界にパディングする必要があります (MUST). パディングは長さフィールドに含めてはなりません (MUST NOT). 送信者は3バイトを超えるパディングを追加してはなりません (MUST never).
3.3.2. 初期化 (Initiation, INIT) (1)
このチャンクは、2つのエンドポイント間でSCTPアソシエーションを開始するために使用されます. INITチャンクのフォーマットを以下に示します:
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 = 1 | Chunk Flags | Chunk Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Initiate Tag |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Advertised Receiver Window Credit (a_rwnd) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Number of Outbound Streams | Number of Inbound Streams |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Initial TSN |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
\ \
/ Optional/Variable-Length Parameters /
\ \
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
INITチャンクには次のパラメーターが含まれます. 特に記載がない限り、各パラメーターはINITチャンクに1回だけ含める必要があります (MUST).
固定パラメーター ステータス
----------------------------------------------
Initiate Tag 必須
Advertised Receiver Window Credit必須
Number of Outbound Streams 必須
Number of Inbound Streams 必須
Initial TSN 必須
可変パラメーター ステータス タイプ値
-------------------------------------------------------------
IPv4 Address (注1) オプション 5
IPv6 Address (注1) オプション 6
Cookie Preservative オプション 9
Reserved for ECN Capable (注2) オプション 32768 (0x8000)
Host Name Address (注3) オプション 11
Supported Address Types (注4) オプション 12
注1: INITチャンクには、IPv4やIPv6の任意の組み合わせで複数のアドレスを含めることができます.
注2: ECN Capableフィールドは、明示的輻輳通知の将来の使用のために予約されています.
注3: INITチャンクに複数のホスト名アドレスパラメーターを含めてはなりません (MUST NOT). さらに、INITの送信者は、INITでホスト名アドレスと他のアドレスタイプを組み合わせてはなりません (MUST NOT). 受信したINITチャンクにホスト名アドレスパラメーターが存在する場合、INITの受信者は他のアドレスタイプを無視する必要があります (MUST).
注4: このパラメーター(存在する場合)は、送信エンドポイントがサポートできるすべてのアドレスタイプを指定します. このパラメーターがないことは、送信エンドポイントが任意のアドレスタイプをサポートできることを示します.
実装注意: INITチャンクの既知のパラメーターであるが、INITチャンクのオプションパラメーターではないパラメーターを含むINITチャンクを受信した場合、受信者はINITチャンクを処理してINIT ACKを送信する必要があります (SHOULD). INITチャンクの受信者は、後でERRORチャンクをCOOKIE ACKチャンクとバンドルできます (MAY). ただし、制限的な実装では、INITチャンクに応答してABORTチャンクを送信できます (MAY).
INITのチャンクフラグフィールドは予約されており、送信者はそのすべてのビットを0に設定し、受信者は無視する必要があります. INIT内のパラメーターのシーケンスは任意の順序で処理できます.
開始タグ (Initiate Tag): 32ビット (符号なし整数)
INITの受信者(応答側)は、開始タグパラメーターの値を記録します. この値は、このアソシエーション内でINITの受信者が送信するすべてのSCTPパケットの検証タグフィールドに配置する必要があります (MUST).
開始タグは、0以外の任意の値を持つことができます. タグ値の選択の詳細については、セクション5.3.1を参照してください.
受信したINITチャンクの開始タグの値が0であることが判明した場合、受信者はそれをエラーとして扱い、ABORTを送信してアソシエーションを閉じる必要があります (MUST).
アドバタイズされた受信ウィンドウクレジット (Advertised Receiver Window Credit, a_rwnd): 32ビット (符号なし整数)
この値は、INITの送信者がこのウィンドウに関連して予約した専用バッファースペースをバイト数で表します. アソシエーションの存続期間中、このバッファースペースを減少させてはなりません (SHOULD NOT)(つまり、このアソシエーションから専用バッファーを取り除く)。ただし、エンドポイントはSACKチャンクで送信するa_rwndの値を変更できます (MAY).
出力ストリーム数 (Number of Outbound Streams, OS): 16ビット (符号なし整数)
このINITチャンクの送信者がこのアソシエーションで作成したい出力ストリームの数を定義します. 値0を使用してはなりません (MUST NOT).
注: OS値が0に設定されたINITの受信者は、アソシエーションを中止する必要があります (SHOULD).
入力ストリーム数 (Number of Inbound Streams, MIS): 16ビット (符号なし整数)
このINITチャンクの送信者がピアエンドがこのアソシエーションで作成できる最大ストリーム数を定義します. 値0を使用してはなりません (MUST NOT).
注: 実際のストリーム数の交渉はなく、代わりに2つのエンドポイントはmin(requested, offered)を使用します. 詳細については、セクション5.1.1を参照してください.
注: MIS値が0のINITの受信者は、アソシエーションを中止する必要があります (SHOULD).
初期TSN (Initial TSN, I-TSN): 32ビット (符号なし整数)
送信者が使用する初期TSNを定義します. 有効範囲は0から4294967295です. このフィールドは、開始タグフィールドの値に設定できます (MAY).
3.3.2.1. INITのオプション/可変長パラメーター (Optional/Variable-Length Parameters in INIT)
以下のパラメーターは、セクション3.2.1で定義されているタイプ-長さ-値フォーマットに従います. タイプ-長さ-値フィールドは、前のセクションで定義された固定長フィールドの後に来る必要があります (MUST).
IPv4アドレスパラメーター (IPv4 Address Parameter) (5)
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 = 5 | Length = 8 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IPv4 Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
IPv4アドレス: 32ビット (符号なし整数)
送信エンドポイントのIPv4アドレスが含まれます. バイナリエンコードされています.
IPv6アドレスパラメーター (IPv6 Address Parameter) (6)
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 = 6 | Length = 20 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| IPv6 Address |
| |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
IPv6アドレス: 128ビット (符号なし整数)
送信エンドポイントのIPv6 [RFC2460] アドレスが含まれます. バイナリエンコードされています.
注: 送信者はIPv4マップされたIPv6アドレス [RFC4291] を使用してはならず (MUST NOT)、代わりにIPv4アドレスのIPv4アドレスパラメーターを使用する必要があります.
SCTP共通ヘッダーの送信元ポート番号と組み合わせて、IPv4またはIPv6アドレスパラメーターで渡される値は、INITの送信者が開始されるアソシエーションでサポートするトランスポートアドレスを示します. つまり、このアソシエーションの存続期間中、このIPアドレスはINITの送信者から送信されるIPデータグラムの送信元アドレスフィールドに表示でき、INITの受信者から送信されるIPデータグラムの宛先アドレスとして使用できます.
INIT送信者がマルチホームの場合、INITチャンクに複数のIPアドレスパラメーターを含めることができます. さらに、マルチホームエンドポイントは異なるタイプのネットワークにアクセスできる場合があります。したがって、1つのINITチャンクに複数のアドレスタイプが存在する可能性があります。つまり、同じINITチャンクでIPv4アドレスとIPv6アドレスが許可されます.
INITに少なくとも1つのIPアドレスパラメーターが含まれている場合、INITチャンクを含むIPデータグラムの送信元アドレスとINIT内で提供される追加のアドレスは、INITを受信するエンドポイントによって宛先として使用できます. INITにIPアドレスパラメーターが含まれていない場合、INITを受信するエンドポイントは、受信したIPデータグラムに関連付けられた送信元アドレスをアソシエーションの唯一の宛先アドレスとして使用する必要があります (MUST).
注: INITおよびINIT ACKでIPアドレスパラメーターを使用しないことは、NATボックスを介してアソシエーションを機能させる可能性を高める代替手段です.
Cookie保護 (Cookie Preservative) (9)
INITの送信者は、このパラメーターを使用して、状態Cookieのより長い寿命をINITの受信者に提案します.
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 = 9 | Length = 8 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Suggested Cookie Life-Span Increment (msec.) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
提案されたCookie寿命増分 (Suggested Cookie Life-Span Increment): 32ビット (符号なし整数)
このパラメーターは、送信者が受信者にデフォルトのcookie寿命に追加してほしい増分をミリ秒単位で受信者に示します.
このオプションパラメーターは、送信者がピアとのアソシエーションの確立を再試行するときに、古いcookie操作エラーのためにアソシエーションの確立の以前の試みが失敗したINITチャンクに追加する必要があります. 受信者は、独自のセキュリティ上の理由から、提案されたcookie寿命の増加を無視することを選択できます (MAY).
注: このドキュメントには、セクション3.3.1と3.3.2が含まれています. 残りのチャンク定義(3.3.3以降)は、後続のドキュメントで続行されます.