インターネットで使われる最も重要なプロトコルの一つが「TCP(Transmission Control Protocol)」です。
Webページの閲覧・メールの送受信・ファイルのダウンロードなど、私たちが日常的に行うほぼすべてのインターネット通信の裏側でTCPが活躍しています。
本記事では、TCPの意味・仕組み・3ウェイハンドシェイク・UDPとの違い・実際の活用場面をわかりやすく解説していきます。
TCPプロトコルとは何か?基本的な意味と役割
それではまず、TCPプロトコルの基本的な意味と役割について解説していきます。
TCP(Transmission Control Protocol)とは、インターネット通信においてデータの信頼性の高い送受信を実現するためのトランスポート層プロトコルです。
「Transmission Control」とは「伝送の制御」という意味で、データが確実に・順序通りに・欠損なく届くことを保証する制御機能を持つプロトコルであることを示しています。
TCPはIPと組み合わせて使われることが多く「TCP/IP」という表現で知られており、インターネットの中核を担うプロトコルスタックです。
TCPが解決する問題:IPの限界を補う
IP(Internet Protocol)はパケットを宛先に届けるための基本的なプロトコルですが、いくつかの限界があります。
IPはパケットを送り出すことしかしないため、届いたかどうかの確認・順序の保証・欠損時の対応は行いません。
TCPはIPの上位層でこれらの問題を解決し、アプリケーションに対して「確実に届く」通信を提供する役割を担っています。
TCPの主な機能
1. コネクション管理:通信前に接続を確立し、終了時に正常に切断する
2. 信頼性の保証:ACK(確認応答)により届いたことを確認し、届かなければ再送する
3. 順序制御:シーケンス番号により、パケットが届く順序が変わっても正しい順序に並べ替える
4. フロー制御:ウィンドウサイズにより受信バッファの許容量に合わせて送信量を調整する
5. 輻輳制御:ネットワークの混雑を検知して送信レートを自動調整する
6. エラー検出:チェックサムによりデータの破損を検出する
TCPの3ウェイハンドシェイクの仕組み
続いては、TCPの最も重要な仕組みである「3ウェイハンドシェイク」を確認していきます。
3ウェイハンドシェイクとは、TCPが通信を開始する前にクライアントとサーバーの間で行う3回のメッセージ交換による接続確立の手順です。
3ウェイハンドシェイクの手順
ステップ1:SYN(クライアント→サーバー)
クライアントは「接続を始めたい」というSYNパケットをサーバーに送る。初期シーケンス番号(ISN)も送られる。
ステップ2:SYN-ACK(サーバー→クライアント)
サーバーはSYNを受け取り「接続を受け入れます」というSYN-ACKパケットを返す。サーバー側のISNも送られる。
ステップ3:ACK(クライアント→サーバー)
クライアントはSYN-ACKを受け取り「了解しました」というACKを送ることでTCPコネクションが確立される。
この3回のメッセージ交換によって、両者が「送れる・受け取れる」ことを相互に確認してから通信を開始します。
TCPの接続終了:4ウェイハンドシェイク
TCPの接続を終了する際には4ウェイハンドシェイクが行われます。
FIN(終了)→ACK(了解)→FIN(終了)→ACK(了解)という4ステップで双方向の接続を正常に終了します。
これにより、一方がデータを送り終えても他方がまだデータを送っている場合に、双方向を別々に終了できる仕組みになっています。
TCPセグメントの構造
TCPはデータを「セグメント」と呼ばれる単位に分割して送信します。
TCPセグメントのヘッダーには以下の重要な情報が含まれています。
| フィールド | 意味 |
|---|---|
| 送信元ポート番号 | 送信側アプリケーションを識別(16ビット) |
| 宛先ポート番号 | 受信側アプリケーションを識別(16ビット) |
| シーケンス番号 | データの順序を管理(32ビット) |
| 確認応答番号 | 次に受信を期待するバイト番号(32ビット) |
| フラグ(SYN・ACK・FINなど) | 接続制御のための制御ビット |
| ウィンドウサイズ | 受信バッファのサイズ(フロー制御に使用) |
| チェックサム | データ破損の検出 |
TCPの信頼性の仕組み:再送制御とフロー制御
続いては、TCPが信頼性を実現するための主な仕組みを確認していきます。
再送制御のしくみ
TCPは送信したデータに対して受信側からACK(確認応答)が返ってくることを確認しています。
一定時間(RTT:Round Trip Time)内にACKが返ってこない場合、TCPはそのデータを自動的に再送します。
これを「タイムアウト再送」といい、パケットの損失が自動的に補われる仕組みです。
フロー制御と輻輳制御
フロー制御は、受信側の処理能力に合わせて送信速度を調整するメカニズムです。
受信側はACKとともに「ウィンドウサイズ」(受信可能なデータ量)を通知し、送信側はそのサイズを超えないようにデータを送ります。
輻輳制御はネットワーク全体の混雑を防ぐためのメカニズムです。
TCPはパケットロスが発生すると「ネットワークが混雑している」と判断し、送信レートを自動的に下げます。
輻輳制御のアルゴリズムにはスロースタート・輻輳回避・高速再送・高速回復などがあり、ネットワーク全体の効率的な利用を実現しています。
この仕組みがなければ、多くのユーザーが同時に大量データを送信したとき、ネットワークが完全に麻痺してしまうでしょう。
まとめ
本記事では、TCPプロトコルの意味・役割・3ウェイハンドシェイク・セグメント構造・再送制御・フロー制御・輻輳制御について解説してきました。
TCPはIPの限界を補う形で信頼性の高いデータ転送を実現するプロトコルであり、WebブラウジングからAPIによるサービス連携まで、あらゆるインターネット通信の基盤として機能しています。
TCPの仕組みを深く理解することで、ネットワーク設計・トラブルシューティング・パフォーマンスチューニングのすべての質が向上するでしょう。