TCPとUDPの違い:接続・信頼性・順序・輻輳制御・ヘッダ・遅延・用途を比較

TCPとUDPは、どちらもIPの上で動くトランスポート層のプロトコルで、ポート番号でアプリケーションを区別します。TCPは、データを送る前に3ウェイハンドシェイクでコネクションを確立し、届いたかを確認応答(ACK)で確かめ、失われたデータを再送して、送った順番どおりに受信側のアプリケーションへ渡します。送る量も、受信側のバッファの空き(フロー制御)とネットワークの混雑(輻輳制御)に合わせて調整します。UDPはこれらを行わず、データをデータグラムとしてそのまま送るだけなので、ヘッダが小さく、送るまでの待ちもありません。確実に届くことが大事ならTCP、遅れないことが大事で、必要な処理はアプリケーションの側で行うならUDPを使います。

項目TCPUDP
接続の確立コネクション型。3ウェイハンドシェイク(SYN → SYN+ACK → ACK)の後にデータを送るので、最初に1往復(RTT)の待ちがあるコネクションレス型。手順なしで、すぐにデータを送れる
届いたかの確認と再送確認応答(ACK)で確かめる。再送タイムアウトや重複ACKで損失を判断して再送する確認も再送もしない。失われたデータはそのまま失われる
順序シーケンス番号で並べ直し、送った順番どおりに渡す。重複も取り除く届いた順に渡す。順番の入れ替わりや重複が起こりうる
データの区切り区切りのないバイト列(バイトストリーム)として扱う。メッセージの境目はアプリケーションが決める1回の送信が1つのデータグラムになり、メッセージの境目が保たれる
フロー制御と輻輳制御あり。受信ウィンドウで受信側のバッファがあふれないようにし、輻輳ウィンドウで混雑に合わせて送る量を変えるなし。必要なら、アプリケーションの側で送る速さを調整する
ヘッダの大きさオプションなしで20バイト(オプション付きで最大60バイト)8バイト(送信元と宛先のポート番号、長さ、チェックサム)
遅延接続の確立に1往復かかる。損失があると、再送が届くまで後ろのデータも待たされる接続の手順も再送の待ちもなく、遅延が小さい。その代わり、データが欠けることがある
宛先の種類1対1(ユニキャスト)だけ1対1のほか、ブロードキャストやマルチキャストにも使える
主な用途HTTP/1.1・HTTP/2によるWeb、HTTPを使う動画の配信、メール(SMTP)、SSH、ファイルの転送DNSの問い合わせ、DHCP、音声通話やライブ映像などのリアルタイムの通信、オンラインゲーム、HTTP/3で使うQUIC

数値は代表的な目安で、世代や製品によって異なります。

どんなときに使うか

TCP
データが欠けたり順番が入れ替わったりしては困るとき。Webページ、ファイル、メール、データベースへの接続など、多くのアプリケーションの標準です。
UDP
少し失われても遅れない方がよいリアルタイムの通信や、1回の問い合わせと応答で済む短いやり取りのとき。ブロードキャストやマルチキャストで送りたいときや、QUICのように信頼性のしくみをアプリケーションの側で作るときにも使います。

よくある質問

UDPは信頼性が低いので、使うべきではないのですか?

目的によります。UDPが行わないのは、届いたかの確認と再送、順序の管理、送る量の調整です。これらが不要なときや、アプリケーションの側で自分に合った形で行いたいときには、UDPが向いています。例えば音声通話では、遅れて届いた音は役に立たないので、再送を待つより先に進む方が自然です。ただし、UDPで大量のデータを送るアプリケーションは、ネットワークを混雑させないよう、自分で送る速さを調整する必要があります。

QUICはなぜUDPの上に作られているのですか?

QUIC(RFC 9000)は、再送、順序の管理、輻輳制御、TLS 1.3による暗号化をまとめて行うトランスポートのプロトコルです。IPの上に新しいプロトコルを直接作ると、途中のNATやファイアウォールを通らないことが多く、OSの対応も待たなければなりません。UDPの上に作れば、今のネットワークをそのまま通り、アプリケーションの側で実装して更新できます。HTTP/3はQUICの上で動きます。

DNSはUDPだけを使うのですか?

一般的な名前の問い合わせは、UDPの53番ポートで、1回の問い合わせと応答で済ませます。ただし、応答が大きくてUDPで送りきれないときや、ゾーン転送のときはTCPを使います。DNSの実装には、TCPにも対応することが求められています(RFC 7766)。

TCPのフロー制御と輻輳制御は、どう違いますか?

フロー制御は、受信側のバッファがあふれないようにするしくみで、受信側が空きを受信ウィンドウとして知らせます。輻輳制御は、途中のネットワークが混雑しないようにするしくみで、送信側がパケットの損失などから混雑を推定し、輻輳ウィンドウを増減させます。実際に送れる量は、この2つのウィンドウの小さい方で決まります。

理解度チェック

TCP/IPの4階層のモデルで、TCPとUDPが属する層はどれか。

  1. Aアプリケーション層
  2. Bインターネット層
  3. Cトランスポート層
