Baud
プロトコル一覧

UDP

最小のトランスポート。ポートとチェックサムだけ。

UDP データグラム

ヘッダは 1 行に収まります。そのあとは、ほかの誰かの領分です。

UDP データグラム・8 バイトのヘッダ + 29 バイトのデータ08162432D411010100310011000100000000003500110101000000000025001001012C001011009C10011100AB10101011CD11001101010000000100000000000000000000010000000100000000000000000000000000000000000000000000000000000000000007000001116501100101780111100061011000016D0110110170011100006C011011006501100101030000001163011000116F011011116D0110110100000000000000000000010000000100000000000100000001送信元ポート宛先ポート長さチェックサムデータ(DNS クエリ)フィールドをクリックして中身を見る

フレーム全体

ヘッダは 8 バイト。ポート 2 つ、長さ、チェックサムだけです。接続も、順序番号も、再送もありません。D4 31 00 35 00 25 2C 9C

フィールド位置例の値意味
送信元ポート0–1 バイト目0xD431 = 54321送信側のポートで、返事の届け先になります。OS が「エフェメラルポート」(慣例では 49152〜65535)の中からランダムに選びます。
宛先ポート2–3 バイト目0x0035 = 53 (DNS)宛先ホストのどのサービスが受け取るか。53 は DNS です。IP アドレスがマシンを、ポートがプログラムを選びます。
長さ4–5 バイト目37ヘッダとデータの合計バイト数。8 + 29 = 37。
チェックサム6–7 バイト目0x2C9C (✓)疑似ヘッダ(送信元 IP・宛先 IP・プロトコル 17・長さ)、UDP ヘッダ、データに対する 16 ビットのチェックサムです。ここでは実際に計算しています。IPv4 では任意(0 = なし)、IPv6 では必須です。
データ(DNS クエリ)8–36 バイト目DNS queryUDP は中身を気にしません。ここでは example.com についての 29 バイトの DNS 質問です(DNS のページを参照)。アプリケーションが渡したものを、そのまま 1 つのデータグラムとして送ります。

概要

UDP(User Datagram Protocol)が IP に足すのは 2 つだけです。1 台のマシンを多数のプログラムで共有するためのポート番号と、チェックサム。コネクションレスで、各データグラムは単独で届き、順番が入れ替わったり、2 回届いたり、届かなかったりしても、送信側には分かりません。

その最小限さが長所です。ハンドシェイクがないので準備の遅れがなく、損失に耐えるアプリ(音声・ゲーム・DNS)や、独自の再送を持つアプリ(QUIC)が選びます。

基本情報

ヘッダ
8 バイト
ポート
16 bits (0 – 65535)
IP プロトコル番号
17
配送
非信頼・順序保証なし
最大長
65,507 bytes (IPv4)
規格
RFC 768

使われる場面

  • DNS クエリ、DHCP、NTP
  • 音声・ビデオ通話(RTP)、オンラインゲーム
  • QUIC と HTTP/3 は UDP の上で動きます

つまずきやすい点

  • 経路 MTU(データ約 1472 バイト)より大きいデータグラムは IP で分割され、1 つの断片が失われると全体が失われます。
  • 輻輳制御がないので、UDP の送信側はネットワークを溢れさせられます。UDP の上に作るプロトコルは、自前で制限を設ける必要があります。
  • UDP 増幅攻撃は、送信元を偽った小さな問い合わせで大きな応答を引き出します(DNS・NTP・memcached)。

出典・規格

  • RFC 768: User Datagram Protocol

関連するプロトコル