UDP
最小のトランスポート。ポートとチェックサムだけ。
UDP データグラム
ヘッダは 1 行に収まります。そのあとは、ほかの誰かの領分です。
0:00
フレーム全体
ヘッダは 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 query | UDP は中身を気にしません。ここでは 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