答えと解説を見る

正解:C. トランスポート層

TCP/IPのモデルは、下からリンク層(ネットワークインターフェース層)、インターネット層、トランスポート層、アプリケーション層の4つの層で表されます。TCPとUDPはトランスポート層のプロトコルで、ポート番号を使って、端末の中のどのアプリケーション宛ての通信かを区別します。インターネット層のIPは、端末から端末までパケットを届けることを担います。HTTPやDNSはアプリケーション層のプロトコルです。OSI参照モデルと対応させると、トランスポート層は第4層、インターネット層は第3層にあたります。

UDPの特徴として正しいものはどれか。

  1. Aコネクションを確立せず、再送や順序の制御をしないので、ヘッダが小さく、送るまでの待ちもない
  2. Bコネクションを確立し、届かなかったデータを再送して、受信側で順序もそろえる
  3. CIPアドレスを使わずに、MACアドレスだけで宛先の端末に届ける
答えと解説を見る

正解:A. コネクションを確立せず、再送や順序の制御をしないので、ヘッダが小さく、送るまでの待ちもない

UDPは、IPの上にポート番号と簡単な誤り検出(チェックサム)を加えただけの軽いプロトコルで、ヘッダは8バイトです(TCPはオプションなしで20バイト)。接続の手順がなく、届いたかの確認や再送もしないため、少し失われても遅れない方がよい音声通話やライブ映像、1回の問い合わせと応答で済むDNSなどに使われます。信頼性が必要なら、アプリケーションの側で補います。例えば、HTTP/3で使われるQUICは、UDPの上で再送や暗号化を実装しています。コネクションの確立、再送、順序の制御を行うのはTCPです。

TCPでコネクションを確立する3ウェイハンドシェイクで、やり取りされるパケットの順序として正しいものはどれか。

  1. ASYN → ACK → FIN
  2. BACK → SYN → SYN+ACK
  3. CSYN → SYN+ACK → ACK
答えと解説を見る

正解:C. SYN → SYN+ACK → ACK

3ウェイハンドシェイクでは、まずクライアントがSYNで接続を求め、自分が送るデータの最初の番号(初期シーケンス番号)を伝えます。サーバはSYN+ACKで、それを受け取ったことを確認(ACK)すると同時に、自分の初期シーケンス番号を伝えます。最後にクライアントがACKを返すと、両方向の通信の準備が整います。3回のやり取りで両方の向きの番号を確かめ合うことで、遅れて届いた古いパケットによる誤った接続などを防ぎます。このため、TCPではデータを送り始めるまでに少なくとも1往復の時間(RTT)がかかります。FINはコネクションを終了するときに使います。

  1. TCPのフロー制御で、受信側がウィンドウサイズ(受信ウィンドウ)を送信側に通知する目的として正しいものはどれか。
  2. TCPの輻輳制御の基本的な考え方として正しいものはどれか。
  3. TCPの送信側が、セグメントが失われたと判断して再送するきっかけとして正しいものはどれか。

ネットワークの基礎の練習問題へ

関連する用語の解説

3ウェイハンドシェイク
TCPでコネクションを確立する手順。クライアントのSYN、サーバのSYN+ACK、クライアントのACKの3回のやり取りで、互いの初期シーケンス番号を確かめ合う。
ポート番号
TCPやUDPで、端末の中のどのアプリケーション宛ての通信かを区別する0〜65535の番号。HTTPの80、HTTPSの443、DNSの53など、0〜1023はウェルノウンポートと呼ばれる。
OSI参照モデル
通信の機能を、物理層・データリンク層・ネットワーク層・トランスポート層・セッション層・プレゼンテーション層・アプリケーション層の7つの層に分けて整理したモデル。各層の役割を分けて考えるための共通の言葉として使われる。
DNS
Domain Name Systemの略。www.example.com のようなドメイン名と、通信に使うIPアドレスを対応づける、世界中のサーバで分散して管理されるしくみ。
DHCP
Dynamic Host Configuration Protocolの略。ネットワークにつないだ端末に、IPアドレス、サブネットマスク、デフォルトゲートウェイ、DNSサーバなどの設定を期限付きで自動的に割り当てるプロトコル。
TLS
Transport Layer Securityの略。通信の暗号化、改ざんの検出、証明書によるサーバの認証を行うプロトコル。HTTPSはHTTPをTLSで保護したもの。
HTTP
WebブラウザとWebサーバなどの間で、HTMLや画像、データをやり取りするためのアプリケーション層のプロトコル。クライアントがメソッド、URL、ヘッダ、本文からなるリクエストを送り、サーバがステータスコード、ヘッダ、本文からなる応答を返す。プロトコルとしてはステートレスで、ログインのような状態はCookieなどを使って保つ。HTTP/1.1はテキストの形式で持続的接続を使い、HTTP/2は1つのTCP接続の上で複数のストリームを多重化し、HTTP/3はUDPの上のQUICを使う。TLSで保護したものをHTTPSと呼ぶ。

関連する比較