UDP(User Datagram Protocol)
軽量・低レイテンシのコネクションレス通信
UDPとは
UDPは、コネクションレスで信頼性を保証しないトランスポート層プロトコルです。 ハンドシェイクなしで即座にデータを送信でき、オーバーヘッドが小さいため低レイテンシ。 DNS、NTP、動画/音声ストリーミング、ゲーム等で使用されます。
UDPヘッダ構造
送信元ポート
16ビット
宛先ポート
16ビット
長さ
16ビット
チェックサム
16ビット
ヘッダサイズ: 8バイト(TCPの20バイト以上と比較して非常にコンパクト)
TCP vs UDP 比較
| 特性 | TCP | UDP |
|---|---|---|
| 接続 | コネクション型(3-way handshake) | コネクションレス(即送信) |
| 信頼性 | 確認応答・再送あり | 保証なし(best effort) |
| 順序保証 | あり | なし |
| ヘッダサイズ | 20バイト以上 | 8バイト |
| レイテンシ | 高め(handshake、確認応答) | 低い |
| フロー制御 | あり | なし |
UDPの主な用途
DNS(ポート53)
クエリ/レスポンスが小さい。1往復で完結。 512バイト超はTCPにフォールバック。
NTP(ポート123)
時刻同期。低レイテンシ重視。 パケットロスは次回同期で補正。
リアルタイム通信
VoIP、ビデオ会議。遅延より多少のロスを許容。 RTP/RTCP over UDP。
オンラインゲーム
位置情報など頻繁な更新。古いデータは不要。 アプリレベルで信頼性実装。
QUIC(HTTP/3)
QUICはUDP上に構築された新しいトランスポートプロトコルです。 TCPの信頼性とUDPの低レイテンシを両立し、HTTP/3の基盤となっています。
QUICの特徴
- • 0-RTT接続確立(再接続時)
- • ストリーム多重化(HoL Blocking軽減)
- • 常時暗号化(TLS 1.3統合)
- • コネクションマイグレーション
使用例
- • Google(YouTube、Gmail等)
- • Cloudflare
- • Facebook/Meta
- • 主要ブラウザでサポート
UDPの課題と対策
パケットロス
UDP自体は再送しない。アプリレベルで確認応答を実装するか、 FEC(前方誤り訂正)で冗長性を持たせる。
DDoS攻撃(UDP Flood)
送信元偽装が容易。大量のUDPパケットでサーバーを過負荷に。 レートリミット、ファイアウォールで対策。
NATトラバーサル
コネクションレスのためNAT越えが難しい場合あり。 STUN/TURN/ICEで対応(WebRTC等)。
よく使うコマンド
1 # UDPソケット確認 2 ss -uan 3 ss -uanp # プロセス情報付き 4 5 # 特定ポートのリスニング確認 6 ss -uan 'sport = :53' 7 8 # UDPパケットキャプチャ 9 tcpdump -i eth0 udp port 53 -nn 10 11 # netcatでUDPテスト 12 # サーバー側 13 nc -u -l 9999 14 # クライアント側 15 echo "test" | nc -u localhost 9999 16 17 # DNS問い合わせ(UDP) 18 dig example.com @8.8.8.8 19 20 # NTP同期確認 21 ntpq -p
SRE/インフラ観点
監視項目
- • パケットロス率: UDPは自動検知しないため外部監視
- • レイテンシ: DNS応答時間など
- • 受信バッファオーバーフロー: drops統計
バッファチューニング
- •
net.core.rmem_max: 受信バッファ最大 - •
net.core.wmem_max: 送信バッファ最大 - • 高スループットUDP通信で重要
セキュリティ
- • 不要なUDPポートはファイアウォールでブロック
- • DNS Amplification攻撃に注意
- • レートリミットの設定
1 # UDP統計 2 cat /proc/net/snmp | grep Udp 3 # InDatagrams: 受信成功 4 # NoPorts: 宛先ポートなし 5 # InErrors: 受信エラー 6 # OutDatagrams: 送信 7 8 # バッファオーバーフロー確認 9 netstat -su | grep "receive buffer errors"