ITの教科書検索

第4章 通信の制御|4-1|コース全体 19本中13本目

入門読了 約8分更新日 2026-09-27

TCPとUDPの違い ― どっちを使うべきか

TCPとUDPの違いは、確実さと速さのどちらを優先するかです。欠けては困るならTCP、遅れるより欠けるほうがよいならUDPという選び方と、その理由を時系列の図で比べます。

目次
  1. TCPとUDP、選ぶ基準
  2. 比較表
  3. TCPはどうやって届いたかを確かめるか
  4. UDPが速い理由
  5. 用途別の判断表
  6. なぜDNSはUDPなのか
  7. 練習問題

1バイトも欠けては困るならTCP、遅れるくらいなら欠けたほうがマシならUDP

TCPとUDPの違いは、確実さと速さのどちらを優先するかにあります。どちらも通信の手順を定めたプロトコルで、OSI参照モデルでは第4層のトランスポート層に属します。データを運ぶという役割は同じです。選ぶときの基準は次のとおりです。

選び方:1バイトも欠けては困る通信には、TCPを使います。Webページ、メール、ファイル転送がこれにあたります。

遅れるくらいなら欠けたほうがマシな通信には、UDPを使います。音声通話、ビデオ会議、オンラインゲーム、サイト名からIPアドレスを調べるDNSがこれにあたります。

選択を誤ると、通話が途切れたり、ファイルが壊れたりします。この基準で選ぶ理由は、それぞれの仕組みを知ると分かります。

TCPとUDPの違い一覧

観点TCPUDP
接続あり(コネクション型)なし(コネクションレス型)
到達確認・再送ACKで確認し、届かなければ再送するしない
順序保証シーケンス番号で並べ直す保証しない
ヘッダサイズ20バイト〜8バイト
代表的な用途HTTP/HTTPS, メール, ファイル転送音声通話, ビデオ会議, オンラインゲーム, DNS

TCPはどうやって届いたかを確かめるか

TCPはコネクション型のプロトコルで、データを送る前に、まず相手と接続を結びます。接続を結ぶときは、3回のやりとりでお互いの準備を確認します。

この手順を3ウェイハンドシェイクと呼びます。一方、UDPには接続の手順がありません。このような方式をコネクションレス型と呼びます。

クライアントサーバTCP① SYN② SYN+ACK③ ACK+データACK1往復待つUDPデータデータ待たず送信
TCPは、SYN・SYN+ACK・ACKの3回のやりとりを終えるまでデータを送りません。そのため、データを送り始めるまでに1往復かかります。③のACKには、データを乗せて送れます。UDPは接続を確立せず、最初からデータを送ります。

3回のやりとりの中身は、次のとおりです。まず、接続を要求する側のクライアントが、「つなぎたい」という意味のSYNを送ります。要求を受けたサーバは、「いいよ、こちらもつなぎたい」という意味のSYN+ACKを返します。最後にクライアントが、「了解」という意味のACKを返します。

こうして互いの受信準備を確認してから、通信を始めます。そのため、データを送り始めるまでに1往復かかります。通信を終えるときは、FIN、ACK、FIN、ACKの4回のやりとりで接続を閉じます。この閉じ方を4ウェイクローズと呼びます。

再送制御:届かなければ、もう一度送る

TCPはデータを送るたびに、受信を知らせる相手からの応答を待ちます。この応答がACKです。

一定時間が経ってもACKが返ってこなければ、TCPはデータが届かなかったと判断し、同じデータを再送します。再送回数が上限に達しても届かなければ、接続を失敗とみなします。

このためTCPでは、データが届かなかった場合に、送信側がそれを把握できます。シーケンス番号とACK番号が何を数えているかなど、具体的な数値での流れは3ウェイハンドシェイクの記事で説明しています。

順序制御:届いた順ではなく、送った順に組み立てる

ネットワーク上では、先に送ったデータが後から届くことがあります。そこでTCPは、送るデータに番号を付けています。この番号は送ったバイト数を数えたもので、シーケンス番号と呼びます。

受信側は、届いた順序に関係なく、この番号に従ってデータを送信時の順に並べ直します。その後、データを上位のアプリに渡します。

フロー制御と輻輳制御:送りすぎないための調整

