附属書B. TCP要件の要約 (TCP Requirement Summary)
本附属書では、RFC 9293全体でRFC 2119キーワード (MUST, SHOULD, MAY等) でマークされたすべての実装要件を要約します。
基本プロトコル要件
MUST要件 (必須)
-
ヘッダー形式
- TCP実装はRFC 9293で定義されたヘッダー形式に従わなければなりません (MUST)
- 予約ビットはゼロに設定しなければなりません (MUST)
- チェックサムフィールドは常に計算して送信しなければなりません (MUST)
-
オプション処理
- 最大セグメントサイズ (MSS) オプション (Kind 2) をサポートしなければなりません (MUST)
- 認識されないオプションは無視しなければなりません (MUST)
- オプションリスト終了 (EOL, Kind 0) とノーオペレーション (NOP, Kind 1) をサポートしなければなりません (MUST)
-
シーケンス番号
- 初期シーケンス番号 (ISN) は予測不可能な方法で選択しなければなりません (MUST)
- シーケンス番号は各オクテットのデータを追跡しなければなりません (MUST)
-
接続管理
- 3ウェイハンドシェイクを使用して接続を確立しなければなりません (MUST)
- 適切な状態遷移に従わなければなりません (MUST)
- TIME-WAIT状態を実装しなければなりません (MUST)
-
データ伝送
- 受信データを順序通りに配信しなければなりません (MUST)
- セグメントチェックサムを検証しなければなりません (MUST)
- ウィンドウサイズを尊重しなければなりません (MUST)
-
エラー処理
- 無効なチェックサムを持つセグメントを破棄しなければなりません (MUST)
- 無効な状態でRSTを送信しなければなりません (MUST)
SHOULD要件 (推奨)
-
パフォーマンス
- 実装はウィンドウスケーリングオプション (RFC 7323) をサポートすべきです (SHOULD)
- 実装はタイムスタンプオプション (RFC 7323) をサポートすべきです (SHOULD)
- 実装はSACK (Selective Acknowledgment, RFC 2018) をサポートすべきです (SHOULD)
-
輻輳制御
- 実装は適切な輻輳制御アルゴリズムを使用すべきです (SHOULD)
- RFC 5681で定義されたアルゴリズムに従うべきです (SHOULD)
-
セキュリティ
- 実装は予測可能なISN攻撃から保護すべきです (SHOULD)
- 実装はブラインドイン・ウィンドウ攻撃を軽減すべきです (RFC 5961) (SHOULD)
MAY要件 (任意)
-
オプション機能
- 実装は緊急ポインタメカニズムをサポートしてもかまいません (MAY)
- 実装は追加のTCPオプションをサポートしてもかまいません (MAY)
-
最適化
- 実装はNagleアルゴリズムを実装してもかまいません (MAY)
- 実装は遅延ACKメカニズムを使用してもかまいません (MAY)
カテゴリ別詳細要件
1. オプション処理
必須 (MUST):
- Kind 0 (EOL): オプションリスト終了
- Kind 1 (NOP): ノーオペレーション
- Kind 2 (MSS): 最大セグメントサイズ
推奨 (SHOULD):
- Kind 3: ウィンドウスケール (RFC 7323)
- Kind 4,5: SACK許可とSACK (RFC 2018)
- Kind 8: タイムスタンプ (RFC 7323)
任意 (MAY):
- その他の標準化されたオプション
2. シーケンス番号
必須 (MUST):
- ISNは暗号的に安全な乱数生成器を使用して生成しなければなりません
- シーケンス番号は各オクテットのデータを追跡しなければなりません
- 重複したセグメントを検出して破棄しなければなりません
推奨 (SHOULD):
- シーケンス番号攻撃から保護すべきです (RFC 6528)
3. 接続管理
必須 (MUST):
- 3ウェイハンドシェイクを実装しなければなりません
- 適切な接続状態遷移に従わなければなりません
- TIME-WAIT状態を少なくとも2MSLの間維持しなければなりません
- 同時オープンと同時クローズを処理しなければなりません
推奨 (SHOULD):
- SYNクッキーまたは同等のメカニズムでSYNフラッド攻撃を軽減すべきです
4. データ伝送
必須 (MUST):
- データを順序通りに配信しなければなりません
- ウィンドウサイズ制限を尊重しなければなりません
- チェックサムを検証しなければなりません
- 失われたセグメントを再送信しなければなりません
推奨 (SHOULD):
- 適切なタイムアウトメカニズムを実装すべきです
- 輻輳制御アルゴリズムを使用すべきです
5. エラー処理
必須 (MUST):
- 無効なチェックサムを持つセグメントを破棄しなければなりません
- 無効な状態でRSTを送信しなければなりません
- 範囲外のACKを適切に処理しなければなりません
推奨 (SHOULD):
- ブラインドリセット攻撃を軽減すべきです (RFC 5961)
実装チェックリスト
コア機能
- 完全なTCPヘッダー処理
- 3ウェイハンドシェイク
- 4ウェイ接続終了
- シーケンス番号管理
- チェックサム計算と検証
- 基本的なフロー制御 (ウィンドウメカニズム)
- 再送信メカニズム
- TIME-WAIT状態処理
必須オプション
- MSS (最大セグメントサイズ) オプション
- EOL (オプションリスト終了)
- NOP (ノーオペレーション)
推奨機能
- ウィンドウスケーリング (RFC 7323)
- タイムスタンプオプション (RFC 7323)
- SACK (Selective Acknowledgment, RFC 2018)
- 適切な輻輳制御 (RFC 5681)
- ECN (Explicit Congestion Notification, RFC 3168)
セキュリティ機能
- 安全なISN生成
- SYNフラッド保護
- ブラインドイン・ウィンドウ攻撃軽減 (RFC 5961)
- シーケンス番号検証
パフォーマンス最適化
- 遅延ACK
- Nagleアルゴリズム
- 高速再送信と高速リカバリ
- 適切なRTT測定
要件レベルの定義
RFC 2119で定義された通り:
- MUST / REQUIRED / SHALL: 絶対的要件
- MUST NOT / SHALL NOT: 絶対的禁止
- SHOULD / RECOMMENDED: 正当な理由がある場合を除き従うべき
- SHOULD NOT / NOT RECOMMENDED: 正当な理由がある場合を除き避けるべき
- MAY / OPTIONAL: 真の任意項目
注: 完全な要件の詳細とコンテキストについては、RFC 9293の本文を参照してください。本附属書は便宜的な要約を提供しますが、公式仕様を置き換えるものではありません。