2. 序論 (Introduction)
RFC 793には、TCP設計目標の議論が含まれており、接続確立 (Connection Establishment)、接続終了 (Connection Termination)、損失を修復するためのパケット再送信 (Packet Retransmission) の例を含む、その動作例が提供されています。
本文書は、現代のTCP実装で期待される基本機能を説明し、RFC 793のプロトコル仕様を置き換えます。本文書は、RFC 793の第1節と第2節の序論と哲学的内容を複製または更新することは試みません。他の文書が参照され、動作理論、根拠、および設計決定の詳細な議論の説明を提供します。本文書は、プロトコルの規範的な動作のみに焦点を当てています。
「TCPロードマップ (TCP Roadmap)」[49] は、TCPを定義し、さまざまな重要なアルゴリズムを説明するRFCのより広範なガイドを提供します。TCPロードマップには、本文書で指定されている基本動作を超えて、パフォーマンスやTCPの他の側面を改善する強く推奨される拡張機能に関するセクションが含まれています。一例として、輻輳制御 (Congestion Control) の実装 (例: [8]) はTCP要件ですが、それ自体が複雑なトピックであり、基本的な相互運用性に影響を与えない多くのオプションと可能性があるため、本文書では詳細に説明されていません。同様に、今日のほとんどのTCP実装には [47] の高性能拡張機能が含まれていますが、これらは厳密には必須ではなく、本文書では議論されていません。TCPのマルチパス考慮事項も [59] で個別に指定されています。
RFC 793からの変更リストは第5節に含まれています。
2.1. 要求言語 (Requirements Language)
本文書のキーワード「MUST」(しなければならない)、「MUST NOT」(してはならない)、「REQUIRED」(必須である)、「SHALL」(しなければならない)、「SHALL NOT」(してはならない)、「SHOULD」(すべきである)、「SHOULD NOT」(すべきでない)、「RECOMMENDED」(推奨される)、「NOT RECOMMENDED」(推奨されない)、「MAY」(してもよい)、および「OPTIONAL」(任意である) は、BCP 14 [3] [12] に記載されているように解釈されるものとします。ただし、ここに示すように、すべて大文字で表示される場合に限ります。
本文書におけるRFC 2119キーワードの各使用は、個別にラベル付けされ、実装要件を要約した附属書Bで参照されています。
「MUST」を使用する文は「MUST-X」としてラベル付けされており、Xは数値識別子であり、附属書Bから参照される際に要件を簡単に見つけることができます。
同様に、「SHOULD」を使用する文は「SHLD-X」、「MAY」は「MAY-X」、「RECOMMENDED」は「REC-X」とラベル付けされています。
このラベル付けの目的において、「SHOULD NOT」と「MUST NOT」は「SHOULD」と「MUST」のインスタンスと同じようにラベル付けされます。
2.2. TCP の主要概念 (Key TCP Concepts)
TCPは、アプリケーションに対して信頼性のある (Reliable)、順序通りの (In-Order)、バイトストリームサービス (Byte-Stream Service) を提供します。
アプリケーションのバイトストリームは、TCPセグメント (TCP Segments) を介してネットワーク上で伝送され、各TCPセグメントはインターネットプロトコル (Internet Protocol, IP) データグラムとして送信されます。
TCPの信頼性は、パケット損失の検出 (シーケンス番号 (Sequence Numbers) による) とエラーの検出 (セグメントごとのチェックサム (Per-Segment Checksums) による)、および再送信 (Retransmission) による修正で構成されています。
TCPは、データのユニキャスト配信 (Unicast Delivery) をサポートします。変更なしでTCPを正常に使用できるエニーキャスト (Anycast) アプリケーションもありますが、下位層の転送動作の変化により不安定になるリスクがいくらかあります [46]。
TCPは接続指向 (Connection Oriented) ですが、本質的には活性検出機能 (Liveness Detection Capability) を含んでいません。
TCP接続上では双方向のデータフロー (Bidirectionally) がサポートされていますが、アプリケーションは、望むならば単方向のみでデータを送信することも自由です。
TCPは、ポート番号 (Port Numbers) を使用してアプリケーションサービス (Application Services) を識別し、ホスト間の異なるフロー (Distinct Flows) を多重化 (Multiplex) します。
他のトランスポートプロトコルと比較したTCP機能のより詳細な説明は、[52] の第3.1節に記載されています。TCPを開発する動機とインターネットプロトコルスタックにおけるその役割に関するさらなる説明は、[16] の第2節およびTCP仕様の以前のバージョンに記載されています。