Transmission Control Protocol(トランスミッション コントロール プロトコル、TCP)はIPネットワーク上のアプリ間・コネクション型・高信頼性・ストリーム指向の通信プロトコルである。
概要
TCPは通信プロトコルである。
TCPではポート、ソケット、コネクションの概念が導入され、IPネットワークのホスト上にあるアプリケーション同士がコネクションを通じて通信する。
確立されたコネクションは、TCPが定める制御機構によって到着が保証され、破壊(エラー)が検出され、流量や輻輳が制御されており、これを通信路としてバイトストリームが伝達される。
TCPを用いることで、インターネットにおける到達保証付きアプリケーション間メッセージ通信が可能になる。このため、ファイル転送や電子メール、World Wide Web、リモートデバイス管理などの様々なインターネットアプリケーションで使用される。
特徴
コネクションの確立(3-way ハンドシェイク)
通信前にクライアントとサーバー間で接続を確立する。これにより、信頼できる通信チャネルが形成される。
接続を確立してからデータを転送するが、確立された接続はそのまま残すことができる(Keep-Alive) ので、たくさんのデータを送信するためにも使われる。
信頼性の保証
各パケットにシーケンス番号を持たせて順序を管理し、ACK(確認応答) で受信の確認を行う。届いていないパケットは自動的に再送される(再送処理)。
順序制御
パケットがバラバラに届いた場合でも、受信側で正しい順序に並べ替える。
フロー制御
相手の処理能力に応じて送信量を調整し、バッファオーバーフローを防ぐ。
バッファオーバーフローというのは、受け取り側でデータがバッファに入り切らずに必要なデータが捨てられることで、これはパケットロスにつながる。
輻輳制御
ネットワークの混雑状況を検知し、パケットの送信速度を調整することで、通信品質を保つ。
利用例
TCPは、以下のようなアプリケーションに適している:
- Web通信(HTTP, HTTPS)
- メール(SMTP, POP3, IMAP)
- ファイル転送(FTP)
- リモート接続(SSH, Telnet)
このようなケースは、パケットロスは許されないが通信が遅くてもやりきれるものである。
逆にパケットロスは許されるが速度が必要なケースにはUDPが用いられることが多い。
UDPとの比較
TCPのとおりである。
補足
TCPは信頼性重視のプロトコルであるため、リアルタイム性が重視されるアプリ(ボイスチャットやゲームなど)では適さないこともある。そのような用途にはUDPや、UDPベースで信頼性も考慮したQUICなどが用いられる。