この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:4
ページ更新者:guest
更新日時:2026-06-11 07:10:02

タイトル: UDP
SEOタイトル: UDP 完全ガイド(コネクションレス / ヘッダ 8 バイト / TCP との違い / DNS / VoIP / QUIC / 用途)

この記事の要点
  • UDP(User Datagram Protocol)コネクションレス・信頼性なしのトランスポート層プロトコル
  • ヘッダは 8 バイトと軽量。送信元ポート / 宛先ポート / 長さ / チェックサムのみ
  • TCP と違い再送・順序保証・フロー制御・輻輳制御は持たない。低遅延・小オーバーヘッドが強み
  • DNS(53)/ DHCP / VoIP / 動画ストリーミング / オンラインゲーム / SNMP / NTP / QUIC(HTTP/3)で使われる
  • 信頼性が必要ならアプリケーション側で再送・順序制御を実装する

UDP とは

UDP(User Datagram Protocol)は TCP/IP のトランスポート層プロトコルの 1 つで、コネクションレス・信頼性なしのシンプルな仕組みです。送信側はパケット(データグラム)を一方的に投げるだけで、相手の確認応答も再送も行いません。その代わり低遅延・低オーバーヘッドで動作します。

UDP と TCP の比較

項目UDPTCP
接続形態コネクションレスコネクション型(3 way handshake)
信頼性なし(届かなくてもOK)あり(再送・順序保証)
順序保証なしあり
フロー制御なしあり(ウィンドウ)
輻輳制御なしあり(CUBIC / BBR 等)
ヘッダサイズ8 バイト20 バイト〜
用途DNS / VoIP / 動画 / ゲーム / QUICHTTP / メール / SSH / FTP
マルチキャスト可能不可(1 対 1)

UDP ヘッダ構造

フィールドサイズ意味
送信元ポート16 ビット送信側のアプリポート
宛先ポート16 ビット宛先側のアプリポート
長さ(Length)16 ビットヘッダ + データの合計バイト数
チェックサム16 ビット誤り検出(IPv6 では必須)

合計わずか 8 バイト。TCP の 20 バイト以上に比べてヘッダオーバーヘッドが大幅に小さく、短いデータを高頻度で送る用途に向いています。

UDP の動作モデル

  1. 送信側がデータをパケット化(必要なら自前で分割)
  2. UDP ヘッダを付け、IP に渡して送信
  3. 受信側は届いたパケットを受け取り、UDP ポートを見てアプリに渡す
  4. 欠落 / 順序逆転 / 重複は気にしない(必要ならアプリ層で対処)

送信前にハンドシェイクなどの準備がないため、最初の 1 パケットから即座にデータが流れます。

主な利用プロトコル

用途プロトコルポート理由
名前解決DNS531 往復で完結。再問合せは簡単
IP 取得DHCP67 / 68ブロードキャストを使う
時刻同期NTP123軽量・低遅延が必要
音声通話SIP / RTP / VoIP5060 / 動的古いパケットを待たず流す
動画ストリーミングRTP / SRT動的遅延より連続性を優先
オンラインゲーム独自プロトコル動的低遅延が最優先
機器監視SNMP161 / 162軽量
Web(HTTP/3)QUIC(UDP の上)443HoL ブロッキング回避

なぜ UDP を使うのか

強み説明
低遅延ハンドシェイクや再送がない。1 パケットで往復が完結することも
低オーバーヘッドヘッダ 8 バイト、状態管理なし
シンプル実装が小さく、組み込みやリアルタイム系に向く
マルチキャスト / ブロードキャスト1 対多の配信が可能
遅延より新鮮さ音声 / 映像は古いデータより新しいデータを優先したい

UDP の限界

  • パケット欠落・順序逆転・重複が起こりうる
  • NAT 越えやファイアウォール越えで詰まりやすい
  • 輻輳制御がないため、無秩序に投げるとネットワーク全体を圧迫する
  • 機密性はない — DTLS や QUIC の TLS 1.3 と組み合わせて暗号化する

QUIC と HTTP/3

近年は QUIC(IETF 標準)が UDP 上に「TCP+TLS の代替」を実装する形で広がりました。HTTP/3 は QUIC を使い、次のメリットを得ます。

  • 0-RTT / 1-RTT ハンドシェイクで初回接続が高速
  • マルチストリーム独立で TCP の HoL ブロッキング回避
  • パケット内に TLS 暗号化を内包しているため、中間機器の干渉に強い
  • IP / ポートが変わってもコネクションを維持できる(接続マイグレーション)

パケットキャプチャ例

# DNS の UDP/53 を可視化
sudo tcpdump -i any -nn 'udp port 53' -c 20

# Linux で UDP の統計
ss -u -a -n         # UDP ソケット一覧
netstat -su         # UDP の統計(パケット数 / 受信エラー)

UDP を使うアプリの設計時に注意すること

項目対処
欠落シーケンス番号を独自に振り、抜けを検出。必要なら再送 or 諦める
MTU1 パケットの最大長を意識(IPv4 で約 1472 バイト前後が安全圏)
輻輳送信間隔を制御する / トークンバケットを自作 / QUIC の輻輳制御を借りる
暗号化DTLS / QUIC を採用
NAT / FWUDP は接続概念がないので、長時間沈黙するとマッピングが切れる。キープアライブ送出

シンプルな UDP 通信のサンプル(Python)

# 送信側
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(b"hello", ("127.0.0.1", 5005))

# 受信側
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(("0.0.0.0", 5005))
data, addr = sock.recvfrom(1024)
print("from", addr, "got", data)

FAQ

Q: UDP は「信頼できない」?
A: プロトコル単体では再送しないという意味で、ネットワーク的に信頼できない訳ではありません。アプリ層で再送を組めば信頼性を確保できます(DNS は再問合せ、QUIC は再送内包)。

Q: UDP のポート番号は?
A: 1〜65535 で TCP と同じレンジを使いますが、ポート空間は別管理です。同じ番号でも TCP/53 と UDP/53 は別物(DNS は両方使う)。

Q: ブロードキャストとマルチキャストの違いは?
A: ブロードキャストは「同一サブネットの全員」、マルチキャストは「指定グループの参加者」に送ります。マルチキャストは IGMP でグループ管理。

Q: 最大データグラム長は?
A: 理論上 65,507 バイト(65535 - IP/UDP ヘッダ)ですが、ネットワーク経路のMTU 制約で分割されます。実用的には 1400〜1500 バイト未満に収めるのが無難。

関連

  • トランスポート層 — 親カテゴリ
  • TCP — 信頼性ありの相方
  • DNS / DHCP / NTP / SNMP — UDP の代表的なアプリ層
  • QUIC / HTTP/3 / DTLS
  • IP / ポート番号 / OSI参照モデル