記事一覧へ戻る 本の順番で続きを読む

TCPとUDPとは?わかりやすく解説

初級エンジニア想定レベル | 2026/03/15 14:04

インターネットでデータをやり取りするとき、必ず使われる2つのプロトコルが TCP(Transmission Control Protocol)と UDP(User Datagram Protocol)です。どちらもOSI参照モデルの「トランスポート層」(第4層)に属しており、IPアドレスを使った通信の上位に位置します。

この記事では「なぜ2種類あるのか」「それぞれいつ使うのか」を、3ウェイハンドシェイクやスライディングウィンドウのアニメーションとともに解説します。

TCPとUDP の根本的な違い

TCPは「確実に届ける」ことを最優先に設計されたプロトコルです。メールを送ったとき、宅配便のような「受け取りサイン」を毎回もらいながら通信します。一方 UDP は「速く届ける」ことを優先し、受け取りサインなしに一方的に送り続けます。動画ストリーミングの「多少乱れても止まらない」特性はこのUDPの性質を活かしています。

TCP vs UDP — 特性比較表
比較項目TCPUDP
接続確立必要(3ウェイハンドシェイク)不要(即送信)
信頼性順序保証・再送制御ありなし(ベストエフォート)
速度確認応答待ちがあるため遅めオーバーヘッド最小、高速
ヘッダサイズ20〜60バイト8バイト(固定)
フロー制御あり(スライディングウィンドウ)なし
輻輳制御あり(スロースタート等)なし
主な用途HTTP/HTTPS・SSH・FTP・メールDNS・動画・ゲーム・VoIP・QUIC

TCPの3ウェイハンドシェイク — 接続確立の仕組み

TCPで通信を始める前に、必ず「3回のメッセージ交換」で接続を確立します。これを 3ウェイハンドシェイクと呼びます。握手(ハンドシェイク)のように互いの準備が整ってから通信を開始するイメージです。

3ウェイハンドシェイク(SYN → SYN-ACK → ACK)
Step 1 SYN クライアント→サーバ:「接続したい。私のシーケンス番号は seq=1000 です」
SYNフラグ=1、自分の初期シーケンス番号を送信
Step 2 SYN-ACK サーバ→クライアント:「OK。私のシーケンス番号は seq=5000、あなたの次は ack=1001 を待つ」
SYN+ACKフラグ両方=1。双方向の通信準備が完了
Step 3 ACK クライアント→サーバ:「了解。次は ack=5001 を期待する」
ACKフラグ=1のみ。これで TCP コネクション確立!

この3回のやりとりにより「クライアントもサーバも、双方向の送受信が問題なくできる状態」を確認してから通信が始まります。なお切断時は「4ウェイハンドシェイク」(FIN→ACK→FIN→ACK)が使われます。

スライディングウィンドウ — フロー制御の仕組み

TCPはデータを1パケット送るたびに ACK を待つのでは非効率です。スライディングウィンドウは「複数パケットをまとめて送り、ACKが返ってきたらウィンドウを前に進める」方式で効率を大幅に向上させます。

スライディングウィンドウ(ウィンドウサイズ=3の例)
【初期】送信可能ウィンドウ:P1P2P3 P4以降は待機
P1・P2・P3 を一気に送信(ACKを待たずに)
ACK(P1) 受信 → ウィンドウが1つ右にスライド → P4 が送信可能になる
ACK(P2) 受信 → さらにスライド → P5 が送信可能になる
P3 がタイムアウト → P3 を再送(選択的再送または Go-Back-N)

ウィンドウサイズは受信側が「自分の受信バッファの空き」を通知することで動的に変化します。これが フロー制御(受信側の処理速度に送信速度を合わせる仕組み)です。

輻輳制御 — ネットワーク混雑への対応

スライディングウィンドウはフロー制御(受信側の能力合わせ)ですが、ネットワーク自体が混雑している場合は 輻輳制御が働きます。

スロースタート
接続開始時はウィンドウを小さく始め、指数的に増やす。「ネットワークの様子見」フェーズ。しきい値(ssthresh)まで続く
輻輳回避
しきい値到達後は線形増加(1RTTごとに1MSS増)。パケットロスを検知したらウィンドウを半減して再試行

UDPの仕組みと使いどころ

UDP はコネクション確立なしに即データを送れるシンプルなプロトコルです。ヘッダは 8 バイト(送信元ポート・宛先ポート・長さ・チェックサム)のみ。

DNS(ポート53)
1往復で完結する短い問い合わせ。再送より速度優先。ただし UDP/53 のサイズ上限を超える場合は TCP に切り替わる
動画・音声ストリーミング
1〜2フレームのロスより遅延ゼロが重要。古いデータの再送は意味がない(再送が届いても再生済み)
QUIC(HTTP/3)
UDP上に信頼性・暗号化を独自実装。TCPのHoLブロッキングを解消しつつ、TLSハンドシェイクも削減

ポート番号との関係

TCP・UDP ともに「ポート番号」で同一ホスト上の複数プロセスを区別します。代表的なポートは必ず覚えましょう。

サービスプロトコルポート番号
HTTPTCP80
HTTPSTCP443
SSHTCP22
FTPTCP20(データ), 21(制御)
SMTPTCP25(587/465 も使用)
DNSUDP(通常)/ TCP(大サイズ)53
DHCPUDP67(サーバ), 68(クライアント)

まとめ — 試験に出やすいポイント

TCP 3ウェイハンドシェイク = SYN → SYN-ACK → ACK(3回交換で接続確立)
スライディングウィンドウ = 複数パケットをまとめ送り → フロー制御の実現手段
TCP 輻輳制御 = スロースタート(指数増)→ 輻輳回避(線形増)
UDP = ヘッダ8バイト・コネクションレス。DNS・動画・ゲームに使う
フロー制御(受信側能力合わせ)と輻輳制御(ネットワーク混雑対応)は別物!混同注意
読んだ内容を10問練習と実技で確認

記事で理解した用語を、StudyQuestの演習とクラウド実技ラボで定着させます。

10問練習 実技ラボ

関連する学習記事