ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
UDP とは
UDP(User Datagram Protocol)は TCP/IP のトランスポート層プロトコルの 1 つで、コネクションレス・信頼性なしのシンプルな仕組みです。送信側はパケット(データグラム)を一方的に投げるだけで、相手の確認応答も再送も行いません。その代わり低遅延・低オーバーヘッドで動作します。
UDP と TCP の比較
| 項目 | UDP | TCP |
|---|---|---|
| 接続形態 | コネクションレス | コネクション型(3 way handshake) |
| 信頼性 | なし(届かなくてもOK) | あり(再送・順序保証) |
| 順序保証 | なし | あり |
| フロー制御 | なし | あり(ウィンドウ) |
| 輻輳制御 | なし | あり(CUBIC / BBR 等) |
| ヘッダサイズ | 8 バイト | 20 バイト〜 |
| 用途 | DNS / VoIP / 動画 / ゲーム / QUIC | HTTP / メール / SSH / FTP |
| マルチキャスト | 可能 | 不可(1 対 1) |
UDP ヘッダ構造
| フィールド | サイズ | 意味 |
|---|---|---|
| 送信元ポート | 16 ビット | 送信側のアプリポート |
| 宛先ポート | 16 ビット | 宛先側のアプリポート |
| 長さ(Length) | 16 ビット | ヘッダ + データの合計バイト数 |
| チェックサム | 16 ビット | 誤り検出(IPv6 では必須) |
合計わずか 8 バイト。TCP の 20 バイト以上に比べてヘッダオーバーヘッドが大幅に小さく、短いデータを高頻度で送る用途に向いています。
UDP の動作モデル
- 送信側がデータをパケット化(必要なら自前で分割)
- UDP ヘッダを付け、IP に渡して送信
- 受信側は届いたパケットを受け取り、UDP ポートを見てアプリに渡す
- 欠落 / 順序逆転 / 重複は気にしない(必要ならアプリ層で対処)
送信前にハンドシェイクなどの準備がないため、最初の 1 パケットから即座にデータが流れます。
主な利用プロトコル
| 用途 | プロトコル | ポート | 理由 |
|---|---|---|---|
| 名前解決 | DNS | 53 | 1 往復で完結。再問合せは簡単 |
| IP 取得 | DHCP | 67 / 68 | ブロードキャストを使う |
| 時刻同期 | NTP | 123 | 軽量・低遅延が必要 |
| 音声通話 | SIP / RTP / VoIP | 5060 / 動的 | 古いパケットを待たず流す |
| 動画ストリーミング | RTP / SRT | 動的 | 遅延より連続性を優先 |
| オンラインゲーム | 独自プロトコル | 動的 | 低遅延が最優先 |
| 機器監視 | SNMP | 161 / 162 | 軽量 |
| Web(HTTP/3) | QUIC(UDP の上) | 443 | HoL ブロッキング回避 |
なぜ 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 諦める |
| MTU | 1 パケットの最大長を意識(IPv4 で約 1472 バイト前後が安全圏) |
| 輻輳 | 送信間隔を制御する / トークンバケットを自作 / QUIC の輻輳制御を借りる |
| 暗号化 | DTLS / QUIC を採用 |
| NAT / FW | UDP は接続概念がないので、長時間沈黙するとマッピングが切れる。キープアライブ送出 |
シンプルな 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参照モデル
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
- TCP
- UDP
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 Spring Frameworkのアノテーション一覧
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- djangoにおけるMVCアプリケーション実装例 2026-08-07 17:15:57
- PHPでのファイルアップロード方法|multipart/form-dataと$_FILES 2026-08-07 17:15:57
- Scratchのアカウントの作り方|メールアドレスとユーザー名の登録手順 2026-08-07 17:15:57
- PHP $_SERVERとは|DOCUMENT_ROOT・PHP_SELFなど主な要素 2026-08-07 17:15:57
- Bluetoothとは|仕組み・BLEとClassicの違い・用途 2026-08-07 17:15:57
- Spring Bootのテスト入門|@SpringBootTestとJUnitでの単体・結合テスト 2026-08-07 17:15:57
- データベースとは?RDB / NoSQL / SQL の基礎 2026-08-07 17:15:56
- APIキー取得方法 2026-08-07 17:15:56
- Scratch 作品の公開方法 2026-08-07 17:15:56
- 【PHPフレームワーク】Laravelの使い方 2026-08-07 17:15:56
- Google OAuth 2.0 認証の実装方法 2026-08-07 17:15:56
- Java とは?言語仕様・JVM・主要フレームワーク一覧 2026-08-07 17:15:56
- インストール(eclipseプラグイン) 2026-08-07 17:15:56
- Spring Frameworkの使い方 2026-08-07 17:15:56
- インストール方法(Windows版) 2026-08-07 17:15:56
コメントを削除してもよろしいでしょうか?