Transmission Control Protocol
[rfc:793 RFC 793 - TRANSMISSION CONTROL PROTOCOL]
↑ uniquely allocating a group of ports to a given process [rfc:793 RFC 793 - TRANSMISSION CONTROL PROTOCOL]
↑ "Glossary ... connection A logical communication path identified by a pair of sockets." RFC 9293.
↑ RFC 6182 Architectural Guidelines for Multipath TCP Development
↑ RFC 8684 TCP Extensions for Multipath Operation with Multiple Addresses
↑ TCP with feed-forward source coding for wireless downlink networks
↑ Raiciu; Barre; Pluntke; Greenhalgh; Wischik; Handley (2011). “Improving datacenter performance and robustness with multipath TCP”. Sigcomm. http://inl.info.ucl.ac.
IPネットワークへ無秩序にパケットが送出されるとネットワークの混雑(輻輳)を引き起こす。TCPはそれらの問題を検出し、ネットワークの混雑が起きにくくなるよう制御して他の問題が発生する可能性を低くする。
1974年5月、Institute of Electrical and Electronic Engineers (IEEE) が "A Protocol for Packet Network Interconnection" と題した論文を出版。著者はヴィントン・サーフとロバート・カーンで、ノード間でパケット通信を使い資源を共有するインターネットワーキングのプロトコルを記述したものである。このモデルでの中核制御コンポーネントが Transmission Control Program で、ホスト間のコネクション指向のリンクとデータグラムサービスの両方を含んでいた。当初一体だった Transmission Control Program は後にモジュール化されたアーキテクチャに分割され、コネクション指向部分の Transmission Control Protocol とデータグラムサービス部分の Internet Protocol に分けられた。このモデルを一般に TCP/IP と呼ぶが、公式にはインターネット・プロトコル・スイートと呼ぶようになった。
TCPは高性能を達成し輻輳崩壊(ネットワーク性能が数桁のオーダーで低下する現象)を防ぐため、輻輳制御機構をいくつか備えている。ネットワークに流入させるデータレートを制御し、崩壊のきっかけとなるようなレート未満でデータを送るよう保つ。また、おおまかに最大最小公平(英語版)なフロー割り当てを目指す。
送信データへの ACK (確認応答)の有無は、送信側でネットワークの状態を推測する材料となる。これをタイマと組み合わせ、データのフローの振る舞いを変化させることができる。これを一般に輻輳制御またはネットワーク輻輳回避などと呼ぶ。
最近のTCP実装では、スロースタート(英語版)、輻輳回避(英語版)、TCP高速再送アルゴリズム(英語版)、ファストリカバリ(en, RFC 5681) という4つの相互にからみあったアルゴリズムを使用している。
スループットをあげるため輻輳しない限界まで送信側はスライディングウィンドウを大きくする必要があるが、ウィンドウサイズを調整する輻輳回避アルゴリズムは長年研究されている。一覧は w:TCP congestion avoidance algorithm を参照。
IPは独立したパケットを送信するため、パケット間の関係性を扱わない。TCPはバイトストリーム入出力機能を提供することで、実用されるIPパケットサイズを超えた、ファイルやデータストリームの送信を可能にする。
ネットワークの輻輳や負荷分散、その他ネットワークの予測できない振る舞いにより、IPパケットは遅延し順序がばらばらに届きうる。ストリームをパケットに分割して送出しそれを到着順に再構成した場合、元のストリームを復元できる保証がない。TCPは順序制御を提供することで、パケット群からストリームを再構築できることを保証する。