第4章 通信の制御|4-1|コース全体 19本中13本目
TCPとUDPの違い ― どっちを使うべきか
TCPと
前の記事 ・3-4 ハブ・スイッチ・ルータの違い
1バイトも欠けては困るならTCP、遅れるくらいなら欠けたほうがマシならUDP
TCPとUDPの違いは、確実さと速さのどちらを優先するかにあります。どちらも通信の手順を定めたプロトコルで、OSI参照モデルでは第4層のトランスポート層に属します。データを運ぶという役割は同じです。選ぶときの基準は次のとおりです。
選び方:1バイトも欠けては困る通信には、TCPを使います。Webページ、メール、ファイル転送がこれにあたります。
遅れるくらいなら欠けたほうがマシな通信には、UDPを使います。音声通話、ビデオ会議、オンラインゲーム、サイト名からIPアドレスを調べるDNSがこれにあたります。
選択を誤ると、通話が途切れたり、ファイルが壊れたりします。この基準で選ぶ理由は、それぞれの仕組みを知ると分かります。
TCPとUDPの違い一覧
| 観点 | TCP | UDP |
|---|---|---|
| 接続 | あり(コネクション型) | なし(コネクションレス型) |
| 到達確認・再送 | ACKで確認し、届かなければ再送する | しない |
| 順序保証 | シーケンス番号で並べ直す | 保証しない |
| ヘッダサイズ | 20バイト〜 | 8バイト |
| 代表的な用途 | HTTP/HTTPS, メール, ファイル転送 | 音声通話, ビデオ会議, オンラインゲーム, DNS |
TCPはどうやって届いたかを確かめるか
TCPはコネクション型のプロトコルで、データを送る前に、まず相手と接続を結びます。接続を結ぶときは、3回のやりとりでお互いの準備を確認します。
この手順を3ウェイハンドシェイクと呼びます。一方、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 | 本文の一部が欠落してはいけないから |
| ファイル転送 | TCP | 1バイトでも壊れたファイルは使い物にならないから |
| 音声通話 | UDP | 再送を待って音声が止まる方が、少し欠けるより聞き取りにくいから |
| ビデオ会議 | UDP | 再送で映像が止まるより、1コマ欠けて再生し続ける方がよいから |
| 動画配信(見逃し配信・ライブ配信) | TCP | 数秒ぶん先に読み込んで貯めておけるので、遅れても欠けないほうがよいから |
| オンラインゲーム | UDP | 再送で古い座標情報が遅れて届いても、その時点ではもう意味がないから |
| DNS | UDP | 問い合わせと応答が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問)
正解:コネクション型で、
TCPは
正解:8バイト
UDPの
正解:SYN → SYN+ACK → ACK
まず、
正解:再送で
ゲームの
正解:問い合わせと
DNSの
選んでから「採点する」を押すと、解説つきで答え合わせができます。
おすすめの本 PR
この記事の内容を扱っている本です。