TCPは再送と順序制御に加えて、送信量そのものも調整します。受信側の処理能力に合わせて送信量を抑える仕組みが、フロー制御です。回線の混雑に合わせて送信量を抑える仕組みが、輻輳(ふくそう)制御です。

どちらも3ウェイハンドシェイクの記事で説明しています。回線の速度から転送にかかる時間を求める計算は、伝送時間・回線利用率の計算の記事にまとめています。

UDPが速い理由

UDPは、TCPが行っている手続きをそもそも行いません。接続を確立するハンドシェイクはなく、届いたかどうかの確認も、再送も、順序の並べ直しもしません。

その分、ヘッダは8バイトしかなく、TCPの20バイト〜と比べて小さくなります。手続きが少なくヘッダも小さいので、本来のデータ以外にかかる負荷も小さくなります。この負荷をオーバーヘッドと呼びます。

そのためUDPは、軽く、速く送れます。その代わり、到達や順序の保証が必要なら、アプリケーション側で用意する必要があります。

音声通話は、失われた音声を再送しても会話に間に合わないので、ふつうUDPを使います。回線が混んでも音声を先に通すようにする仕組みは、QoSの記事で説明しています。

用途別の判断表

用途選ぶプロトコル理由
Web閲覧TCPページの一部が欠けたまま表示されては困るから
メール送受信TCP本文の一部が欠落してはいけないから
ファイル転送TCP1バイトでも壊れたファイルは使い物にならないから
音声通話UDP再送を待って音声が止まる方が、少し欠けるより聞き取りにくいから
ビデオ会議UDP再送で映像が止まるより、1コマ欠けて再生し続ける方がよいから
動画配信(見逃し配信・ライブ配信)TCP数秒ぶん先に読み込んで貯めておけるので、遅れても欠けないほうがよいから
オンラインゲームUDP再送で古い座標情報が遅れて届いても、その時点ではもう意味がないから
DNSUDP問い合わせと応答が1往復で終わるため、接続確立の手間が割に合わないから

ファイル転送のFTPは、表のとおりTCPを使います。一方、時計を合わせるNTPは、UDPの123番を使います。それぞれの仕組みは、FTP・TELNET・NTPの記事にまとめています。

例外:HTTP/3最新のWeb規格であるHTTP/3(RFC 9114)は、UDPの上に構築されたQUICというプロトコルで動きます。

QUIC自身が再送や順序保証の仕組みを持っているので、UDPを使っていても、データが届かなかったことを送信側が把握できます。前に説明した「必要ならアプリケーション側で用意する」の実例です。UDPを選んだ理由は、HTTP/3とQUICの記事を読むと分かります。

通信の相手がどのコンピュータかを区別するのはIPアドレスで、そのコンピュータの中のどのアプリ宛てかを区別するのはポート番号です。TCPとUDPは、それぞれ別のポート番号を持っています。詳しくはポート番号の記事で説明しています。

なぜDNSはUDPなのか

名前解決(ドメイン名からIPアドレスを調べる処理)は、基本的に問い合わせ1回・応答1回の1往復で完結します。

もしTCPを使うと、データを送る前に3ウェイハンドシェイクを行う必要があり、接続の確立だけで1往復かかります。本来1往復で済む処理のために、先にもう1往復かけるのは割に合いません。そのためDNSは、接続のいらないUDPで、すぐに問い合わせを送ります。

なお、DNSはUDPだけで完結するとは限りません。DNSサーバの間では、ドメイン情報をまとめて複製することがあります。これをゾーン転送と呼びます。ゾーン転送は応答データが大きくなるので、最初からTCPを使います。

通常の問い合わせでも、UDPで送った応答が大きすぎて切れたときは、同じ問い合わせをTCPで送り直すことがあります。ただし、基本はUDPです。

練習問題(全5問)

Q1TCPの特徴として正しいものは?
Q2UDPのヘッダサイズは?
Q33ウェイハンドシェイクの正しい順番は?
Q4オンラインゲームの座標データにUDPが使われる理由として最も適切なものは?
Q5DNSの名前解決が基本的にUDPを使う理由は?

選んでから「採点する」を押すと、解説つきで答え合わせができます。

おすすめの本 PR

この記事の内容を扱っている本です。

目的別の本の選び方を見る

入門コースを読み進める

入門コース 全19本中13本目