TCP(Transmission Control Protocol)とは?TCP/IPの役割・仕組みと特徴を解説
TCP(Transmission Control Protocol)の役割・仕組み・特徴を分かりやすく解説。データの信頼性・順序保証・混雑制御の仕組みと実践例を初心者向けに紹介。
TCP(Transmission Control Protocol)は、インターネットプロトコルスイートの主要プロトコルの1つです。TCP は、インターネットで使用されている一般的な「TCP/IP」の組み合わせの一部であり、インターネットプロトコル(IP)と協調して動作します。IP がデータをネットワーク上の正しい場所へ運ぶ役割を担うのに対し、TCP はデータが欠損せず、正しい順序で届くことを保証し、さらにネットワークの混雑を抑える機能も持ちます。これらのプロトコルは、コンピュータ同士が共通の「言語」で通信するために設計されており、どんなプログラム(ウェブブラウザや電子メールクライアントなど)でも利用できます。
TCPの役割(何をするか)
TCPは主に次の機能を提供します。
- 信頼性の確保:データが欠落したり重複したりしないように、送受信の確認(ACK)と再送を行います。
- 順序制御:受信側でデータを元の送信順に並べ直します(シーケンス番号による管理)。
- フロー制御:送信側が受信側の処理能力に合わせて送信速度を調整します(ウィンドウ制御)。
- 輻輳制御(コングestion制御):ネットワーク全体の混雑状況に応じて送信速度を制御し、過負荷を防ぎます(スロースタート、輻輳回避など)。
- コネクション管理:接続の開始と終了を行い、状態を保持することで状態的(ステートフル)な通信を実現します。
基本的な仕組み(3ウェイハンドシェイクと終了)
TCPは通信を始める際に「3ウェイハンドシェイク」と呼ばれる手順を使って接続を確立します。簡単に言うと次の3段階です:
- SYN:クライアントがサーバへ接続要求(SYNパケット)を送る。
- SYN-ACK:サーバが要求を受け取り了承(SYN+ACK)を返す。
- ACK:クライアントが受信確認(ACK)を返し、接続が確立する。
通信終了時はFINやRSTフラグを使って接続を終了します(4ウェイでの正常終了など)。
TCPセグメント(ヘッダ)の主な項目
TCPは「セグメント」と呼ばれる単位でデータを送ります。代表的なヘッダフィールドは次の通りです:
- 送信ポート・宛先ポート:どのアプリケーションに届けるかを示す。
- シーケンス番号:データの位置(順序)を識別する。
- 確認応答番号(ACK):次に期待するシーケンス番号を示す。
- フラグ(SYN, ACK, FIN, RST, PSH, URGなど):制御情報を示す。
- ウィンドウサイズ:フロー制御のための受信側が許容するバイト数。
- チェックサム:データとヘッダの誤り検出。
- オプション(MSS, ウィンドウスケーリング, タイムスタンプなど):性能向上や機能拡張に使用。
信頼性を支える仕組み
TCPの信頼性は以下のメカニズムによって支えられています。
- シーケンスとACK:送信したデータに番号を付け、受信側が受け取った番号をACKで返すことで欠落を検出する。
- 再送:ACKが一定時間内に返ってこないと送信データを再送する(RTO:再送タイマ)。
- 重複ACKと高速再送:同じACKが複数回届くと、その区間での損失を推測して再送を速める。
- チェックサム:セグメント単位で誤り検出を行い、破損したセグメントは破棄され再送される。
フロー制御と輻輳制御
フロー制御は受信側の処理能力に合わせて送信を抑える仕組み(ウィンドウ制御)で、受信ウィンドウ値によって送信可能な未確認データ量が決まります。一方、輻輳制御はネットワーク全体の混雑を避けるための仕組みで、代表的なアルゴリズムに次があります:
- スロースタート:接続開始時に送信量を指数的に増やして帯域を探る。
- 輻輳回避:輻輳の兆候が出たら増加速度を抑え線形に増やす。
- 高速再送/高速回復:重複ACKなどで損失を検出した際に迅速に対応し、回復を図る。
TCPとUDPの違い(簡潔に)
- TCP:コネクション型、信頼性あり、順序保証、フロー・輻輳制御。ウェブ(HTTP/HTTPS)、電子メール(SMTP/IMAP)、ファイル転送(FTP)などに適する。
- UDP:コネクションレス、信頼性なし(アプリ側で処理する)、低レイテンシやマルチキャストに有利。音声・映像のストリーミング、DNS、ゲームなどで使われる。
利用例と用途
TCPは信頼性が求められる多くのアプリケーションで使われます。具体例:
- ウェブページの表示(HTTP/HTTPS)
- メール送受信(SMTP、POP3、IMAP)
- ファイル転送(FTP、SFTP)
- リモート端末操作(SSH、Telnet)
長所と短所
- 長所:データの信頼性と順序性を保証し、ネットワーク混雑に対して適切に振る舞う点で安定した通信が可能。
- 短所:オーバーヘッドがあり、遅延が増える場合がある。リアルタイム性を最優先する用途には不向き。
補足:歴史と仕様
TCPは1970年代から設計され、その仕様はRFC 793などで定義されています。現在では多くの拡張(ウィンドウ拡張、セレクティブACK、タイムスタンプなど)が加えられ、現代のインターネットに不可欠なプロトコルとなっています。
以上がTCPの概要と主要な仕組み・特徴です。用途やトラブルシューティングを行う際は、ヘッダ情報(ポート、フラグ、ウィンドウサイズ、シーケンス番号など)や再送/輻輳の挙動を確認すると原因把握がしやすくなります。
TCPの重要性
TCPは、コンピュータ・プログラム同士の通信を容易にするもので、通常はコンピュータ・ネットワーク上で使用されます。プログラムが大量のデータを送信する場合、TCPはデータを分割し、ネットワークを通して送信し、別のコンピュータで正しく組み立てる役割を担います。その過程でIPは、すべてのデータを最速で送るために、どの配線と「交差点」を使うかを選択します。これはパケットを使って行われます。
多くの人がネットワークを利用すると、ネットワークに負荷がかかることがあります。また、時には天候や停電などの問題で、通信が困難になることもあります。インターネット上のルーターは、負荷分散という方法を用いて、これらの問題の一部を解決しようとします。しかしそれでも、情報が順番通りに届かなかったり、紛失したり、重複してしまったりすることがあるのです。TCPはこのような問題をすべて察知し、解決しようとするように設計されています。このため、インターネットが遅く感じられることがあるのです。TCP受信機は、送信されたデータの完全なコピーを再構築した後、そのデータを要求したコンピュータプログラムに渡します。このように、プログラムはネットワークについて知る必要がなく、TCPはプログラムのデータについて知る必要がありません。
百科事典を検索する