インターネットでデータをやり取りするとき、必ず使われる2つのプロトコルが TCP(Transmission Control Protocol)と UDP(User Datagram Protocol)です。どちらもOSI参照モデルの「トランスポート層」(第4層)に属しており、IPアドレスを使った通信の上位に位置します。
この記事では「なぜ2種類あるのか」「それぞれいつ使うのか」を、3ウェイハンドシェイクやスライディングウィンドウのアニメーションとともに解説します。
TCPとUDP の根本的な違い
TCPは「確実に届ける」ことを最優先に設計されたプロトコルです。メールを送ったとき、宅配便のような「受け取りサイン」を毎回もらいながら通信します。一方 UDP は「速く届ける」ことを優先し、受け取りサインなしに一方的に送り続けます。動画ストリーミングの「多少乱れても止まらない」特性はこのUDPの性質を活かしています。
| 比較項目 | TCP | UDP |
|---|---|---|
| 接続確立 | 必要(3ウェイハンドシェイク) | 不要(即送信) |
| 信頼性 | 順序保証・再送制御あり | なし(ベストエフォート) |
| 速度 | 確認応答待ちがあるため遅め | オーバーヘッド最小、高速 |
| ヘッダサイズ | 20〜60バイト | 8バイト(固定) |
| フロー制御 | あり(スライディングウィンドウ) | なし |
| 輻輳制御 | あり(スロースタート等) | なし |
| 主な用途 | HTTP/HTTPS・SSH・FTP・メール | DNS・動画・ゲーム・VoIP・QUIC |
TCPの3ウェイハンドシェイク — 接続確立の仕組み
TCPで通信を始める前に、必ず「3回のメッセージ交換」で接続を確立します。これを 3ウェイハンドシェイクと呼びます。握手(ハンドシェイク)のように互いの準備が整ってから通信を開始するイメージです。
SYNフラグ=1、自分の初期シーケンス番号を送信
SYN+ACKフラグ両方=1。双方向の通信準備が完了
ACKフラグ=1のみ。これで TCP コネクション確立!
この3回のやりとりにより「クライアントもサーバも、双方向の送受信が問題なくできる状態」を確認してから通信が始まります。なお切断時は「4ウェイハンドシェイク」(FIN→ACK→FIN→ACK)が使われます。
スライディングウィンドウ — フロー制御の仕組み
TCPはデータを1パケット送るたびに ACK を待つのでは非効率です。スライディングウィンドウは「複数パケットをまとめて送り、ACKが返ってきたらウィンドウを前に進める」方式で効率を大幅に向上させます。
ウィンドウサイズは受信側が「自分の受信バッファの空き」を通知することで動的に変化します。これが フロー制御(受信側の処理速度に送信速度を合わせる仕組み)です。
輻輳制御 — ネットワーク混雑への対応
スライディングウィンドウはフロー制御(受信側の能力合わせ)ですが、ネットワーク自体が混雑している場合は 輻輳制御が働きます。
UDPの仕組みと使いどころ
UDP はコネクション確立なしに即データを送れるシンプルなプロトコルです。ヘッダは 8 バイト(送信元ポート・宛先ポート・長さ・チェックサム)のみ。
ポート番号との関係
TCP・UDP ともに「ポート番号」で同一ホスト上の複数プロセスを区別します。代表的なポートは必ず覚えましょう。
| サービス | プロトコル | ポート番号 |
|---|---|---|
| HTTP | TCP | 80 |
| HTTPS | TCP | 443 |
| SSH | TCP | 22 |
| FTP | TCP | 20(データ), 21(制御) |
| SMTP | TCP | 25(587/465 も使用) |
| DNS | UDP(通常)/ TCP(大サイズ) | 53 |
| DHCP | UDP | 67(サーバ), 68(クライアント) |