ネットワークの教科書NETWORK

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

入門読了 約8分

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

「TCP UDP 違い どっち」で調べている人向け。判断基準を最初に示し、3ウェイハンドシェイクの図つきで確実さと速さのトレードオフを解説します。

結論

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

TCPとUDPはどちらもトランスポート層(第4層)のプロトコルで、データを運ぶという役割は同じです。 違いは確実さと速さのどちらを優先するかにあります。判断基準はこれだけです。

選び方:1バイトも欠けては困る通信 → TCP(Webページ、メール、ファイル転送)。遅れるくらいなら欠けたほうがマシな通信 → UDP(音声通話、ビデオ会議、オンラインゲーム、DNS)。

以下では、なぜこの2択になるのか、それぞれの仕組みから説明します。

比較

TCPとUDPの違い一覧

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

TCPが確実さをどう担保しているか

TCPはデータを送る前に、3回のやりとりでお互いの準備を確認してから通信を始めます。 これを3ウェイハンドシェイクと呼びます。

クライアントサーバ① SYN seq=xつないでいいですか(送信開始番号を伝える)② SYN+ACK seq=y, ack=x+1いいですよ。こちらからもつなぎます③ ACK ack=y+1了解。ここからデータを送ります
3ウェイハンドシェイク。終了時は FIN → ACK → FIN → ACK の4回のやりとり(4ウェイハンドシェイク)で閉じます。

SYN(つなぎたい)、SYN+ACK(いいよ、こちらもつなぎたい)、ACK(了解)の3段階を経て、 お互いにデータを受け取る準備ができたことを確認してから通信を始めます。

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

TCPはデータを送るたびに、相手からのACK(受け取ったという返事)を待ちます。 一定時間が経ってもACKが返ってこなければ、届かなかったと判断して同じデータを再送します。 これにより、途中でデータが失われても最終的には確実に届きます。 シーケンス番号とACK番号が何を数えているかなど、具体的な数値での流れは 次回「3ウェイハンドシェイクと再送制御」で扱います。

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

ネットワーク上では、先に送ったデータが後から届くことがあります。 TCPは送るデータ1つずつにシーケンス番号(送信順を示す番号)を振っており、 受信側はこの番号を見て、届いた順序に関係なく送った順に並べ直してから上位のアプリに渡します。

仕組み

UDPが速い理由

UDPはTCPが行っている手続きを、そもそも行いません。 接続を確立するハンドシェイクもなく、届いたかどうかの確認も再送もせず、順序を並べ直すこともありません。 その分、ヘッダは8バイトしかなく、TCPの20バイト〜と比べても小さくなります。

手続きが少なく、ヘッダも小さいということは、それだけオーバーヘッド(本来のデータ以外にかかる負荷)が小さいということです。 だからUDPは軽く、速く送れます。かわりに、届く保証も順序の保証もアプリケーション側で必要なら自分で用意することになります。

応用

用途別の判断表

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

なぜDNSはUDPなのか

DNSの名前解決(ドメイン名からIPアドレスを調べる処理)は、基本的に問い合わせ1回・応答1回の1往復で完結します。 もしここでTCPを使うと、データを送る前にまず3ウェイハンドシェイクを行う必要があり、接続を確立するだけで1往復かかってしまいます。本来1往復で済む処理のために、先にもう1往復かけるのは割に合いません。

DNSがUDPを選ぶ理由:「問い合わせ→応答」の1往復で済む処理に、接続確立の1往復を上乗せしたくないからです。 だからDNSは接続不要のUDPで、いきなり問い合わせを送ります。

なお、応答データが大きくなるゾーン転送(DNSサーバ間でドメイン情報をまとめて複製する処理)などでは、 例外的にTCPも使われます。ここでは深入りせず、基本はUDPということだけ押さえておけば十分です。

練習

練習問題(全5問)

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

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

コースを読み進める