
新Linux入門|UDPとは:リアルタイム通信を支える軽量で高速なコネクションレスプロトコル
インターネットの通信でよく使われるのはTCPだけではありません。
もう一つの重要な通信方式が UDP(User Datagram Protocol) です。
UDPは、TCPのような「接続の確立」を行わず、軽量で素早くデータを送ることができるプロトコルです。
その特徴から、動画配信・オンラインゲーム・音声通話(VoIP) など、「リアルタイム性」が求められる場面でよく利用されています。

⚡UDPの基本概念
UDPは 「コネクションレス型」 の通信プロトコルです。
これは、「相手と接続を確立せず、送りたいデータをそのまま送る」方式を意味します。
TCPでは「3ウェイハンドシェイク」による接続確立と応答確認が行われますが、UDPではこれを省略するため、通信がすぐに始まります。

| 項目 | 内容 |
|---|---|
| プロトコル名 | UDP(User Datagram Protocol) |
| 通信方式 | コネクションレス(接続を確立しない) |
| 信頼性 | なし(再送や順序制御を行わない) |
| 通信単位 | データグラム(独立したパケット) |
| 速度 | 高速(オーバーヘッドが少ない) |
| 代表的な用途 | DNS・DHCP・VoIP・ストリーミング・オンラインゲーム |
💬ポイント
つまりUDPは、「届くかどうかの確認はしないけれど、とにかくすぐ送る!」というシンプルな仕組みです。
そのため、多少のデータ損失が許容できるリアルタイム通信に向いています。
📦 UDPヘッダーの構造
UDPのデータ単位である「データグラム」は、UDPヘッダー と データ本体(ペイロード) で構成されます。
TCPと比べると非常にシンプルな構造で、処理が軽いのが特徴です。
| フィールド名 | サイズ | 内容 |
|---|---|---|
| 送信元ポート番号 | 16ビット | 送信側のアプリケーション識別番号 |
| 宛先ポート番号 | 16ビット | 受信側のアプリケーション識別番号 |
| データ長 | 16ビット | UDPヘッダー+データ全体の長さ |
| チェックサム | 16ビット | データの誤り検出用 |
💬ポイント
TCPのように「シーケンス番号」や「ACK番号」などはなく、極めてシンプルです。
この軽さがUDPの高速性の源になっています。
⚙️ UDPの特徴
UDPの主な特徴を次の表にまとめました。
| 特徴 | 内容 |
|---|---|
| 低遅延通信 | 接続確立が不要なため、すぐにデータ送信を開始できる。 |
| 軽量プロトコル | TCPよりもヘッダーが小さく、処理コストが低い。 |
| ブロードキャスト・マルチキャスト対応 | 複数の相手に同時にデータを送れる。 |
| リアルタイム性に優れる | 一部のデータが失われても問題ない通信に最適 |
| 再送や順序保証なし | 信頼性より速度を優先する設計 |
💡ポイント
たとえば音声通話(VoIP)では、少しのパケット欠落よりも「遅延が少ない方が大切」です。
UDPはそうした用途に最適です。
🌐 UDPの利用例
UDPはさまざまなプロトコルやアプリケーションで使われています。
| 利用例 | 説明 |
|---|---|
| DNS | 名前解決(ドメイン名→IPアドレス変換)に使用。短いデータ通信に最適。 |
| DHCP | クライアントにIPアドレスを自動割り当てするために使用。 |
| VoIP(音声通話) | 音声や映像をリアルタイムでやり取りするために使用。 |
| NTP(時刻同期) | ネットワーク上の時計を同期する通信に使用。 |
| オンラインゲーム | 高速応答が求められるゲームサーバ通信に使用。 |
💬ポイント
TCPが「正確さ」を重視するのに対し、UDPは「スピードと即時性」を重視しています。
🔍 TCPとの比較
TCPとUDPはどちらもIP層の上位に位置するトランスポート層プロトコルですが、目的が異なります。
| 項目 | TCP | UDP |
|---|---|---|
| 通信方式 | コネクション型 | コネクションレス型 |
| 信頼性 | 高い(再送・順序制御あり) | 低い(保証なし) |
| データ順序 | 保証あり | 保証なし |
| オーバーヘッド | 大きい | 小さい |
| 速度 | 遅い(確認応答あり) | 高速(即時送信) |
| 主な用途 | Web、メール、SSH | 音声、DNS、動画配信、ゲーム |
💡ポイント
TCPとUDPはどちらが“上位”というわけではなく、用途によって使い分ける ことが重要です。
📡 UDP通信確認コマンド
UDPの通信を確認するには、ss コマンドや netstat コマンドを使います。
➀ ssコマンド(推奨)
ss -una| オプション | 説明 |
|---|---|
| -u | UDPソケットのみ表示 |
| -n | 名前解決を行わず数値で表示 |
| -a | LISTEN状態を含め全て表示 |
使用例
[suzuki@AlmaLinux ~]$ ss -una
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 10.0.2.15%enp0s3:68 10.0.2.2:67
UNCONN 0 0 0.0.0.0:5353 0.0.0.0:*
UNCONN 0 0 127.0.0.1:323 0.0.0.0:*
UNCONN 0 0 [::]:5353 [::]:*
UNCONN 0 0 [::1]:323 [::]:*💬ポイント
68番ポート はDHCPクライアント、323番ポート はNTPサービスが使用していることを示しています。
② netstatコマンド(旧ツール)
netstat -anu| オプション | 説明 |
|---|---|
| -a | 全てのソケットを表示 |
| -n | 数値形式で表示 |
| -u | UDPソケットを表示 |
使用例
[suzuki@AlmaLinux ~]$ netstat -anu
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 10.0.2.15:68 10.0.2.2:67 ESTABLISHED
udp 0 0 0.0.0.0:5353 0.0.0.0:*
udp 0 0 127.0.0.1:323 0.0.0.0:*
udp6 0 0 :::5353 :::*
udp6 0 0 ::1:323 :::*💬ポイント
UDPは「接続しない」ため、State列には ESTABLISHED のような状態が表示されません。
③ ncコマンド(UDP通信のテスト)
nc(netcat)コマンドは、UDPの送受信テストに便利です。
サーバ側
[suzuki@AlmaLinux ~]$ nc -u -l 5000クライアント側
[suzuki@AlmaLinux ~]$ nc -u 192.168.1.100 5000| オプション | 説明 |
|---|---|
| -u | UDPモードで通信 |
| -l | リッスン(待ち受け)モード |
| ポート番号 | 使用するUDPポートを指定 |
💬ポイント
このコマンドを使えば、簡単にUDP通信のテストが行えます。
🔐 UDPのセキュリティと注意点
UDPは軽量で便利な反面、確認応答がないためセキュリティリスクもあります。
| リスク | 内容 |
|---|---|
| IPスプーフィング | 送信元アドレスを偽装して攻撃を行う。 |
| UDPフラッド攻撃 | 大量のUDPパケットを送信してサーバをダウンさせる。 |
| DNSアンプ攻撃 | DNSサーバを悪用して大量の応答データを送信する。 |
💡ポイント
UDPを利用する際は、ファイアウォール(firewalld や iptables)で不要なポートを閉じ、アクセス制限を行うことが重要です。
🌈 まとめ
- UDPは「軽量・高速・リアルタイム」を実現するトランスポート層プロトコル。
- TCPのような接続確立や再送制御を行わないため、遅延が少ない。
- DNS・VoIP・オンラインゲームなど、速度重視の通信に最適。
- 信頼性やセキュリティ面では注意が必要で、用途を見極めて使い分けることが重要。
UDPは、インターネット通信の中で「スピードと効率」を担当する頼もしい存在です。
